@ -1,15 +1,24 @@
package com.ibeetl.jlw.service ;
import cn.hutool.core.collection.CollectionUtil ;
import cn.hutool.core.lang.Assert ;
import cn.hutool.json.JSONUtil ;
import cn.jlw.util.ToolUtils ;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONObject ;
import com.ibeetl.admin.core.entity.CoreUser ;
import com.ibeetl.admin.core.service.CoreBaseService ;
import com.ibeetl.admin.core.util.PlatformException ;
import com.ibeetl.admin.core.web.JsonResult ;
import com.ibeetl.admin.core.web.JsonReturnCode ;
import com.ibeetl.jlw.dao.TeacherOpenCourseMergeSchoolClassDao ;
import com.ibeetl.jlw.dao.TeacherOpenCourseMergeStudentDao ;
import com.ibeetl.jlw.entity.Student ;
import com.ibeetl.jlw.entity.TeacherOpenCourseMergeSchoolClass ;
import com.ibeetl.jlw.entity.TeacherOpenCourseMergeStudent ;
import com.ibeetl.jlw.web.query.StudentQuery ;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeSchoolClassQuery ;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.lang3.StringUtils ;
import org.beetl.sql.core.SqlId ;
@ -20,10 +29,16 @@ import org.springframework.transaction.annotation.Transactional;
import javax.validation.constraints.NotNull ;
import java.util.ArrayList ;
import java.util.Collections ;
import java.util.Date ;
import java.util.List ;
import java.util.stream.Collectors ;
import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser ;
import static com.ibeetl.jlw.enums.OpenCourseMergeJoinTypeEnum.class_join ;
import static com.ibeetl.jlw.web.query.TeacherOpenCourseMergeSchoolClassQuery.jsonToPO ;
import static java.util.stream.Collectors.joining ;
/ * *
* 开 课 关 联 班 级 Service
* 当 分 布 式 ID 开 启 后 请 勿 使 用 insert ( * , true )
@ -35,6 +50,10 @@ import java.util.stream.Collectors;
public class TeacherOpenCourseMergeSchoolClassService extends CoreBaseService < TeacherOpenCourseMergeSchoolClass > implements DeleteResourcesBy {
@Autowired private TeacherOpenCourseMergeSchoolClassDao teacherOpenCourseMergeSchoolClassDao ;
@Autowired private TeacherOpenCourseMergeStudentDao teacherOpenCourseMergeStudentDao ;
@Autowired private TeacherOpenCourseMergeStudentService teacherOpenCourseMergeStudentService ;
@Autowired
private StudentService studentService ;
public PageQuery < TeacherOpenCourseMergeSchoolClass > queryByCondition ( PageQuery query ) {
PageQuery ret = teacherOpenCourseMergeSchoolClassDao . queryByCondition ( query ) ;
@ -190,4 +209,98 @@ public class TeacherOpenCourseMergeSchoolClassService extends CoreBaseService<Te
log . info ( "需要实现删除操作!" ) ;
}
public JsonResult addAllWithStudent ( String json ) {
TeacherOpenCourseMergeSchoolClassQuery query = new TeacherOpenCourseMergeSchoolClassQuery ( ) ;
query . setTeacherOpenCourseMergeSchoolClassJsonStr ( json ) ;
List < TeacherOpenCourseMergeSchoolClassQuery > list = jsonToPO ( json ) ;
if ( ! list . isEmpty ( ) ) {
final Long teacherOpenCourseId = list . get ( 0 ) . getTeacherOpenCourseId ( ) ;
final CoreUser coreUser = getUser ( ) ;
final Date now = new Date ( ) ;
final Long orgId = coreUser . getOrgId ( ) ;
list . forEach ( item - > {
Assert . notNull ( item . getSchoolClassId ( ) , "班级ID为必传参数! " ) ;
Assert . notNull ( item . getTeacherOpenCourseId ( ) , "教师开课ID为必传参数! " ) ;
item . setTeacherOpenCourseMergeSchoolClassAddTime ( now ) ;
item . setTeacherOpenCourseMergeSchoolClassStatus ( 1 ) ;
item . setOrgId ( orgId ) ;
} ) ;
// 获取导入的班级IDs
final String classIds = list . stream ( ) . map (
o - > o . getSchoolClassId ( ) . toString ( ) ) . distinct ( ) . collect ( joining ( "," ) ) ;
TeacherOpenCourseMergeStudentQuery studentQuery = new TeacherOpenCourseMergeStudentQuery ( ) ;
studentQuery . setTeacherOpenCourseSchoolClassMergeStudentAddTime ( now ) ;
studentQuery . setTeacherOpenCourseId ( teacherOpenCourseId ) ;
// 查询开课和班级已经关联的数据
final TeacherOpenCourseMergeSchoolClassQuery paras = new TeacherOpenCourseMergeSchoolClassQuery ( ) ;
paras . setTeacherOpenCourseId ( teacherOpenCourseId ) ;
paras . setSchoolClassIdPlural ( classIds ) ;
paras . setTeacherOpenCourseMergeSchoolClassStatus ( 1 ) ;
final List < TeacherOpenCourseMergeSchoolClass > valueList = getValuesByQuery ( paras ) ;
if ( CollectionUtil . isNotEmpty ( valueList ) ) {
String deleteIds = valueList . stream ( ) . map (
o - > o . getTeacherOpenCourseMergeSchoolClassId ( ) . toString ( ) ) . collect ( joining ( "," ) ) ;
deleteTeacherOpenCourseMergeSchoolClass ( deleteIds ) ;
}
// 偷懒, 再转换成json丢进去
query . setTeacherOpenCourseMergeSchoolClassJsonStr ( JSONUtil . toJsonStr ( list ) ) ;
// 添加班级列表
String msg = addAll ( query ) ;
// 添加成功的话,则添加这些班级里的所有状态正常的学生到开课中
if ( StringUtils . isBlank ( msg ) ) {
// 这里会有一些散客的学生,尽量先过滤数据,进行批量插入。不要先删再新增
StudentQuery sq = new StudentQuery ( ) ;
sq . setStudentStatus ( 1 ) ;
sq . setClassIds ( classIds ) ;
List < Student > studentList = studentService . getValuesByQuery ( sq ) ;
// 或者学生的Ids
// 查询班级方式加入的学生
TeacherOpenCourseMergeStudentQuery existsStudentQuery = new TeacherOpenCourseMergeStudentQuery ( ) ;
existsStudentQuery . setTeacherOpenCourseSchoolClassMergeStudentStatus ( 1 ) ;
existsStudentQuery . setTeacherOpenCourseId ( teacherOpenCourseId ) ;
existsStudentQuery . setTeacherOpenCourseSchoolClassMergeStudentJoinType ( class_join ) ;
List < TeacherOpenCourseMergeStudent > studentDelList =
teacherOpenCourseMergeStudentService . getValuesByQueryNotWithPermission ( existsStudentQuery ) ;
// 获取关联表要删除的主键Ids
String idsDelAdString = CollectionUtil . emptyIfNull ( studentDelList ) . stream ( ) . map (
o - > o . getTeacherOpenCourseSchoolClassMergeStudentId ( ) . toString ( ) ) . collect ( joining ( "," ) ) ;
// 删除 班级方式加入的学生
teacherOpenCourseMergeStudentDao . deleteByIds ( idsDelAdString ) ;
// 构建入库的学生列表
List < TeacherOpenCourseMergeStudent > mergeStudentList = studentList . stream ( )
. map ( o - > {
TeacherOpenCourseMergeStudent mergeStudent = new TeacherOpenCourseMergeStudent ( ) ;
mergeStudent . setStudentId ( o . getStudentId ( ) ) ;
mergeStudent . setTeacherOpenCourseId ( teacherOpenCourseId ) ;
mergeStudent . setTeacherOpenCourseSchoolClassMergeStudentStatus ( 1 ) ;
mergeStudent . setTeacherOpenCourseSchoolClassMergeStudentAddTime ( now ) ;
mergeStudent . setTeacherOpenCourseSchoolClassMergeStudentJoinType ( class_join ) ;
mergeStudent . setOrgId ( orgId ) ;
return mergeStudent ;
} ) . collect ( Collectors . collectingAndThen ( Collectors . toList ( ) , Collections : : unmodifiableList ) ) ;
// 批量插入
teacherOpenCourseMergeStudentService . insertBatch ( mergeStudentList ) ;
return JsonResult . successMessage ( "新增成功" ) ;
}
return JsonResult . failMessage ( "新增失败," + msg ) ;
}
return JsonResult . failMessage ( "新增失败, 请检查传递的参数!" ) ;
}
}