wangliang 6 сар өмнө
parent
commit
7165339b90

+ 9 - 0
distributed-print/install/mysql/upgrade/3.4.2.sql

@@ -188,3 +188,12 @@ ALTER TABLE `mark_student`
 
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('3075', '修改违纪状态', '/api/scan/student/breach/update', 'URL', '970', '43', 'AUTH', '1', '1', '1');
 UPDATE `sys_privilege` SET `related` = '971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1007,1009,1010,1148,3072,3073,3074,3075' WHERE (`id` = '970');
+
+-- 2024-11-26
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(2115, '期末成绩-同步状态', '/api/admin/course/degree/final_score/sync/status', 'URL', 2006, 1, 'AUTH', NULL, 1, 1, 1);
+
+UPDATE sys_privilege
+SET name='管理成绩', url='Score', `type`='LINK', parent_id=2001, `sequence`=1, property='AUTH', related='2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2029,2030,2031,2032,2033,2034,3018,2111,2114,2115', enable=1, default_auth=0, front_display=1
+WHERE id=2006;

+ 11 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/obe/TCFinalScoreController.java

@@ -337,4 +337,15 @@ public class TCFinalScoreController {
         }
         return ResultUtil.ok(true);
     }
+
+    @ApiOperation(value = "查询期末成绩同步状态")
+    @RequestMapping(value = "/final_score/sync/status", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "同步状态", response = Boolean.class)})
+    @OperationLogDetail(operationType = OperationTypeEnum.SELECT)
+    public Result finalScoreSyncStatus(@ApiParam(value = "考试id", required = true) @RequestParam Long examId,
+                                       @ApiParam(value = "课程id", required = true) @RequestParam Long courseId,
+                                       @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                       @ApiParam(value = "培养方案id", required = true) @RequestParam Long cultureProgramId) {
+        return ResultUtil.ok(Collections.singletonMap("sync", tcFinalScoreService.queryFinalScoreSync(cultureProgramId, courseId, paperNumber, examId)));
+    }
 }

+ 22 - 0
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/been/result/ObeScoreResult.java

