Browse Source

班级课程数据一致性

大数据与最优化研究所 1 month ago
parent
commit
1030dd8ca6

+ 1 - 1
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -303,7 +303,7 @@ public class BaseClassCourseController {
             String newClassSemester = classId + "_" + baseSemesterId;
             Long classAdminCourseId = null;
             BaseClassAdminCourse baseClassAdminCourse = null;
-            if(ObjectUtils.isNotEmpty(classSemester) && ObjectUtils.isNotEmpty(classSemester.get(newClassSemester))){
+            if(ObjectUtils.isNotEmpty(classSemester) && classSemester.containsKey(newClassSemester)){
                 classAdminCourseId = classSemester.get(newClassSemester);
             } else {
                 baseClassAdminCourse = new BaseClassAdminCourse();

+ 37 - 20
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -35,6 +35,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -141,7 +142,7 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
             throw new MyException("添加课程的班级无效,请刷新重试");
         }
 
-        // 根据班级id查出班级已经存在的课程和教
+        // 根据班级id查出班级已经存在的课程和教
         LambdaQueryWrapper<BaseClassCourse> baseClassCourseLambdaQueryWrapper = new LambdaQueryWrapper<>();
         baseClassCourseLambdaQueryWrapper
                 .in(BaseClassCourse::getClassId, dto.getBaseClassAdminCourseIds())
@@ -177,20 +178,23 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
 
         // 处理每一个班需要新增的课程
         List<BaseClassCourse> baseClassCourseList = new ArrayList<>();
+        BaseClassCourse newBaseClassCourse;
         for (Long classId : dto.getBaseClassAdminCourseIds()) {
             // 判断当前的班级是否已经有了该课程和教材
-            List<String> tourseIdTextbookIdList = null;
+            List<String> courseIdTextbookIdList = null;
             if(ObjectUtils.isNotEmpty(courseIdTextbookIdMap)){
-                tourseIdTextbookIdList = courseIdTextbookIdMap.get(classId);
+                courseIdTextbookIdList = courseIdTextbookIdMap.get(classId);
             }
             for (Map.Entry<String, BaseClassCourse> entry : newClassCourseTextbookMap.entrySet()) {
                 String key = entry.getKey();
                 BaseClassCourse value = entry.getValue();
-                if(ObjectUtils.isNotEmpty(tourseIdTextbookIdList) && !tourseIdTextbookIdList.isEmpty() && tourseIdTextbookIdList.contains(key)){
+                newBaseClassCourse = new BaseClassCourse();
+                BeanUtils.copyProperties(value, newBaseClassCourse);
+                if(ObjectUtils.isNotEmpty(courseIdTextbookIdList) && !courseIdTextbookIdList.isEmpty() && courseIdTextbookIdList.contains(key)){
                     continue;
                 }
-                value.setClassId(classId);
-                baseClassCourseList.add(value);
+                newBaseClassCourse.setClassId(classId);
+                baseClassCourseList.add(newBaseClassCourse);
             }
         }
 
@@ -258,24 +262,23 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
         }
 
         // 已经维护了课程教材信息的班级和所在学期
+        // 一个班级一个学期应该只需要设置一次
         List<BaseClassAdminCourse> baseClassAdminCourses = baseClassAdminCourseMapper.selectList(
                 Wrappers.lambdaQuery(BaseClassAdminCourse.class)
-                        .eq(BaseClassAdminCourse::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .eq(BaseClassAdminCourse::getBaseSemesterId, dto.getNewBaseSemesterId())
         );
-        Map<String, Long> classSemester = new HashMap<>();
-        for (BaseClassAdminCourse baseClassAdminCourse : baseClassAdminCourses) {
-            classSemester.put(baseClassAdminCourse.getClassId() + "_" + baseClassAdminCourse.getBaseSemesterId(), baseClassAdminCourse.getId());
-        }
+
+        Map<Long, BaseClassAdminCourse> oldClassIdMap = baseClassAdminCourses.stream()
+                .collect(Collectors.toMap(BaseClassAdminCourse::getClassId, b -> b, (b1, b2) -> b1));
 
         // 判断复用的学期复用的班级是否已经进入了班级课程列表
         // 判断本学期本班级是否已经加入课程管理的班级中
         List<Long> classAdminCourseIds = new ArrayList<>();
+        Long classAdminCourseId;
+        BaseClassAdminCourse baseClassAdminCourse;
         for (Long classId : dto.getNewClassIds()){
-            String newClassSemester = classId + "_" + dto.getNewBaseSemesterId();
-            Long classAdminCourseId = null;
-            BaseClassAdminCourse baseClassAdminCourse = null;
-            if(ObjectUtils.isNotEmpty(classSemester) && ObjectUtils.isNotEmpty(classSemester.get(newClassSemester))){
-                classAdminCourseId = classSemester.get(newClassSemester);
+            if(ObjectUtils.isNotEmpty(oldClassIdMap) && oldClassIdMap.containsKey(classId)){
+                classAdminCourseId = oldClassIdMap.get(classId).getId();
             } else {
                 baseClassAdminCourse = new BaseClassAdminCourse();
                 baseClassAdminCourse.setClassId(classId);
@@ -283,12 +286,12 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
                 baseClassAdminCourseMapper.insert(baseClassAdminCourse);
 
                 classAdminCourseId = baseClassAdminCourse.getId();
-                classSemester.put(newClassSemester, classAdminCourseId);
+                oldClassIdMap.put(classId, baseClassAdminCourse);
             }
             classAdminCourseIds.add(classAdminCourseId);
         }
 
-        //删除班级的所有课程教材
+        // 删除班级的所有课程教材
         LambdaQueryWrapper<BaseClassCourse> removeLambdaQueryWrapper = new LambdaQueryWrapper<>();
         removeLambdaQueryWrapper
                 .in(BaseClassCourse::getClassId, classAdminCourseIds)
@@ -296,12 +299,12 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
         this.remove(removeLambdaQueryWrapper);
 
         List<BaseClassCourse> newBaseClassCourseList = new ArrayList<>();
-        for (Long classAdminCourseId : classAdminCourseIds){
+        for (Long id : classAdminCourseIds){
             for (BaseClassCourse baseClassCourse : baseClassCourseList){
                 Long courseId = baseClassCourse.getCourseId();
                 Long textbookId = baseClassCourse.getTextbookId();
                 newBaseClassCourseList.add(new BaseClassCourse(){{
-                    setClassId(classAdminCourseId);
+                    setClassId(id);
                     setCourseId(courseId);
                     setTextbookId(textbookId);
                     setCreateDate(new Date());
@@ -322,8 +325,22 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
         if(ObjectUtils.isEmpty(dto.getClassIds()) || dto.getClassIds().isEmpty()){
             throw new MyException("请选择需要设置课程的班级");
         }
+
+        // 一个班级一个学期应该只需要设置一次
+        List<BaseClassAdminCourse> baseClassAdminCourses = baseClassAdminCourseMapper.selectList(
+                Wrappers.lambdaQuery(BaseClassAdminCourse.class)
+                        .eq(BaseClassAdminCourse::getBaseSemesterId, dto.getBaseSemesterId())
+        );
+
+        List<Long> oldClassId = baseClassAdminCourses.stream()
+                .map(BaseClassAdminCourse::getClassId)
+                .collect(Collectors.toList());
+
         BaseClassAdminCourse baseClassAdminCourse;
         for(Long classId : dto.getClassIds()){
+            if(ObjectUtils.isNotEmpty(oldClassId) && oldClassId.contains(classId)){
+                continue;
+            }
             baseClassAdminCourse = new BaseClassAdminCourse();
             baseClassAdminCourse.setBaseSemesterId(dto.getBaseSemesterId());
             baseClassAdminCourse.setClassId(classId);

+ 1 - 1
src/main/resources/mapper/base/BaseClassCourse.xml

@@ -95,7 +95,7 @@
         left join base_course_subject t2 on t3.course_id = t2.id
         where t.delete_mark = 0
         <if test="classIds != null">
-            AND t.class_id in
+            AND t.id in
             <foreach item="classIds" collection="classIds" open="(" separator="," close=")">
                 #{classIds}
             </foreach>