Ver Fonte

add:课程设置值更新

caozixuan há 1 ano atrás
pai
commit
f3d11807db

+ 70 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/CourseDimensionMd5Dto.java

@@ -0,0 +1,70 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.CourseDimensionSourceEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 知识点Md5比对dto
+ * @Author: CaoZixuan
+ * @Date: 2024-03-13
+ */
+public class CourseDimensionMd5Dto {
+
+    @ApiModelProperty(value = "来源")
+    private CourseDimensionSourceEnum source;
+
+    @ApiModelProperty(value = "知识点编号")
+    private String code;
+
+    @ApiModelProperty(value = "知识点名称")
+    private String name;
+
+    @ApiModelProperty(value = "排序")
+    private Integer number;
+
+    @ApiModelProperty(value = "父id(顶级知识点父id为0)")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    public CourseDimensionSourceEnum getSource() {
+        return source;
+    }
+
+    public void setSource(CourseDimensionSourceEnum source) {
+        this.source = source;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+}

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CourseWeightResult.java

@@ -1,5 +1,7 @@
 package com.qmth.distributed.print.business.bean.result;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -20,6 +22,7 @@ public class CourseWeightResult {
     private BigDecimal customRate;
 
     @ApiModelProperty("权重设置标记")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long weightSettingSign;
 
     @ApiModelProperty("课程权重表单")

+ 27 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TeachClazzResult.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.bean.result;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
@@ -29,6 +30,16 @@ public class TeachClazzResult {
     @ApiModelProperty(value = "教学课程id")
     private Long teachCourseId;
 
+    @ApiModelProperty("基础教学班级id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @JsonIgnore
+    private Long basicTeachClazzId;
+
+    @ApiModelProperty("所属的分配教学课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @JsonIgnore
+    private Long belongTeachCourseId;
+
     public Long getId() {
         return id;
     }
@@ -68,4 +79,20 @@ public class TeachClazzResult {
     public void setTeachCourseId(Long teachCourseId) {
         this.teachCourseId = teachCourseId;
     }
+
+    public Long getBasicTeachClazzId() {
+        return basicTeachClazzId;
+    }
+
+    public void setBasicTeachClazzId(Long basicTeachClazzId) {
+        this.basicTeachClazzId = basicTeachClazzId;
+    }
+
+    public Long getBelongTeachCourseId() {
+        return belongTeachCourseId;
+    }
+
+    public void setBelongTeachCourseId(Long belongTeachCourseId) {
+        this.belongTeachCourseId = belongTeachCourseId;
+    }
 }

+ 0 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/CourseDimensionService.java

@@ -36,17 +36,4 @@ public interface CourseDimensionService extends IService<CourseDimension> {
      * @param userId     教师id
      */
     void syncTikuCourseProperties(Long examId, String courseCode, Long userId);
-
-    /**
-     * 自动生成课程一二级属性编号
-     * <p>
-     * 一级属性编号从A-Z,二级属性编号为A1,A2。。。B1,B2。。。Z1,Z2。。。
-     * </P>
-     *
-     * @param examId     考试id
-     * @param courseCode 课程编号
-     * @param parentId   父属性id(根节点id为0)
-     * @return 生成的编号
-     */
-    String autoCreateDimensionCode(Long examId, String courseCode, Long parentId);
 }

+ 0 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachStudentService.java

@@ -10,7 +10,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Set;
 
 /**
  * @Description: 教学学生服务类

+ 34 - 60
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CourseDimensionServiceImpl.java

@@ -1,10 +1,11 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
-import com.qmth.boot.core.exception.StatusException;
 import com.qmth.distributed.print.business.bean.dto.CourseDimensionImportDto;
+import com.qmth.distributed.print.business.bean.dto.CourseDimensionMd5Dto;
 import com.qmth.distributed.print.business.entity.CourseDimension;
 import com.qmth.distributed.print.business.entity.TeachCourse;
 import com.qmth.distributed.print.business.enums.CourseDimensionCodeEnum;
@@ -21,6 +22,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.kit.TikuUtils;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -34,6 +36,7 @@ import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -183,15 +186,14 @@ public class CourseDimensionServiceImpl extends ServiceImpl<CourseDimensionMappe
         }
         Long semesterId = SystemConstant.convertIdToLong(basicExam.getSemesterId());
 
-        if (this.count(new QueryWrapper<CourseDimension>().lambda().eq(CourseDimension::getTeachCourseId, teachCourseId)
-                .ne(CourseDimension::getSource, CourseDimensionSourceEnum.UNION_QUESTION)) == 0) {
+        List<CourseDimension> courseDimensionList = this.list(
+                new QueryWrapper<CourseDimension>().lambda().eq(CourseDimension::getTeachCourseId, teachCourseId));
+
+        if (courseDimensionList.stream().noneMatch(e -> CourseDimensionSourceEnum.IMPORT.equals(e.getSource()))) {
             // 表里没有导入的知识点记录,从题库获取
             List<TikuCourseProperty> tikuDimensionList = tikuUtils.listCourseProperty(teachCourse.getSchoolId(),
                     courseCode);
             if (CollectionUtils.isNotEmpty(tikuDimensionList)) {
-                // 删除课程设置
-                teachCourseService.clearCourseSetting(teachCourseId, CourseSettingTypeEnum.COURSE_DIMENSION);
-
                 CourseDimension temp = new CourseDimension();
                 temp.setTeachCourseId(teachCourseId);
                 temp.setSchoolId(schoolId);
@@ -237,65 +239,37 @@ public class CourseDimensionServiceImpl extends ServiceImpl<CourseDimensionMappe
                         willAddList.add(willAddSecond);
                     }
                 }
+
                 if (CollectionUtils.isNotEmpty(willAddList)) {
-                    this.saveBatch(willAddList);
+                    String dbMd5 = this.buildCourseDimensionMd5(courseDimensionList.stream().filter(e -> CourseDimensionSourceEnum.UNION_QUESTION.equals(e.getSource()))
+                            .collect(Collectors.toList()));
+                    String willAddMd5 = this.buildCourseDimensionMd5(willAddList);
+                    if (!willAddMd5.equals(dbMd5)) {
+                        // 如果题库知识点和之前的题库知识点不一致,删除原先的并新增
+                        teachCourseService.clearCourseSetting(teachCourseId, CourseSettingTypeEnum.COURSE_DIMENSION);
+                        this.saveBatch(willAddList);
+                    }
                 }
             }
         }
     }
 
-    @Override
-    public String autoCreateDimensionCode(Long examId, String courseCode, Long parentId) {
-        // 一级属性
-        boolean isPrimaryProperty = parentId == null || parentId == 0;
-        int primaryPropertyNumber;
-        int secondaryPropertyNumber;
-        String code;
-        List<CourseDimension> sameLevelPropertyList = this.list(
-                new QueryWrapper<CourseDimension>().lambda().eq(CourseDimension::getExamId, examId).eq(CourseDimension::getCourseCode, courseCode).eq(CourseDimension::getParentId, parentId)
-                        .orderByDesc(CourseDimension::getNumber));
-        if (sameLevelPropertyList.size() > 0) {
-            // 当前级别属性已经有值
-            if (isPrimaryProperty) {
-                // 一级属性
-                primaryPropertyNumber = sameLevelPropertyList.get(0).getNumber() + 1;
-                code = CourseDimensionCodeEnum.getCodeByIndex(primaryPropertyNumber);
-                if (code == null || code.length() == 0) {
-                    CourseDimensionCodeEnum[] questionPropertyCodeEnums = CourseDimensionCodeEnum.values();
-                    Set<String> alreadyUsedCodeSet = sameLevelPropertyList.stream().map(CourseDimension::getCode).collect(Collectors.toSet());
-                    // 最大编号已经超过属性编号枚举,则查询是否有,没有使用过的编号
-                    Set<String> canUseCodeSet = Arrays.stream(questionPropertyCodeEnums)
-                            .filter(e -> !alreadyUsedCodeSet.contains(e.getCode()))
-                            .sorted(Comparator.comparing(CourseDimensionCodeEnum::getIndex))
-                            .map(CourseDimensionCodeEnum::getCode).collect(Collectors.toSet());
-                    if (canUseCodeSet.size() == 0) {
-                        throw new StatusException("课程属性一级结构编号已经用完");
-                    }
-                    code = canUseCodeSet.iterator().next();
-                }
-            } else {
-                // 二级属性
-                CourseDimension primaryProperty = this.getById(parentId);
-                if (Objects.isNull(primaryProperty)) {
-                    throw new StatusException("未找到对应的一级属性");
-                }
-                secondaryPropertyNumber = sameLevelPropertyList.get(0).getNumber() + 1;
-                code = primaryProperty.getCode() + secondaryPropertyNumber;
-            }
-        } else {
-            // 当前级别还未建立属性
-            if (isPrimaryProperty) {
-                // 一级属性
-                code = CourseDimensionCodeEnum.A.getCode();
-            } else {
-                // 二级属性
-                CourseDimension primaryProperty = this.getById(parentId);
-                if (Objects.isNull(primaryProperty)) {
-                    throw new StatusException("未找到对应的一级属性");
-                }
-                code = primaryProperty.getCode() + 1;
-            }
-        }
-        return code;
+    /**
+     * 构建知识点md5
+     *
+     * @param courseDimensionList 课程知识点集合
+     * @return MD5
+     */
+    private String buildCourseDimensionMd5(List<CourseDimension> courseDimensionList) {
+        List<CourseDimensionMd5Dto> md5List = courseDimensionList.stream().flatMap(e -> {
+            CourseDimensionMd5Dto dto = new CourseDimensionMd5Dto();
+            dto.setCode(e.getCode());
+            dto.setName(e.getName());
+            dto.setNumber(e.getNumber());
+            dto.setParentId(e.getParentId());
+            dto.setSource(e.getSource());
+            return Stream.of(dto);
+        }).sorted(Comparator.comparing(CourseDimensionMd5Dto::getCode)).collect(Collectors.toList());
+        return DigestUtils.md5Hex(JSON.toJSONString(md5List));
     }
 }

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachClazzServiceImpl.java

@@ -70,6 +70,16 @@ public class TeachClazzServiceImpl extends ServiceImpl<TeachClazzMapper,TeachCla
             resultIPage = this.baseMapper.findTeachClazzPage(new Page<>(pageNumber, pageSize), leaderTeachCourseId,
                     teachClazzName, null);
         } else {
+            // 查找分配给自己的教学班 并且获取每个班映射的实际教学班信息
+            selfPage.getRecords().forEach(e -> {
+                Long basicTeachClazzId = e.getBasicTeachClazzId();
+                Long belongTeachCourseId = e.getBelongTeachCourseId();
+
+                TeachClazz mappingClazz = this.getOne(
+                        new QueryWrapper<TeachClazz>().lambda().eq(TeachClazz::getTeachCourseId, belongTeachCourseId).eq(TeachClazz::getBasicTeachClazzId, basicTeachClazzId).last(SystemConstant.LIMIT1));
+                e.setId(mappingClazz.getId());
+                e.setTeachCourseId(mappingClazz.getTeachCourseId());
+            });
             resultIPage = selfPage;
         }
 

+ 24 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java

@@ -485,13 +485,26 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     @Override
     public void clearCourseSetting(Long teachCourseId, CourseSettingTypeEnum courseSettingTypeEnum) {
         if (courseSettingTypeEnum == CourseSettingTypeEnum.COURSE_DIMENSION) {// 删除知识点、目标设置
+            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+            Long requestUserId = requestUser.getId();
+
             courseDimensionService.remove(
                     new QueryWrapper<CourseDimension>().lambda().eq(CourseDimension::getTeachCourseId, teachCourseId));
-            courseTargetService.remove(
-                    new QueryWrapper<CourseTarget>().lambda().eq(CourseTarget::getTeachCourseId, teachCourseId));
+
+            UpdateWrapper<CourseTarget> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().eq(CourseTarget::getTeachCourseId, teachCourseId)
+                    .set(CourseTarget::getTargetContent, null).set(CourseTarget::getUpdateId, requestUserId)
+                    .set(CourseTarget::getUpdateTime, System.currentTimeMillis());
+            courseTargetService.update(updateWrapper);
+
+            UpdateWrapper<TeachCourse> teachCourseUpdateWrapper = new UpdateWrapper<>();
+            teachCourseUpdateWrapper.lambda().eq(TeachCourse::getId, teachCourseId)
+                    .set(TeachCourse::getWeightSettingSign, SystemConstant.getDbUuid());
+            this.update(teachCourseUpdateWrapper);
+        } else {
+            // 删除权重设置
+            courseWeightService.deleteCourseWeight(teachCourseId);
         }
-        // 删除权重设置
-        courseWeightService.deleteCourseWeight(teachCourseId);
     }
 
     @Override
@@ -574,6 +587,13 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
 
         if (teacherId.equals(requestUserId)) {
             // 课程负责人分配自己的班级
+            // 清除之前关联的班级
+            UpdateWrapper<TeachClazz> clearUpdateWrapper = new UpdateWrapper<>();
+            clearUpdateWrapper.lambda().set(TeachClazz::getBelongTeachCourseId, teachCourseId)
+                    .set(TeachClazz::getBelongTeachCourseId,null)
+                    .eq(TeachClazz::getTeachCourseId, teachCourseId);
+            teachClazzService.update(clearUpdateWrapper);
+            // 更新新关联班级
             UpdateWrapper<TeachClazz> updateWrapper = new UpdateWrapper<>();
             updateWrapper.lambda().set(TeachClazz::getBelongTeachCourseId, teachCourseId)
                     .set(TeachClazz::getUpdateId, requestUserId)

+ 4 - 2
distributed-print-business/src/main/resources/mapper/TeachClazzMapper.xml

@@ -8,7 +8,9 @@
             id,
             teach_course_id AS teachCourseId,
             clazz_name AS teachClazzName,
-            create_time AS createTime
+            create_time AS createTime,
+            basic_teach_clazz_id AS basicTeachClazzId,
+            belong_teach_course_id AS belongTeachCourseId
         FROM
             teach_clazz
         <where>
@@ -22,6 +24,6 @@
                 AND belong_teach_course_id = #{belongTeachCourseId}
             </if>
         </where>
-        ORDER BY create_time DESC
+        ORDER BY id ASC
     </select>
 </mapper>