@@ -61,6 +61,28 @@ public class ObeScoreResult implements Serializable {
     @ApiModelProperty(value = "试卷编号")
     private String paperNumber;
 
+    @ApiModelProperty(value = "同步状态,0:未同步,1:同步")
+    private Boolean sync = false;
+
+    @ApiModelProperty(value = "考试名称")
+    private String examName;
+
+    public String getExamName() {
+        return examName;
+    }
+
+    public void setExamName(String examName) {
+        this.examName = examName;
+    }
+
+    public Boolean getSync() {
+        return sync;
+    }
+
+    public void setSync(Boolean sync) {
+        this.sync = sync;
+    }
+
     public Long getExamId() {
         return examId;
     }

+ 22 - 0
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/TCFinalScoreService.java

@@ -134,6 +134,28 @@ public interface TCFinalScoreService extends IService<TCFinalScore> {
      */
     public List<TCFinalScore> queryFinalScore(Long cultureProgramId, Long courseId, String paperNumber, Long examId);
 
+    /**
+     * 根据考试id/课程编码/试卷编码查询数据库数据
+     *
+     * @param cultureProgramId
+     * @param courseId
+     * @param paperNumber
+     * @param examId
+     * @return
+     */
+    public List<TCFinalScore> queryFinalScoreAll(Long cultureProgramId, Long courseId, String paperNumber, Long examId);
+
+    /**
+     * 查询期末成绩同步状态
+     *
+     * @param cultureProgramId
+     * @param courseId
+     * @param paperNumber
+     * @param examId
+     * @return
+     */
+    public Boolean queryFinalScoreSync(Long cultureProgramId, Long courseId, String paperNumber, Long examId);
+
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
      *

+ 11 - 0
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/TCUsualScoreService.java

@@ -55,6 +55,17 @@ public interface TCUsualScoreService extends IService<TCUsualScore> {
      */
     public List<TCUsualScore> queryUsualScore(Long cultureProgramId, Long courseId, String paperNumber, Long examId);
 
+    /**
+     * 根据考试id/课程编码/试卷编码查询数据库数据
+     *
+     * @param cultureProgramId
+     * @param courseId
+     * @param paperNumber
+     * @param examId
+     * @return
+     */
+    public List<TCUsualScore> queryUsualScoreAll(Long cultureProgramId, Long courseId, String paperNumber, Long examId);
+
     /**
      * 获取平时成绩导入锁
      *

+ 0 - 12
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/TRBasicInfoService.java

@@ -208,18 +208,6 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      */
     public void clearReportData(Long cultureProgramId, Long courseId, String paperNumber, Long examId, boolean clearDimension);
 
-    /**
-     * 清除报告数据
-     *
-     * @param cultureProgramId
-     * @param courseId
-     * @param paperNumber
-     * @param clearDimension
-     * @param examId
-     * @param userId
-     */
-    public void clearReportData(Long cultureProgramId, Long courseId, String paperNumber, Long examId, boolean clearDimension, Long userId);
-
     /**
      * 报表基础信息
      *

+ 60 - 62
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TCFinalScoreServiceImpl.java

@@ -362,10 +362,11 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
             //不为空则从markPaper里同步基础数据,否则从basicExamStudent同步
             List<TCFinalScore> tcFinalScoreList = null;
             List<TCUsualScore> tcUsualScoreList = null;
+            List<PaperStructDimensionResult> paperStructDimensionResultList = null;
             if (!CollectionUtils.isEmpty(markStudentScoreVoList)) {
                 tcFinalScoreList = new ArrayList<>(markStudentScoreVoList.size());
                 tcUsualScoreList = new ArrayList<>(markStudentScoreVoList.size());
-                List<PaperStructDimensionResult> paperStructDimensionResultList = new ArrayList<>(markStudentScoreVoList.size());
+                paperStructDimensionResultList = new ArrayList<>(markStudentScoreVoList.size());
                 for (int i = 0; i < markStudentScoreVoList.size(); i++) {
                     MarkStudentScoreVo markStudentScoreVo = markStudentScoreVoList.get(i);
                     if (!CollectionUtils.isEmpty(markStudentScoreVo.getTotalScoreList())) {
@@ -417,13 +418,13 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
                 }
             }
             if (!CollectionUtils.isEmpty(tcFinalScoreList) && !CollectionUtils.isEmpty(tcUsualScoreList)) {
-                DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
                 List<TCFinalScore> tcFinalScoreNotEqPaperNumberList = tcFinalScoreService.queryFinalScoreNotEqPaperNumber(cultureProgramId, courseId, paperNumber, examId, null);
                 List<TCFinalScore> tcFinalScoreNotEqExamAndPaperNumberList = tcFinalScoreService.queryFinalScoreNotEqExamIdAndPaperNumber(cultureProgramId, courseId, paperNumber, examId, null);
                 if (!CollectionUtils.isEmpty(tcFinalScoreNotEqPaperNumberList)) {
                     for (TCFinalScore t : tcFinalScoreNotEqPaperNumberList) {
                         tcUsualScoreService.remove(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId());
                         tcFinalScoreService.remove(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId());
+                        tcPaperStructService.remove(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId());
                         trBasicInfoService.clearReportData(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId(), true);
                     }
                 }
@@ -431,70 +432,39 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
                     for (TCFinalScore t : tcFinalScoreNotEqExamAndPaperNumberList) {
                         tcUsualScoreService.remove(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId());
                         tcFinalScoreService.remove(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId());
+                        tcPaperStructService.remove(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId());
                         trBasicInfoService.clearReportData(t.getCultureProgramId(), t.getCourseId(), t.getPaperNumber(), t.getExamId(), true);
                     }
                 }
-                if ((CollectionUtils.isEmpty(dpr.getOrgIdSet()) && Objects.isNull(dpr.getCourseUserId()) &&
-                        Objects.isNull(dpr.getRequestUserId()))
-                        || !CollectionUtils.isEmpty(dpr.getOrgIdSet())
-                        || Objects.nonNull(dpr.getCourseUserId())) {
-                    successData.add("共同步").add(tcFinalScoreList.size() + "").add("条数据");
-                    List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScore(cultureProgramId,
-                            courseId, paperNumber, examId);
-                    List<TCUsualScore> tcUsualScoreDbSourceList = tcUsualScoreService.queryUsualScore(cultureProgramId,
-                            courseId, paperNumber, examId);
-                    boolean clearReport = false;
-                    if (CollectionUtils.isEmpty(tcFinalScoreDbSourceList) || !CollectionUtils.isEqualCollection(
-                            tcFinalScoreDbSourceList, tcFinalScoreList)) {
-                        tcFinalScoreService.remove(cultureProgramId, courseId, paperNumber, examId);
-                        tcFinalScoreService.saveBatch(tcFinalScoreList);
-                        clearReport = true;
-                    }
-                    if (CollectionUtils.isEmpty(tcUsualScoreDbSourceList) || !CollectionUtils.isEqualCollection(
-                            tcUsualScoreDbSourceList, tcUsualScoreList)) {
-                        tcUsualScoreService.remove(cultureProgramId, courseId, paperNumber, examId);
-                        tcUsualScoreService.saveBatch(tcUsualScoreList);
-                        clearReport = true;
-                    }
-                    if (clearReport) {
-                        trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, examId, true);
-                    }
-                } else {
-                    List<TCFinalScore> tcFinalScoreActualList = tcFinalScoreList.stream().filter(s -> s.getCreateId().longValue() == sysUser.getId().longValue()).collect(Collectors.toList());
-                    if (!CollectionUtils.isEmpty(tcFinalScoreActualList)) {
-                        successData.add("共同步").add(tcFinalScoreActualList.size() + "").add("条数据");
-
-                        List<TCUsualScore> tcUsualScoreActualList = tcUsualScoreList.stream().filter(s -> s.getCreateId().longValue() == sysUser.getId().longValue()).collect(Collectors.toList());
-                        List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScore(cultureProgramId,
-                                courseId, paperNumber, examId);
-                        List<TCFinalScore> tcFinalScoreDbActualList = new ArrayList<>();
-                        if (!CollectionUtils.isEmpty(tcFinalScoreDbSourceList)) {
-                            tcFinalScoreDbActualList = tcFinalScoreDbSourceList.stream().filter(s -> s.getCreateId().longValue() == sysUser.getId().longValue()).collect(Collectors.toList());
-                        }
-                        List<TCUsualScore> tcUsualScoreDbSourceList = tcUsualScoreService.queryUsualScore(cultureProgramId,
-                                courseId, paperNumber, examId);
-                        List<TCUsualScore> tcUsualScoreDbActualList = new ArrayList<>();
-                        if (!CollectionUtils.isEmpty(tcUsualScoreDbSourceList)) {
-                            tcUsualScoreDbActualList = tcUsualScoreDbSourceList.stream().filter(s -> s.getCreateId().longValue() == sysUser.getId().longValue()).collect(Collectors.toList());
-                        }
-
-                        boolean clearReport = false;
-                        if (CollectionUtils.isEmpty(tcFinalScoreDbActualList) || !CollectionUtils.isEqualCollection(
-                                tcFinalScoreDbActualList, tcFinalScoreActualList)) {
-                            tcFinalScoreService.removeByIds(tcFinalScoreDbActualList.stream().map(s -> s.getId()).collect(Collectors.toList()));
-                            tcFinalScoreService.saveBatch(tcFinalScoreActualList);
-                            clearReport = true;
-                        }
-                        if (CollectionUtils.isEmpty(tcUsualScoreDbActualList) || !CollectionUtils.isEqualCollection(
-                                tcUsualScoreDbActualList, tcUsualScoreActualList)) {
-                            tcUsualScoreService.removeByIds(tcUsualScoreDbActualList.stream().map(s -> s.getId()).collect(Collectors.toList()));
-                            tcUsualScoreService.saveBatch(tcUsualScoreActualList);
-                            clearReport = true;
-                        }
-                        if (clearReport) {
-                            trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, examId, true);
-                        }
+                successData.add("共同步").add(tcFinalScoreList.size() + "").add("条数据");
+                List<TCFinalScore> tcFinalScoreDbSourceList = tcFinalScoreService.queryFinalScoreAll(cultureProgramId,
+                        courseId, paperNumber, examId);
+                boolean clearReport = false;
+                if (CollectionUtils.isEmpty(tcFinalScoreDbSourceList) || !CollectionUtils.isEqualCollection(
+                        tcFinalScoreDbSourceList, tcFinalScoreList)) {
+                    tcFinalScoreService.remove(cultureProgramId, courseId, paperNumber, examId);
+                    tcFinalScoreService.saveBatch(tcFinalScoreList);
+                    tcUsualScoreService.remove(cultureProgramId, courseId, paperNumber, examId);
+                    tcUsualScoreService.saveBatch(tcUsualScoreList);
+                    tcPaperStructService.remove(cultureProgramId, courseId, paperNumber, examId);
+                    clearReport = true;
+                }
+                if (clearReport) {
+                    trBasicInfoService.clearReportData(cultureProgramId, courseId, paperNumber, examId, true);
+                }
+                if (!CollectionUtils.isEmpty(paperStructDimensionResultList)) {
+                    TCPaperStruct tcPaperStructDb = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber, examId);
+                    if (Objects.nonNull(tcPaperStructDb)) {
+                        tcPaperStructService.removeById(tcPaperStructDb.getId());
                     }
+                    paperStructDimensionResultList = SDFrame.read(paperStructDimensionResultList).sortDesc(Sorter.sortDescBy(PaperStructDimensionResult::getMainNumber).sortDesc(PaperStructDimensionResult::getMainNumber)).toLists();
+                    TCPaperStruct tcPaperStruct = new TCPaperStruct(cultureProgramId, courseId, basicCourse.getCode(), basicCourse.getName(), paperNumber, JacksonUtil.parseJson(paperStructDimensionResultList),
+                            sysUser.getId(), examId, Objects.nonNull(tcPaperStructDb)
+                            && Objects.nonNull(cultureProgramId) && Objects.nonNull(tcPaperStructDb.getCultureProgramId()) && cultureProgramId.longValue() == tcPaperStructDb.getCultureProgramId().longValue()
+                            && Objects.nonNull(courseId) && Objects.nonNull(tcPaperStructDb.getCourseId()) && courseId.longValue() == tcPaperStructDb.getCourseId().longValue()
+                            && Objects.nonNull(paperNumber) && Objects.nonNull(tcPaperStructDb.getPaperNumber()) && Objects.equals(paperNumber, tcPaperStructDb.getPaperNumber())
+                            && Objects.nonNull(examId) && Objects.nonNull(tcPaperStructDb.getExamId()) && examId.longValue() == tcPaperStructDb.getExamId().longValue() ? tcPaperStructDb.getPaperStructDimension() : null);
+                    tcPaperStructService.saveOrUpdate(tcPaperStruct);
                 }
             }
             messageMap.put(SystemConstant.SUCCESS, successData.length() > 0 ? successData.toString() : "无");
@@ -584,6 +554,34 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
         return this.baseMapper.queryFinalScore(cultureProgramId, courseId, paperNumber, examId, dpr);
     }
 
+    /**
+     * 根据考试id/课程编码/试卷编码查询数据库数据
+     *
+     * @param cultureProgramId
+     * @param courseId
+     * @param paperNumber
+     * @param examId
+     * @return
+     */
+    @Override
+    public List<TCFinalScore> queryFinalScoreAll(Long cultureProgramId, Long courseId, String paperNumber, Long examId) {
+        return this.baseMapper.queryFinalScore(cultureProgramId, courseId, paperNumber, examId, null);
+    }
+
+    /**
+     * 查询期末成绩同步状态
+     *
+     * @param cultureProgramId
+     * @param courseId
+     * @param paperNumber
+     * @param examId
+     * @return
+     */
+    @Override
+    public Boolean queryFinalScoreSync(Long cultureProgramId, Long courseId, String paperNumber, Long examId) {
+        return !CollectionUtils.isEmpty(this.queryFinalScoreAll(cultureProgramId, courseId, paperNumber, examId)) ? true : false;
+    }
+
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
      *

+ 14 - 0
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TCUsualScoreServiceImpl.java

@@ -248,6 +248,20 @@ public class TCUsualScoreServiceImpl extends ServiceImpl<TCUsualScoreMapper, TCU
         return this.baseMapper.queryUsualScore(cultureProgramId, courseId, paperNumber, examId, dpr);
     }
 
+    /**
+     * 根据考试id/课程编码/试卷编码查询数据库数据
+     *
+     * @param cultureProgramId
+     * @param courseId
+     * @param paperNumber
+     * @param examId
+     * @return
+     */
+    @Override
+    public List<TCUsualScore> queryUsualScoreAll(Long cultureProgramId, Long courseId, String paperNumber, Long examId) {
+        return this.baseMapper.queryUsualScore(cultureProgramId, courseId, paperNumber, examId, null);
+    }
+
     /**
      * 获取平时成绩导入锁
      *

+ 0 - 25
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TRBasicInfoServiceImpl.java

@@ -1026,31 +1026,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         }
     }
 
-    /**
-     * 清除报表
-     *
-     * @param cultureProgramId
-     * @param courseId
-     * @param paperNumber
-     * @param examId
-     * @param clearDimension
-     * @param userId
-     */
-    @Override
-    public void clearReportData(Long cultureProgramId, Long courseId, String paperNumber, Long examId, boolean clearDimension, Long userId) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        trExamStudentService.remove(cultureProgramId, courseId, paperNumber, examId);
-        trBasicInfoService.remove(cultureProgramId, courseId, paperNumber, examId, sysUser.getId());
-        if (clearDimension) {
-            TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(cultureProgramId, courseId, paperNumber, examId);
-            if (Objects.nonNull(tcPaperStruct)) {
-//                tcPaperStruct.setPaperStructDimension(null);
-                tcPaperStruct.updateInfo(sysUser.getId());
-                tcPaperStructService.updateById(tcPaperStruct);
-            }
-        }
-    }
-
     /**
      * 报表基础信息
      *

+ 6 - 3
teachcloud-obe/src/main/resources/mapper/TCUsualScoreMapper.xml

@@ -18,7 +18,9 @@
         su.login_name AS userLoginName,
         oco.create_time as createTime,
         tcfs.exam_id as examId,
-        tcfs.paper_number as paperNumber
+        tcfs.paper_number as paperNumber,
+        if(tcfs.exam_id is null and tcfs.paper_number is null,false,true) as sync,
+        be.name as examName
         FROM
         obe_course_outline oco
         LEFT JOIN basic_course bc ON oco.course_id = bc.id
@@ -26,9 +28,10 @@
         LEFT JOIN sys_user su ON oco.user_id = su.id
         LEFT JOIN obe_culture_program ocp ON ocp.id = oco.culture_program_id
         LEFT JOIN t_c_final_score tcfs on tcfs.culture_program_id = oco.culture_program_id and tcfs.course_id = oco.course_id
-        LEFT JOIN basic_exam_student bes on bes.course_id = oco.course_id and bes.school_id  = oco.school_id and bes.semester_id = bs.id
+        LEFT JOIN basic_exam_student bes on bes.course_id = oco.course_id and bes.school_id = oco.school_id and bes.semester_id = bs.id
+        LEFT JOIN basic_exam be on be.id = tcfs.exam_id
         <where>
-            AND oco.school_id = #{schoolId}
+                oco.school_id = #{schoolId}
             <if test="cultureProgramId != null">
                 AND ocp.id = #{cultureProgramId}
             </if>