Răsfoiți Sursa

Merge remote-tracking branch 'origin/dev_v3.3.4' into dev_v3.3.4

# Conflicts:
#	distributed-print/src/main/java/com/qmth/distributed/print/api/ObeReportController.java
wangliang 1 an în urmă
părinte
comite
004fd784ae
19 a modificat fișierele cu 541 adăugiri și 26 ștergeri
  1. 73 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/StudentCourseInfoDto.java
  2. 50 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/StudentRequirementInfoDto.java
  3. 50 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/CourseTargetRequirement.java
  4. 52 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentCourseRequirement.java
  5. 33 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentCourseRequirementDetail.java
  6. 26 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentRequirement.java
  7. 36 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentTotalRequirement.java
  8. 16 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java
  9. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ObeCourseTargetMapper.java
  10. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TRExamStudentMapper.java
  11. 4 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java
  12. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ObeCourseTargetService.java
  13. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRExamStudentService.java
  14. 14 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java
  15. 78 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java
  16. 4 1
      distributed-print-business/src/main/resources/db/log/caozixuan.sql
  17. 46 1
      distributed-print-business/src/main/resources/mapper/ConditionMapper.xml
  18. 22 0
      distributed-print-business/src/main/resources/mapper/TRExamStudentMapper.xml
  19. 14 6
      distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

+ 73 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/StudentCourseInfoDto.java

