Эх сурвалжийг харах

add:目标达成度 成绩查询借口更改

caozixuan 1 жил өмнө
parent
commit
aa77911aa9
28 өөрчлөгдсөн 688 нэмэгдсэн , 660 устгасан
  1. 20 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/report/PaperStructParams.java
  2. 127 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ObeScoreResult.java
  3. 8 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TCFinalScore.java
  4. 8 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TCPaperStruct.java
  5. 20 17
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TCUsualScore.java
  6. 12 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRBasicInfo.java
  7. 8 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TCUsualScoreMapper.java
  8. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseOutlineService.java
  9. 9 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  10. 18 26
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCFinalScoreService.java
  11. 18 34
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCPaperStructService.java
  12. 12 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCUsualScoreService.java
  13. 31 34
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRBasicInfoService.java
  14. 5 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRExamStudentService.java
  15. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseOutlineServiceImpl.java
  16. 13 46
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  17. 19 73
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java
  18. 41 78
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCPaperStructServiceImpl.java
  19. 31 43
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCUsualScoreServiceImpl.java
  20. 13 40
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java
  21. 2 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java
  22. 36 0
      distributed-print-business/src/main/resources/db/log/caozixuan.sql
  23. 3 2
      distributed-print-business/src/main/resources/mapper/ConditionMapper.xml
  24. 34 31
      distributed-print-business/src/main/resources/mapper/TCUsualScoreMapper.xml
  25. 21 22
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java
  26. 30 21
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java
  27. 47 51
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCUsualScoreController.java
  28. 82 63
      distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

+ 20 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/report/PaperStructParams.java

@@ -1,6 +1,5 @@
 package com.qmth.distributed.print.business.bean.params.report;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
@@ -25,6 +24,11 @@ public class PaperStructParams implements Serializable {
     @NotNull(message = "考试id不能为空")
     private Long examId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "课程id")
+    @NotNull(message = "课程id不能为空")
+    private Long courseId;
+
     @ApiModelProperty(value = "课程编码")
     @NotNull(message = "课程编码不能为空")
     private String courseCode;
@@ -37,16 +41,24 @@ public class PaperStructParams implements Serializable {
     private List<PaperStructDimensionResult> paperStruct;
 
     @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "教学课程id")
-    @NotNull(message = "教学课程id不能为空")
-    private Long teachCourseId;
+    @ApiModelProperty(value = "培养方案id")
+    @NotNull(message = "培养方案id不能为空")
+    private Long cultureProgramId;
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
 
-    public Long getTeachCourseId() {
-        return teachCourseId;
+    public Long getCultureProgramId() {
+        return cultureProgramId;
     }
 
-    public void setTeachCourseId(Long teachCourseId) {
-        this.teachCourseId = teachCourseId;
+    public void setCultureProgramId(Long cultureProgramId) {
+        this.cultureProgramId = cultureProgramId;
     }
 
     public Long getExamId() {

+ 127 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/ObeScoreResult.java

@@ -0,0 +1,127 @@
+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;
+
+/**
+ * @Description: obe成绩管理结果
+ * @Author: CaoZixuan
+ * @Date: 2024-06-13
+ */
+public class ObeScoreResult {
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "课程大纲id")
+    private Long obeCourseOutlineId;
+
+    @ApiModelProperty(value = "课程大纲名称")
+    private String obeCourseOutlineName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "培养方案id")
+    private Long obeCultureProgramId;
+
+    @ApiModelProperty(value = "培养方案名称")
+    private String obeCultureProgramName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "责任人id")
+    private Long userId;
+
+    @ApiModelProperty(value = "责任人名称")
+    private String userName;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "学期id")
+    private Long semesterId;
+
+    @ApiModelProperty(value = "学期名称")
+    private String semesterName;
+
+    public Long getObeCourseOutlineId() {
+        return obeCourseOutlineId;
+    }
+
+    public void setObeCourseOutlineId(Long obeCourseOutlineId) {
+        this.obeCourseOutlineId = obeCourseOutlineId;
+    }
+
+    public String getObeCourseOutlineName() {
+        return obeCourseOutlineName;
+    }
+
+    public void setObeCourseOutlineName(String obeCourseOutlineName) {
+        this.obeCourseOutlineName = obeCourseOutlineName;
+    }
+
+    public Long getObeCultureProgramId() {
+        return obeCultureProgramId;
+    }
+
+    public void setObeCultureProgramId(Long obeCultureProgramId) {
+        this.obeCultureProgramId = obeCultureProgramId;
+    }
+
+    public String getObeCultureProgramName() {
+        return obeCultureProgramName;
+    }
+
+    public void setObeCultureProgramName(String obeCultureProgramName) {
+        this.obeCultureProgramName = obeCultureProgramName;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getSemesterId() {
+        return semesterId;
+    }
+
+    public void setSemesterId(Long semesterId) {
+        this.semesterId = semesterId;
+    }
+
+    public String getSemesterName() {
+        return semesterName;
+    }
+
+    public void setSemesterName(String semesterName) {
+        this.semesterName = semesterName;
+    }
+}

+ 8 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TCFinalScore.java

@@ -34,6 +34,10 @@ public class TCFinalScore extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long cultureProgramId;
 
+    @ApiModelProperty(value = "课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long courseId;
+
     @ApiModelProperty(value = "课程编码")
     private String courseCode;
 
@@ -64,10 +68,6 @@ public class TCFinalScore extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "来源,EXCEL_IMPORT:excel导入,SYNC:数据同步")
     private SourceEnum source;
 
