Bladeren bron

add:课程目标和权重更改

caozixuan 1 jaar geleden
bovenliggende
commit
6e51e68575
24 gewijzigde bestanden met toevoegingen van 480 en 408 verwijderingen
  1. 41 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ObeCourseTargetExpectValueParam.java
  2. 15 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ObeCourseTargetParam.java
  3. 2 14
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CourseDimensionTree.java
  4. 0 86
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CourseTargetResult.java
  5. 23 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ObeCourseOutlineResult.java
  6. 105 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ObeCourseTargetResult.java
  7. 23 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ObeCourseTarget.java
  8. 1 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ObeCourseOutlineMapper.java
  9. 12 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ObeCourseTargetMapper.java
  10. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseDimensionService.java
  11. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseOutlineService.java
  12. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseRequirementDimensionService.java
  13. 11 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseTargetService.java
  14. 0 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseWeightService.java
  15. 34 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseDimensionServiceImpl.java
  16. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseEvaluationServiceImpl.java
  17. 16 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseOutlineServiceImpl.java
  18. 35 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseRequirementDimensionServiceImpl.java
  19. 70 155
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseTargetServiceImpl.java
  20. 12 100
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseWeightServiceImpl.java
  21. 9 0
      distributed-print-business/src/main/resources/db/log/caozixuan.sql
  22. 7 1
      distributed-print-business/src/main/resources/mapper/ObeCourseOutlineMapper.xml
  23. 21 0
      distributed-print-business/src/main/resources/mapper/ObeCourseTargetMapper.xml
  24. 18 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/ObeCourseTargetController.java

+ 41 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ObeCourseTargetExpectValueParam.java