@@ -0,0 +1,73 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+import com.qmth.distributed.print.business.bean.result.report.studentRequirement.CourseTargetRequirement;
+
+import java.util.List;
+
+public class StudentCourseInfoDto {
+
+    private Long cultureProgramId;
+    private String semesterName;
+    private String courseCode;
+    private String courseName;
+    private String resultDetail;
+    private Double score;
+
+    private List<CourseTargetRequirement> courseTargetRequirementList;
+
+    public Long getCultureProgramId() {
+        return cultureProgramId;
+    }
+
+    public void setCultureProgramId(Long cultureProgramId) {
+        this.cultureProgramId = cultureProgramId;
+    }
+
+    public String getSemesterName() {
+        return semesterName;
+    }
+
+    public void setSemesterName(String semesterName) {
+        this.semesterName = semesterName;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getResultDetail() {
+        return resultDetail;
+    }
+
+    public void setResultDetail(String resultDetail) {
+        this.resultDetail = resultDetail;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public List<CourseTargetRequirement> getCourseTargetRequirementList() {
+        return courseTargetRequirementList;
+    }
+
+    public void setCourseTargetRequirementList(List<CourseTargetRequirement> courseTargetRequirementList) {
+        this.courseTargetRequirementList = courseTargetRequirementList;
+    }
+}

+ 50 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/StudentRequirementInfoDto.java

@@ -0,0 +1,50 @@
+package com.qmth.distributed.print.business.bean.dto.report;
+
+public class StudentRequirementInfoDto {
+
+    private Long cultureProgramId;
+    private String studentCode;
+    private String studentName;
+    private String collegeName;
+    private String majorName;
+
+    public Long getCultureProgramId() {
+        return cultureProgramId;
+    }
+
+    public void setCultureProgramId(Long cultureProgramId) {
+        this.cultureProgramId = cultureProgramId;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getCollegeName() {
+        return collegeName;
+    }
+
+    public void setCollegeName(String collegeName) {
+        this.collegeName = collegeName;
+    }
+
+    public String getMajorName() {
+        return majorName;
+    }
+
+    public void setMajorName(String majorName) {
+        this.majorName = majorName;
+    }
+}

+ 50 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/CourseTargetRequirement.java

@@ -0,0 +1,50 @@
+package com.qmth.distributed.print.business.bean.result.report.studentRequirement;
+
+public class CourseTargetRequirement {
+
+    private Long subRequirementId;
+    private Long requirementId;
+    private String requirementName;
+    private Double courseTargetDegree;
+
+    public CourseTargetRequirement() {
+    }
+
+    public CourseTargetRequirement(Long subRequirementId, Long requirementId, String requirementName) {
+        this.subRequirementId = subRequirementId;
+        this.requirementId = requirementId;
+        this.requirementName = requirementName;
+    }
+
+    public Long getSubRequirementId() {
+        return subRequirementId;
+    }
+
+    public void setSubRequirementId(Long subRequirementId) {
+        this.subRequirementId = subRequirementId;
+    }
+
+    public Long getRequirementId() {
+        return requirementId;
+    }
+
+    public void setRequirementId(Long requirementId) {
+        this.requirementId = requirementId;
+    }
+
+    public String getRequirementName() {
+        return requirementName;
+    }
+
+    public void setRequirementName(String requirementName) {
+        this.requirementName = requirementName;
+    }
+
+    public Double getCourseTargetDegree() {
+        return courseTargetDegree;
+    }
+
+    public void setCourseTargetDegree(Double courseTargetDegree) {
+        this.courseTargetDegree = courseTargetDegree;
+    }
+}

+ 52 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentCourseRequirement.java

@@ -0,0 +1,52 @@
+package com.qmth.distributed.print.business.bean.result.report.studentRequirement;
+
+import java.util.List;
+
+public class StudentCourseRequirement {
+
+    private String courseCode;
+    private String courseName;
+    private String semesterName;
+    private Double score;
+    private List<StudentCourseRequirementDetail> requirementDetailList;
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getSemesterName() {
+        return semesterName;
+    }
+
+    public void setSemesterName(String semesterName) {
+        this.semesterName = semesterName;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public List<StudentCourseRequirementDetail> getRequirementDetailList() {
+        return requirementDetailList;
+    }
+
+    public void setRequirementDetailList(List<StudentCourseRequirementDetail> requirementDetailList) {
+        this.requirementDetailList = requirementDetailList;
+    }
+}

+ 33 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentCourseRequirementDetail.java

@@ -0,0 +1,33 @@
+package com.qmth.distributed.print.business.bean.result.report.studentRequirement;
+
+public class StudentCourseRequirementDetail {
+
+    // 毕业要求名称
+    private String requirementName;
+    // 学生个人达成度
+    private Double studentDegree;
+
+    public StudentCourseRequirementDetail() {
+    }
+
+    public StudentCourseRequirementDetail(String requirementName, Double studentDegree) {
+        this.requirementName = requirementName;
+        this.studentDegree = studentDegree;
+    }
+
+    public String getRequirementName() {
+        return requirementName;
+    }
+
+    public void setRequirementName(String requirementName) {
+        this.requirementName = requirementName;
+    }
+
+    public Double getStudentDegree() {
+        return studentDegree;
+    }
+
+    public void setStudentDegree(Double studentDegree) {
+        this.studentDegree = studentDegree;
+    }
+}

+ 26 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentRequirement.java

@@ -0,0 +1,26 @@
+package com.qmth.distributed.print.business.bean.result.report.studentRequirement;
+
+import java.util.List;
+
+public class StudentRequirement {
+
+    private List<StudentTotalRequirement> studentTotalRequirementList;
+
+    private List<StudentCourseRequirement> studentCourseRequirementList;
+
+    public List<StudentTotalRequirement> getStudentTotalRequirementList() {
+        return studentTotalRequirementList;
+    }
+
+    public void setStudentTotalRequirementList(List<StudentTotalRequirement> studentTotalRequirementList) {
+        this.studentTotalRequirementList = studentTotalRequirementList;
+    }
+
+    public List<StudentCourseRequirement> getStudentCourseRequirementList() {
+        return studentCourseRequirementList;
+    }
+
+    public void setStudentCourseRequirementList(List<StudentCourseRequirement> studentCourseRequirementList) {
+        this.studentCourseRequirementList = studentCourseRequirementList;
+    }
+}

+ 36 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/studentRequirement/StudentTotalRequirement.java

@@ -0,0 +1,36 @@
+package com.qmth.distributed.print.business.bean.result.report.studentRequirement;
+
+public class StudentTotalRequirement {
+
+    // 毕业要求名称
+    private String requirementName;
+    // 学生个人达成度
+    private Double studentDegree;
+    // 专业达成度
+    private Double professionalDegree;
+
+
+    public String getRequirementName() {
+        return requirementName;
+    }
+
+    public void setRequirementName(String requirementName) {
+        this.requirementName = requirementName;
+    }
+
+    public Double getStudentDegree() {
+        return studentDegree;
+    }
+
+    public void setStudentDegree(Double studentDegree) {
+        this.studentDegree = studentDegree;
+    }
+
+    public Double getProfessionalDegree() {
+        return professionalDegree;
+    }
+
+    public void setProfessionalDegree(Double professionalDegree) {
+        this.professionalDegree = professionalDegree;
+    }
+}

+ 16 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.mapper;
 
+import com.qmth.distributed.print.business.bean.result.DictionaryResult;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.entity.BasicProfessional;
 import com.qmth.distributed.print.business.entity.ObeCultureProgram;
@@ -18,9 +19,11 @@ import java.util.List;
  */
 public interface ConditionMapper {
 
-    List<BasicCourse> listCourse(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("enable") Boolean enable, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
+    List<BasicCourse> listCourse(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("enable") Boolean enable, @Param("printPlanIds") List<String> printPlanIds,
+            @Param("dpr") DataPermissionRule dpr);
 
-    List<String> listPaperNumber(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
+    List<String> listPaperNumber(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("printPlanIds") List<String> printPlanIds,
+            @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForApply(@Param("examId") Long examId, @Param("userId") Long userId);
 
@@ -34,13 +37,15 @@ public interface ConditionMapper {
 
     List<BasicCourse> listCourseForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
-    List<BasicClazz> listClazz(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("clazzName") String clazzName, @Param("dpr") DataPermissionRule dpr);
+    List<BasicClazz> listClazz(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("clazzName") String clazzName,
+            @Param("dpr") DataPermissionRule dpr);
 
     List<PrintPlanBrief> listPrintPlanForClient(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("examDetailStatus") String[] examDetailStatus);
 
     List<BasicCourse> listCourseForPlanTask(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
 
-    List<String> listPaperNumberPlanTask(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
+    List<String> listPaperNumberPlanTask(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("courseCode") String courseCode,
+            @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForEntrance(@Param("examId") Long examId, @Param("userId") Long userId, @Param("status") String status);
 
@@ -51,9 +56,11 @@ public interface ConditionMapper {
     List<String> listPaperNumberFromMarkPaper(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseFromExamTaskByCreateId(@Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
+
     List<BasicCourse> listCourseFromExamTaskByUserId(@Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 
     List<String> listPaperNumberFromExamTaskByCreateId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
+
     List<String> listPaperNumberFromExamTaskByUserIdAndPass(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForQuery(@Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
@@ -70,5 +77,9 @@ public interface ConditionMapper {
 
     List<ObeCultureProgram> listCultureProgram(@Param("schoolId") Long schoolId, @Param("professionalId") Long professionalId, @Param("dpr") DataPermissionRule dpr);
 
-    List<BasicCourse> listCultureProgramCourse(@Param("schoolId") Long schoolId, @Param("professionalId") Long professionalId, @Param("cultureProgramId") Long cultureProgramId, @Param("dpr") DataPermissionRule dpr);
+    List<DictionaryResult> listOutlineSemester(@Param("schoolId") Long schoolId, @Param("professionalId") Long professionalId, @Param("cultureProgramId") Long cultureProgramId,
+            @Param("dpr") DataPermissionRule dpr);
+
+    List<BasicCourse> listCultureProgramCourse(@Param("schoolId") Long schoolId, @Param("professionalId") Long professionalId, @Param("cultureProgramId") Long cultureProgramId,
+            @Param("semesterId") Long semesterId, @Param("dpr") DataPermissionRule dpr);
 }

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

@@ -1,8 +1,8 @@
 package com.qmth.distributed.print.business.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.distributed.print.business.bean.result.ObeCourseTargetResult;
 import com.qmth.distributed.print.business.entity.ObeCourseTarget;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TRExamStudentMapper.java

@@ -1,7 +1,11 @@
 package com.qmth.distributed.print.business.mapper;
 
+import com.qmth.distributed.print.business.bean.dto.report.StudentCourseInfoDto;
 import com.qmth.distributed.print.business.entity.TRExamStudent;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TRExamStudentMapper extends BaseMapper<TRExamStudent> {
 
+    List<StudentCourseInfoDto> listStudentCourseByCultureProgramIdAndStudentCodeAndSemesterId(@Param("cultureProgramId") Long cultureProgramId, @Param("studentCode") String studentCode, @Param("semesterId") Long semesterId);
 }

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

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service;
 
 import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
+import com.qmth.distributed.print.business.bean.result.DictionaryResult;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.entity.BasicProfessional;
 import com.qmth.distributed.print.business.entity.ObeCultureProgram;
@@ -37,5 +38,7 @@ public interface ConditionService {
 
     List<ObeCultureProgram> listCultureProgram(Long professionalId);
 
-    List<BasicCourse> listCultureProgramCourse(Long professionalId, Long cultureProgramId);
+    List<DictionaryResult> listOutlineSemester(Long professionalId, Long cultureProgramId);
+
+    List<BasicCourse> listCultureProgramCourse(Long professionalId, Long cultureProgramId, Long semesterId);
 }

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

@@ -60,4 +60,5 @@ public interface ObeCourseTargetService extends IService<ObeCourseTarget> {
      * @param requestUser                     请求人
      */
     void settingExpectValue(ObeCourseTargetExpectValueParam obeCourseTargetExpectValueParam, SysUser requestUser);
+
 }

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

@@ -1,10 +1,15 @@
 package com.qmth.distributed.print.business.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.report.ReportExamStudentDto;
+import com.qmth.distributed.print.business.bean.dto.report.StudentRequirementInfoDto;
+import com.qmth.distributed.print.business.bean.result.report.studentRequirement.StudentRequirement;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.entity.TRExamStudent;
 
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 import java.util.List;
 import java.util.Map;
 
@@ -45,4 +50,15 @@ public interface TRExamStudentService extends IService<TRExamStudent> {
      * @return
      */
     public Boolean remove(Long examId, String courseCode, String paperNumber, Long obeCourseOutlineId);
+
+    /**
+     * 学生毕业要求达成度
+     *
+     * @param cultureProgramId 培养方案
+     * @param studentCode      学号
+     * @param semesterId       学期
+     */
+    StudentRequirement getRequirementsStudentReport(Long cultureProgramId, String studentCode, Long semesterId);
+
+    Page<StudentRequirementInfoDto> getRequirementsStudentPage(Long cultureProgramId, String studentCodeOrName, Integer pageNumber, Integer pageSize);
 }

+ 14 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -2,10 +2,10 @@ package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
+import com.qmth.distributed.print.business.bean.result.DictionaryResult;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.entity.BasicProfessional;
 import com.qmth.distributed.print.business.entity.ObeCultureProgram;
-import com.qmth.distributed.print.business.entity.ObeCultureProgramCourse;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.mapper.ConditionMapper;
@@ -21,7 +21,6 @@ import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -45,9 +44,6 @@ public class ConditionServiceImpl implements ConditionService {
     @Resource
     BasicRoleDataPermissionService basicRoleDataPermissionService;
 
-    @Resource
-    TeachCourseService teachCourseService;
-
     @Resource
     SysOrgService sysOrgService;
 
@@ -204,8 +200,8 @@ public class ConditionServiceImpl implements ConditionService {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
         if ("client".equals(source)) {
-            String[] examDetailStatus = new String[]{ExamDetailStatusEnum.NEW.name(),
-                    PrintPlanStatusEnum.READY.name()};
+            String[] examDetailStatus = new String[] { ExamDetailStatusEnum.NEW.name(),
+                    PrintPlanStatusEnum.READY.name() };
             return conditionMapper.listPrintPlanForClient(semesterId, examId, examDetailStatus);
         } else {
             // 如果byAssignUser为true时,不能通过层级关系查询
@@ -264,10 +260,19 @@ public class ConditionServiceImpl implements ConditionService {
     }
 
     @Override
-    public List<BasicCourse> listCultureProgramCourse(Long professionalId, Long cultureProgramId) {
+    public List<DictionaryResult> listOutlineSemester(Long professionalId, Long cultureProgramId) {
+        Long privilegeId = ServletUtil.getCurrentPrivilegeId();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+
+        return conditionMapper.listOutlineSemester(schoolId, professionalId, cultureProgramId, dpr);
+    }
+
+    @Override
+    public List<BasicCourse> listCultureProgramCourse(Long professionalId, Long cultureProgramId, Long semesterId) {
         Long privilegeId = ServletUtil.getCurrentPrivilegeId();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        return conditionMapper.listCultureProgramCourse(schoolId, professionalId, cultureProgramId, dpr);
+        return conditionMapper.listCultureProgramCourse(schoolId, professionalId, cultureProgramId, semesterId, dpr);
     }
 }

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

@@ -1,12 +1,16 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.report.*;
 import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
-import com.qmth.distributed.print.business.entity.TRBasicInfo;
-import com.qmth.distributed.print.business.entity.TRExamStudent;
+import com.qmth.distributed.print.business.bean.result.report.studentRequirement.*;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.mapper.TRExamStudentMapper;
+import com.qmth.distributed.print.business.service.ObeCourseTargetService;
+import com.qmth.distributed.print.business.service.ObeCultureProgramRequirementService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
 import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -15,6 +19,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -39,6 +44,10 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
 
     @Resource
     TRBasicInfoService trBasicInfoService;
+    @Resource
+    private ObeCourseTargetService obeCourseTargetService;
+    @Resource
+    private ObeCultureProgramRequirementService obeCultureProgramRequirementService;
 
     /**
      * 获取考生详细报告
@@ -202,6 +211,73 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         return Objects.nonNull(trBasicInfo) ? trExamStudentService.remove(trBasicInfo.getId()) : false;
     }
 
+    @Override
+    public StudentRequirement getRequirementsStudentReport(Long cultureProgramId, String studentCode, Long semesterId) {
+        List<CourseTargetRequirement> courseTargetRequirementList = new ArrayList<>();
+        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = obeCultureProgramRequirementService.listRequirement(cultureProgramId);
+        for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
+            for (ObeCultureProgramRequirement cultureProgramRequirement : obeCultureProgramRequirement.getSubRequirementList()) {
+                courseTargetRequirementList.add(new CourseTargetRequirement(cultureProgramRequirement.getId(), obeCultureProgramRequirement.getId(), obeCultureProgramRequirement.getName()));
+            }
+        }
+
+        List<StudentCourseInfoDto> studentCourseInfoDtoList = this.baseMapper.listStudentCourseByCultureProgramIdAndStudentCodeAndSemesterId(cultureProgramId, studentCode, semesterId);
+        for (StudentCourseInfoDto studentCourseInfoDto : studentCourseInfoDtoList) {
+            studentCourseInfoDto.setCourseTargetRequirementList(courseTargetRequirementList);
+            String resultDetail = studentCourseInfoDto.getResultDetail();
+            if (!StringUtils.isEmpty(resultDetail)) {
+                List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSON.parseArray(resultDetail, ReportExamStudentTargetDto.class);
+                // 指标点
+                for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
+                    ObeCourseTarget obeCourseTarget = obeCourseTargetService.getById(reportExamStudentTargetDto.getTargetId());
+                    for (CourseTargetRequirement courseTargetRequirement : studentCourseInfoDto.getCourseTargetRequirementList()) {
+                        if (courseTargetRequirement.getSubRequirementId().equals(obeCourseTarget.getObeCultureProgramRequirementId())) {
+                            courseTargetRequirement.setCourseTargetDegree(reportExamStudentTargetDto.getMatrixDegree().doubleValue());
+                        }
+                    }
+                }
+            }
+        }
+
+        StudentRequirement studentRequirement = new StudentRequirement();
+        // 各科目达成度
+        List<StudentCourseRequirement> studentCourseRequirementList = new ArrayList<>();
+        for (StudentCourseInfoDto studentCourseInfoDto : studentCourseInfoDtoList) {
+            StudentCourseRequirement studentCourseRequirement = new StudentCourseRequirement();
+            studentCourseRequirement.setCourseCode(studentCourseInfoDto.getCourseCode());
+            studentCourseRequirement.setCourseName(studentCourseInfoDto.getCourseName());
+            studentCourseRequirement.setSemesterName(studentCourseInfoDto.getSemesterName());
+            studentCourseRequirement.setScore(studentCourseInfoDto.getScore());
+            LinkedHashMap<String, Double> map = studentCourseInfoDto.getCourseTargetRequirementList().stream().collect(Collectors.toMap(CourseTargetRequirement::getRequirementName, CourseTargetRequirement::getCourseTargetDegree, (v1, v2) -> v1 == null ? v2 == null ? v2 : v1.doubleValue() <= v2.doubleValue() ? v1 : v2 : v1, LinkedHashMap::new));
+            List<StudentCourseRequirementDetail> requirementDetailList = map.entrySet().stream().map(entry -> new StudentCourseRequirementDetail(entry.getKey(), entry.getValue())).collect(Collectors.toList());
+            studentCourseRequirement.setRequirementDetailList(requirementDetailList);
+            studentCourseRequirementList.add(studentCourseRequirement);
+        }
+        studentRequirement.setStudentCourseRequirementList(studentCourseRequirementList);
+
+        // 汇总达成度
+        List<CourseTargetRequirement> courseTargetRequirementListAll = new ArrayList<>();
+        for (StudentCourseInfoDto studentCourseInfoDto : studentCourseInfoDtoList) {
+            courseTargetRequirementListAll.addAll(studentCourseInfoDto.getCourseTargetRequirementList().stream().filter(m -> m.getCourseTargetDegree() != null).collect(Collectors.toList()));
+        }
+        Map<String, List<CourseTargetRequirement>> stringDoubleMap = courseTargetRequirementListAll.stream().collect(Collectors.groupingBy(CourseTargetRequirement::getRequirementName));
+        List<StudentTotalRequirement> studentTotalRequirementList = new ArrayList<>();
+        for (Map.Entry<String, List<CourseTargetRequirement>> entry : stringDoubleMap.entrySet()) {
+            Map<Long, Double> doubleMap = entry.getValue().stream().collect(Collectors.groupingBy(CourseTargetRequirement::getSubRequirementId, Collectors.summingDouble(CourseTargetRequirement::getCourseTargetDegree)));
+            StudentTotalRequirement studentTotalRequirement = new StudentTotalRequirement();
+            studentTotalRequirement.setRequirementName(entry.getKey());
+            studentTotalRequirement.setStudentDegree(doubleMap.values().stream().min(Double::compare).get());
+            studentTotalRequirementList.add(studentTotalRequirement);
+        }
+        studentRequirement.setStudentTotalRequirementList(studentTotalRequirementList);
+        return studentRequirement;
+    }
+
+    @Override
+    public Page<StudentRequirementInfoDto> getRequirementsStudentPage(Long cultureProgramId, String studentCodeOrName, Integer pageNumber, Integer pageSize) {
+        return null;
+    }
+
 //    /**
 //     * 知识点纬度数据构建
 //     *

+ 4 - 1
distributed-print-business/src/main/resources/db/log/caozixuan.sql

@@ -129,4 +129,7 @@ UPDATE sys_privilege SET related = '3031' WHERE (id = '3043');
 
 INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('3006', '课程大纲-查询可选择的培养方案', '/api/admin/obe/course_outline/can_choose_culture_program', 'URL', '3000', '5', 'AUTH', '1', '1', '1');
 INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('3007', '课程大纲-查询可选择的课程', '/api/admin/obe/course_outline/can_choose_course', 'URL', '3000', '6', 'AUTH', '1', '1', '1');
-UPDATE sys_privilege SET related = '3003,3006,3007' WHERE (id = '3014');
+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');

+ 46 - 1
distributed-print-business/src/main/resources/mapper/ConditionMapper.xml

@@ -834,6 +834,48 @@
                 )
         </where>
     </select>
+
+
+    <select id="listOutlineSemester"
+            resultType="com.qmth.distributed.print.business.bean.result.DictionaryResult">
+        SELECT
+            id AS id, name AS name, code AS code
+        FROM
+            basic_semester
+        <where>
+            AND EXISTS( SELECT
+            1
+                FROM
+            obe_course_outline oco
+                LEFT JOIN
+            obe_culture_program ocp ON oco.culture_program_id = ocp.id
+                LEFT JOIN
+            sys_user su ON oco.user_id = su.id
+            WHERE
+                oco.semester_id = basic_semester.id
+            <if test="schoolId != null">
+                AND oco.school_id = #{schoolId}
+            </if>
+            <if test="professionalId != null">
+                AND ocp.professional_id = #{professionalId}
+            </if>
+            <if test="cultureProgramId != null">
+                AND oco.culture_program_id = #{cultureProgramId}
+            </if>
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    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
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if>
+        </where>
+    </select>
+
     <select id="listCultureProgramCourse"
             resultType="com.qmth.teachcloud.common.entity.BasicCourse">
         SELECT
@@ -841,7 +883,7 @@
         FROM
             basic_course bc
         <where>
-             EXISTS( SELECT
+             AND EXISTS( SELECT
                 1
                     FROM
                 obe_course_outline oco
@@ -860,6 +902,9 @@
                 <if test="cultureProgramId != null">
                     AND oco.culture_program_id = #{cultureProgramId}
                 </if>
+                <if test="semesterId != null">
+                    AND oco.semester_id = #{semesterId}
+                </if>
                 <if test="dpr != null">
                     <if test="dpr.requestUserId != null">
                         AND oco.user_id = #{dpr.requestUserId}

+ 22 - 0
distributed-print-business/src/main/resources/mapper/TRExamStudentMapper.xml

@@ -2,4 +2,26 @@
 <!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.TRExamStudentMapper">
 
+    <select id="listStudentCourseByCultureProgramIdAndStudentCodeAndSemesterId"
+            resultType="com.qmth.distributed.print.business.bean.dto.report.StudentCourseInfoDto">
+        SELECT
+            rbi.culture_program_id,
+            bs.name semesterName,
+            rbi.course_code,
+            rbi.course_name,
+            res.result_detail,
+            res.score
+        FROM
+            t_r_exam_student res
+                LEFT JOIN
+            t_r_basic_info rbi ON res.r_basic_info_id = rbi.id
+                LEFT JOIN
+            basic_exam be ON rbi.exam_id = be.id
+                LEFT JOIN
+            basic_semester bs ON be.semester_id = bs.id
+        WHERE
+            rbi.culture_program_id = #{cultureProgramId}
+          AND res.student_code = #{studentCode}
+          AND bs.id = #{semesterId}
+    </select>
 </mapper>

+ 14 - 6
distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

@@ -1,7 +1,6 @@
 package com.qmth.distributed.print.api;
 
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.bean.dto.professional.ProfessionalDto;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.service.ConditionService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -122,23 +121,32 @@ public class ConditionController {
 
     @ApiOperation(value = "OBE-专业")
     @RequestMapping(value = "/list_professional", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
     public Result listProfessional() {
         return ResultUtil.ok(conditionService.listProfessional());
     }
 
     @ApiOperation(value = "OBE-培养方案")
     @RequestMapping(value = "/list_culture_program", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
     public Result listCultureProgram(@ApiParam(value = "专业ID") @RequestParam(value = "professionalId", required = false) Long professionalId) {
         return ResultUtil.ok(conditionService.listCultureProgram(professionalId));
     }
 
+    @ApiOperation(value = "OBE-学期")
+    @RequestMapping(value = "/list_outline_semester", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
+    public Result listOutlineSemester(@ApiParam(value = "专业ID") @RequestParam(value = "professionalId", required = false) Long professionalId,
+            @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId) {
+        return ResultUtil.ok(conditionService.listOutlineSemester(professionalId, cultureProgramId));
+    }
+
     @ApiOperation(value = "OBE-课程")
     @RequestMapping(value = "/list_culture_program_course", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
+    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
     public Result listCultureProgramCourse(@ApiParam(value = "专业ID") @RequestParam(value = "professionalId", required = false) Long professionalId,
-                                           @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId) {
-        return ResultUtil.ok(conditionService.listCultureProgramCourse(professionalId, cultureProgramId));
+            @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId,
+            @ApiParam(value = "学期id") @RequestParam(value = "semesterId", required = false) Long semesterId) {
+        return ResultUtil.ok(conditionService.listCultureProgramCourse(professionalId, cultureProgramId, semesterId));
     }
 }