-    @ApiModelProperty(value = "教学课程id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long teachCourseId;
-
     public TCFinalScore() {
 
     }
@@ -113,12 +113,12 @@ public class TCFinalScore extends BaseEntity implements Serializable {
         this.cultureProgramId = cultureProgramId;
     }
 
-    public Long getTeachCourseId() {
-        return teachCourseId;
+    public Long getCourseId() {
+        return courseId;
     }
 
-    public void setTeachCourseId(Long teachCourseId) {
-        this.teachCourseId = teachCourseId;
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
     }
 
     public SourceEnum getSource() {

+ 8 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TCPaperStruct.java

@@ -32,6 +32,10 @@ public class TCPaperStruct extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long cultureProgramId;
 
+    @ApiModelProperty(value = "课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long courseId;
+
     @ApiModelProperty(value = "课程编码")
     private String courseCode;
 
@@ -41,10 +45,6 @@ public class TCPaperStruct extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "试卷编码")
     private String paperNumber;
 
-    @ApiModelProperty(value = "教学课程id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long teachCourseId;
-
     @ApiModelProperty(value = "试卷结构")
     @TableField(value = "paper_struct", updateStrategy = FieldStrategy.IGNORED)
     private String paperStruct;
@@ -119,12 +119,12 @@ public class TCPaperStruct extends BaseEntity implements Serializable {
         this.cultureProgramId = cultureProgramId;
     }
 
-    public Long getTeachCourseId() {
-        return teachCourseId;
+    public Long getCourseId() {
+        return courseId;
     }
 
-    public void setTeachCourseId(Long teachCourseId) {
-        this.teachCourseId = teachCourseId;
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
     }
 
     public Double getTotalScore() {

+ 20 - 17
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TCUsualScore.java

@@ -31,6 +31,10 @@ public class TCUsualScore extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long cultureProgramId;
 
+    @ApiModelProperty(value = "课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long courseId;
+
     @ApiModelProperty(value = "课程编码")
     private String courseCode;
 
@@ -40,10 +44,6 @@ public class TCUsualScore extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "试卷编码")
     private String paperNumber;
 
-    @ApiModelProperty(value = "教学课程id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long teachCourseId;
-
     @ApiModelProperty(value = "考生姓名")
     @NotNull(message = "考生姓名不能为空")
     private String name;
@@ -62,13 +62,13 @@ public class TCUsualScore extends BaseEntity implements Serializable {
 
     }
 
-    public TCUsualScore(Long examId, String courseCode, String courseName, String paperNumber, Long obeCourseOutlineId, Long userId) {
+    public TCUsualScore(Long cultureProgramId, Long courseId, String courseCode, String courseName, String paperNumber, Long userId) {
         insertInfo(userId);
-        this.examId = examId;
+        this.cultureProgramId = cultureProgramId;
+        this.courseId = courseId;
         this.courseCode = courseCode;
         this.courseName = courseName;
         this.paperNumber = paperNumber;
-        this.teachCourseId = obeCourseOutlineId;
         this.enable = true;
     }
 
@@ -86,14 +86,6 @@ public class TCUsualScore extends BaseEntity implements Serializable {
         this.cultureProgramId = cultureProgramId;
     }
 
-    public Long getTeachCourseId() {
-        return teachCourseId;
-    }
-
-    public void setTeachCourseId(Long teachCourseId) {
-        this.teachCourseId = teachCourseId;
-    }
-
     public Long getExamId() {
         return examId;
     }
@@ -102,6 +94,14 @@ public class TCUsualScore extends BaseEntity implements Serializable {
         this.examId = examId;
     }
 
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
     public String getCourseCode() {
         return courseCode;
     }
@@ -167,11 +167,14 @@ public class TCUsualScore extends BaseEntity implements Serializable {
             return false;
         }
         TCUsualScore that = (TCUsualScore) o;
-        return examId.equals(that.examId) && courseCode.equals(that.courseCode) && Objects.equals(courseName, that.courseName) && teachCourseId.equals(that.teachCourseId) && name.equals(that.name) && studentCode.equals(that.studentCode) && score.equals(that.score) && enable.equals(that.enable) && Objects.equals(getCreateId(), that.getCreateId());
+        return cultureProgramId.equals(that.cultureProgramId) && courseCode.equals(that.courseCode) && Objects.equals(
+                courseName, that.courseName) && courseId.equals(that.courseId) && name.equals(that.name) && studentCode.equals(that.studentCode) && score.equals(that.score) && enable.equals(that.enable)
+                && Objects.equals(getCreateId(), that.getCreateId());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(examId, courseCode, courseName, teachCourseId, name, studentCode, score, enable, getCreateId());
+        return Objects.hash(cultureProgramId, courseCode, courseName, courseId, name, studentCode, score, enable,
+                getCreateId());
     }
 }

+ 12 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRBasicInfo.java

@@ -26,13 +26,16 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "考试id")
     @JsonSerialize(using = ToStringSerializer.class)
-    @NotNull(message = "考试id不能为空")
     private Long examId;
 
     @ApiModelProperty(value = "培养方案id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long cultureProgramId;
 
+    @ApiModelProperty(value = "课程id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long courseId;
+
     @ApiModelProperty(value = "课程编码")
     @NotNull(message = "课程编码不能为空")
     private String courseCode;
@@ -174,6 +177,14 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
         this.cultureProgramId = cultureProgramId;
     }
 
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
     public Long getTeachCourseId() {
         return teachCourseId;
     }

+ 8 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TCUsualScoreMapper.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.distributed.print.business.bean.result.ObeScoreResult;
 import com.qmth.distributed.print.business.bean.result.ScoreResult;
 import com.qmth.distributed.print.business.entity.TCUsualScore;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
@@ -23,22 +24,21 @@ public interface TCUsualScoreMapper extends BaseMapper<TCUsualScore> {
      * 成绩管理列表
      *
      * @param iPage
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param dpr
      * @return
      */
-    public IPage<ScoreResult> scoreList(IPage<Map> iPage, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
+    public IPage<ObeScoreResult> scoreList(IPage<Map> iPage, @Param("cultureProgramId") Long cultureProgramId, @Param("semesterId") Long semesterId, @Param("courseId") Long courseId,
+            @Param("dpr") DataPermissionRule dpr);
 
     /**
      * 平时成绩列表(分页)
-     *
      * @param iPage
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param teachCourseId
      * @return
      */
-    public IPage<TCUsualScore> usualScoreList(IPage<Map> iPage, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("teachCourseId") Long teachCourseId);
+    public IPage<TCUsualScore> usualScoreList(IPage<Map> iPage, @Param("cultureProgramId") Long cultureProgramId, @Param("courseId") Long courseId, @Param("paperNumber") String paperNumber);
 }

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

@@ -103,4 +103,13 @@ public interface ObeCourseOutlineService extends IService<ObeCourseOutline> {
      * @return
      */
     List<ObeCourseOutline> findByCultureProgramId(Long cultureProgramId);
+
+    /**
+     * 根据培养方案id和课程id查询课程大纲
+     *
+     * @param cultureProgramId 培养方案id
+     * @param courseId         课程id
+     * @return 课程大纲
+     */
+    ObeCourseOutline findByCultureProgramIdAndCourseId(Long cultureProgramId, Long courseId);
 }

+ 9 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java

@@ -7,6 +7,7 @@ import com.qmth.distributed.print.business.bean.dto.PdfPackageDto;
 import com.qmth.distributed.print.business.bean.dto.PdfSignDto;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.params.ExamTaskStudentObjectParam;
+import com.qmth.distributed.print.business.bean.result.ObeScoreResult;
 import com.qmth.distributed.print.business.bean.result.ScoreResult;
 import com.qmth.distributed.print.business.entity.BasicTemplate;
 import com.qmth.distributed.print.business.entity.ExamDetail;
@@ -284,7 +285,7 @@ public interface PrintCommonService {
      * @param paperNumber
      * @return
      */
-    public MarkPaper scoreImportExcelVaild(MultipartFile file, Long examId, String courseCode, String paperNumber) throws IOException;
+    public MarkPaper scoreImportExcelVaild(MultipartFile file, Long cultureProgramId, String courseCode, String paperNumber) throws IOException;
 
     /**
      * 获取阅卷数据
@@ -311,19 +312,19 @@ public interface PrintCommonService {
      * 成绩管理列表
      *
      * @param iPage
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId 培养方案id
+     * @param semesterId 学期id
+     * @param courseId 课程id
      * @return
      */
-    public IPage<ScoreResult> scoreList(IPage<Map> iPage, Long examId, String courseCode);
+    public IPage<ObeScoreResult> scoreList(IPage<Map> iPage, Long cultureProgramId,Long semesterId, Long courseId);
 
     /**
      * 获取成绩管理需要的锁
      *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param teachCourseId
      */
-    public void getLock(Long examId, String courseCode, String paperNumber, Long teachCourseId);
+    public void getLock(Long cultureProgramId, Long courseId, String paperNumber);
 }

+ 18 - 26
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCFinalScoreService.java

@@ -23,16 +23,15 @@ public interface TCFinalScoreService extends IService<TCFinalScore> {
 
     /**
      * 导入期末成绩excel
-     *
      * @param file
      * @param examId
-     * @param courseCode
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
+     * @param cultureProgramId
      * @return
      * @throws IOException
      */
-    public Map<String, String> finalScoreExcelImport(MultipartFile file, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException;
+    public Map<String, String> finalScoreExcelImport(MultipartFile file, Long examId,Long courseId, String paperNumber, Long cultureProgramId) throws IOException;
 
     /**
      * 期末成绩列表(分页)
@@ -83,55 +82,48 @@ public interface TCFinalScoreService extends IService<TCFinalScore> {
 
     /**
      * 同步期末成绩
-     *
      * @param examId
-     * @param courseCode
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
+     * @param cultureProgramId
      * @return
      * @throws IOException
      */
-    public Map<String, String> finalScoreSync(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException;
+    public Map<String, String> finalScoreSync(Long examId, Long courseId, String paperNumber, Long cultureProgramId) throws IOException;
 
     /**
      * 根据考试id/课程编码/试卷编码删除数据
-     *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      */
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public Boolean remove(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      */
-    public List<TCFinalScore> queryFinalScore(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public List<TCFinalScore> queryFinalScore(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 获取期末考试同步锁
      *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      */
-    public void getFinalScoreSyncLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public void getFinalScoreSyncLock(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 获取期末考试导入锁
      *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      */
-    public void getFinalScoreImportLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public void getFinalScoreImportLock(Long cultureProgramId, Long courseId, String paperNumber);
 }

+ 18 - 34
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCPaperStructService.java

@@ -20,67 +20,51 @@ public interface TCPaperStructService extends IService<TCPaperStruct> {
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
      *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      */
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public Boolean remove(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 导入期末成绩-试卷结构excel
-     *
      * @param file
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      * @throws IOException
      */
-    public Map<String, String> paperStructExcelImport(MultipartFile file, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException;
+    public Map<String, String> paperStructExcelImport(MultipartFile file, Long cultureProgramId, Long courseId, String paperNumber) throws IOException;
 
     /**
      * 同步试卷结构
-     *
      * @param examId
-     * @param courseCode
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
+     * @param cultureProgramId
      * @return
      * @throws IOException
      */
-    public Map<String, String> paperStructSync(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException;
+    public Map<String, String> paperStructSync(Long examId, Long courseId, String paperNumber, Long cultureProgramId) throws IOException;
 
-    /**
-     * 根据考试id/科目编辑/试卷编码查询数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
-    public TCPaperStruct queryPaperStruct(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+
+    public TCPaperStruct queryPaperStruct(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
-     * 获取试卷结构同步锁
-     *
-     * @param examId
-     * @param courseCode
+     * 获取试卷结构导入锁
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      */
-    public void getPaperStructSyncLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public void getPaperStructSyncLock(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 获取试卷结构导入锁
-     *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      */
-    public void getPaperStructImportLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public void getPaperStructImportLock(Long cultureProgramId, Long courseId, String paperNumber);
 }

+ 12 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TCUsualScoreService.java

@@ -20,38 +20,30 @@ import java.util.Map;
 public interface TCUsualScoreService extends IService<TCUsualScore> {
 
     /**
-     * 导入平时成绩excel
-     *
-     * @param file
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     * @throws IOException
+     * 平时成绩导入
+     * @param file excel
+     * @param obeCultureProgramId 培养方案id
+     * @param courseId 课程id
+     * @return 结果
      */
-    public Map<String, String> usualScoreExcelImport(MultipartFile file, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException;
+    public Map<String, String> usualScoreExcelImport(MultipartFile file, Long obeCultureProgramId,Long courseId) throws IOException;
 
     /**
      * 平时成绩列表(分页)
-     *
      * @param iPage
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      */
-    public IPage<TCUsualScore> usualScoreList(IPage<Map> iPage, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public IPage<TCUsualScore> usualScoreList(IPage<Map> iPage, Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      */
-    public List<TCUsualScore> queryUsualScore(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public List<TCUsualScore> queryUsualScore(Long cultureProgramId, Long courseId, String paperNumber);
 }

+ 31 - 34
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRBasicInfoService.java

@@ -27,14 +27,12 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
 
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
+     * @param cultureProgramId cultureProgramId
+     * @param courseId courseId
+     * @param paperNumber paperNumber
      * @return
      */
-    public TRBasicInfo queryBasicInfo(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public TRBasicInfo queryBasicInfo(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 获取课程目标考核分布-分数图
@@ -53,7 +51,8 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      * @param obeCourseWeightResult
      * @return
      */
-    public Map<String, Object> getReportCalculateParams(TRBasicInfo trBasicInfo, List<PaperStructDimensionResult> paperStructDimensionResultList, ObeCourseWeightResult obeCourseWeightResult);
+    public Map<String, Object> getReportCalculateParams(TRBasicInfo trBasicInfo, List<PaperStructDimensionResult> paperStructDimensionResultList,
+            ObeCourseWeightResult obeCourseWeightResult);
 
     /**
      * 计算课程考核成绩评价结果
@@ -71,10 +70,10 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      * @param markPaper
      * @param userId
      * @param obeCourseWeightResult
-     * @param obeCourseOutlineId
+     * @param cultureProgramId
      * @return
      */
-    public TRBasicInfo getReportView(TRBasicInfo trBasicInfo, MarkPaper markPaper, Long userId, ObeCourseWeightResult obeCourseWeightResult, Long obeCourseOutlineId);
+    public TRBasicInfo getReportView(TRBasicInfo trBasicInfo, MarkPaper markPaper, Long userId, ObeCourseWeightResult obeCourseWeightResult, Long cultureProgramId);
 
     /**
      * 构建word动态表格1-课程目标与毕业要求指标点的对应关系
@@ -92,21 +91,21 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      */
     public TableRenderData buildWordTable2(List<CourseTargetWordDto> courseTargetWordDtoList);
 
-//    /**
-//     * 构建word动态表格3-课后作业的具体考核内容、目标分值及对应的课程目标
-//     *
-//     * @param courseTargetWordDtoList
-//     * @return
-//     */
-//    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList);
-
-//    /**
-//     * 构建word动态表格4-期末考试的具体考核内容、目标分值及对应的课程目标
-//     *
-//     * @param courseTargetWordDtoList
-//     * @return
-//     */
-//    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList);
+    //    /**
+    //     * 构建word动态表格3-课后作业的具体考核内容、目标分值及对应的课程目标
+    //     *
+    //     * @param courseTargetWordDtoList
+    //     * @return
+    //     */
+    //    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList);
+
+    //    /**
+    //     * 构建word动态表格4-期末考试的具体考核内容、目标分值及对应的课程目标
+    //     *
+    //     * @param courseTargetWordDtoList
+    //     * @return
+    //     */
+    //    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList);
 
     /**
      * 构建word动态表格5-各课程目标考核样本数据详情
@@ -120,13 +119,12 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
     /**
      * 根据考试id/课程编码/试卷编码删除数据
      *
-     * @param examId
-     * @param courseCode
+     * @param cultureProgramId
+     * @param courseId
      * @param paperNumber
-     * @param obeCourseOutlineId
      * @return
      */
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public Boolean remove(Long cultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 查找课程评价值
@@ -147,11 +145,10 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
     /**
      * 清除报告数据
      *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @param clearDimension
+     * @param cultureProgramId cultureProgramId
+     * @param courseId            courseId
+     * @param paperNumber         paperNumber
+     * @param clearDimension      clearDimension
      */
-    public void clearReportData(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId, boolean clearDimension);
+    public void clearReportData(Long cultureProgramId, Long courseId, String paperNumber, boolean clearDimension);
 }

+ 5 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRExamStudentService.java

@@ -43,14 +43,12 @@ public interface TRExamStudentService extends IService<TRExamStudent> {
 
     /**
      * 根据考试id/课程编码/试卷编码删除数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
+     * @param obeCultureProgramId obeCultureProgramId
+     * @param courseId courseId
+     * @param paperNumber paperNumber
+     * @return 结果
      */
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+    public Boolean remove(Long obeCultureProgramId, Long courseId, String paperNumber);
 
     /**
      * 学生毕业要求达成度

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

@@ -230,4 +230,15 @@ public class ObeCourseOutlineServiceImpl extends ServiceImpl<ObeCourseOutlineMap
     public List<ObeCourseOutline> findByCultureProgramId(Long cultureProgramId) {
         return this.list(new QueryWrapper<ObeCourseOutline>().lambda().eq(ObeCourseOutline::getCultureProgramId, cultureProgramId));
     }
+
+    @Override
+    public ObeCourseOutline findByCultureProgramIdAndCourseId(Long cultureProgramId, Long courseId) {
+        ObeCourseOutline obeCourseOutline = this.getOne(new QueryWrapper<ObeCourseOutline>().lambda()
+                .eq(ObeCourseOutline::getCultureProgramId, cultureProgramId).eq(ObeCourseOutline::getCourseId, courseId)
+                .last(SystemConstant.LIMIT1));
+        if (Objects.isNull(obeCourseOutline)) {
+            throw ExceptionResultEnum.ERROR.exception("请先创建课程大纲");
+        }
+        return obeCourseOutline;
+    }
 }

+ 13 - 46
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -14,6 +14,7 @@ import com.qmth.distributed.print.business.bean.dto.PdfPackageDto;
 import com.qmth.distributed.print.business.bean.dto.PdfSignDto;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.params.ExamTaskStudentObjectParam;
+import com.qmth.distributed.print.business.bean.result.ObeScoreResult;
 import com.qmth.distributed.print.business.bean.result.ScoreResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
@@ -385,41 +386,22 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         return jsonObject.toJSONString();
     }
 
-    /**
-     * 成绩管理导入excel校验
-     *
-     * @param file
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @return
-     */
+
     @Override
-    public MarkPaper scoreImportExcelVaild(MultipartFile file, Long examId, String courseCode, String paperNumber) throws IOException {
+    public MarkPaper scoreImportExcelVaild(MultipartFile file, Long cultureProgramId, String courseCode, String paperNumber) throws IOException {
         String reqFileMd5 = ServletUtil.getRequestMd5();
         String fileMd5 = DigestUtils.md5Hex(file.getBytes());
         if (!Objects.equals(fileMd5, reqFileMd5)) {
             throw ExceptionResultEnum.MD5_EQUALS_FALSE.exception();
         }
-        return this.getMarkPaper(examId, courseCode, paperNumber);
+        return this.getMarkPaper(null, courseCode, paperNumber);
     }
 
-    /**
-     * 获取阅卷数据
-     *
-     * @param examId
-     * @param paperNumber
-     * @return
-     */
     @Override
     public MarkPaper getMarkPaper(Long examId, String courseCode, String paperNumber) {
-        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
-        if (Objects.isNull(markPaper)) {
             BasicCourse basicCourse = basicCourseService.getByCode(courseCode);
             Objects.requireNonNull(basicCourse, "未找到基础课程信息");
-            markPaper = new MarkPaper(examId, courseCode, basicCourse.getName(), paperNumber, 100d, 60d);
-        }
-        return markPaper;
+        return new MarkPaper(examId, courseCode, basicCourse.getName(), paperNumber, 100d, 60d);
     }
 
     /**
@@ -521,35 +503,20 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         log.debug("导出Excel结束...");
     }
 
-    /**
-     * 成绩管理列表
-     *
-     * @param iPage
-     * @param examId
-     * @param courseCode
-     * @return
-     */
+
     @Override
-    public IPage<ScoreResult> scoreList(IPage<Map> iPage, Long examId, String courseCode) {
+    public IPage<ObeScoreResult> scoreList(IPage<Map> iPage, Long cultureProgramId,Long semesterId, Long courseId) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
-        return tcUsualScoreMapper.scoreList(iPage, examId, courseCode, dpr);
+        return tcUsualScoreMapper.scoreList(iPage, cultureProgramId, semesterId, courseId, dpr);
     }
 
-    /**
-     * 获取成绩管理需要的锁
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param teachCourseId
-     */
     @Override
-    public void getLock(Long examId, String courseCode, String paperNumber, Long teachCourseId) {
-        tcFinalScoreService.getFinalScoreSyncLock(examId, courseCode, paperNumber, teachCourseId);
-        tcFinalScoreService.getFinalScoreImportLock(examId, courseCode, paperNumber, teachCourseId);
-        tcPaperStructService.getPaperStructSyncLock(examId, courseCode, paperNumber, teachCourseId);
-        tcPaperStructService.getPaperStructImportLock(examId, courseCode, paperNumber, teachCourseId);
+    public void getLock(Long cultureProgramId, Long courseId, String paperNumber) {
+        tcFinalScoreService.getFinalScoreSyncLock(cultureProgramId, courseId, paperNumber);
+        tcFinalScoreService.getFinalScoreImportLock(cultureProgramId, courseId, paperNumber);
+        tcPaperStructService.getPaperStructSyncLock(cultureProgramId, courseId, paperNumber);
+        tcPaperStructService.getPaperStructImportLock(cultureProgramId, courseId, paperNumber);
     }
 
     /**

+ 19 - 73
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java

@@ -79,25 +79,15 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
     @Resource
     BasicCourseService basicCourseService;
 
-    /**
-     * 导入期末成绩excel
-     *
-     * @param file
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     * @throws IOException
-     */
+
     @Override
     @Transactional
-    public Map<String, String> finalScoreExcelImport(MultipartFile file, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException {
+    public Map<String, String> finalScoreExcelImport(MultipartFile file, Long examId,Long courseId,String paperNumber, Long cultureProgramId) {
         log.debug("导入Excel开始...");
         long start = System.currentTimeMillis();
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
-            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
+            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, basicCourseService.getById(courseId).getCode(), paperNumber);
             Double totalScore = 100d;
 
             StringJoiner errorData = new StringJoiner("");
@@ -176,11 +166,11 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
                 }
                 if (!CollectionUtils.isEmpty(tcFinalScoreList)) {
                     successData.add("共导入").add(tcFinalScoreList.size() + "").add("条数据");
-                    List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScore(examId, courseCode, paperNumber, obeCourseOutlineId);
+                    List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScore(cultureProgramId,courseId,paperNumber);
                     if (CollectionUtils.isEmpty(tcFinalScoreDbSourceList) || !CollectionUtils.isEqualCollection(tcFinalScoreDbSourceList, tcFinalScoreList)) {
                         tcFinalScoreService.removeByIds(tcFinalScoreDbSourceList.stream().map(s -> s.getId()).collect(Collectors.toList()));
                         tcFinalScoreService.saveBatch(tcFinalScoreList);
-                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, obeCourseOutlineId, true);
+                        trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, true);
                     }
                 }
             }
@@ -263,19 +253,9 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
         return this.baseMapper.examStudentOverview(examId, courseCode, paperNumber, obeCourseOutlineId);
     }
 
-    /**
-     * 同步期末成绩
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     * @throws IOException
-     */
     @Override
     @Transactional
-    public Map<String, String> finalScoreSync(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException {
+    public Map<String, String> finalScoreSync(Long examId, Long courseId, String paperNumber, Long cultureProgramId) throws IOException {
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
@@ -301,22 +281,22 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
                 }
                 if (!CollectionUtils.isEmpty(tcFinalScoreList) && !CollectionUtils.isEmpty(paperStructDimensionResultList)) {
                     successData.add("共同步").add(tcFinalScoreList.size() + "").add("条数据");
-                    List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScore(examId, courseCode, paperNumber, obeCourseOutlineId);
+                    List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScore(cultureProgramId, courseId, paperNumber);
                     if (CollectionUtils.isEmpty(tcFinalScoreDbSourceList) || !CollectionUtils.isEqualCollection(tcFinalScoreDbSourceList, tcFinalScoreList)) {
                         tcFinalScoreService.removeByIds(tcFinalScoreDbSourceList.stream().map(s -> s.getId()).collect(Collectors.toList()));
                         tcFinalScoreService.saveBatch(tcFinalScoreList);
-                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, obeCourseOutlineId, true);
+                        trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, true);
                     }
-                    TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, null, obeCourseOutlineId);
+                    TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
                     if (Objects.nonNull(tcPaperStruct)) {
                         tcPaperStruct.setPaperNumber(paperNumber);
                         tcPaperStruct.setPaperStruct(JacksonUtil.parseJson(paperStructDimensionResultList));
                         tcPaperStruct.updateInfo(sysUser.getId());
                         tcPaperStructService.updateById(tcPaperStruct);
                     } else {
-                        BasicCourse basicCourse = basicCourseService.getByCode(courseCode);
+                        BasicCourse basicCourse = basicCourseService.getById(courseId);
                         Objects.requireNonNull(basicCourse, "未找到基础课程信息");
-                        tcPaperStruct = new TCPaperStruct(examId, courseCode, basicCourse.getName(), paperNumber, obeCourseOutlineId, JacksonUtil.parseJson(paperStructDimensionResultList), sysUser.getId());
+                        tcPaperStruct = new TCPaperStruct(examId, basicCourse.getCode(), basicCourse.getName(), paperNumber, obeCourseOutlineId, JacksonUtil.parseJson(paperStructDimensionResultList), sysUser.getId());
                     }
                     tcPaperStructService.saveOrUpdate(tcPaperStruct);
                 }
@@ -338,73 +318,39 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
         return messageMap;
     }
 
-    /**
-     * 根据考试id/课程编码/试卷编码删除数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
     @Override
     @Transactional
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public Boolean remove(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TCFinalScore> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TCFinalScore::getExamId, examId).eq(TCFinalScore::getCourseCode, courseCode);
+        queryWrapper.lambda().eq(TCFinalScore::getCultureProgramId, cultureProgramId).eq(TCFinalScore::getCourseId, courseId);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TCFinalScore::getPaperNumber, paperNumber).or().isNull(TCFinalScore::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TCFinalScore::getTeachCourseId, obeCourseOutlineId);
         return tcFinalScoreService.remove(queryWrapper);
     }
 
-    /**
-     * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
     @Override
-    public List<TCFinalScore> queryFinalScore(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public List<TCFinalScore> queryFinalScore(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TCFinalScore> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TCFinalScore::getExamId, examId).eq(TCFinalScore::getCourseCode, courseCode);
+        queryWrapper.lambda().eq(TCFinalScore::getCultureProgramId, cultureProgramId).eq(TCFinalScore::getCourseId, courseId);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TCFinalScore::getPaperNumber, paperNumber).or().isNull(TCFinalScore::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TCFinalScore::getTeachCourseId, obeCourseOutlineId);
         return tcFinalScoreService.list(queryWrapper);
     }
 
-    /**
-     * 获取期末考试同步锁
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     */
     @Override
-    public void getFinalScoreSyncLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber + "_" + obeCourseOutlineId;
+    public void getFinalScoreSyncLock(Long cultureProgramId, Long courseId, String paperNumber) {
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在同步期末成绩数据,请稍候再试!");
         }
     }
 
-    /**
-     * 获取期末考试导入锁
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     */
     @Override
-    public void getFinalScoreImportLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + examId + "_" + courseCode + "_" + paperNumber + "_" + obeCourseOutlineId;
+    public void getFinalScoreImportLock(Long cultureProgramId, Long courseId, String paperNumber) {
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在导入期末成绩数据,请稍候再试!");

+ 41 - 78
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCPaperStructServiceImpl.java

@@ -9,6 +9,7 @@ import com.qmth.boot.tools.excel.enums.ExcelType;
 import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
 import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
+import com.qmth.distributed.print.business.entity.ObeCourseOutline;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
 import com.qmth.distributed.print.business.mapper.TCPaperStructMapper;
 import com.qmth.distributed.print.business.service.*;
@@ -17,6 +18,7 @@ import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
+import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.util.*;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.service.MarkQuestionService;
@@ -67,46 +69,32 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
     @Resource
     MarkQuestionService markQuestionService;
 
-    /**
-     * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
+    @Resource
+    BasicCourseService basicCourseService;
+
+    @Resource
+    ObeCourseOutlineService obeCourseOutlineService;
+
     @Override
     @Transactional
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public Boolean remove(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TCPaperStruct> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TCPaperStruct::getExamId, examId).eq(TCPaperStruct::getCourseCode, courseCode);
+        queryWrapper.lambda().eq(TCPaperStruct::getCultureProgramId, cultureProgramId).eq(TCPaperStruct::getCourseId, courseId);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TCPaperStruct::getPaperNumber, paperNumber).or().isNull(TCPaperStruct::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TCPaperStruct::getTeachCourseId, obeCourseOutlineId);
         return tcPaperStructService.remove(queryWrapper);
     }
 
-    /**
-     * 导入期末成绩-试卷结构excel
-     *
-     * @param file
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     * @throws IOException
-     */
+
     @Override
     @Transactional
-    public Map<String, String> paperStructExcelImport(MultipartFile file, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException {
+    public Map<String, String> paperStructExcelImport(MultipartFile file, Long cultureProgramId, Long courseId, String paperNumber) {
         log.debug("导入Excel开始...");
         long start = System.currentTimeMillis();
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
-            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
+            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, cultureProgramId, basicCourseService.getById(courseId).getCode(), paperNumber);
             StringJoiner errorData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
 
@@ -161,12 +149,12 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
                 if (!CollectionUtils.isEmpty(paperStructDtoNewList)) {
                     successData.add("共导入").add(paperStructDtoNewList.size() + "").add("条数据");
                     TCPaperStruct tcPaperStruct = new TCPaperStruct(examId, courseCode, markPaper.getCourseName(), paperNumber, obeCourseOutlineId, JacksonUtil.parseJson(paperStructDtoNewList), totalScore, 60d, sysUser.getId());
-                    TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, obeCourseOutlineId);
+                    TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
                     if (Objects.nonNull(tcPaperStructDb) && !tcPaperStructDb.equals(tcPaperStruct)) {
-                        tcFinalScoreService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
-                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, obeCourseOutlineId, true);
+                        tcFinalScoreService.remove(cultureProgramId,courseId,paperNumber);
+                        trBasicInfoService.clearReportData(cultureProgramId, courseId,paperNumber, true);
                     }
-                    tcPaperStructService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
+                    tcPaperStructService.remove(cultureProgramId, courseId, paperNumber);
                     tcPaperStructService.save(tcPaperStruct);
                 }
             }
@@ -191,25 +179,17 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
         return messageMap;
     }
 
-    /**
-     * 同步试卷结构
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     * @throws IOException
-     */
+
     @Override
     @Transactional
-    public Map<String, String> paperStructSync(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException {
+    public Map<String, String> paperStructSync(Long examId, Long courseId, String paperNumber, Long cultureProgramId) {
         Map<String, String> messageMap = new LinkedHashMap<>();
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(cultureProgramId, courseId);
         try {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             StringJoiner errorData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
-            List<PaperStructDimensionResult> paperStructDimensionResultList = obeCourseTargetService.findTikuPaperStruct(obeCourseOutlineId, paperNumber, examId);
+            List<PaperStructDimensionResult> paperStructDimensionResultList = obeCourseTargetService.findTikuPaperStruct(obeCourseOutline.getId(), paperNumber, examId);
             if (CollectionUtils.isEmpty(paperStructDimensionResultList)) {
                 throw ExceptionResultEnum.ERROR.exception("未查询到题和知识点对应关系请手动关联");
             }
@@ -223,7 +203,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
                 paperStructList.add(p.getMainNumber() + "_" + p.getSubNumber() + "_" + p.getScore());
             }
             successData.add("共同步").add(paperStructDimensionResultList.size() + "").add("条数据");
-            TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, obeCourseOutlineId);
+            TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(cultureProgramId,courseId, paperNumber);
             TCPaperStruct tcPaperStruct = null;
             if (Objects.nonNull(tcPaperStructDb) && Objects.nonNull(tcPaperStructDb.getPaperStructDimension())) {
                 tcPaperStruct = new TCPaperStruct();
@@ -245,15 +225,15 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
                     Collections.sort(paperStructDbList);
                     Collections.sort(paperStructList);
 
-                    tcFinalScoreService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
-                    trBasicInfoService.clearReportData(examId, courseCode, paperNumber, obeCourseOutlineId, false);
+                    tcFinalScoreService.remove(cultureProgramId, courseId, paperNumber);
+                    trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, false);
                     tcPaperStruct.setPaperStruct(null);
                 }
                 tcPaperStruct.updateInfo(sysUser.getId());
             } else {
-                tcPaperStructService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
-                MarkPaper markPaper = printCommonService.getMarkPaper(examId, courseCode, paperNumber);
-                ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutlineId);
+                tcPaperStructService.remove(cultureProgramId,courseId, paperNumber);
+                MarkPaper markPaper = printCommonService.getMarkPaper(examId, basicCourseService.getById(courseId).getCode(), paperNumber);
+                ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
                 tcPaperStruct = new TCPaperStruct(examId, courseCode, markPaper.getCourseName(), paperNumber, obeCourseOutlineId, JacksonUtil.parseJson(paperStructDimensionResultList), sysUser.getId(), obeCourseWeightResult.getDimensionSign());
                 List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
                 if (CollectionUtils.isEmpty(markQuestionList)) {
@@ -264,8 +244,8 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
                     Collections.sort(paperStructDbList);
                     Collections.sort(paperStructList);
 
-                    tcFinalScoreService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
-                    trBasicInfoService.clearReportData(examId, courseCode, paperNumber, obeCourseOutlineId, false);
+                    tcFinalScoreService.remove(cultureProgramId, courseId, paperNumber);
+                    trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, false);
                 }
             }
             tcPaperStructService.saveOrUpdate(tcPaperStruct);
@@ -288,52 +268,35 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
 
     /**
      * 根据考试id/科目编辑/试卷编码查询数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
+     * @param cultureProgramId cultureProgramId
+     * @param courseId courseId
+     * @param paperNumber paperNumber
+     * @return 结果
      */
     @Override
-    public TCPaperStruct queryPaperStruct(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public TCPaperStruct queryPaperStruct(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TCPaperStruct> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TCPaperStruct::getExamId, examId).eq(TCPaperStruct::getCourseCode, courseCode);
+        queryWrapper.lambda().eq(TCPaperStruct::getCultureProgramId, cultureProgramId).eq(TCPaperStruct::getCourseId, courseId);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TCPaperStruct::getPaperNumber, paperNumber).or().isNull(TCPaperStruct::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TCPaperStruct::getTeachCourseId, obeCourseOutlineId);
         return tcPaperStructService.getOne(queryWrapper);
     }
 
-    /**
-     * 获取试卷结构同步锁
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     */
+
     @Override
-    public void getPaperStructSyncLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber + "_" + obeCourseOutlineId;
+    public void getPaperStructSyncLock(Long cultureProgramId, Long courseId, String paperNumber) {
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在同步试卷蓝图数据,请稍候再试!");
         }
     }
 
-    /**
-     * 获取试卷结构导入锁
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     */
+
     @Override
-    public void getPaperStructImportLock(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.IMPORT + examId + "_" + courseCode + "_" + paperNumber + "_" + obeCourseOutlineId;
+    public void getPaperStructImportLock(Long cultureProgramId, Long courseId, String paperNumber) {
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         Object o = redisUtil.get(lockKey);
         if (Objects.nonNull(o)) {
             throw ExceptionResultEnum.ERROR.exception("正在导入试卷蓝图数据,请稍候再试!");

+ 31 - 43
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCUsualScoreServiceImpl.java

@@ -7,19 +7,23 @@ import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.tools.excel.ExcelReader;
 import com.qmth.boot.tools.excel.enums.ExcelType;
 import com.qmth.distributed.print.business.bean.dto.TCUsualScoreDto;
+import com.qmth.distributed.print.business.entity.ObeCourseOutline;
 import com.qmth.distributed.print.business.entity.TCUsualScore;
 import com.qmth.distributed.print.business.mapper.TCUsualScoreMapper;
+import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TCUsualScoreService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
+import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
+import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,7 +33,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -54,25 +57,27 @@ public class TCUsualScoreServiceImpl extends ServiceImpl<TCUsualScoreMapper, TCU
     @Resource
     TRBasicInfoService trBasicInfoService;
 
-    /**
-     * 导入平时成绩excel
-     *
-     * @param file
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     * @throws IOException
-     */
+    @Resource
+    ObeCourseOutlineService obeCourseOutlineService;
+
+    @Resource
+    BasicCourseService basicCourseService;
+
     @Override
     @Transactional
-    public Map<String, String> usualScoreExcelImport(MultipartFile file, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) throws IOException {
+    public Map<String, String> usualScoreExcelImport(MultipartFile file, Long obeCultureProgramId,Long courseId) {
         log.debug("导入Excel开始...");
         long start = System.currentTimeMillis();
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(
+                obeCultureProgramId, courseId);
         Map<String, String> messageMap = new LinkedHashMap<>();
+
+        BasicCourse basicCourse = basicCourseService.getById(courseId);
+        if (Objects.isNull(basicCourse)){
+            throw ExceptionResultEnum.ERROR.exception("课程不存在");
+        }
+
         try {
-            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
             Double totalScore = 100d;
 
             StringJoiner errorData = new StringJoiner("");
@@ -101,7 +106,7 @@ public class TCUsualScoreServiceImpl extends ServiceImpl<TCUsualScoreMapper, TCU
                         }
                         boolean error = false;
                         List<TCUsualScoreDto> tcUsualScoreDtoList = new ArrayList<>();
-                        TCUsualScore tcUsualScore = new TCUsualScore(examId, courseCode, markPaper.getCourseName(), paperNumber, obeCourseOutlineId, sysUser.getId());
+                        TCUsualScore tcUsualScore = new TCUsualScore(obeCultureProgramId,basicCourse.getId(), basicCourse.getCode(), basicCourse.getName(), null, sysUser.getId());
                         for (int j = 0; j < strs.length; j++) {
                             if (Objects.isNull(strs[j]) || Objects.equals(strs[j].trim(), "")) {
                                 errorData.add("excel第").add((i + 1) + "").add("行[").add(columnNames[j] + "]为空;").add("\r\n");
@@ -137,11 +142,12 @@ public class TCUsualScoreServiceImpl extends ServiceImpl<TCUsualScoreMapper, TCU
                 }
                 if (!CollectionUtils.isEmpty(tcUsualScoreList)) {
                     successData.add("共导入").add(tcUsualScoreList.size() + "").add("条数据");
-                    List<TCUsualScore> tcUsualScoreDbSourceList = tcUsualScoreService.queryUsualScore(examId, courseCode, paperNumber, obeCourseOutlineId);
+                    List<TCUsualScore> tcUsualScoreDbSourceList = tcUsualScoreService.queryUsualScore(obeCultureProgramId, basicCourse.getId(), null);
                     if (CollectionUtils.isEmpty(tcUsualScoreDbSourceList) || !CollectionUtils.isEqualCollection(tcUsualScoreDbSourceList, tcUsualScoreList)) {
-                        tcUsualScoreService.removeByIds(tcUsualScoreDbSourceList.stream().map(s -> s.getId()).collect(Collectors.toList()));
+                        tcUsualScoreService.removeByIds(tcUsualScoreDbSourceList.stream().map(BaseEntity::getId).collect(Collectors.toList()));
                         tcUsualScoreService.saveBatch(tcUsualScoreList);
-                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, obeCourseOutlineId, false);
+                        trBasicInfoService.clearReportData(obeCultureProgramId, basicCourse.getId(),null
+                                , false);
                     }
                 }
             }
@@ -165,38 +171,20 @@ public class TCUsualScoreServiceImpl extends ServiceImpl<TCUsualScoreMapper, TCU
         return messageMap;
     }
 
-    /**
-     * 平时成绩列表(分页)
-     *
-     * @param iPage
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
+
     @Override
-    public IPage<TCUsualScore> usualScoreList(IPage<Map> iPage, Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
-        return this.baseMapper.usualScoreList(iPage, examId, courseCode, paperNumber, obeCourseOutlineId);
+    public IPage<TCUsualScore> usualScoreList(IPage<Map> iPage, Long cultureProgramId, Long courseId, String paperNumber) {
+        return this.baseMapper.usualScoreList(iPage, cultureProgramId, courseId, paperNumber);
     }
 
-    /**
-     * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
+
     @Override
-    public List<TCUsualScore> queryUsualScore(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public List<TCUsualScore> queryUsualScore(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TCUsualScore> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TCUsualScore::getExamId, examId).eq(TCUsualScore::getCourseCode, courseCode);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TCUsualScore::getPaperNumber, paperNumber).or().isNull(TCUsualScore::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TCUsualScore::getTeachCourseId, obeCourseOutlineId);
+        queryWrapper.lambda().eq(TCUsualScore::getCultureProgramId, cultureProgramId).eq(TCUsualScore::getCourseId, courseId);
         return tcUsualScoreService.list(queryWrapper);
     }
 }

+ 13 - 40
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -86,23 +86,14 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     protected static final String tbBgColor = "F2F2F2";
     protected static final String tbPercentWidth = "100%";
 
-    /**
-     * 根据考试id/课程编码/试卷编码查询数据库数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
+
     @Override
-    public TRBasicInfo queryBasicInfo(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public TRBasicInfo queryBasicInfo(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TRBasicInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode);
+        queryWrapper.lambda().eq(TRBasicInfo::getCultureProgramId, cultureProgramId).eq(TRBasicInfo::getCourseId, courseId);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TRBasicInfo::getPaperNumber, paperNumber).or().isNull(TRBasicInfo::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TRBasicInfo::getTeachCourseId, obeCourseOutlineId);
         return trBasicInfoService.getOne(queryWrapper);
     }
 
@@ -119,7 +110,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         Objects.requireNonNull(finalScoreDto, "未找到期末成绩分数信息");
 
         ReportScoreViewDto reportScoreViewDto = null;
-        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getPaperNumber(), trBasicInfo.getTeachCourseId());
+        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(trBasicInfo.getCultureProgramId(), trBasicInfo.getCourseId(), trBasicInfo.getPaperNumber());
         if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStruct()) && Objects.nonNull(tcPaperStruct.getTotalScore())) {
             BasicCourse basicCourse = basicCourseService.getByCode(trBasicInfo.getCourseCode());
             markPaper = new MarkPaper(markPaper.getExamId(), markPaper.getCourseCode(), basicCourse.getName(), markPaper.getPaperNumber(), tcPaperStruct.getTotalScore(), tcPaperStruct.getPassScore());
@@ -429,7 +420,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      */
     @Override
     @Transactional
-    public TRBasicInfo getReportView(TRBasicInfo trBasicInfo, MarkPaper markPaper, Long userId, ObeCourseWeightResult obeCourseWeightResult, Long obeCourseOutlineId) {
+    public TRBasicInfo getReportView(TRBasicInfo trBasicInfo, MarkPaper markPaper, Long userId, ObeCourseWeightResult obeCourseWeightResult, Long cultureProgramId) {
         BasicSemester basicSemester = basicSemesterService.selectByExamId(markPaper.getExamId());
         Objects.requireNonNull(basicSemester, "未找到学期信息");
 
@@ -450,7 +441,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         trBasicInfo.getReportResult().setCourseBasicInfo(reportCourseBasicInfoDto);
 
         //课程目标考核分布-题目信息
-        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getPaperNumber(), obeCourseOutlineId);
+        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, basicCourseService.findByCourseCode(markPaper.getCourseCode(), basicSemester.getSchoolId()).getId(), markPaper.getPaperNumber());
         if (Objects.isNull(tcPaperStruct) || Objects.isNull(tcPaperStruct.getPaperStructDimension())) {
             throw ExceptionResultEnum.ERROR.exception("未找到试卷蓝图信息");
         }
@@ -957,24 +948,14 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         return tableRenderDataExamStudent;
     }
 
-    /**
-     * 根据考试id/课程编码/试卷编码删除数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
     @Override
     @Transactional
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
+    public Boolean remove(Long cultureProgramId, Long courseId, String paperNumber) {
         QueryWrapper<TRBasicInfo> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(TRBasicInfo::getExamId, examId).eq(TRBasicInfo::getCourseCode, courseCode);
+        queryWrapper.lambda().eq(TRBasicInfo::getCultureProgramId, cultureProgramId).eq(TRBasicInfo::getCourseId, courseId);
         if (Objects.nonNull(paperNumber)) {
             queryWrapper.lambda().and(w -> w.eq(TRBasicInfo::getPaperNumber, paperNumber).or().isNull(TRBasicInfo::getPaperNumber));
         }
-        queryWrapper.lambda().eq(TRBasicInfo::getTeachCourseId, obeCourseOutlineId);
         return trBasicInfoService.remove(queryWrapper);
     }
 
@@ -1014,22 +995,14 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         return null;
     }
 
-    /**
-     * 清除报告数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @param clearDimension
-     */
+
     @Override
     @Transactional
-    public void clearReportData(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId, boolean clearDimension) {
-        trExamStudentService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
-        trBasicInfoService.remove(examId, courseCode, paperNumber, obeCourseOutlineId);
+    public void clearReportData(Long cultureProgramId, Long courseId, String paperNumber, boolean clearDimension) {
+        trExamStudentService.remove(cultureProgramId,courseId, paperNumber);
+        trBasicInfoService.remove(cultureProgramId, courseId, paperNumber);
         if (clearDimension) {
-            TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, obeCourseOutlineId);
+            TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
             if (Objects.nonNull(tcPaperStruct)) {
                 tcPaperStruct.setPaperStructDimension(null);
                 SysUser sysUser = (SysUser) ServletUtil.getRequestUser();

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

@@ -196,19 +196,10 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         return trExamStudentService.remove(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, rBasicInfoId));
     }
 
-    /**
-     * 根据考试id/课程编码/试卷编码删除数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param paperNumber
-     * @param obeCourseOutlineId
-     * @return
-     */
     @Override
     @Transactional
-    public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId) {
-        TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(examId, courseCode, paperNumber, obeCourseOutlineId);
+    public Boolean remove(Long obeCultureProgramId, Long courseId, String paperNumber) {
+        TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(obeCultureProgramId,courseId,paperNumber);
         return Objects.nonNull(trBasicInfo) ? trExamStudentService.remove(trBasicInfo.getId()) : false;
     }
 

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

@@ -133,3 +133,39 @@ UPDATE sys_privilege SET related = '3003,3006,3007' WHERE (id = '3014');
 
 -- 2024-06-13
 INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('1173', '共用接口-OBE学期', '/api/admin/basic/condition/list_outline_semester', 'URL', '149', '19', 'SYS', '1', '1', '1');
+
+ALTER TABLE t_c_usual_score
+    DROP COLUMN teach_course_id,
+    ADD COLUMN course_id BIGINT NOT NULL COMMENT '课程id' AFTER exam_id,
+    CHANGE COLUMN culture_program_id culture_program_id BIGINT NOT NULL COMMENT '培养方案id' ,
+    CHANGE COLUMN exam_id exam_id BIGINT NULL COMMENT '考试id' ,
+    DROP INDEX t_c_usual_score_unique ,
+    ADD UNIQUE INDEX t_c_usual_score_unique (culture_program_id ASC, course_id ASC, name ASC, student_code ASC) VISIBLE;
+;
+
+-- 2024-06-14
+ALTER TABLE t_r_basic_info
+    DROP COLUMN teach_course_id,
+    ADD COLUMN course_id BIGINT NOT NULL COMMENT '课程id' AFTER exam_id,
+    CHANGE COLUMN culture_program_id culture_program_id BIGINT NOT NULL COMMENT '培养方案id' ,
+    CHANGE COLUMN exam_id exam_id BIGINT NULL COMMENT '考试id' ,
+    DROP INDEX t_r_basic_info_unique ,
+    ADD UNIQUE INDEX t_r_basic_info_unique (culture_program_id ASC, course_id ASC) INVISIBLE;
+;
+
+ALTER TABLE t_c_paper_struct
+    DROP COLUMN teach_course_id,
+    ADD COLUMN course_id BIGINT NOT NULL COMMENT '课程id' AFTER exam_id,
+    CHANGE COLUMN exam_id exam_id BIGINT NULL COMMENT '考试id' ,
+    DROP INDEX t_c_paper_struct_unique ,
+    ADD UNIQUE INDEX t_c_paper_struct_unique (culture_program_id ASC, course_id ASC) INVISIBLE;
+;
+
+ALTER TABLE t_c_final_score
+    DROP COLUMN teach_course_id,
+    ADD COLUMN course_id BIGINT NOT NULL COMMENT '课程id' AFTER exam_id,
+    CHANGE COLUMN exam_id exam_id BIGINT NULL COMMENT '考试id' ,
+    DROP INDEX t_c_final_score_unique ,
+    ADD UNIQUE INDEX t_c_final_score_unique (culture_program_id ASC, course_id ASC, name ASC, student_code ASC) INVISIBLE;
+;
+

+ 3 - 2
distributed-print-business/src/main/resources/mapper/ConditionMapper.xml

@@ -841,7 +841,7 @@
         SELECT
             id AS id, name AS name, code AS code
         FROM
-            basic_semester
+            basic_semester bs
         <where>
             AND EXISTS( SELECT
             1
@@ -852,7 +852,7 @@
                 LEFT JOIN
             sys_user su ON oco.user_id = su.id
             WHERE
-                oco.semester_id = basic_semester.id
+                oco.semester_id = bs.id
             <if test="schoolId != null">
                 AND oco.school_id = #{schoolId}
             </if>
@@ -873,6 +873,7 @@
                     </foreach>
                 </if>
             </if>
+        )
         </where>
     </select>
 

+ 34 - 31
distributed-print-business/src/main/resources/mapper/TCUsualScoreMapper.xml

@@ -2,35 +2,41 @@
 <!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.TCUsualScoreMapper">
 
-    <select id="scoreList" resultType="com.qmth.distributed.print.business.bean.result.ScoreResult">
-        SELECT distinct
-                 bs.id as semesterId,
-                 tc.exam_id as examId,
-                 tc.course_code as courseCode,
-                 bc.name as courseName,
-                 tc.id AS obeCourseOutlineId,
-                 creator.real_name AS userName,
-                 creator.login_name AS userLoginName
+    <select id="scoreList" resultType="com.qmth.distributed.print.business.bean.result.ObeScoreResult">
+        SELECT
+            oco.id AS obeCourseOutlineId,
+            oco.name AS obeCourseOutlineName,
+            bc.id AS courseId,
+            bc.name AS courseName,
+            bs.id AS semesterId,
+            bs.name AS semesterName,
+            ocp.id AS cultureProgramId,
+            ocp.name AS cultureProgramName,
+            su.id AS userId,
+            su.real_name AS userName
         FROM
-            teach_course tc
-            left join basic_exam be on be.id = tc.exam_id
-            left join basic_semester bs on bs.id = be.semester_id
-            left join basic_course bc on bc.code = tc.course_code and bc.school_id = be.school_id
-            left join sys_user su on tc.user_id = su.id
-            left join sys_user creator on creator.id = tc.user_id
+            obe_course_outline oco
+        LEFT JOIN
+            basic_course bc ON oco.course_id = bc.id
+        LEFT JOIN
+            basic_semester bs ON oco.semester_id = bs.id
+        LEFT JOIN
+            sys_user su ON oco.user_id = su.id
+        LEFT JOIN
+            obe_culture_program ocp ON ocp.id = oco.culture_program_id
         <where>
-            <if test="examId != null and examId != ''">
-                and tc.exam_id = #{examId}
+            <if test="cultureProgramId != null">
+                AND ocp.id = #{cultureProgramId}
             </if>
-            <if test="courseCode != null and courseCode != ''">
-                and tc.course_code = #{courseCode}
+            <if test="semesterId != null">
+                AND bs.id = #{semesterId}
+            </if>
+            <if test="courseId != null">
+                AND bc.id = #{courseId}
             </if>
             <if test="dpr != null">
                 <if test="dpr.requestUserId != null">
-                    AND tc.user_id = #{dpr.requestUserId}
-                </if>
-                <if test="dpr.courseUserId != null">
-                    AND tc.user_id = #{dpr.courseUserId}
+                    AND oco.user_id = #{dpr.requestUserId}
                 </if>
                 <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
                     AND su.org_id IN
@@ -40,24 +46,21 @@
                 </if>
             </if>
         </where>
-        ORDER BY tc.course_code
+        ORDER BY oco.create_time DESC
     </select>
 
     <select id="usualScoreList" resultType="com.qmth.distributed.print.business.entity.TCUsualScore">
         select * from t_c_usual_score t
         <where>
-            <if test="examId != null and examId != ''">
-                and t.exam_id = #{examId}
+            <if test="cultureProgramId != null and cultureProgramId != ''">
+                and t.culture_program_id = #{cultureProgramId}
             </if>
-            <if test="courseCode != null and courseCode != ''">
-                and t.course_code = #{courseCode}
+            <if test="courseId != null and courseId != ''">
+                and t.course_id = #{courseId}
             </if>
             <if test="paperNumber != null and paperNumber != ''">
                 and t.paper_number = #{paperNumber}
             </if>
-            <if test="obeCourseOutlineId != null and obeCourseOutlineId != ''">
-                and t.teach_course_id = #{obeCourseOutlineId}
-            </if>
         </where>
         order by t.student_code
     </select>

+ 21 - 22
distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java

@@ -83,11 +83,11 @@ public class TCFinalScoreController {
     @RequestMapping(value = "/final_score/template_download", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Object.class)})
     public void finalScoreTemplateDownload(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                           @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
+                                           @ApiParam(value = "科目id", required = true) @RequestParam Long courseId,
                                            @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                           @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
-        printCommonService.getLock(examId, courseCode, paperNumber, teachCourseId);
-        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, teachCourseId);
+                                           @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) throws IOException {
+        printCommonService.getLock(cultureProgramId, courseId, paperNumber);
+        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId,courseId, paperNumber);
         List<ExcelField> excelFieldList = new ArrayList<>();
         excelFieldList.addAll(new ArrayList<>(Arrays.asList(new ExcelField("studentCode", "学号", true), new ExcelField("name", "姓名", true), new ExcelField("score", "成绩", true))));
         if (Objects.isNull(tcPaperStruct) || Objects.isNull(tcPaperStruct.getPaperStruct())) {
@@ -119,18 +119,18 @@ public class TCFinalScoreController {
     @ApiResponses({@ApiResponse(code = 200, message = "导入成功", response = EditResult.class)})
     public Result finalScoreImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
                                    @ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                   @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
+                                   @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
                                    @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                   @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
-        printCommonService.getLock(examId, courseCode, paperNumber, teachCourseId);
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + examId + "_" + courseCode + "_" + paperNumber + "_" + teachCourseId;
+                                   @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
+        printCommonService.getLock(cultureProgramId, courseId, paperNumber);
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
         }
         Map<String, String> map = null;
         try {
-            map = tcFinalScoreService.finalScoreExcelImport(file, examId, courseCode, paperNumber, teachCourseId);
+            map = tcFinalScoreService.finalScoreExcelImport(file, examId, courseId, paperNumber, cultureProgramId);
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             if (e instanceof ApiException) {
@@ -160,18 +160,18 @@ public class TCFinalScoreController {
     @OperationLogDetail(operationType = OperationTypeEnum.SYNC)
     @Aac(rateLimit = @RateLimit(count = 1, period = 1000L))
     public Result finalScoreSync(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                 @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
+                                 @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
                                  @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
-                                 @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
-        printCommonService.getLock(examId, courseCode, paperNumber, teachCourseId);
-        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber + "_" + teachCourseId;
+                                 @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
+        printCommonService.getLock(cultureProgramId, courseId, paperNumber);
+        String lockKey = SystemConstant.REDIS_FINAL_SCORE_DATA_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_LOCK_IMPORT_EXAM_DATA_TIME_OUT);
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
         }
         Map<String, String> map = null;
         try {
-            map = tcFinalScoreService.finalScoreSync(examId, courseCode, paperNumber, teachCourseId);
+            map = tcFinalScoreService.finalScoreSync(examId, courseId, paperNumber, cultureProgramId);
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             if (e instanceof ApiException) {
@@ -219,12 +219,12 @@ public class TCFinalScoreController {
         TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(tcFinalScore.getId());
         Objects.requireNonNull(tcFinalScoreDb, "未找到期末成绩信息");
 
-        printCommonService.getLock(tcFinalScoreDb.getExamId(), tcFinalScoreDb.getCourseCode(), tcFinalScoreDb.getPaperNumber(), tcFinalScore.getTeachCourseId());
+        printCommonService.getLock(tcFinalScoreDb.getCultureProgramId(), tcFinalScoreDb.getCourseId(), tcFinalScoreDb.getPaperNumber());
 
         List<TCFinalScoreDto> tcFinalScoreDtoList = GsonUtil.fromJson(tcFinalScore.getScoreDetail(), new TypeToken<List<TCFinalScoreDto>>() {
         }.getType());
-        Double score = tcFinalScoreDtoList.stream().mapToDouble(e -> Double.valueOf(e.getScore())).sum();
-        if (score.doubleValue() > 100d) {
+        double score = tcFinalScoreDtoList.stream().mapToDouble(e -> Double.parseDouble(e.getScore())).sum();
+        if (score > 100d) {
             throw ExceptionResultEnum.ERROR.exception("分数总分不能大于试卷总分");
         }
 
@@ -234,7 +234,7 @@ public class TCFinalScoreController {
         tcFinalScoreDb.updateInfo(tcFinalScore, sysUser.getId());
 
         if (!tcFinalScoreSource.equals(tcFinalScoreDb)) {
-            trBasicInfoService.clearReportData(tcFinalScoreDb.getExamId(), tcFinalScoreDb.getCourseCode(), tcFinalScoreDb.getPaperNumber(), tcFinalScoreDb.getTeachCourseId(), false);
+            trBasicInfoService.clearReportData(tcFinalScoreDb.getCultureProgramId(), tcFinalScoreDb.getCourseId(), tcFinalScoreDb.getPaperNumber(), false);
             tcFinalScoreService.updateById(tcFinalScoreDb);
         }
         return ResultUtil.ok(true);
@@ -246,12 +246,11 @@ public class TCFinalScoreController {
     @ApiResponses({@ApiResponse(code = 200, message = "编辑", response = EditResult.class)})
     @Transactional
     public Result finalScoreEnable(@ApiParam(value = "主键", required = true) @RequestParam Long id,
-                                   @ApiParam(value = "启用/禁用", required = true) @RequestParam Boolean enable,
-                                   @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
+                                   @ApiParam(value = "启用/禁用", required = true) @RequestParam Boolean enable) {
         TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(id);
         Objects.requireNonNull(tcFinalScoreDb, "未找到期末成绩信息");
 
-        printCommonService.getLock(tcFinalScoreDb.getExamId(), tcFinalScoreDb.getCourseCode(), tcFinalScoreDb.getPaperNumber(), teachCourseId);
+        printCommonService.getLock(tcFinalScoreDb.getCultureProgramId(), tcFinalScoreDb.getCourseId(), tcFinalScoreDb.getPaperNumber());
 
         TCFinalScore tcFinalScoreSource = new TCFinalScore();
         BeanUtils.copyProperties(tcFinalScoreDb, tcFinalScoreSource);
@@ -259,7 +258,7 @@ public class TCFinalScoreController {
         if (!tcFinalScoreSource.equals(tcFinalScoreDb)) {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             tcFinalScoreDb.updateInfo(sysUser.getId());
-            trBasicInfoService.clearReportData(tcFinalScoreDb.getExamId(), tcFinalScoreDb.getCourseCode(), tcFinalScoreDb.getPaperNumber(), teachCourseId, false);
+            trBasicInfoService.clearReportData(tcFinalScoreDb.getCultureProgramId(), tcFinalScoreDb.getCourseId(), tcFinalScoreDb.getPaperNumber(), false);
             tcFinalScoreService.updateById(tcFinalScoreDb);
         }
         return ResultUtil.ok(true);

+ 30 - 21
distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java

@@ -8,10 +8,12 @@ import com.qmth.boot.core.rateLimit.annotation.RateLimit;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
 import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
 import com.qmth.distributed.print.business.bean.params.report.PaperStructParams;
-import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
+import com.qmth.distributed.print.business.entity.ObeCourseOutline;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
+import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TCPaperStructService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
@@ -37,7 +39,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -73,24 +74,26 @@ public class TCPaperStructController {
     @Resource
     RedisUtil redisUtil;
 
+    @Resource
+    ObeCourseOutlineService obeCourseOutlineService;
+
     @ApiOperation(value = "导入试卷结构")
     @RequestMapping(value = "/final_score/paper_struct/import", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.IMPORT)
     @ApiResponses({@ApiResponse(code = 200, message = "导入成功", response = EditResult.class)})
     public Result finalScorePaperStructImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
-                                              @ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                              @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-                                              @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                              @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
-        printCommonService.getLock(examId, courseCode, paperNumber, teachCourseId);
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.IMPORT + examId + "_" + courseCode + "_" + paperNumber + "_" + teachCourseId;
+                                              @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId,
+                                              @ApiParam(value = "科目编码", required = true) @RequestParam Long courseId,
+                                              @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber) {
+        printCommonService.getLock(cultureProgramId, courseId, paperNumber);
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.IMPORT + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_PAPER_STRUCT_TIME_OUT);
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在导入数据,请稍候再试!");
         }
         Map<String, String> map = null;
         try {
-            map = tcPaperStructService.paperStructExcelImport(file, examId, courseCode, paperNumber, teachCourseId);
+            map = tcPaperStructService.paperStructExcelImport(file, cultureProgramId, courseId, paperNumber);
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             if (e instanceof ApiException) {
@@ -110,19 +113,20 @@ public class TCPaperStructController {
     @ApiResponses({@ApiResponse(code = 200, message = "同步成功", response = EditResult.class)})
     @Aac(rateLimit = @RateLimit(count = 1, period = 1000L))
     public Result finalScorePaperStructDimensionSync(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
+                                                     @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
                                                      @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
                                                      @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                                     @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
+                                                     @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
         Objects.requireNonNull(paperNumber, "未查询到题和知识点对应关系请手动关联");
-        printCommonService.getLock(examId, courseCode, paperNumber, teachCourseId);
-        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.SYNC + examId + "_" + courseCode + "_" + paperNumber + "_" + teachCourseId;
+        printCommonService.getLock(cultureProgramId, courseId, paperNumber);
+        String lockKey = SystemConstant.REDIS_PAPER_STRUCT_FLOW_PREFIX + SystemConstant.SYNC + cultureProgramId + "_" + courseId + "_" + paperNumber;
         boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_PAPER_STRUCT_TIME_OUT);
         if (!lock) {
             throw ExceptionResultEnum.ERROR.exception("正在同步数据,请稍候再试!");
         }
         Map<String, String> map = null;
         try {
-            map = tcPaperStructService.paperStructSync(examId, courseCode, paperNumber, teachCourseId);
+            map = tcPaperStructService.paperStructSync(examId, courseId, paperNumber, cultureProgramId);
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             if (e instanceof ApiException) {
@@ -145,8 +149,10 @@ public class TCPaperStructController {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        printCommonService.getLock(paperStructParams.getExamId(), paperStructParams.getCourseCode(), paperStructParams.getPaperNumber(), paperStructParams.getTeachCourseId());
-        ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(paperStructParams.getTeachCourseId());
+        printCommonService.getLock(paperStructParams.getCultureProgramId(), paperStructParams.getCourseId(), paperStructParams.getPaperNumber());
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(paperStructParams.getCultureProgramId(), paperStructParams.getCourseId());
+
+        ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
         for (CourseWeightDto c : obeCourseWeightResult.getSubmitForm()) {
             for (PaperStructDimensionResult paperStructDimensionResult : paperStructParams.getPaperStruct()) {
                 Objects.requireNonNull(paperStructDimensionResult.getMainNumber(), "大题号为空");
@@ -171,7 +177,7 @@ public class TCPaperStructController {
             }).collect(Collectors.toList());
         }
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(paperStructParams.getExamId(), paperStructParams.getCourseCode(), paperStructParams.getPaperNumber(), paperStructParams.getTeachCourseId());
+        TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(paperStructParams.getCultureProgramId(), paperStructParams.getCourseId(), paperStructParams.getPaperNumber());
         if (Objects.isNull(tcPaperStructDb)) {
             MarkPaper markPaper = printCommonService.getMarkPaper(paperStructParams.getExamId(), paperStructParams.getCourseCode(), paperStructParams.getPaperNumber());
             tcPaperStructDb = new TCPaperStruct(paperStructParams.getExamId(), paperStructParams.getCourseCode(), markPaper.getCourseName(), paperStructParams.getPaperNumber(), paperStructParams.getTeachCourseId(), JacksonUtil.parseJson(paperStructParams.getPaperStruct()), sysUser.getId(), obeCourseWeightResult.getDimensionSign());
@@ -181,7 +187,7 @@ public class TCPaperStructController {
             BeanUtils.copyProperties(tcPaperStructDb, tcPaperStructSource);
             tcPaperStructDb.updateInfo(JacksonUtil.parseJson(paperStructParams.getPaperStruct()), sysUser.getId());
             if (!tcPaperStructDb.equals(tcPaperStructSource)) {
-                trBasicInfoService.clearReportData(tcPaperStructDb.getExamId(), tcPaperStructDb.getCourseCode(), tcPaperStructDb.getPaperNumber(), paperStructParams.getTeachCourseId(), false);
+                trBasicInfoService.clearReportData(tcPaperStructDb.getCultureProgramId(), tcPaperStructDb.getCourseId(), tcPaperStructDb.getPaperNumber(), false);
                 tcPaperStructDb.setDimensionSign(obeCourseWeightResult.getDimensionSign());
                 tcPaperStructService.updateById(tcPaperStructDb);
             }
@@ -193,11 +199,14 @@ public class TCPaperStructController {
     @RequestMapping(value = "/final_score/paper_struct/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "试卷蓝图查询", response = PaperStructDimensionResult.class)})
     public Result finalScorePaperStructQuery(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
+                                             @ApiParam(value = "科目id", required = true) @RequestParam Long courseId,
                                              @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
                                              @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                             @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
+                                             @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(cultureProgramId, courseId);
+
         List<PaperStructDimensionResult> paperStructDimensionResultList = null;
-        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, teachCourseId);
+        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
         if (Objects.isNull(tcPaperStruct) || (Objects.isNull(tcPaperStruct.getPaperStruct()) && Objects.isNull(tcPaperStruct.getPaperStructDimension()))) {
             List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
             if (CollectionUtils.isEmpty(markQuestionList)) {
@@ -208,9 +217,9 @@ public class TCPaperStructController {
                 paperStructDimensionResultList.add(new PaperStructDimensionResult(markQuestion.getMainNumber(), markQuestion.getSubNumber(), markQuestion.getPaperNumber(), markQuestion.getTotalScore()));
             }
         } else {
-            ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(teachCourseId);
+            ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
             if (Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != obeCourseWeightResult.getDimensionSign().longValue()) {
-                trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
+                trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, false);
                 paperStructDimensionResultList = this.getPaperStructDimensionResult(tcPaperStruct, paperStructDimensionResultList);
             } else {
                 paperStructDimensionResultList = this.getPaperStructDimensionResult(tcPaperStruct, paperStructDimensionResultList);

+ 47 - 51
distributed-print/src/main/java/com/qmth/distributed/print/api/TCUsualScoreController.java

@@ -7,10 +7,12 @@ 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.TCUsualScoreDto;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
-import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
-import com.qmth.distributed.print.business.bean.result.ScoreResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
+import com.qmth.distributed.print.business.bean.result.ObeScoreResult;
+import com.qmth.distributed.print.business.entity.ObeCourseOutline;
 import com.qmth.distributed.print.business.entity.TCUsualScore;
+import com.qmth.distributed.print.business.service.ObeCourseOutlineService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TCUsualScoreService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
@@ -24,8 +26,6 @@ import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
@@ -56,7 +56,6 @@ import java.util.stream.Collectors;
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_COURSE_DEGREE)
 public class TCUsualScoreController {
-    private final static Logger log = LoggerFactory.getLogger(TCUsualScoreController.class);
 
     @Resource
     TCUsualScoreService tcUsualScoreService;
@@ -67,32 +66,29 @@ public class TCUsualScoreController {
     @Resource
     TRBasicInfoService trBasicInfoService;
 
+    @Resource
+    ObeCourseOutlineService obeCourseOutlineService;
+
     @ApiOperation(value = "成绩管理列表")
     @RequestMapping(value = "/score/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ScoreResult.class)})
-    public Result scoreList(@ApiParam(value = "学期ID", required = true) @RequestParam Long semesterId,
-                            @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-                            @ApiParam(value = "课程编码") @RequestParam(required = false) String courseCode,
-                            @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
-                            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        if (semesterId == null) {
-            throw ExceptionResultEnum.SEMESTER_ID_IS_NULL.exception();
-        }
-        if (examId == null) {
-            throw ExceptionResultEnum.EXAM_ID_IS_NULL.exception();
-        }
-        return ResultUtil.ok(printCommonService.scoreList(new Page<>(pageNumber, pageSize), examId, courseCode));
+    @ApiResponses({ @ApiResponse(code = 200, message = "分页查询", response = ObeScoreResult.class) })
+    public Result scoreList(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long obeCultureProgramId, @ApiParam(value = "学期ID", required = true) @RequestParam Long semesterId,
+            @ApiParam(value = "课程id") @RequestParam(required = false) Long courseId, @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(
+                printCommonService.scoreList(new Page<>(pageNumber, pageSize), obeCultureProgramId, semesterId, courseId));
     }
 
     @ApiOperation(value = "导入平时成绩-模板下载")
     @RequestMapping(value = "/usual_score/template_download", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.EXPORT)
-    @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Object.class)})
-    public void usualScoreTemplateDownload(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                           @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-                                           @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                           @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
-        ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(teachCourseId);
+    @ApiResponses({ @ApiResponse(code = 200, message = "下载成功", response = Object.class) })
+    public void usualScoreTemplateDownload(@ApiParam(value = "培养方案id", required = true) @RequestParam Long obeCultureProgramId,
+            @ApiParam(value = "课程id", required = true) @RequestParam Long courseId) throws IOException {
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(
+                obeCultureProgramId, courseId);
+
+        ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
         List<CourseWeightDto> courseWeightDtoList = obeCourseWeightResult.getSubmitForm();
 
         List<ExcelField> excelFieldList = new ArrayList<>();
@@ -100,45 +96,42 @@ public class TCUsualScoreController {
         courseWeightDtoList.stream().peek(e -> {
             List<CourseWeightDetailDto> courseWeightDetailDtoList = e.getEvaluationList();
             courseWeightDetailDtoList.stream().peek(s -> {
-                if (Objects.nonNull(s.getEnable()) && s.getEnable() && !Objects.equals(s.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
+                if (Objects.nonNull(s.getEnable()) && s.getEnable() && !Objects.equals(s.getEvaluationName(),
+                        SystemConstant.FINAL_SCORE_STR)) {
                     excelFieldList.add(new ExcelField(s.getEvaluationName(), s.getEvaluationName(), true));
                 }
             }).collect(Collectors.toList());
         }).collect(Collectors.toList());
-        printCommonService.scoreDownLoadExaminationTemplate("1、所有字段均为必填字段;\n" +
-                "2、平时成绩各项数据均需要填写;\n" +
-                "3、请不要删除此行,也不要删除模板中的任何列。\n" +
-                "4、使用前请先删除样例数据。", "sheet1", "平时成绩导入模版", excelFieldList);
+        printCommonService.scoreDownLoadExaminationTemplate(
+                "1、所有字段均为必填字段;\n" + "2、平时成绩各项数据均需要填写;\n" + "3、请不要删除此行,也不要删除模板中的任何列。\n" + "4、使用前请先删除样例数据。", "sheet1",
+                "平时成绩导入模版", excelFieldList);
     }
 
     @ApiOperation(value = "导入平时成绩")
     @RequestMapping(value = "/usual_score/import", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.IMPORT)
-    @ApiResponses({@ApiResponse(code = 200, message = "导入成功", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "导入成功", response = EditResult.class) })
     public Result usualScoreImport(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
-                                   @ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                   @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                   @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
-        return ResultUtil.ok(tcUsualScoreService.usualScoreExcelImport(file, examId, courseCode, paperNumber, teachCourseId));
+            @ApiParam(value = "培养方案id", required = true) @RequestParam Long obeCultureProgramId,
+            @ApiParam(value = "课程id", required = true) @RequestParam Long courseId) throws IOException {
+        return ResultUtil.ok(tcUsualScoreService.usualScoreExcelImport(file, obeCultureProgramId,courseId));
     }
 
     @ApiOperation(value = "平时成绩列表")
     @RequestMapping(value = "/usual_score/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = TCUsualScore.class)})
-    public Result usualScoreList(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                 @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-                                 @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                 @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId,
-                                 @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
-                                 @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) throws IOException {
-        return ResultUtil.ok(tcUsualScoreService.usualScoreList(new Page<>(pageNumber, pageSize), examId, courseCode, paperNumber, teachCourseId));
+    @ApiResponses({ @ApiResponse(code = 200, message = "分页查询", response = TCUsualScore.class) })
+    public Result usualScoreList(@ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId, @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
+            @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+            @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(
+                tcUsualScoreService.usualScoreList(new Page<>(pageNumber, pageSize), cultureProgramId, courseId, paperNumber));
     }
 
     @ApiOperation(value = "平时成绩编辑")
     @RequestMapping(value = "/usual_score/edit", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.SAVE)
-    @ApiResponses({@ApiResponse(code = 200, message = "编辑", response = TCUsualScore.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "编辑", response = TCUsualScore.class) })
     public Result usualScoreEdit(@ApiParam(value = "主键", required = true) @RequestParam Long id) throws IOException {
         TCUsualScore tcUsualScore = tcUsualScoreService.getById(id);
         Objects.requireNonNull(tcUsualScore, "未找到平时成绩信息");
@@ -148,13 +141,15 @@ public class TCUsualScoreController {
     @ApiOperation(value = "平时成绩保存")
     @RequestMapping(value = "/usual_score/save", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.UPDATE)
-    @ApiResponses({@ApiResponse(code = 200, message = "保存", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "保存", response = EditResult.class) })
     @Transactional
-    public Result usualScoreSave(@ApiParam(value = "平时成绩信息", required = true) @Valid @RequestBody TCUsualScore tcUsualScore, BindingResult bindingResult) throws IOException {
+    public Result usualScoreSave(@ApiParam(value = "平时成绩信息", required = true) @Valid @RequestBody TCUsualScore tcUsualScore,
+            BindingResult bindingResult) throws IOException {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         List<TCUsualScoreDto> tcFinalScoreDtoList = GsonUtil.fromJson(tcUsualScore.getScore(), new TypeToken<List<TCUsualScoreDto>>() {
+
         }.getType());
         tcFinalScoreDtoList.stream().peek(e -> {
             BigDecimal score = new BigDecimal(e.getScore());
@@ -172,7 +167,8 @@ public class TCUsualScoreController {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         tcUsualScoreDb.updateInfo(tcUsualScore, sysUser.getId());
         if (!tcUsualScoreSource.equals(tcUsualScoreDb)) {
-            trBasicInfoService.clearReportData(tcUsualScoreDb.getExamId(), tcUsualScoreDb.getCourseCode(), tcUsualScoreDb.getPaperNumber(), tcUsualScoreDb.getTeachCourseId(), false);
+            trBasicInfoService.clearReportData(tcUsualScoreDb.getCultureProgramId(), tcUsualScoreDb.getCourseId(),
+                    tcUsualScoreDb.getPaperNumber(), false);
             tcUsualScoreService.updateById(tcUsualScoreDb);
         }
         return ResultUtil.ok(true);
@@ -181,10 +177,9 @@ public class TCUsualScoreController {
     @ApiOperation(value = "平时成绩启用/禁用")
     @RequestMapping(value = "/usual_score/enable", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.UPDATE)
-    @ApiResponses({@ApiResponse(code = 200, message = "编辑", response = EditResult.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "编辑", response = EditResult.class) })
     @Transactional
-    public Result usualScoreEnable(@ApiParam(value = "主键", required = true) @RequestParam Long id,
-                                   @ApiParam(value = "启用/禁用", required = true) @RequestParam Boolean enable) throws IOException {
+    public Result usualScoreEnable(@ApiParam(value = "主键", required = true) @RequestParam Long id, @ApiParam(value = "启用/禁用", required = true) @RequestParam Boolean enable) throws IOException {
         TCUsualScore tcUsualScoreDb = tcUsualScoreService.getById(id);
         Objects.requireNonNull(tcUsualScoreDb, "未找到平时成绩信息");
 
@@ -194,7 +189,8 @@ public class TCUsualScoreController {
         if (!tcUsualScoreSource.equals(tcUsualScoreDb)) {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             tcUsualScoreDb.updateInfo(sysUser.getId());
-            trBasicInfoService.clearReportData(tcUsualScoreDb.getExamId(), tcUsualScoreDb.getCourseCode(), tcUsualScoreDb.getPaperNumber(), tcUsualScoreDb.getTeachCourseId(), false);
+            trBasicInfoService.clearReportData(tcUsualScoreDb.getCultureProgramId(), tcUsualScoreDb.getCourseId(),
+                    tcUsualScoreDb.getPaperNumber(), false);
             tcUsualScoreService.updateById(tcUsualScoreDb);
         }
         return ResultUtil.ok(true);

+ 82 - 63
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -16,19 +16,17 @@ import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
 import com.qmth.distributed.print.business.bean.dto.TCUsualScoreDto;
 import com.qmth.distributed.print.business.bean.dto.report.*;
 import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
-import com.qmth.distributed.print.business.bean.result.ScoreResult;
+import com.qmth.distributed.print.business.bean.result.ObeScoreResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
 import com.qmth.distributed.print.business.bean.result.report.ReportChangeResult;
 import com.qmth.distributed.print.business.bean.result.report.ReportResult;
 import com.qmth.distributed.print.business.bean.result.report.word.CourseBasicBean;
 import com.qmth.distributed.print.business.bean.result.report.word.CourseReportBean;
-import com.qmth.distributed.print.business.entity.TCPaperStruct;
-import com.qmth.distributed.print.business.entity.TCUsualScore;
-import com.qmth.distributed.print.business.entity.TRBasicInfo;
-import com.qmth.distributed.print.business.entity.TRExamStudent;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.entity.SysConfig;
 import com.qmth.teachcloud.common.entity.SysUser;
@@ -36,6 +34,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
 import com.qmth.teachcloud.common.enums.ImportTemplateEnum;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
+import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.FileUploadService;
 import com.qmth.teachcloud.common.util.*;
@@ -97,48 +96,52 @@ public class TRBasicInfoController {
     @Resource
     TCUsualScoreService tcUsualScoreService;
 
+    @Resource
+    ObeCourseOutlineService obeCourseOutlineService;
+
+    @Resource
+    BasicCourseService basicCourseService;
+
     @ApiOperation(value = "报告管理列表")
     @RequestMapping(value = "/report/list", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ScoreResult.class)})
-    public Result reportList(@ApiParam(value = "学期ID", required = true) @RequestParam Long semesterId,
-                             @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-                             @ApiParam(value = "课程编码") @RequestParam(required = false) String courseCode,
-                             @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
-                             @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        if (semesterId == null) {
-            throw ExceptionResultEnum.SEMESTER_ID_IS_NULL.exception();
-        }
-        if (examId == null) {
-            throw ExceptionResultEnum.EXAM_ID_IS_NULL.exception();
-        }
-        return ResultUtil.ok(printCommonService.scoreList(new Page<>(pageNumber, pageSize), examId, courseCode));
+    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeScoreResult.class)})
+    public Result reportList(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId, @ApiParam(value = "学期ID", required = true) @RequestParam Long semesterId,
+            @ApiParam(value = "课程id") @RequestParam(required = false) Long courseId, @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+            @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(
+                printCommonService.scoreList(new Page<>(pageNumber, pageSize), cultureProgramId, semesterId, courseId));
     }
 
     @ApiOperation(value = "查看报告")
     @RequestMapping(value = "/report/view", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查看报告", response = ReportResult.class)})
     @Transactional
-    public Result reportView(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                             @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-                             @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                             @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) {
+    public Result reportView(@ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId,
+                             @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
+                             @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(examId, courseCode, paperNumber, teachCourseId);
+        BasicCourse basicCourse = basicCourseService.getById(courseId);
+
+        TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(cultureProgramId, courseId, paperNumber);
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(cultureProgramId,
+                courseId);
 
-        ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(teachCourseId);
+        ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
         log.info("ObeCourseWeightResult:{}", JacksonUtil.parseJson(obeCourseWeightResult));
-        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, teachCourseId);
+        TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
         if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) {
             List<PaperStructDimensionResult> paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken<List<PaperStructDimensionResult>>() {
+
             }.getType());
             for (CourseWeightDto c : obeCourseWeightResult.getSubmitForm()) {
-                Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
+                Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName()))
+                        .mapToDouble(PaperStructDimensionResult::getScore).sum();
                 Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
-////                Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
-//                if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
-//                    trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
-//                    throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
-//                }
+                ////                Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
+                //                if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
+                //                    trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
+                //                    throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
+                //                }
                 List<CourseWeightDetailDto> courseWeightDetailDtoList = c.getEvaluationList();
                 for (CourseWeightDetailDto courseWeightDetailDto : courseWeightDetailDtoList) {
                     if (Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
@@ -149,21 +152,30 @@ public class TRBasicInfoController {
             }
         }
 
-        MarkPaper markPaper = printCommonService.getMarkPaper(examId, courseCode, tcPaperStruct.getPaperNumber());
+        MarkPaper markPaper = printCommonService.getMarkPaper(null, basicCourse.getCode(), tcPaperStruct.getPaperNumber());
         if (Objects.isNull(trBasicInfo)) {
             trBasicInfo = trBasicInfoService.getReportView(trBasicInfo, markPaper, sysUser.getId(),
-                    obeCourseWeightResult, teachCourseId);
+                    obeCourseWeightResult, cultureProgramId);
         } else {
-            ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = Objects.nonNull(trBasicInfo.getCourseEvaluationResult()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class) : null;
-            if (Objects.nonNull(reportCourseEvaluationResultDto.getWeightSettingSign()) && reportCourseEvaluationResultDto.getWeightSettingSign().longValue() != obeCourseWeightResult.getWeightSettingSign().longValue()) {
-                trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != obeCourseWeightResult.getDimensionSign().longValue() ? true : false);
+            ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = Objects.nonNull(trBasicInfo.getCourseEvaluationResult()) ?
+                    JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class) :
+                    null;
+            if (Objects.nonNull(reportCourseEvaluationResultDto.getWeightSettingSign())
+                    && reportCourseEvaluationResultDto.getWeightSettingSign().longValue() != obeCourseWeightResult.getWeightSettingSign().longValue()) {
+                trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber,
+                        Objects.nonNull(tcPaperStruct.getDimensionSign())
+                                && tcPaperStruct.getDimensionSign().longValue()
+                                != obeCourseWeightResult.getDimensionSign().longValue());
                 trBasicInfo = trBasicInfoService.getReportView(trBasicInfo, markPaper, sysUser.getId(),
-                        obeCourseWeightResult, teachCourseId);
+                        obeCourseWeightResult, cultureProgramId);
             } else {
                 ReportCourseBasicInfoDto reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo);
-                ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = Objects.nonNull(trBasicInfo.getCourseEvaluationSpread()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationSpread(), ReportCourseEvaluationSpreadDto.class) : null;
+                ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = Objects.nonNull(trBasicInfo.getCourseEvaluationSpread()) ?
+                        JSONObject.parseObject(trBasicInfo.getCourseEvaluationSpread(), ReportCourseEvaluationSpreadDto.class) :
+                        null;
                 ReportCourseEvaluationResultDetailDto reportCourseEvaluationResultDetailDto = null;
-                List<TRExamStudent> trExamStudentList = trExamStudentService.list(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
+                List<TRExamStudent> trExamStudentList = trExamStudentService.list(
+                        new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
                 if (!CollectionUtils.isEmpty(trExamStudentList)) {
                     List<ReportExamStudentDto> examStudentList = new ArrayList<>(trExamStudentList.size());
                     for (TRExamStudent trExamStudent : trExamStudentList) {
@@ -171,7 +183,9 @@ public class TRBasicInfoController {
                     }
                     reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentList);
                 }
-                trBasicInfo.setReportResult(new ReportResult(new ReportCommonDto(examId, courseCode, markPaper.getCourseName(), paperNumber), reportCourseBasicInfoDto, reportCourseEvaluationSpreadDto, reportCourseEvaluationResultDto, reportCourseEvaluationResultDetailDto));
+                trBasicInfo.setReportResult(new ReportResult(new ReportCommonDto(null, basicCourse.getCode(), markPaper.getCourseName(), paperNumber),
+                        reportCourseBasicInfoDto, reportCourseEvaluationSpreadDto, reportCourseEvaluationResultDto,
+                        reportCourseEvaluationResultDetailDto));
             }
         }
         trBasicInfo.updateInfo(sysUser.getId());
@@ -192,12 +206,12 @@ public class TRBasicInfoController {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         TRBasicInfo trBasicInfoDb = null;
         try {
-            trBasicInfoDb = trBasicInfoService.queryBasicInfo(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), trBasicInfo.getPaperNumber(), trBasicInfo.getTeachCourseId());
+            trBasicInfoDb = trBasicInfoService.queryBasicInfo(trBasicInfo.getCultureProgramId(), trBasicInfo.getCourseId(), trBasicInfo.getPaperNumber());
             if (Objects.isNull(trBasicInfoDb)) {
                 trBasicInfoDb = new TRBasicInfo(trBasicInfo, sysUser.getId());
-                TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), trBasicInfo.getPaperNumber(), trBasicInfo.getTeachCourseId());
+                TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(trBasicInfo.getCultureProgramId(), trBasicInfo.getCourseId(), trBasicInfo.getPaperNumber());
                 MarkPaper markPaper = printCommonService.getMarkPaper(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), Objects.nonNull(tcPaperStruct) ? tcPaperStruct.getPaperNumber() : trBasicInfo.getPaperNumber());
-                trBasicInfoDb = trBasicInfoService.getReportView(trBasicInfoDb, markPaper, sysUser.getId(), trBasicInfoService.findCourseWeightResultRmi(trBasicInfo.getTeachCourseId()), trBasicInfo.getTeachCourseId());
+                trBasicInfoDb = trBasicInfoService.getReportView(trBasicInfoDb, markPaper, sysUser.getId(), trBasicInfoService.findCourseWeightResultRmi(trBasicInfo.getTeachCourseId()), trBasicInfo.getCultureProgramId());
             } else {
                 trBasicInfoDb.updateInfo(trBasicInfo, sysUser.getId());
             }
@@ -221,22 +235,22 @@ public class TRBasicInfoController {
     @OperationLogDetail(operationType = OperationTypeEnum.EXPORT)
     @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Object.class)})
     @Aac(rateLimit = @RateLimit(count = 1, period = 1000L))
-    public void reportExport(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                             @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
-                             @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                             @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
+    public void reportExport(@ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId,
+                             @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
+                             @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber) {
         File txtFileTemp = null, fileTemp = null;
         try {
             Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+            ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(cultureProgramId, courseId);
             BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
 
-            TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(examId, courseCode, paperNumber, teachCourseId);
+            TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(cultureProgramId, courseId, paperNumber);
             Objects.requireNonNull(trBasicInfo, "没有报告信息");
             Objects.requireNonNull(trBasicInfo.getCourseEvaluationResult(), "没有课程目标信息");
             Objects.requireNonNull(trBasicInfo.getCourseEvaluationResultDetail(), "没有课程考生信息");
 
-            ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(teachCourseId);
-            TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, teachCourseId);
+            ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
+            TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
             if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) {
                 List<PaperStructDimensionResult> paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken<List<PaperStructDimensionResult>>() {
                 }.getType());
@@ -260,9 +274,12 @@ public class TRBasicInfoController {
 
             ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class);
             if (Objects.nonNull(reportCourseEvaluationResultDto.getWeightSettingSign()) && reportCourseEvaluationResultDto.getWeightSettingSign().longValue() != obeCourseWeightResult.getWeightSettingSign().longValue()) {
-                trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != obeCourseWeightResult.getDimensionSign().longValue() ? true : false);
-                this.reportView(examId, courseCode, paperNumber, teachCourseId);
-                this.reportExport(examId, courseCode, paperNumber, teachCourseId);
+                trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber,
+                        Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getDimensionSign())
+                                && tcPaperStruct.getDimensionSign().longValue()
+                                != obeCourseWeightResult.getDimensionSign().longValue());
+                this.reportView(cultureProgramId, courseId, paperNumber);
+                this.reportExport(cultureProgramId, courseId, paperNumber);
             } else {
                 //评价样本的基本信息
                 String period = Objects.nonNull(trBasicInfo.getPeriod()) ? trBasicInfo.getPeriod() : null;
@@ -337,20 +354,21 @@ public class TRBasicInfoController {
     @ApiOperation(value = "报告发生改变")
     @RequestMapping(value = "/report/change", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Object.class)})
-    public Result reportDataChange(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
-                                   @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode,
+    public Result reportDataChange(@ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId,
+                                   @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
                                    @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
-                                   @ApiParam(value = "true:报告,false:成绩管理", required = true) @RequestParam boolean report,
-                                   @ApiParam(value = "教学课程id", required = true) @RequestParam Long teachCourseId) throws IOException {
+                                   @ApiParam(value = "true:报告,false:成绩管理", required = true) @RequestParam boolean report) {
+        ObeCourseOutline obeCourseOutline = obeCourseOutlineService.findByCultureProgramIdAndCourseId(cultureProgramId, courseId);
+
         ReportChangeResult reportChangeResult = new ReportChangeResult();
-        List<TCUsualScore> tcUsualScoreList = tcUsualScoreService.queryUsualScore(examId, courseCode, paperNumber, teachCourseId);
+        List<TCUsualScore> tcUsualScoreList = tcUsualScoreService.queryUsualScore(cultureProgramId, courseId, paperNumber);
         if (CollectionUtils.isNotEmpty(tcUsualScoreList)) {
             Set<String> usualScoreCourseSet = new LinkedHashSet<>();
             TCUsualScore tcUsualScore = tcUsualScoreList.get(0);
             List<TCUsualScoreDto> tcUsualScoreDtoList = JSONArray.parseArray(tcUsualScore.getScore(), TCUsualScoreDto.class);
             List<String> usualScoreList = tcUsualScoreDtoList.stream().map(s -> s.getName()).collect(Collectors.toList());
 
-            List<CourseWeightDto> courseWeightDtoList = trBasicInfoService.findCourseWeightDtoRmi(teachCourseId);
+            List<CourseWeightDto> courseWeightDtoList = trBasicInfoService.findCourseWeightDtoRmi(obeCourseOutline.getId());
             List<String> courseTargetList = new ArrayList<>(courseWeightDtoList.size());
             if (CollectionUtils.isNotEmpty(courseWeightDtoList)) {
                 courseWeightDtoList.stream().peek(e -> {
@@ -373,11 +391,12 @@ public class TRBasicInfoController {
                 }
             }
 
-            TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(examId, courseCode, paperNumber, teachCourseId);
+            TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(cultureProgramId, courseId, paperNumber);
             if (Objects.nonNull(trBasicInfo) && Objects.nonNull(trBasicInfo.getCourseEvaluationResultDetail())) {
                 JSONObject jsonObject = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResultDetail());
                 List<CourseTargetWordDto> courseTargetWordDtoList = JSONArray.parseArray(jsonObject.get("targetWordMap").toString(), CourseTargetWordDto.class);
-                List<String> courseTargetDbList = courseTargetWordDtoList.stream().map(s -> s.getTargetName()).collect(Collectors.toList());
+                List<String> courseTargetDbList = courseTargetWordDtoList.stream().map(
+                        CourseTargetWordDto::getTargetName).collect(Collectors.toList());
                 if (CollectionUtils.isNotEmpty(courseTargetList) && CollectionUtils.isNotEmpty(courseTargetDbList)) {
                     Collections.sort(courseTargetList);
                     Collections.sort(courseTargetDbList);
@@ -388,7 +407,7 @@ public class TRBasicInfoController {
             }
 
             if (!report) {
-                TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, teachCourseId);
+                TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber);
                 if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) {
                     List<PaperStructDimensionResult> paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken<List<PaperStructDimensionResult>>() {
                     }.getType());
@@ -409,7 +428,7 @@ public class TRBasicInfoController {
                         }
                     }
                     if (reportChangeResult.isTargetScoreChange()) {
-                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
+                        trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, false);
                         reportChangeResult.setTargetScoreChangeStr(stringJoiner.toString());
                     }
                 }