@@ -0,0 +1,41 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 课程大纲目标权重设置参数
+ * @Author: CaoZixuan
+ * @Date: 2024-06-08
+ */
+public class ObeCourseTargetExpectValueParam {
+
+    @ApiModelProperty("课程大纲id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "缺少课程大纲id")
+    @Range(min = 1L, message = "缺少课程大纲id")
+    private Long obeCourseOutlineId;
+
+    @ApiModelProperty("预期值")
+    private Double expectValue;
+
+    public Long getObeCourseOutlineId() {
+        return obeCourseOutlineId;
+    }
+
+    public void setObeCourseOutlineId(Long obeCourseOutlineId) {
+        this.obeCourseOutlineId = obeCourseOutlineId;
+    }
+
+    public Double getExpectValue() {
+        return expectValue;
+    }
+
+    public void setExpectValue(Double expectValue) {
+        this.expectValue = expectValue;
+    }
+}

+ 15 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ObeCourseTargetParam.java

@@ -33,9 +33,15 @@ public class ObeCourseTargetParam {
     @Length(min = 1, message = "请输入课程目标")
     private String targetName;
 
-    @ApiModelProperty("毕业要求")
+    @ApiModelProperty("目标分解详情")
     private String degreeRequirement;
 
+    @ApiModelProperty("指标点id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "缺少指标点id")
+    @Range(min = 1L, message = "缺少指标点id")
+    private Long obeCultureProgramRequirementId;
+
     @ApiModelProperty("知识点id集合")
     private List<Long> dimensionIdList;
 
@@ -71,6 +77,14 @@ public class ObeCourseTargetParam {
         this.degreeRequirement = degreeRequirement;
     }
 
+    public Long getObeCultureProgramRequirementId() {
+        return obeCultureProgramRequirementId;
+    }
+
+    public void setObeCultureProgramRequirementId(Long obeCultureProgramRequirementId) {
+        this.obeCultureProgramRequirementId = obeCultureProgramRequirementId;
+    }
+
     public List<Long> getDimensionIdList() {
         return dimensionIdList;
     }

+ 2 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CourseDimensionTree.java

@@ -13,6 +13,7 @@ import java.util.List;
  * @Date: 2024-02-28
  */
 public class CourseDimensionTree {
+
     @ApiModelProperty("知识点id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
@@ -23,18 +24,13 @@ public class CourseDimensionTree {
     @ApiModelProperty("知识点名称")
     private String name;
 
-    @ApiModelProperty("占用状态")
-    private CourseDimensionOccupiedDto occupied;
-
     @ApiModelProperty("子知识点")
     private List<CourseDimensionTree> children;
 
-    public CourseDimensionTree(Long id, String code, String name, CourseDimensionOccupiedDto occupied,
-            List<CourseDimensionTree> children) {
+    public CourseDimensionTree(Long id, String code, String name, List<CourseDimensionTree> children) {
         this.id = id;
         this.code = code;
         this.name = name;
-        this.occupied = occupied;
         this.children = children;
     }
 
@@ -65,14 +61,6 @@ public class CourseDimensionTree {
         this.name = name;
     }
 
-    public CourseDimensionOccupiedDto getOccupied() {
-        return occupied;
-    }
-
-    public void setOccupied(CourseDimensionOccupiedDto occupied) {
-        this.occupied = occupied;
-    }
-
     public List<CourseDimensionTree> getChildren() {
         return children;
     }

+ 0 - 86
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CourseTargetResult.java

@@ -1,86 +0,0 @@
-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 com.qmth.distributed.print.business.bean.dto.CourseDimensionDto;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * @Description: 课程目标查询结果
- * @Author: CaoZixuan
- * @Date: 2024-02-28
- */
-public class CourseTargetResult {
-
-    @ApiModelProperty("课程目标id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
-    @ApiModelProperty("课程目标名称")
-    private String targetName;
-
-    @ApiModelProperty("毕业要求指标")
-    @JsonIgnore
-    private String targetContent;
-
-    @ApiModelProperty("毕业要求")
-    private String degreeRequirement;
-
-    @ApiModelProperty("课程目标毕业要求")
-    private List<CourseDimensionDto> dimensionList;
-
-    @ApiModelProperty("目标整体权重")
-    private BigDecimal totalWeight;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getTargetName() {
-        return targetName;
-    }
-
-    public void setTargetName(String targetName) {
-        this.targetName = targetName;
-    }
-
-    public String getTargetContent() {
-        return targetContent;
-    }
-
-    public void setTargetContent(String targetContent) {
-        this.targetContent = targetContent;
-    }
-
-    public String getDegreeRequirement() {
-        return degreeRequirement;
-    }
-
-    public void setDegreeRequirement(String degreeRequirement) {
-        this.degreeRequirement = degreeRequirement;
-    }
-
-    public List<CourseDimensionDto> getDimensionList() {
-        return dimensionList;
-    }
-
-    public void setDimensionList(List<CourseDimensionDto> dimensionList) {
-        this.dimensionList = dimensionList;
-    }
-
-    public BigDecimal getTotalWeight() {
-        return totalWeight;
-    }
-
-    public void setTotalWeight(BigDecimal totalWeight) {
-        this.totalWeight = totalWeight;
-    }
-}

+ 23 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ObeCourseOutlineResult.java

@@ -57,6 +57,13 @@ public class ObeCourseOutlineResult {
     @ApiModelProperty("负责人名称")
     private String userName;
 
+    @ApiModelProperty("专业id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long professionalId;
+
+    @ApiModelProperty("专业名称")
+    private String professionalName;
+
     public Long getId() {
         return id;
     }
@@ -160,4 +167,20 @@ public class ObeCourseOutlineResult {
     public void setUserName(String userName) {
         this.userName = userName;
     }
+
+    public Long getProfessionalId() {
+        return professionalId;
+    }
+
+    public void setProfessionalId(Long professionalId) {
+        this.professionalId = professionalId;
+    }
+
+    public String getProfessionalName() {
+        return professionalName;
+    }
+
+    public void setProfessionalName(String professionalName) {
+        this.professionalName = professionalName;
+    }
 }

+ 105 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ObeCourseTargetResult.java

@@ -0,0 +1,105 @@
+package com.qmth.distributed.print.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 课程目标查询结果
+ * @Author: CaoZixuan
+ * @Date: 2024-02-28
+ */
+public class ObeCourseTargetResult {
+
+    @ApiModelProperty("课程目标id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    @ApiModelProperty("课程目标名称")
+    private String targetName;
+
+    @ApiModelProperty("预期值")
+    private Double expectValue;
+
+    @ApiModelProperty("内容")
+    private String degreeRequirement;
+
+    @ApiModelProperty("指标点id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long obeCultureProgramRequirementId;
+
+    @ApiModelProperty("指标点名称")
+    private String obeCultureProgramRequirementName;
+
+    @ApiModelProperty("指标点内容")
+    private String obeCultureProgramRequirementContent;
+
+    @ApiModelProperty("目标整体权重")
+    private BigDecimal totalWeight;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTargetName() {
+        return targetName;
+    }
+
+    public void setTargetName(String targetName) {
+        this.targetName = targetName;
+    }
+
+    public Double getExpectValue() {
+        return expectValue;
+    }
+
+    public void setExpectValue(Double expectValue) {
+        this.expectValue = expectValue;
+    }
+
+    public String getDegreeRequirement() {
+        return degreeRequirement;
+    }
+
+    public void setDegreeRequirement(String degreeRequirement) {
+        this.degreeRequirement = degreeRequirement;
+    }
+
+    public Long getObeCultureProgramRequirementId() {
+        return obeCultureProgramRequirementId;
+    }
+
+    public void setObeCultureProgramRequirementId(Long obeCultureProgramRequirementId) {
+        this.obeCultureProgramRequirementId = obeCultureProgramRequirementId;
+    }
+
+    public String getObeCultureProgramRequirementName() {
+        return obeCultureProgramRequirementName;
+    }
+
+    public void setObeCultureProgramRequirementName(String obeCultureProgramRequirementName) {
+        this.obeCultureProgramRequirementName = obeCultureProgramRequirementName;
+    }
+
+    public String getObeCultureProgramRequirementContent() {
+        return obeCultureProgramRequirementContent;
+    }
+
+    public void setObeCultureProgramRequirementContent(String obeCultureProgramRequirementContent) {
+        this.obeCultureProgramRequirementContent = obeCultureProgramRequirementContent;
+    }
+
+    public BigDecimal getTotalWeight() {
+        return totalWeight;
+    }
+
+    public void setTotalWeight(BigDecimal totalWeight) {
+        this.totalWeight = totalWeight;
+    }
+}

+ 23 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ObeCourseTarget.java

@@ -25,6 +25,10 @@ public class ObeCourseTarget extends BaseEntity {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long obeCourseOutlineId;
 
+    @ApiModelProperty(value = "毕业要求指标id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long obeCultureProgramRequirementId;
+
     @ApiModelProperty(value = "学校id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long schoolId;
@@ -32,15 +36,15 @@ public class ObeCourseTarget extends BaseEntity {
     @ApiModelProperty(value = "课程目标")
     private String targetName;
 
-    @ApiModelProperty(value = "毕业要求指标")
-    private String targetContent;
-
     @ApiModelProperty(value = "毕业要求")
     private String degreeRequirement;
 
     @ApiModelProperty(value = "课程目标整体权重")
     private BigDecimal totalWeight;
 
+    @ApiModelProperty(value = "预期值")
+    private Double expectValue;
+
     public Long getObeCourseOutlineId() {
         return obeCourseOutlineId;
     }
@@ -49,6 +53,14 @@ public class ObeCourseTarget extends BaseEntity {
         this.obeCourseOutlineId = obeCourseOutlineId;
     }
 
+    public Long getObeCultureProgramRequirementId() {
+        return obeCultureProgramRequirementId;
+    }
+
+    public void setObeCultureProgramRequirementId(Long obeCultureProgramRequirementId) {
+        this.obeCultureProgramRequirementId = obeCultureProgramRequirementId;
+    }
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -65,14 +77,6 @@ public class ObeCourseTarget extends BaseEntity {
         this.targetName = targetName;
     }
 
-    public String getTargetContent() {
-        return targetContent;
-    }
-
-    public void setTargetContent(String targetContent) {
-        this.targetContent = targetContent;
-    }
-
     public String getDegreeRequirement() {
         return degreeRequirement;
     }
@@ -88,4 +92,12 @@ public class ObeCourseTarget extends BaseEntity {
     public void setTotalWeight(BigDecimal totalWeight) {
         this.totalWeight = totalWeight;
     }
+
+    public Double getExpectValue() {
+        return expectValue;
+    }
+
+    public void setExpectValue(Double expectValue) {
+        this.expectValue = expectValue;
+    }
 }

+ 1 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ObeCourseOutlineMapper.java

@@ -1,11 +1,10 @@
 package com.qmth.distributed.print.business.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.result.ObeCourseOutlineResult;
-import com.qmth.distributed.print.business.bean.result.TeachCourseResult;
 import com.qmth.distributed.print.business.entity.ObeCourseOutline;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import org.apache.ibatis.annotations.Param;
 

+ 12 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ObeCourseTargetMapper.java

@@ -1,7 +1,11 @@
 package com.qmth.distributed.print.business.mapper;
 
+import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
 import com.qmth.distributed.print.business.entity.ObeCourseTarget;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ObeCourseTargetMapper extends BaseMapper<ObeCourseTarget> {
 
-}
+    /**
+     * 根据课程大纲id查询课程目标列表
+     *
+     * @param obeCourseOutlineId 课程大纲id
+     * @return 课程目标列表
+     */
+    List<ObeCourseTargetResult> findCourseTargetList(@Param("obeCourseOutlineId") Long obeCourseOutlineId);
+}

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseDimensionService.java

@@ -1,10 +1,13 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.result.CourseDimensionTree;
 import com.qmth.distributed.print.business.entity.ObeCourseDimension;
 import com.qmth.teachcloud.common.entity.SysUser;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * <p>
  * 课程知识点表 服务类
@@ -30,4 +33,12 @@ public interface ObeCourseDimensionService extends IService<ObeCourseDimension>
      * @param obeCourseOutlineId 课程大纲id
      */
     void syncTikuCourseProperties(Long obeCourseOutlineId);
+
+    /**
+     * 查询知识点树
+     *
+     * @param obeCourseOutlineId 课程大纲id
+     * @return 课程知识点树
+     */
+    List<CourseDimensionTree> findDimensionTree(Long obeCourseOutlineId);
 }

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

@@ -61,4 +61,4 @@ public interface ObeCourseOutlineService extends IService<ObeCourseOutline> {
      * @return 课程权重设置状态
      */
     CourseWeightSettingStatusResult findCourseWeightSettingStatus(Long obeCourseOutlineId);
-}
+}

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseRequirementDimensionService.java

@@ -1,8 +1,11 @@
 package com.qmth.distributed.print.business.service;
 
+import com.qmth.distributed.print.business.bean.dto.CourseDimensionDto;
 import com.qmth.distributed.print.business.entity.ObeCourseRequirementDimension;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 课程大纲指标与知识点关联表 服务类
@@ -13,4 +16,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ObeCourseRequirementDimensionService extends IService<ObeCourseRequirementDimension> {
 
+    /**
+     * 根据课程大纲id和指标id查询关联关系
+     *
+     * @param obeCourseOutlineId             课程大纲id
+     * @param obeCultureProgramRequirementId 指标点id
+     * @return 知识点集合
+     */
+    List<CourseDimensionDto> findByOutlineIdAndRequirementId(Long obeCourseOutlineId, Long obeCultureProgramRequirementId);
 }

+ 11 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseTargetService.java

@@ -1,9 +1,9 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.params.ObeCourseTargetExpectValueParam;
 import com.qmth.distributed.print.business.bean.params.ObeCourseTargetParam;
-import com.qmth.distributed.print.business.bean.result.CourseDimensionTree;
-import com.qmth.distributed.print.business.bean.result.CourseTargetResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
 import com.qmth.distributed.print.business.entity.ObeCourseTarget;
 import com.qmth.teachcloud.common.entity.SysUser;
@@ -26,15 +26,7 @@ public interface ObeCourseTargetService extends IService<ObeCourseTarget> {
      * @param obeCourseOutlineId 课程大纲id
      * @return 目标集合
      */
-    List<CourseTargetResult> findCourseTargetList(Long obeCourseOutlineId);
-
-    /**
-     * 查询知识点树
-     *
-     * @param obeCourseOutlineId 课程大纲id
-     * @return 课程知识点树
-     */
-    List<CourseDimensionTree> findDimensionTree(Long obeCourseOutlineId);
+    List<ObeCourseTargetResult> findCourseTargetList(Long obeCourseOutlineId);
 
     /**
      * 保存课程目标
@@ -60,4 +52,12 @@ public interface ObeCourseTargetService extends IService<ObeCourseTarget> {
      * @return 试卷结构
      */
     List<PaperStructDimensionResult> findTikuPaperStruct(Long obeCourseOutlineId, String paperNumber, Long examId);
+
+    /**
+     * 设置预期值
+     *
+     * @param obeCourseTargetExpectValueParam 课程大纲参数
+     * @param requestUser                     请求人
+     */
+    void settingExpectValue(ObeCourseTargetExpectValueParam obeCourseTargetExpectValueParam, SysUser requestUser);
 }

+ 0 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseWeightService.java

@@ -27,14 +27,6 @@ public interface ObeCourseWeightService extends IService<ObeCourseWeight> {
      */
     ObeCourseWeightResult findCourseWeight(Long obeCourseOutlineId);
 
-    /**
-     * 查询课程权重(report)
-     *
-     * @param obeCourseOutlineId 教学课程id
-     * @return 课程权重信息
-     */
-    ObeCourseWeightResult findCourseWeightReport(Long obeCourseOutlineId);
-
     /**
      * 保存课程权重
      *
@@ -49,12 +41,4 @@ public interface ObeCourseWeightService extends IService<ObeCourseWeight> {
      * @param obeCourseOutlineId 教学课程id
      */
     void deleteCourseWeight(Long obeCourseOutlineId);
-
-    /**
-     * 获取课程权重表单数据
-     *
-     * @param obeCourseOutlineId 教学课程id
-     * @return 课程权重表单平铺数据
-     */
-    List<CourseWeightFormDto> findCourseWeightForm(Long obeCourseOutlineId);
 }

+ 34 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseDimensionServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.CourseDimensionImportDto;
 import com.qmth.distributed.print.business.bean.dto.CourseDimensionMd5Dto;
+import com.qmth.distributed.print.business.bean.result.CourseDimensionTree;
 import com.qmth.distributed.print.business.entity.ObeCourseDimension;
 import com.qmth.distributed.print.business.entity.ObeCourseOutline;
 import com.qmth.distributed.print.business.enums.CourseDimensionCodeEnum;
@@ -225,6 +226,39 @@ public class ObeCourseDimensionServiceImpl extends ServiceImpl<ObeCourseDimensio
         }
     }
 
+    @Override
+    public List<CourseDimensionTree> findDimensionTree(Long obeCourseOutlineId) {
+        ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
+        if (Objects.isNull(courseOutline)) {
+            throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
+        }
+        List<ObeCourseDimension> obeCourseDimensionList = this.list(new QueryWrapper<ObeCourseDimension>().lambda().eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId));
+
+        List<ObeCourseDimension> firstDimensionList = obeCourseDimensionList.stream().filter(e -> e.getParentId() == 0).sorted(Comparator.comparingInt(ObeCourseDimension::getNumber)).collect(Collectors.toList());
+
+        List<CourseDimensionTree> treeList = new ArrayList<>();
+        for (ObeCourseDimension first : firstDimensionList) {
+            Long id = first.getId();
+            String code = first.getCode();
+            String name = first.getName();
+            List<CourseDimensionTree> children = new ArrayList<>();
+
+            List<ObeCourseDimension> secondDimensionList = obeCourseDimensionList.stream().filter(e -> id.equals(e.getParentId()))
+                    .sorted(Comparator.comparingInt(ObeCourseDimension::getNumber)).collect(Collectors.toList());
+            for (ObeCourseDimension child : secondDimensionList) {
+                Long childId = child.getId();
+                String childCode = child.getCode();
+                String childName = child.getName();
+
+                CourseDimensionTree tree = new CourseDimensionTree(childId, childCode, childName, new ArrayList<>());
+                children.add(tree);
+            }
+            CourseDimensionTree tree = new CourseDimensionTree(id, code, name, children);
+            treeList.add(tree);
+        }
+        return treeList;
+    }
+
     /**
      * 构建知识点md5
      *

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseEvaluationServiceImpl.java

@@ -5,15 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.params.ObeCourseEvaluationParam;
 import com.qmth.distributed.print.business.bean.result.ObeCourseEvaluationResult;
-import com.qmth.distributed.print.business.entity.ObeCourseWeight;
 import com.qmth.distributed.print.business.entity.ObeCourseEvaluation;
 import com.qmth.distributed.print.business.entity.ObeCourseOutline;
+import com.qmth.distributed.print.business.entity.ObeCourseWeight;
 import com.qmth.distributed.print.business.enums.CourseEvaluationTypeEnum;
 import com.qmth.distributed.print.business.enums.CourseSettingTypeEnum;
 import com.qmth.distributed.print.business.mapper.ObeCourseEvaluationMapper;
-import com.qmth.distributed.print.business.service.ObeCourseWeightService;
 import com.qmth.distributed.print.business.service.ObeCourseEvaluationService;
 import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
+import com.qmth.distributed.print.business.service.ObeCourseWeightService;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;

+ 16 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseOutlineServiceImpl.java

@@ -52,6 +52,9 @@ public class ObeCourseOutlineServiceImpl extends ServiceImpl<ObeCourseOutlineMap
     @Resource
     private ObeCourseWeightService obeCourseWeightService;
 
+    @Resource
+    private ObeCourseRequirementDimensionService obeCourseRequirementDimensionService;
+
     @Override
     public IPage<ObeCourseOutlineResult> findObeCourseOutlinePage(Long professionalId, Long cultureProgramId, Long courseId,
             String courseOutlineName, int pageNumber, int pageSize) {
@@ -59,8 +62,8 @@ public class ObeCourseOutlineServiceImpl extends ServiceImpl<ObeCourseOutlineMap
         courseOutlineName = SystemConstant.translateSpecificSign(courseOutlineName);
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(requestUser.getSchoolId(),
                 requestUser.getId(), ServletUtil.getRequest().getServletPath());
-        return baseMapper.findObeCourseOutlinePage(new Page<>(pageNumber, pageSize), professionalId, cultureProgramId, courseId,
-                courseOutlineName, dpr);
+        return baseMapper.findObeCourseOutlinePage(new Page<>(pageNumber, pageSize), professionalId, cultureProgramId,
+                courseId, courseOutlineName, dpr);
     }
 
     @Override
@@ -121,6 +124,10 @@ public class ObeCourseOutlineServiceImpl extends ServiceImpl<ObeCourseOutlineMap
         // 删除课程目标
         obeCourseTargetService.remove(
                 new QueryWrapper<ObeCourseTarget>().lambda().eq(ObeCourseTarget::getObeCourseOutlineId, id));
+
+        // 删除指标和知识点关系
+        obeCourseRequirementDimensionService.remove(new QueryWrapper<ObeCourseRequirementDimension>().lambda().eq(ObeCourseRequirementDimension::getObeCourseOutlineId, id));
+
         // 删除课程评价方式
         obeCourseEvaluationService.remove(
                 new QueryWrapper<ObeCourseEvaluation>().lambda().eq(ObeCourseEvaluation::getObeCourseOutlineId, id));
@@ -128,7 +135,7 @@ public class ObeCourseOutlineServiceImpl extends ServiceImpl<ObeCourseOutlineMap
         obeCourseWeightService.remove(
                 new QueryWrapper<ObeCourseWeight>().lambda().eq(ObeCourseWeight::getObeCourseOutlineId, id));
 
-        // 删除教学课程
+        // 删除课程的大纲
         this.removeById(id);
     }
 
@@ -141,9 +148,14 @@ public class ObeCourseOutlineServiceImpl extends ServiceImpl<ObeCourseOutlineMap
 
             obeCourseDimensionService.remove(new QueryWrapper<ObeCourseDimension>().lambda().eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId));
 
+            // 清除指标点与知识点对应关系
+            obeCourseRequirementDimensionService.remove(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
+                    .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId));
+
+            // 清除目标与指标点绑定关系(相当于提示指标点下的知识点已经换了请重新绑定)
             UpdateWrapper<ObeCourseTarget> updateWrapper = new UpdateWrapper<>();
             updateWrapper.lambda().eq(ObeCourseTarget::getObeCourseOutlineId, obeCourseOutlineId)
-                    .set(ObeCourseTarget::getTargetContent, null).set(ObeCourseTarget::getUpdateId, requestUserId)
+                    .set(ObeCourseTarget::getObeCultureProgramRequirementId, null).set(ObeCourseTarget::getUpdateId, requestUserId)
                     .set(ObeCourseTarget::getUpdateTime, System.currentTimeMillis());
             obeCourseTargetService.update(updateWrapper);
 

+ 35 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseRequirementDimensionServiceImpl.java

@@ -1,11 +1,22 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.distributed.print.business.bean.dto.CourseDimensionDto;
 import com.qmth.distributed.print.business.entity.ObeCourseRequirementDimension;
 import com.qmth.distributed.print.business.mapper.ObeCourseRequirementDimensionMapper;
+import com.qmth.distributed.print.business.service.ObeCourseDimensionService;
 import com.qmth.distributed.print.business.service.ObeCourseRequirementDimensionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import jdk.nashorn.internal.ir.annotations.Reference;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  * <p>
  * 课程大纲指标与知识点关联表 服务实现类
@@ -17,4 +28,28 @@ import org.springframework.stereotype.Service;
 @Service
 public class ObeCourseRequirementDimensionServiceImpl extends ServiceImpl<ObeCourseRequirementDimensionMapper, ObeCourseRequirementDimension> implements ObeCourseRequirementDimensionService {
 
+    @Resource
+    private ObeCourseDimensionService obeCourseDimensionService;
+
+    @Override
+    public List<CourseDimensionDto> findByOutlineIdAndRequirementId(Long obeCourseOutlineId,
+            Long obeCultureProgramRequirementId) {
+        List<CourseDimensionDto> result = new ArrayList<>();
+        List<Long> dimensionIdList = this.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
+                        .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
+                        .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId))
+                .stream().map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct()
+                .collect(Collectors.toList());
+
+        if (CollectionUtils.isNotEmpty(dimensionIdList)) {
+            result = obeCourseDimensionService.listByIds(dimensionIdList).stream().flatMap(e -> {
+                CourseDimensionDto courseDimensionDto = new CourseDimensionDto();
+                courseDimensionDto.setId(e.getId());
+                courseDimensionDto.setCode(e.getCode());
+                courseDimensionDto.setName(e.getName());
+                return Stream.of(courseDimensionDto);
+            }).collect(Collectors.toList());
+        }
+        return result;
+    }
 }

+ 70 - 155
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseTargetServiceImpl.java

@@ -7,19 +7,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.CourseDimensionDto;
-import com.qmth.distributed.print.business.bean.dto.CourseDimensionOccupiedDto;
 import com.qmth.distributed.print.business.bean.dto.report.CourseTargetWebDto;
 import com.qmth.distributed.print.business.bean.dto.report.DimensionDto;
+import com.qmth.distributed.print.business.bean.params.ObeCourseTargetExpectValueParam;
 import com.qmth.distributed.print.business.bean.params.ObeCourseTargetParam;
-import com.qmth.distributed.print.business.bean.result.CourseDimensionTree;
-import com.qmth.distributed.print.business.bean.result.CourseTargetResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.CourseDimensionSourceEnum;
 import com.qmth.distributed.print.business.enums.CourseSettingTypeEnum;
 import com.qmth.distributed.print.business.mapper.ObeCourseTargetMapper;
 import com.qmth.distributed.print.business.service.*;
-import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -28,7 +26,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -54,95 +55,16 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
     @Resource
     private ExamTaskPaperDataService examTaskPaperDataService;
 
-    @Override
-    public List<CourseTargetResult> findCourseTargetList(Long obeCourseOutlineId) {
-        ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
-        if (Objects.isNull(courseOutline)) {
-            throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
-        }
-        List<ObeCourseTarget> obeCourseTargetList = this.list(new QueryWrapper<ObeCourseTarget>().lambda().eq(ObeCourseTarget::getObeCourseOutlineId, courseOutline.getId()).orderByAsc(ObeCourseTarget::getId));
-
-        List<ObeCourseDimension> obeCourseDimensionList = obeCourseDimensionService.list(
-                new QueryWrapper<ObeCourseDimension>().lambda().eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId));
-
-        Map<Long, ObeCourseDimension> courseDimensionMap = obeCourseDimensionList.stream()
-                .collect(Collectors.toMap(ObeCourseDimension::getId, e -> e));
-
-        return obeCourseTargetList.stream().flatMap(e -> {
-            CourseTargetResult cell = new CourseTargetResult();
-            cell.setId(e.getId());
-            cell.setTargetName(e.getTargetName());
-            cell.setDegreeRequirement(e.getDegreeRequirement());
-            cell.setTotalWeight(e.getTotalWeight());
-            String targetContent = e.getTargetContent();
-            List<Long> dimensionIdList = JSON.parseArray(targetContent, Long.class);
-            List<CourseDimensionDto> dimensionList = new ArrayList<>();
-            if (SystemConstant.strNotNull(targetContent)) {
-                dimensionIdList.forEach(d -> {
-                    CourseDimensionDto courseDimensionDto = new CourseDimensionDto();
-                    ObeCourseDimension obeCourseDimension = courseDimensionMap.get(d);
-                    courseDimensionDto.setId(d);
-                    courseDimensionDto.setCode(obeCourseDimension.getCode());
-                    courseDimensionDto.setName(obeCourseDimension.getName());
-                    dimensionList.add(courseDimensionDto);
-                });
-            }
-            cell.setDimensionList(dimensionList);
-            return Stream.of(cell);
-        }).collect(Collectors.toList());
-    }
+    @Resource
+    private ObeCourseRequirementDimensionService obeCourseRequirementDimensionService;
 
     @Override
-    public List<CourseDimensionTree> findDimensionTree(Long obeCourseOutlineId) {
+    public List<ObeCourseTargetResult> findCourseTargetList(Long obeCourseOutlineId) {
         ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
         if (Objects.isNull(courseOutline)) {
             throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
         }
-
-        // 课程目标
-        List<ObeCourseTarget> obeCourseTargetList = this.list(new QueryWrapper<ObeCourseTarget>().lambda().eq(ObeCourseTarget::getObeCourseOutlineId, courseOutline.getId()));
-
-        // 课程目标id - 该目标包含的所有知识点id集合
-        Map<Long, List<Long>> targetDimensionMap = obeCourseTargetList.stream()
-                .collect(Collectors.toMap(BaseEntity::getId, v -> {
-                    List<Long> dimensionList = new ArrayList<>();
-                    String targetContent = v.getTargetContent();
-                    if (SystemConstant.strNotNull(targetContent)) {
-                        dimensionList = JSON.parseArray(targetContent, Long.class);
-                    }
-                    return dimensionList;
-                }));
-
-        // 课程知识点
-        List<ObeCourseDimension> obeCourseDimensionList = obeCourseDimensionService.list(
-                new QueryWrapper<ObeCourseDimension>().lambda().eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId));
-
-        List<ObeCourseDimension> firstDimensionList = obeCourseDimensionList.stream().filter(e -> e.getParentId() == 0).sorted(Comparator.comparingInt(ObeCourseDimension::getNumber)).collect(Collectors.toList());
-
-        List<CourseDimensionTree> treeList = new ArrayList<>();
-        for (ObeCourseDimension first : firstDimensionList) {
-            Long id = first.getId();
-            String code = first.getCode();
-            String name = first.getName();
-            CourseDimensionOccupiedDto occupied = this.buildCourseDimensionOccupiedDto(targetDimensionMap, id);
-            List<CourseDimensionTree> children = new ArrayList<>();
-
-            List<ObeCourseDimension> secondDimensionList = obeCourseDimensionList.stream().filter(e -> id.equals(e.getParentId()))
-                    .sorted(Comparator.comparingInt(ObeCourseDimension::getNumber)).collect(Collectors.toList());
-            for (ObeCourseDimension child : secondDimensionList) {
-                Long childId = child.getId();
-                String childCode = child.getCode();
-                String childName = child.getName();
-                CourseDimensionOccupiedDto childOccupied = this.buildCourseDimensionOccupiedDto(targetDimensionMap,
-                        childId);
-
-                CourseDimensionTree tree = new CourseDimensionTree(childId, childCode, childName, childOccupied, new ArrayList<>());
-                children.add(tree);
-            }
-            CourseDimensionTree tree = new CourseDimensionTree(id, code, name, occupied, children);
-            treeList.add(tree);
-        }
-        return treeList;
+        return this.baseMapper.findCourseTargetList(obeCourseOutlineId);
     }
 
     @Transactional
@@ -156,40 +78,20 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
             throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
         }
 
+        // 指标点
+        Long obeCultureProgramRequirementId = obeCourseTargetParam.getObeCultureProgramRequirementId();
+        List<Long> dimensionIdList = obeCourseTargetParam.getDimensionIdList();
         String targetName = obeCourseTargetParam.getTargetName();
         String degreeRequirement = obeCourseTargetParam.getDegreeRequirement();
-        List<Long> dimensionIdList = obeCourseTargetParam.getDimensionIdList();
 
         // 知识点检查
-        Map<Long, ObeCourseDimension> courseDimensionMap = obeCourseDimensionService.list(new QueryWrapper<ObeCourseDimension>().lambda()
-                        .eq(ObeCourseDimension::getObeCourseOutlineId, obeCourseOutlineId)).stream()
-                .collect(Collectors.toMap(BaseEntity::getId, v -> v));
+        List<Long> occupiedDimensionIdList = obeCourseRequirementDimensionService.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
+                        .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
+                        .ne(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId)).stream()
+                .map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct().collect(Collectors.toList());
 
-        QueryWrapper<ObeCourseTarget> courseTargetQueryWrapper = new QueryWrapper<>();
-        if (Objects.isNull(id)) {
-            courseTargetQueryWrapper.lambda().eq(ObeCourseTarget::getObeCourseOutlineId, obeCourseOutlineId);
-        } else {
-            courseTargetQueryWrapper.lambda().ne(ObeCourseTarget::getId, id);
-        }
-        List<ObeCourseTarget> obeCourseTargetResultList = this.list(courseTargetQueryWrapper);
-
-        // 占用的知识点id
-        List<Long> occupiedIdList = obeCourseTargetResultList.stream().flatMap(e -> {
-            List<Long> idList = new ArrayList<>();
-            String content = e.getTargetContent();
-            if (SystemConstant.strNotNull(content)) {
-                idList = JSON.parseArray(content, Long.class);
-            }
-            return idList.stream();
-        }).collect(Collectors.toList());
-        for (Long dimensionId : dimensionIdList) {
-            if (!courseDimensionMap.containsKey(dimensionId)) {
-                throw ExceptionResultEnum.ERROR.exception("知识点不存在");
-            }
-            if (occupiedIdList.contains(dimensionId)) {
-                throw ExceptionResultEnum.ERROR.exception(String.format("知识点[%s]已经被别的课程目标占用",
-                        courseDimensionMap.get(dimensionId).getName() + "(" + courseDimensionMap.get(dimensionId).getCode() + ")"));
-            }
+        if (dimensionIdList.stream().anyMatch(occupiedDimensionIdList::contains)) {
+            throw ExceptionResultEnum.ERROR.exception("知识点已被其他指标点占用");
         }
 
         ObeCourseTarget checkTargetName = this.getOne(new QueryWrapper<ObeCourseTarget>().lambda()
@@ -199,35 +101,40 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
         }
         ObeCourseTarget obeCourseTarget = new ObeCourseTarget();
         obeCourseTarget.setObeCourseOutlineId(obeCourseOutlineId);
+        obeCourseTarget.setObeCultureProgramRequirementId(obeCultureProgramRequirementId);
         obeCourseTarget.setSchoolId(requestUser.getSchoolId());
         obeCourseTarget.setTargetName(targetName);
         obeCourseTarget.setDegreeRequirement(degreeRequirement);
-        obeCourseTarget.setTargetContent(JSON.toJSONString(dimensionIdList));
 
         if (SystemConstant.longNotNull(id)) {
             // 编辑 (更新教学课程权重标识)
-            UpdateWrapper<ObeCourseOutline> teachCourseUpdateWrapper = new UpdateWrapper<>();
-            teachCourseUpdateWrapper.lambda().eq(ObeCourseOutline::getId, obeCourseOutlineId);
+            UpdateWrapper<ObeCourseOutline> obeCourseOutlineUpdateWrapper = new UpdateWrapper<>();
+            obeCourseOutlineUpdateWrapper.lambda().eq(ObeCourseOutline::getId, obeCourseOutlineId);
 
             ObeCourseTarget db = this.getById(id);
-            String dbContent = db.getTargetContent();
-            if (SystemConstant.strNotNull(dbContent)) {
-                List<Long> dbDimensionList = JSON.parseArray(dbContent, Long.class);
-                if (!dimensionIdList.containsAll(dbDimensionList) || !dbDimensionList.containsAll(dimensionIdList)) {
-                    // 关联知识点变化 重设知识点,权重md5更新
-                    teachCourseUpdateWrapper.lambda().set(ObeCourseOutline::getDimensionSign, SystemConstant.getDbUuid())
-                            .set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
-                    obeCourseOutlineService.update(teachCourseUpdateWrapper);
-                }
+            // 指标点下如果存在知识点,判断新增知识点和原知识点是否完全一致
+            List<Long> dbDimensionIdList = obeCourseRequirementDimensionService.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
+                            .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
+                            .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId)).stream()
+                    .map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct().collect(Collectors.toList());
+
+            if (!dimensionIdList.containsAll(dbDimensionIdList) || !dbDimensionIdList.containsAll(dimensionIdList)) {
+                // 关联知识点变化 重设知识点,权重md5更新
+                obeCourseOutlineUpdateWrapper.lambda()
+                        .set(ObeCourseOutline::getDimensionSign, SystemConstant.getDbUuid()).set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
+                obeCourseOutlineService.update(obeCourseOutlineUpdateWrapper);
             }
-            // 目标描述变了 更新权重设置标识
+
+            // 目标名称描述或绑定指标点变化 更新权重设置标识
             if (!obeCourseTarget.getTargetName().equals(db.getTargetName()) || !Objects.equals(obeCourseTarget.getDegreeRequirement(),
-                    db.getDegreeRequirement())) {
-                teachCourseUpdateWrapper.lambda().set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
-                obeCourseOutlineService.update(teachCourseUpdateWrapper);
+                    db.getDegreeRequirement()) || !Objects.equals(obeCourseTarget.getObeCultureProgramRequirementId(),
+                    db.getObeCultureProgramRequirementId())) {
+                obeCourseOutlineUpdateWrapper.lambda().set(ObeCourseOutline::getWeightSettingSign, SystemConstant.getDbUuid());
+                obeCourseOutlineService.update(obeCourseOutlineUpdateWrapper);
             }
 
             obeCourseTarget.setId(id);
+            obeCourseTarget.setExpectValue(db.getExpectValue());
             obeCourseTarget.updateInfo(requestUserId);
         } else {
             // 新增 (清空权重设置)
@@ -237,6 +144,21 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
             obeCourseTarget.insertInfo(requestUserId);
         }
         this.saveOrUpdate(obeCourseTarget);
+
+        // 更新指标点和知识点绑定关系
+        obeCourseRequirementDimensionService.remove(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
+                .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseOutlineId)
+                .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId));
+        List<ObeCourseRequirementDimension> willSave = dimensionIdList.stream().flatMap(e -> {
+            ObeCourseRequirementDimension obeCourseRequirementDimension = new ObeCourseRequirementDimension();
+            obeCourseRequirementDimension.setObeCourseOutlineId(obeCourseOutlineId);
+            obeCourseRequirementDimension.setObeCultureProgramRequirementId(obeCultureProgramRequirementId);
+            obeCourseRequirementDimension.setObeCourseDimensionId(e);
+            obeCourseRequirementDimension.setSchoolId(requestUser.getSchoolId());
+            obeCourseRequirementDimension.insertInfo(requestUserId);
+            return Stream.of(obeCourseRequirementDimension);
+        }).collect(Collectors.toList());
+        obeCourseRequirementDimensionService.saveBatch(willSave);
     }
 
     @Transactional
@@ -351,26 +273,14 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
         return result;
     }
 
-    /**
-     * 构建知识点占用情况对象
-     *
-     * @param targetDimensionMap 目标知识点map
-     * @param courseDimensionId  课程知识点id
-     * @return 占用情况
-     */
-    private CourseDimensionOccupiedDto buildCourseDimensionOccupiedDto(Map<Long, List<Long>> targetDimensionMap,
-            Long courseDimensionId) {
-        CourseDimensionOccupiedDto dto = new CourseDimensionOccupiedDto();
-        for (Long targetId : targetDimensionMap.keySet()) {
-            List<Long> dimensionList = targetDimensionMap.get(targetId);
-            if (dimensionList.contains(courseDimensionId)) {
-                dto.setCourseTargetId(targetId);
-                dto.setStatus(true);
-                return dto;
-            }
-        }
-        dto.setStatus(false);
-        return dto;
+    @Override
+    public void settingExpectValue(ObeCourseTargetExpectValueParam obeCourseTargetExpectValueParam, SysUser requestUser) {
+        Long obeCourseOutlineId = obeCourseTargetExpectValueParam.getObeCourseOutlineId();
+        Double expectValue = obeCourseTargetExpectValueParam.getExpectValue();
+        UpdateWrapper<ObeCourseTarget> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(ObeCourseTarget::getObeCourseOutlineId, obeCourseOutlineId).set(ObeCourseTarget::getExpectValue, expectValue)
+                .set(ObeCourseTarget::getUpdateId, requestUser.getId()).set(ObeCourseTarget::getUpdateTime, System.currentTimeMillis());
+        this.update(updateWrapper);
     }
 
     /**
@@ -386,9 +296,14 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
         for (ObeCourseTarget obeCourseTarget : obeCourseTargetDatasource) {
             Long courseTargetId = obeCourseTarget.getId();
             String targetName = obeCourseTarget.getTargetName();
+            // 指标点id
+            Long obeCultureProgramRequirementId = obeCourseTarget.getObeCultureProgramRequirementId();
+
+            List<Long> dimensionIdList = obeCourseRequirementDimensionService.list(new QueryWrapper<ObeCourseRequirementDimension>().lambda()
+                            .eq(ObeCourseRequirementDimension::getObeCourseOutlineId, obeCourseTarget.getObeCourseOutlineId())
+                            .eq(ObeCourseRequirementDimension::getObeCultureProgramRequirementId, obeCultureProgramRequirementId)).stream()
+                    .map(ObeCourseRequirementDimension::getObeCourseDimensionId).distinct().collect(Collectors.toList());
 
-            String content = obeCourseTarget.getTargetContent();
-            List<Long> dimensionIdList = JSON.parseArray(content, Long.class);
             List<DimensionDto> dimensionList = dimensionDtoList.stream().filter(e -> dimensionIdList.contains(e.getDimensionId())).collect(Collectors.toList());
 
             if (CollectionUtils.isNotEmpty(dimensionList)) {

+ 12 - 100
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseWeightServiceImpl.java

@@ -6,10 +6,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.CourseDimensionDto;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
-import com.qmth.distributed.print.business.bean.dto.CourseWeightFormDto;
 import com.qmth.distributed.print.business.bean.params.ObeCourseWeightParam;
-import com.qmth.distributed.print.business.bean.result.CourseTargetResult;
 import com.qmth.distributed.print.business.bean.result.ObeCourseEvaluationResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
 import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.entity.ObeCourseEvaluation;
 import com.qmth.distributed.print.business.entity.ObeCourseOutline;
@@ -18,10 +17,7 @@ import com.qmth.distributed.print.business.entity.ObeCourseWeight;
 import com.qmth.distributed.print.business.enums.CourseEvaluationTypeEnum;
 import com.qmth.distributed.print.business.enums.CourseSettingTypeEnum;
 import com.qmth.distributed.print.business.mapper.ObeCourseWeightMapper;
-import com.qmth.distributed.print.business.service.ObeCourseEvaluationService;
-import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
-import com.qmth.distributed.print.business.service.ObeCourseTargetService;
-import com.qmth.distributed.print.business.service.ObeCourseWeightService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -56,6 +52,9 @@ public class ObeCourseWeightServiceImpl extends ServiceImpl<ObeCourseWeightMappe
     @Resource
     private ObeCourseEvaluationService obeCourseEvaluationService;
 
+    @Resource
+    private ObeCourseRequirementDimensionService obeCourseRequirementDimensionService;
+
     @Override
     public ObeCourseWeightResult findCourseWeight(Long obeCourseOutlineId) {
         ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
@@ -64,7 +63,7 @@ public class ObeCourseWeightServiceImpl extends ServiceImpl<ObeCourseWeightMappe
         }
 
         // 现有目标
-        List<CourseTargetResult> courseTargetList = obeCourseTargetService.findCourseTargetList(obeCourseOutlineId);
+        List<ObeCourseTargetResult> courseTargetList = obeCourseTargetService.findCourseTargetList(obeCourseOutlineId);
         // 现有评价方式
         List<ObeCourseEvaluationResult> obeCourseEvaluationResultList = obeCourseEvaluationService.findCourseEvaluationList(
                 obeCourseOutlineId).stream().sorted((o1, o2) -> {
@@ -82,10 +81,13 @@ public class ObeCourseWeightServiceImpl extends ServiceImpl<ObeCourseWeightMappe
 
         List<CourseWeightDto> submitForm = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(courseTargetList)) {
-            for (CourseTargetResult courseTarget : courseTargetList) {
+            for (ObeCourseTargetResult courseTarget : courseTargetList) {
                 Long targetId = courseTarget.getId();
                 String targetName = courseTarget.getTargetName();
-                List<CourseDimensionDto> dimensionList = courseTarget.getDimensionList();
+                Long obeCultureProgramRequirementId = courseTarget.getObeCultureProgramRequirementId();
+
+                List<CourseDimensionDto> dimensionList = obeCourseRequirementDimensionService.findByOutlineIdAndRequirementId(
+                        obeCourseOutlineId, obeCultureProgramRequirementId);
                 String degreeRequirement = courseTarget.getDegreeRequirement();
                 BigDecimal totalWeight = courseTarget.getTotalWeight();
                 BigDecimal totalScore = new BigDecimal(0);
@@ -143,91 +145,10 @@ public class ObeCourseWeightServiceImpl extends ServiceImpl<ObeCourseWeightMappe
         return result;
     }
 
-    @Override
-    public ObeCourseWeightResult findCourseWeightReport(Long obeCourseOutlineId) {
-        ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
-        if (Objects.isNull(courseOutline)) {
-            throw ExceptionResultEnum.ERROR.exception("课程大纲不存在");
-        }
-
-        // 现有目标
-        List<CourseTargetResult> courseTargetList = obeCourseTargetService.findCourseTargetList(obeCourseOutlineId);
-        // 现有评价方式
-        List<ObeCourseEvaluationResult> obeCourseEvaluationResultList = obeCourseEvaluationService.findCourseEvaluationList(
-                obeCourseOutlineId).stream().sorted((o1, o2) -> {
-            if (o1.getType().getIndex() == o2.getType().getIndex()) {
-                return o1.getEvaluationId() < o2.getEvaluationId() ? -1 : 0;
-            } else {
-                return o2.getType().getIndex() - o1.getType().getIndex();
-            }
-        }).collect(Collectors.toList());
-        // 现有权重
-        List<ObeCourseWeight> obeCourseWeightList = this.list(new QueryWrapper<ObeCourseWeight>().lambda().eq(ObeCourseWeight::getObeCourseOutlineId, obeCourseOutlineId));
-        // 权重map
-        Map<String, ObeCourseWeight> courseWeightMap = obeCourseWeightList.stream()
-                .collect(Collectors.toMap(k -> k.getTargetId() + SystemConstant.HYPHEN + k.getEvaluationId(), v -> v));
-
-        List<CourseWeightDto> submitForm = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(courseTargetList)) {
-            for (CourseTargetResult courseTarget : courseTargetList) {
-                Long targetId = courseTarget.getId();
-                String targetName = courseTarget.getTargetName();
-                List<CourseDimensionDto> dimensionList = courseTarget.getDimensionList();
-                String degreeRequirement = courseTarget.getDegreeRequirement();
-                BigDecimal totalWeight = courseTarget.getTotalWeight();
-                BigDecimal totalScore = new BigDecimal(0);
-
-                List<CourseWeightDetailDto> courseWeightDetailDtoList = new ArrayList<>();
-                for (ObeCourseEvaluationResult obeCourseEvaluationResult : obeCourseEvaluationResultList) {
-                    Long evaluationId = obeCourseEvaluationResult.getEvaluationId();
-                    String evaluationName = obeCourseEvaluationResult.getEvaluation();
-                    String key = targetId + SystemConstant.HYPHEN + evaluationId;
-                    Boolean enable;
-                    BigDecimal weight;
-                    BigDecimal targetScore;
-                    if (courseWeightMap.containsKey(key)) {
-                        // 权重表中包含该目标评价的设置 - 获取权重表的数据
-                        ObeCourseWeight obeCourseWeight = courseWeightMap.get(key);
-                        enable = obeCourseWeight.getEnable();
-                        if (enable) {
-                            weight = obeCourseWeight.getWeight();
-                            targetScore = obeCourseWeight.getTargetScore();
-                            CourseWeightDetailDto detail = new CourseWeightDetailDto();
-                            detail.setEvaluationId(evaluationId);
-                            detail.setEvaluationName(evaluationName);
-                            detail.setEvaluationDesc(obeCourseEvaluationResult.getEvaluationDesc());
-                            detail.setEnable(true);
-                            detail.setWeight(weight);
-                            detail.setTargetScore(targetScore);
-                            detail.setEvaluationType(obeCourseEvaluationResult.getType());
-                            totalScore = totalScore.add(targetScore);
-                            courseWeightDetailDtoList.add(detail);
-                        }
-                    }
-                }
-                CourseWeightDto courseWeightDto = new CourseWeightDto();
-                courseWeightDto.setCourseTargetId(targetId);
-                courseWeightDto.setCourseTargetName(targetName);
-                courseWeightDto.setDimensionList(dimensionList);
-                courseWeightDto.analyzeDimensionStr();
-                courseWeightDto.setDegreeRequirement(degreeRequirement);
-                courseWeightDto.setTotalWeight(totalWeight);
-                courseWeightDto.setTotalScore(totalScore);
-                courseWeightDto.setEvaluationList(courseWeightDetailDtoList);
-                courseWeightDto.analyzeDimensionStr();
-                submitForm.add(courseWeightDto);
-            }
-        }
-        ObeCourseWeightResult result = new ObeCourseWeightResult();
-        result.setWeightSettingSign(courseOutline.getWeightSettingSign());
-        result.setDimensionSign(courseOutline.getDimensionSign());
-        result.setSubmitForm(submitForm);
-        return result;
-    }
-
     @Transactional
     @Override
     public void saveCourseWeight(ObeCourseWeightParam obeCourseWeightParam, SysUser requestUser) {
+        // TODO: 2024/6/8 保存逻辑变更
         List<String> errorMsgList = new ArrayList<>();
         Long requestUserId = requestUser.getId();
         Long obeCourseOutlineId = obeCourseWeightParam.getObeCourseOutlineId();
@@ -350,13 +271,4 @@ public class ObeCourseWeightServiceImpl extends ServiceImpl<ObeCourseWeightMappe
                 .set(ObeCourseOutline::getWeightSettingSign, null);
         obeCourseOutlineService.update(teachCourseUpdateWrapper);
     }
-
-    @Override
-    public List<CourseWeightFormDto> findCourseWeightForm(Long obeCourseOutlineId) {
-        ObeCourseOutline courseOutline = obeCourseOutlineService.getById(obeCourseOutlineId);
-        if (Objects.isNull(courseOutline)) {
-            throw ExceptionResultEnum.ERROR.exception("教学课程不存在");
-        }
-        return this.baseMapper.findCourseWeightForm(obeCourseOutlineId);
-    }
 }

+ 9 - 0
distributed-print-business/src/main/resources/db/log/caozixuan.sql

@@ -70,4 +70,13 @@ CREATE TABLE obe_course_requirement_dimension (
 UNIQUE INDEX obe_course_requirement_dimension_unique (obe_course_outline_id ASC, obe_culture_program_requirement_id ASC, obe_course_dimension_id ASC) VISIBLE)
 COMMENT = '课程大纲指标与知识点关联表';
 
+ALTER TABLE obe_course_target
+    DROP COLUMN target_content,
+    ADD COLUMN obe_culture_program_requirement_id BIGINT NOT NULL COMMENT '培养方案毕业要求指标点id' AFTER obe_course_outline_id,
+    ADD COLUMN expect_value DOUBLE NULL COMMENT '预期值' AFTER total_weight;
+
+
+-- 2024-06-08
+ALTER TABLE obe_course_target
+    CHANGE COLUMN obe_culture_program_requirement_id obe_culture_program_requirement_id BIGINT NULL COMMENT '培养方案毕业要求指标点id' ;
 

+ 7 - 1
distributed-print-business/src/main/resources/mapper/ObeCourseOutlineMapper.xml

@@ -14,7 +14,11 @@
             bs.id AS semesterId,
             bs.name AS semesterName,
             ocp.id AS cultureProgramId,
-            ocp.name AS cultureProgramName
+            ocp.name AS cultureProgramName,
+            su.id AS userId,
+            su.real_name AS userName,
+            bp.id AS professionalId,
+            bp.name AS professionalName
         FROM
             obe_course_outline oco
                 LEFT JOIN
@@ -25,6 +29,8 @@
             sys_user su ON oco.user_id = su.id
                 LEFT JOIN
             obe_culture_program ocp ON ocp.id = oco.culture_program_id
+                LEFT JOIN
+            basic_professional bp ON ocp.professional_id = bp.id
         <where>
             <if test="professionalId != null">
                 AND ocp.professional_id = #{professionalId}

+ 21 - 0
distributed-print-business/src/main/resources/mapper/ObeCourseTargetMapper.xml

@@ -2,4 +2,25 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.distributed.print.business.mapper.ObeCourseTargetMapper">
 
+    <select id="findCourseTargetList"
+            resultType="com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult">
+        SELECT
+            oct.id AS id,
+            oct.target_name AS targetName,
+            oct.expect_value AS expectValue,
+            oct.degree_requirement AS degreeRequirement,
+            oct.total_weight AS totalWeight,
+            ocpr.id AS obeCultureProgramRequirementId,
+            ocpr.name AS obeCultureProgramRequirementName,
+            ocpr.content AS obeCultureProgramRequirementContent
+        FROM
+            obe_course_target oct
+                LEFT JOIN
+            obe_culture_program_requirement ocpr ON oct.obe_culture_program_requirement_id = ocpr.id
+        <where>
+            <if test="obeCourseOutlineId != null">
+                oct.obe_course_outline_id = #{obeCourseOutlineId}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 18 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/ObeCourseTargetController.java

@@ -1,9 +1,10 @@
 package com.qmth.distributed.print.api;
 
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.ObeCourseTargetExpectValueParam;
 import com.qmth.distributed.print.business.bean.params.ObeCourseTargetParam;
 import com.qmth.distributed.print.business.bean.result.CourseDimensionTree;
-import com.qmth.distributed.print.business.bean.result.CourseTargetResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
 import com.qmth.distributed.print.business.service.ObeCourseDimensionService;
 import com.qmth.distributed.print.business.service.ObeCourseTargetService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
@@ -46,7 +47,7 @@ public class ObeCourseTargetController {
 
     @ApiOperation(value = "课程目标管理-列表查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = CourseTargetResult.class) })
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = ObeCourseTargetResult.class) })
     public Result findCourseTargetList(@ApiParam(value = "课程大纲id") @RequestParam(required = false) String obeCourseOutlineId) {
         return ResultUtil.ok(obeCourseTargetService.findCourseTargetList(SystemConstant.convertIdToLong(obeCourseOutlineId)));
     }
@@ -80,7 +81,7 @@ public class ObeCourseTargetController {
             log.error(e.getMessage());
         }
 
-        return ResultUtil.ok(obeCourseTargetService.findDimensionTree(SystemConstant.convertIdToLong(obeCourseOutlineId)));
+        return ResultUtil.ok(obeCourseDimensionService.findDimensionTree(SystemConstant.convertIdToLong(obeCourseOutlineId)));
     }
 
     @ApiOperation(value = "课程目标管理-新增/编辑")
@@ -104,4 +105,18 @@ public class ObeCourseTargetController {
         obeCourseTargetService.deleteCourseTarget(SystemConstant.convertIdToLong(id));
         return ResultUtil.ok();
     }
+
+    @ApiOperation(value = "课程目标管理-预期值设置")
+    @RequestMapping(value = "/setting_expect_value", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "更新成功", response = Result.class) })
+    @OperationLogDetail(operationType = OperationTypeEnum.SAVE)
+    public Result settingExpertValue(@Valid @RequestBody ObeCourseTargetExpectValueParam obeCourseTargetExpectValueParam,
+            BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        obeCourseTargetService.settingExpectValue(obeCourseTargetExpectValueParam, sysUser);
+        return ResultUtil.ok();
+    }
 }