Browse Source

1.0.4 赋分计算

xiaofei 2 năm trước cách đây
mục cha
commit
006881cdba
33 tập tin đã thay đổi với 491 bổ sung107 xóa
  1. 16 6
      src/main/java/com/qmth/eds/api/ExamAssignController.java
  2. 4 2
      src/main/java/com/qmth/eds/api/ExamDownloadRecordController.java
  3. 11 0
      src/main/java/com/qmth/eds/api/ExamSemesterController.java
  4. 4 2
      src/main/java/com/qmth/eds/api/ExamSyncTotalController.java
  5. 11 0
      src/main/java/com/qmth/eds/api/ExamTypeController.java
  6. 11 0
      src/main/java/com/qmth/eds/bean/result/LoginResult.java
  7. 16 0
      src/main/java/com/qmth/eds/common/entity/ExamAssign.java
  8. 11 0
      src/main/java/com/qmth/eds/common/entity/ExamSemester.java
  9. 11 0
      src/main/java/com/qmth/eds/common/entity/ExamType.java
  10. 2 2
      src/main/java/com/qmth/eds/mapper/CloudMarkingScoreMapper.java
  11. 9 3
      src/main/java/com/qmth/eds/mapper/ExamAssignMapper.java
  12. 1 1
      src/main/java/com/qmth/eds/mapper/ExamDownloadRecordMapper.java
  13. 1 0
      src/main/java/com/qmth/eds/service/CloudMarkingScoreService.java
  14. 4 3
      src/main/java/com/qmth/eds/service/ExamAssignService.java
  15. 1 1
      src/main/java/com/qmth/eds/service/ExamDownloadRecordService.java
  16. 2 0
      src/main/java/com/qmth/eds/service/ExamSemesterService.java
  17. 1 1
      src/main/java/com/qmth/eds/service/ExamSyncTotalService.java
  18. 2 0
      src/main/java/com/qmth/eds/service/ExamTypeService.java
  19. 2 3
      src/main/java/com/qmth/eds/service/impl/CloudMarkingScoreServiceImpl.java
  20. 37 32
      src/main/java/com/qmth/eds/service/impl/ExamAssignServiceImpl.java
  21. 17 0
      src/main/java/com/qmth/eds/service/impl/ExamCourseMappingServiceImpl.java
  22. 2 2
      src/main/java/com/qmth/eds/service/impl/ExamDownloadRecordServiceImpl.java
  23. 26 7
      src/main/java/com/qmth/eds/service/impl/ExamScheduleTaskServiceImpl.java
  24. 24 1
      src/main/java/com/qmth/eds/service/impl/ExamSemesterServiceImpl.java
  25. 33 7
      src/main/java/com/qmth/eds/service/impl/ExamSyncTotalServiceImpl.java
  26. 24 1
      src/main/java/com/qmth/eds/service/impl/ExamTypeServiceImpl.java
  27. 4 1
      src/main/java/com/qmth/eds/service/impl/TeachcloudCommonServiceImpl.java
  28. 62 4
      src/main/java/com/qmth/eds/service/impl/WhuDataSyncServiceImpl.java
  29. 15 2
      src/main/resources/db/log/log-1.0.4.sql
  30. 27 23
      src/main/resources/mapper/CloudMarkingScoreMapper.xml
  31. 23 3
      src/main/resources/mapper/ExamAssignMapper.xml
  32. 10 0
      src/main/resources/mapper/ExamDownloadRecordMapper.xml
  33. 67 0
      src/test/java/com/qmth/eds/RoundTest.java

+ 16 - 6
src/main/java/com/qmth/eds/api/ExamAssignController.java

@@ -49,10 +49,11 @@ public class ExamAssignController {
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     public Result pageData(@RequestParam(value = "semesterId", required = false) Long semesterId,
                            @RequestParam(value = "examTypeId", required = false) Long examTypeId,
+                           @RequestParam(value = "collegeId", required = false) Long collegeId,
                            @RequestParam(value = "courseCode", required = false) String courseCode,
                            @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                            @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(examAssignService.pageData(semesterId, examTypeId, courseCode, pageNumber, pageSize));
+        return ResultUtil.ok(examAssignService.pageData(semesterId, examTypeId, collegeId, courseCode, pageNumber, pageSize));
     }
 
     @ApiOperation(value = "准备试算")
@@ -60,10 +61,11 @@ public class ExamAssignController {
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     public Result toCalc(@RequestParam(value = "semesterId", required = false) Long semesterId,
                          @RequestParam(value = "examTypeId", required = false) Long examTypeId,
+                         @RequestParam(value = "collegeId", required = false) Long collegeId,
                          @RequestParam(value = "courseCode", required = false) String courseCode,
                          @RequestParam(value = "courseName", required = false) String courseName,
                          @RequestParam(value = "openCollege", required = false) String openCollege) {
-        return ResultUtil.ok(examAssignService.toCalc(semesterId, examTypeId, courseCode, courseName, openCollege));
+        return ResultUtil.ok(examAssignService.toCalc(semesterId, examTypeId, collegeId, courseCode, courseName, openCollege));
     }
 
 
@@ -77,8 +79,14 @@ public class ExamAssignController {
     @ApiOperation(value = "发布赋分成绩")
     @PostMapping("/publish")
     @ApiResponses({@ApiResponse(code = 200, message = "保存/更新成功", response = EditResult.class)})
-    public Result publish(Long id) {
-        return ResultUtil.ok(examAssignService.publish(id));
+    public Result publish(@RequestParam(value = "id", required = false) Long id,
+                          @RequestParam(value = "semesterId", required = false) Long semesterId,
+                          @RequestParam(value = "examTypeId", required = false) Long examTypeId,
+                          @RequestParam(value = "collegeId", required = false) Long collegeId,
+                          @RequestParam(value = "courseCode", required = false) String courseCode,
+                          @RequestParam(value = "courseName", required = false) String courseName,
+                          @RequestParam(value = "openCollege", required = false) String openCollege) {
+        return ResultUtil.ok(examAssignService.publish(id, semesterId, examTypeId, collegeId, courseCode, courseName, openCollege));
     }
 
     @ApiOperation(value = "计算结果查询")
@@ -86,6 +94,7 @@ public class ExamAssignController {
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = AssignResultPreviewResult.class)})
     public Result assignResultPreview(@ApiParam(value = "学期id", required = true) @RequestParam Long semesterId,
                                       @ApiParam(value = "考试id", required = true) @RequestParam Long examTypeId,
+                                      @ApiParam(value = "学院id", required = true) @RequestParam Long collegeId,
                                       @ApiParam(value = "科目代码", required = true) @RequestParam String courseCode,
                                       @ApiParam(value = "开课学院", required = true) @RequestParam String openCollege,
                                       @ApiParam(value = "考查学院", required = false) @RequestParam(required = false) String kcCollege,
@@ -93,7 +102,7 @@ public class ExamAssignController {
                                       @ApiParam(value = "任课老师工号", required = false) @RequestParam(required = false) String teacherCode,
                                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                       @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<AssignResultPreviewResult> assignResultPreviewResultIPage = examAssignService.assignResultPreview(new Page<>(pageNumber, pageSize), semesterId, examTypeId, courseCode, openCollege, kcCollege, clazzId, teacherCode);
+        IPage<AssignResultPreviewResult> assignResultPreviewResultIPage = examAssignService.assignResultPreview(new Page<>(pageNumber, pageSize), semesterId, examTypeId, collegeId, courseCode, openCollege, kcCollege, clazzId, teacherCode);
         if (Objects.nonNull(assignResultPreviewResultIPage) && !CollectionUtils.isEmpty(assignResultPreviewResultIPage.getRecords())) {
             for (AssignResultPreviewResult a : assignResultPreviewResultIPage.getRecords()) {
                 a.setScoreDetail("客观题评分明细:" + a.getObjectiveScoreDetail() + "\r\n" + "主观题评分明细:" + a.getSubjectiveScoreDetail());
@@ -107,10 +116,11 @@ public class ExamAssignController {
     @ApiResponses({@ApiResponse(code = 200, message = "保存/更新成功", response = AssignContrastResult.class)})
     public Result contrast(@ApiParam(value = "学期id", required = true) @RequestParam Long semesterId,
                            @ApiParam(value = "考试id", required = true) @RequestParam Long examTypeId,
+                           @ApiParam(value = "学院id", required = true) @RequestParam Long collegeId,
                            @ApiParam(value = "科目代码", required = true) @RequestParam String courseCode,
                            @ApiParam(value = "开课学院", required = true) @RequestParam String openCollege,
                            @ApiParam(value = "及格分", required = true) @RequestParam BigDecimal passScore) {
-        List<StudentMarkResult> studentMarkResultList = cloudMarkingScoreService.queryStudentMark(semesterId, examTypeId, openCollege, courseCode);
+        List<StudentMarkResult> studentMarkResultList = cloudMarkingScoreService.queryStudentMark(semesterId, examTypeId, collegeId, openCollege, courseCode);
         AssignContrastResult assignContrastResult = null;
         if (!CollectionUtils.isEmpty(studentMarkResultList)) {
             BigDecimal assignBeforeSumScore = new BigDecimal(0), assignAfterSumScore = new BigDecimal(0), sumCount = new BigDecimal(studentMarkResultList.size());

+ 4 - 2
src/main/java/com/qmth/eds/api/ExamDownloadRecordController.java

@@ -34,12 +34,14 @@ public class ExamDownloadRecordController {
      */
     @ApiOperation(value = "查询")
     @PostMapping("/page")
-    public Result page(@RequestParam(value = "operateTime", required = false) Long operateTime,
+    public Result page(@RequestParam(value = "semesterId", required = false) Long semesterId,
+                       @RequestParam(value = "examTypeId", required = false) Long examTypeId,
+                       @RequestParam(value = "operateTime", required = false) Long operateTime,
                        @RequestParam(value = "used", required = false) Boolean used,
                        @RequestParam(value = "useScene", required = false) String useScene,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(examDownloadRecordService.list(operateTime, used, useScene, pageNumber, pageSize));
+        return ResultUtil.ok(examDownloadRecordService.list(semesterId, examTypeId, operateTime, used, useScene, pageNumber, pageSize));
     }
 
     /**

+ 11 - 0
src/main/java/com/qmth/eds/api/ExamSemesterController.java

@@ -64,4 +64,15 @@ public class ExamSemesterController {
         return ResultUtil.ok(examSemesterService.delete(id));
     }
 
+    /**
+     * 启用/禁用
+     *
+     * @param id ID
+     */
+    @ApiOperation(value = "启用/禁用")
+    @PostMapping("/enable")
+    public Result enable(@RequestParam(value = "id") Long id) {
+        return ResultUtil.ok(examSemesterService.enable(id));
+    }
+
 }

+ 4 - 2
src/main/java/com/qmth/eds/api/ExamSyncTotalController.java

@@ -38,10 +38,12 @@ public class ExamSyncTotalController {
      */
     @ApiOperation(value = "查询")
     @PostMapping("/page")
-    public Result page(@RequestParam(value = "syncDate", required = false) Long syncDate,
+    public Result page(@RequestParam(value = "semesterId", required = false) Long semesterId,
+                       @RequestParam(value = "examTypeId", required = false) Long examTypeId,
+                       @RequestParam(value = "syncDate", required = false) Long syncDate,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(examSyncTotalService.list(syncDate, pageNumber, pageSize));
+        return ResultUtil.ok(examSyncTotalService.list(semesterId, examTypeId, syncDate, pageNumber, pageSize));
     }
 
     /**

+ 11 - 0
src/main/java/com/qmth/eds/api/ExamTypeController.java

@@ -63,4 +63,15 @@ public class ExamTypeController {
     public Result delete(@RequestParam(value = "id", required = false) Long id) {
         return ResultUtil.ok(examTypeService.delete(id));
     }
+
+    /**
+     * 启用/禁用
+     *
+     * @param id ID
+     */
+    @ApiOperation(value = "启用/禁用")
+    @PostMapping("/enable")
+    public Result enable(@RequestParam(value = "id") Long id) {
+        return ResultUtil.ok(examTypeService.enable(id));
+    }
 }

+ 11 - 0
src/main/java/com/qmth/eds/bean/result/LoginResult.java

@@ -59,6 +59,9 @@ public class LoginResult implements Serializable {
     @ApiModelProperty(value = "用户登录验证拦截信息")
     private UserLoginCheckResult userLoginCheckResult;
 
+    @ApiModelProperty(value = "用户所属机构ID")
+    private String orgId;
+
     public LoginResult() {
 
     }
@@ -181,6 +184,14 @@ public class LoginResult implements Serializable {
         this.userLoginCheckResult = userLoginCheckResult;
     }
 
+    public String getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(String orgId) {
+        this.orgId = orgId;
+    }
+
     public class SchoolNativeBean implements Serializable {
 
         @ApiModelProperty(value = "id")

+ 16 - 0
src/main/java/com/qmth/eds/common/entity/ExamAssign.java

@@ -57,6 +57,22 @@ public class ExamAssign extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否发布")
     private Boolean publish;
 
+    public ExamAssign() {
+    }
+
+    public ExamAssign(Long schoolId, Long semesterId, Long examTypeId, String courseCode, String courseName, String openCollege, FormulaEnum formula, String coefficient, ExamAssignStatusEnum status, Boolean publish) {
+        this.schoolId = schoolId;
+        this.semesterId = semesterId;
+        this.examTypeId = examTypeId;
+        this.courseCode = courseCode;
+        this.courseName = courseName;
+        this.openCollege = openCollege;
+        this.formula = formula;
+        this.coefficient = coefficient;
+        this.status = status;
+        this.publish = publish;
+    }
+
     public Long getSchoolId() {
         return schoolId;
     }

+ 11 - 0
src/main/java/com/qmth/eds/common/entity/ExamSemester.java

@@ -23,6 +23,9 @@ public class ExamSemester extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "名称")
     private String name;
 
+    @ApiModelProperty(value = "启用/禁用")
+    private Boolean enable;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -38,4 +41,12 @@ public class ExamSemester extends BaseEntity implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
 }

+ 11 - 0
src/main/java/com/qmth/eds/common/entity/ExamType.java

@@ -23,6 +23,9 @@ public class ExamType extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "名称")
     private String name;
 
+    @ApiModelProperty(value = "启用/禁用")
+    private Boolean enable;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -38,4 +41,12 @@ public class ExamType extends BaseEntity implements Serializable {
     public void setName(String name) {
         this.name = name;
     }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
 }

+ 2 - 2
src/main/java/com/qmth/eds/mapper/CloudMarkingScoreMapper.java

@@ -24,7 +24,7 @@ public interface CloudMarkingScoreMapper extends BaseMapper<CloudMarkingScore> {
      * 查询学生成绩
      *
      * @param schoolId
-     * @param orgId
+     * @param collegeId
      * @param semesterId
      * @param examTypeId
      * @param openCollege
@@ -32,7 +32,7 @@ public interface CloudMarkingScoreMapper extends BaseMapper<CloudMarkingScore> {
      * @return
      */
     List<StudentMarkResult> queryStudentMark(@Param("schoolId") Long schoolId,
-                                             @Param("orgId") Long orgId,
+                                             @Param("collegeId") Long collegeId,
                                              @Param("semesterId") Long semesterId,
                                              @Param("examTypeId") Long examTypeId,
                                              @Param("openCollege") String openCollege,

+ 9 - 3
src/main/java/com/qmth/eds/mapper/ExamAssignMapper.java

@@ -24,7 +24,7 @@ public interface ExamAssignMapper extends BaseMapper<ExamAssign> {
      *
      * @param iPage
      * @param schoolId
-     * @param orgId
+     * @param collegeId
      * @param semesterId
      * @param examTypeId
      * @param courseCode
@@ -34,10 +34,16 @@ public interface ExamAssignMapper extends BaseMapper<ExamAssign> {
      * @param teacherCode
      * @return
      */
-    IPage<AssignResultPreviewResult> assignResultPreview(IPage<Map> iPage, @Param("schoolId") Long schoolId, @Param("orgId") Long orgId,
+    IPage<AssignResultPreviewResult> assignResultPreview(IPage<Map> iPage,
+                                                         @Param("schoolId") Long schoolId,
+                                                         @Param("collegeId") Long collegeId,
                                                          @Param("semesterId") Long semesterId,
                                                          @Param("examTypeId") Long examTypeId,
                                                          @Param("courseCode") String courseCode,
                                                          @Param("openCollege") String openCollege,
-                                                         @Param("kcCollege") String kcCollege, @Param("clazzId") String clazzId, @Param("teacherCode") String teacherCode);
+                                                         @Param("kcCollege") String kcCollege,
+                                                         @Param("clazzId") String clazzId,
+                                                         @Param("teacherCode") String teacherCode);
+
+    ExamAssign getBySchoolIdAndSemesterIdAndExamTypeIdAndCourseCodeAndOpenCollege(@Param("collegeId") Long collegeId, @Param("semesterId") Long semesterId, @Param("examTypeId") Long examTypeId, @Param("courseCode") String courseCode, @Param("kkxy") String kkxy);
 }

+ 1 - 1
src/main/java/com/qmth/eds/mapper/ExamDownloadRecordMapper.java

@@ -11,5 +11,5 @@ import org.apache.ibatis.annotations.Param;
  * 用户下载记录表 Mapper 接口
  */
 public interface ExamDownloadRecordMapper extends BaseMapper<ExamDownloadRecord> {
-    IPage<ExamDownloadRecordDto> list(@Param("page") Page<ExamDownloadRecordDto> page, @Param("schoolId") Long schoolId, @Param("operateDate") String operateDate, @Param("used") Boolean used, @Param("useScene") String useScene);
+    IPage<ExamDownloadRecordDto> list(@Param("page") Page<ExamDownloadRecordDto> page, @Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examTypeId") Long examTypeId, @Param("operateDate") String operateDate, @Param("used") Boolean used, @Param("useScene") String useScene);
 }

+ 1 - 0
src/main/java/com/qmth/eds/service/CloudMarkingScoreService.java

@@ -31,6 +31,7 @@ public interface CloudMarkingScoreService extends IService<CloudMarkingScore> {
      */
     List<StudentMarkResult> queryStudentMark(Long semesterId,
                                              Long examTypeId,
+                                             Long collegeId,
                                              String openCollege,
                                              String courseCode);
 }

+ 4 - 3
src/main/java/com/qmth/eds/service/ExamAssignService.java

@@ -16,7 +16,7 @@ import java.util.Map;
 public interface ExamAssignService extends IService<ExamAssign> {
 
 
-    IPage<ExamAssignDto> pageData(Long semesterId, Long examTypeId, String courseCode, Integer pageNumber, Integer pageSize);
+    IPage<ExamAssignDto> pageData(Long semesterId, Long examTypeId, Long collegeId, String courseCode, Integer pageNumber, Integer pageSize);
 
     String calcData(String data);
 
@@ -36,13 +36,14 @@ public interface ExamAssignService extends IService<ExamAssign> {
     IPage<AssignResultPreviewResult> assignResultPreview(IPage<Map> iPage,
                                                          Long semesterId,
                                                          Long examTypeId,
+                                                         Long collegeId,
                                                          String courseCode,
                                                          String openCollege,
                                                          String kcCollege, String clazzId, String teacherCode);
 
     Map contrast(Long semesterId, Long examTypeId, String courseCode);
 
-    ExamAssignDto toCalc(Long semesterId, Long examTypeId, String courseCode, String courseName, String openCollege);
+    ExamAssignDto toCalc(Long semesterId, Long examTypeId, Long collegeId, String courseCode, String courseName, String openCollege);
 
-    boolean publish(Long id);
+    boolean publish(Long id, Long semesterId, Long examTypeId, Long collegeId, String courseCode, String courseName, String openCollege);
 }

+ 1 - 1
src/main/java/com/qmth/eds/service/ExamDownloadRecordService.java

@@ -10,7 +10,7 @@ import com.qmth.eds.common.entity.ExamDownloadRecord;
  */
 public interface ExamDownloadRecordService extends IService<ExamDownloadRecord> {
 
-    IPage<ExamDownloadRecordDto> list(Long operateTime, Boolean used, String useScene, Integer pageNumber, Integer pageSize);
+    IPage<ExamDownloadRecordDto> list(Long semesterId, Long examTypeId, Long operateTime, Boolean used, String useScene, Integer pageNumber, Integer pageSize);
 
     boolean used(String id, Boolean used, String useScene);
 }

+ 2 - 0
src/main/java/com/qmth/eds/service/ExamSemesterService.java

@@ -18,4 +18,6 @@ public interface ExamSemesterService extends IService<ExamSemester> {
     boolean delete(Long id);
 
     IPage<ExamSemester> pageData(Integer pageNumber, Integer pageSize);
+
+    boolean enable(Long id);
 }

+ 1 - 1
src/main/java/com/qmth/eds/service/ExamSyncTotalService.java

@@ -13,7 +13,7 @@ import java.util.List;
  */
 public interface ExamSyncTotalService extends IService<ExamSyncTotal> {
 
-    IPage<ExamSyncTotal> list(Long syncDate, Integer pageNumber, Integer pageSize);
+    IPage<ExamSyncTotal> list(Long semesterId, Long examTypeId, Long syncDate, Integer pageNumber, Integer pageSize);
 
     void download(Long id, Boolean writeLog, HttpServletResponse response);
 

+ 2 - 0
src/main/java/com/qmth/eds/service/ExamTypeService.java

@@ -18,4 +18,6 @@ public interface ExamTypeService extends IService<ExamType> {
     IPage<ExamType> pageData(Integer pageNumber, Integer pageSize);
 
     List<ExamType> listData();
+
+    boolean enable(Long id);
 }

+ 2 - 3
src/main/java/com/qmth/eds/service/impl/CloudMarkingScoreServiceImpl.java

@@ -56,9 +56,8 @@ public class CloudMarkingScoreServiceImpl extends ServiceImpl<CloudMarkingScoreM
      * @return
      */
     @Override
-    public List<StudentMarkResult> queryStudentMark(Long semesterId, Long examTypeId, String openCollege, String courseCode) {
+    public List<StudentMarkResult> queryStudentMark(Long semesterId, Long examTypeId, Long collegeId, String openCollege, String courseCode) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        return cloudMarkingScoreMapper.queryStudentMark(schoolId, sysUser.getOrgId(), semesterId, examTypeId, openCollege, courseCode);
+        return cloudMarkingScoreMapper.queryStudentMark(schoolId, collegeId, semesterId, examTypeId, openCollege, courseCode);
     }
 }

+ 37 - 32
src/main/java/com/qmth/eds/service/impl/ExamAssignServiceImpl.java

@@ -16,7 +16,6 @@ import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.ExamAssignMapper;
 import com.qmth.eds.service.*;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -56,11 +55,10 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
     ExamAssignMapper examAssignMapper;
 
     @Override
-    public IPage<ExamAssignDto> pageData(Long semesterId, Long examTypeId, String courseCode, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamAssignDto> pageData(Long semesterId, Long examTypeId, Long collegeId, String courseCode, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Page<ExamAssignDto> page = new Page<>(pageNumber, pageSize);
-        IPage<ExamAssignDto> assignListDtoIPage = this.baseMapper.pageData(page, sysUser.getOrgId(), semesterId, examTypeId, courseCode);
+        IPage<ExamAssignDto> assignListDtoIPage = this.baseMapper.pageData(page, collegeId, semesterId, examTypeId, courseCode);
 
         ExamSyncTotal examSyncTotal = examSyncTotalService.getBySemesterIdAndExamTypeIdAndUseFile(schoolId, semesterId, examTypeId, true);
         if (examSyncTotal == null) {
@@ -82,6 +80,14 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
             }
             record.setActualCount(actualCount);
             record.setOpenCollege(kkxy);
+
+            ExamAssign examAssign = this.baseMapper.getBySchoolIdAndSemesterIdAndExamTypeIdAndCourseCodeAndOpenCollege(collegeId, semesterId, examTypeId, record.getCourseCode(), kkxy);
+            if (examAssign != null) {
+                record.setId(examAssign.getId());
+                record.setFormula(examAssign.getFormula());
+                record.setStatus(examAssign.getStatus());
+                record.setPublish(examAssign.getPublish());
+            }
         }
 
         return assignListDtoIPage;
@@ -126,10 +132,14 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
     public IPage<AssignResultPreviewResult> assignResultPreview(IPage<Map> iPage,
                                                                 Long semesterId,
                                                                 Long examTypeId,
-                                                                String courseCode, String openCollege, String kcCollege, String clazzId, String teacherCode) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+                                                                Long collegeId,
+                                                                String courseCode,
+                                                                String openCollege,
+                                                                String kcCollege,
+                                                                String clazzId,
+                                                                String teacherCode) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        return examAssignMapper.assignResultPreview(iPage, schoolId, sysUser.getOrgId(), semesterId, examTypeId, courseCode, openCollege, kcCollege, clazzId, teacherCode);
+        return examAssignMapper.assignResultPreview(iPage, schoolId, collegeId, semesterId, examTypeId, courseCode, openCollege, kcCollege, clazzId, teacherCode);
     }
 
     @Override
@@ -138,29 +148,16 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
     }
 
     @Override
-    public ExamAssignDto toCalc(Long semesterId, Long examTypeId, String courseCode, String courseName, String openCollege) {
+    public ExamAssignDto toCalc(Long semesterId, Long examTypeId, Long collegeId, String courseCode, String courseName, String openCollege) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
-        QueryWrapper<ExamAssign> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamAssign::getSchoolId, sysUser.getOrgId())
-                .eq(ExamAssign::getSemesterId, semesterId)
-                .eq(ExamAssign::getExamTypeId, examTypeId)
-                .eq(ExamAssign::getCourseCode, courseCode)
-                .eq(ExamAssign::getOpenCollege, openCollege);
-        ExamAssign examAssign = this.getOne(queryWrapper);
+        ExamAssign examAssign = this.baseMapper.getBySchoolIdAndSemesterIdAndExamTypeIdAndCourseCodeAndOpenCollege(collegeId, semesterId, examTypeId, courseCode, openCollege);
         ExamAssignDto examAssignDto = new ExamAssignDto();
         if (examAssign == null) {
-            examAssignDto.setSchoolId(sysUser.getSchoolId());
-            examAssignDto.setSemesterId(semesterId);
-            examAssignDto.setExamTypeId(examTypeId);
-            examAssignDto.setCourseCode(courseCode);
-            examAssignDto.setCourseName(courseName);
-            examAssignDto.setOpenCollege(openCollege);
-            examAssignDto.setStatus(ExamAssignStatusEnum.INIT);
-        } else {
-            BeanUtils.copyProperties(examAssign, examAssignDto);
+            examAssign = new ExamAssign(collegeId, semesterId, examTypeId, courseCode, courseName, openCollege, null, null, ExamAssignStatusEnum.INIT, false);
+            this.save(examAssign);
         }
+        BeanUtils.copyProperties(examAssign, examAssignDto);
 
         ExamSyncTotal examSyncTotal = examSyncTotalService.getBySemesterIdAndExamTypeIdAndUseFile(schoolId, semesterId, examTypeId, true);
         if (examSyncTotal == null) {
@@ -181,13 +178,21 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
 
     @Transactional
     @Override
-    public boolean publish(Long id) {
+    public boolean publish(Long id, Long semesterId, Long examTypeId, Long collegeId, String courseCode, String courseName, String openCollege) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        ExamAssign examAssign = this.getById(id);
-        Long semesterId = examAssign.getSemesterId();
-        Long examTypeId = examAssign.getExamTypeId();
-        Long collegeId = examAssign.getSchoolId();
-        String courseCode = examAssign.getCourseCode();
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        ExamAssign examAssign;
+        if (id == null) {
+            examAssign = new ExamAssign(collegeId, semesterId, examTypeId, courseCode, courseName, openCollege, null, null, ExamAssignStatusEnum.INIT, false);
+            examAssign.insertInfo(sysUser.getId());
+            this.save(examAssign);
+        } else {
+            examAssign = this.getById(id);
+            if(examAssign.getFormula() != null && !ExamAssignStatusEnum.FINISH.equals(examAssign.getStatus())){
+                throw ExceptionResultEnum.ERROR.exception("赋分计算未完成,暂无法发布成绩");
+            }
+        }
 
         // 查询对外数据
         ExamSyncTotal examSyncTotal = examSyncTotalService.getBySemesterIdAndExamTypeIdAndUseFile(schoolId, semesterId, examTypeId, true);
@@ -249,7 +254,7 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
         // 更新发布状态为已发布
         UpdateWrapper<ExamAssign> examAssignUpdateWrapper = new UpdateWrapper<>();
         examAssignUpdateWrapper.lambda().set(ExamAssign::getPublish, true)
-                .eq(ExamAssign::getId, id);
+                .eq(ExamAssign::getId, examAssign.getId());
         return this.update(examAssignUpdateWrapper);
     }
 }

+ 17 - 0
src/main/java/com/qmth/eds/service/impl/ExamCourseMappingServiceImpl.java

@@ -8,6 +8,7 @@ import com.qmth.boot.tools.excel.ExcelReader;
 import com.qmth.boot.tools.excel.enums.ExcelType;
 import com.qmth.eds.bean.dto.ExamCourseMappingDto;
 import com.qmth.eds.common.entity.ExamCourseMapping;
+import com.qmth.eds.common.entity.ExamScheduleTask;
 import com.qmth.eds.common.entity.ExamSemester;
 import com.qmth.eds.common.entity.ExamType;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
@@ -18,11 +19,13 @@ import com.qmth.eds.service.ExamSemesterService;
 import com.qmth.eds.service.ExamTypeService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.InputStream;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class ExamCourseMappingServiceImpl extends ServiceImpl<ExamCourseMappingMapper, ExamCourseMapping> implements ExamCourseMappingService {
@@ -38,9 +41,23 @@ public class ExamCourseMappingServiceImpl extends ServiceImpl<ExamCourseMappingM
         QueryWrapper<ExamCourseMapping> queryWrapper = new QueryWrapper<>();
         if (semesterId != null) {
             queryWrapper.lambda().eq(ExamCourseMapping::getSemesterId, semesterId);
+        } else {
+            List<ExamSemester> examSemesters = examSemesterService.listBySchoolId();
+            List<Long> semesterIds = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(examSemesters)) {
+                semesterIds = examSemesters.stream().map(ExamSemester::getId).collect(Collectors.toList());
+            }
+            queryWrapper.lambda().in(ExamCourseMapping::getSemesterId, semesterIds);
         }
         if (examTypeId != null) {
             queryWrapper.lambda().eq(ExamCourseMapping::getExamTypeId, examTypeId);
+        } else {
+            List<ExamType> examTypes = examTypeService.listData();
+            List<Long> examTypeIds = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(examTypes)) {
+                examTypeIds = examTypes.stream().map(ExamType::getId).collect(Collectors.toList());
+            }
+            queryWrapper.lambda().in(ExamCourseMapping::getExamTypeId, examTypeIds);
         }
         if (StringUtils.isNotBlank(syncCourseCode)) {
             queryWrapper.lambda().likeRight(ExamCourseMapping::getSyncCourseCode, syncCourseCode);

+ 2 - 2
src/main/java/com/qmth/eds/service/impl/ExamDownloadRecordServiceImpl.java

@@ -20,10 +20,10 @@ import java.util.StringJoiner;
 @Service
 public class ExamDownloadRecordServiceImpl extends ServiceImpl<ExamDownloadRecordMapper, ExamDownloadRecord> implements ExamDownloadRecordService {
     @Override
-    public IPage<ExamDownloadRecordDto> list(Long operateTime, Boolean used, String useScene, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamDownloadRecordDto> list(Long semesterId, Long examTypeId, Long operateTime, Boolean used, String useScene, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         String operateDate = operateTime != null ? new SimpleDateFormat("yyyy-MM-dd").format(operateTime) : null;
-        IPage<ExamDownloadRecordDto> examDownloadRecordDtoIPage = this.baseMapper.list(new Page<>(pageNumber, pageSize),schoolId, operateDate, used, useScene);
+        IPage<ExamDownloadRecordDto> examDownloadRecordDtoIPage = this.baseMapper.list(new Page<>(pageNumber, pageSize), schoolId, semesterId, examTypeId, operateDate, used, useScene);
         for (ExamDownloadRecordDto record : examDownloadRecordDtoIPage.getRecords()) {
             String scene = record.getUseScene();
             if (StringUtils.isNotBlank(scene)) {

+ 26 - 7
src/main/java/com/qmth/eds/service/impl/ExamScheduleTaskServiceImpl.java

@@ -5,23 +5,28 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.eds.common.contant.SystemConstant;
-import com.qmth.eds.common.entity.BasicSchool;
-import com.qmth.eds.common.entity.ExamScheduleTask;
-import com.qmth.eds.common.entity.SysUser;
+import com.qmth.eds.common.entity.*;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.ExamScheduleTaskMapper;
-import com.qmth.eds.service.CommonCacheService;
-import com.qmth.eds.service.ExamScheduleTaskService;
-import com.qmth.eds.service.SysUserService;
+import com.qmth.eds.service.*;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ExamScheduleTaskServiceImpl extends ServiceImpl<ExamScheduleTaskMapper, ExamScheduleTask> implements ExamScheduleTaskService {
 
+    @Resource
+    ExamSemesterService examSemesterService;
+
+    @Resource
+    ExamTypeService examTypeService;
+
     @Resource
     private SysUserService sysUserService;
 
@@ -36,9 +41,23 @@ public class ExamScheduleTaskServiceImpl extends ServiceImpl<ExamScheduleTaskMap
         queryWrapper.lambda().eq(ExamScheduleTask::getSchoolId, schoolId);
         if (semesterId != null) {
             queryWrapper.lambda().eq(ExamScheduleTask::getSemesterId, semesterId);
+        } else {
+            List<ExamSemester> examSemesters = examSemesterService.listBySchoolId();
+            List<Long> semesterIds = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(examSemesters)) {
+                semesterIds = examSemesters.stream().map(ExamSemester::getId).collect(Collectors.toList());
+            }
+            queryWrapper.lambda().in(ExamScheduleTask::getSemesterId, semesterIds);
         }
         if (examTypeId != null) {
             queryWrapper.lambda().eq(ExamScheduleTask::getExamTypeId, examTypeId);
+        } else {
+            List<ExamType> examTypes = examTypeService.listData();
+            List<Long> examTypeIds = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(examTypes)) {
+                examTypeIds = examTypes.stream().map(ExamType::getId).collect(Collectors.toList());
+            }
+            queryWrapper.lambda().in(ExamScheduleTask::getExamTypeId, examTypeIds);
         }
         if (startTime != null) {
             queryWrapper.lambda().ge(ExamScheduleTask::getStartTime, startTime);
@@ -67,7 +86,7 @@ public class ExamScheduleTaskServiceImpl extends ServiceImpl<ExamScheduleTaskMap
             examScheduleTask.setId(SystemConstant.getDbUuid());
             examScheduleTask.setSchoolId(schoolId);
             BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
-            if(basicSchool != null){
+            if (basicSchool != null) {
                 examScheduleTask.setSchoolName(basicSchool.getName());
             }
             examScheduleTask.setCreateId(userId);

+ 24 - 1
src/main/java/com/qmth/eds/service/impl/ExamSemesterServiceImpl.java

@@ -27,7 +27,8 @@ public class ExamSemesterServiceImpl extends ServiceImpl<ExamSemesterMapper, Exa
     public List<ExamSemester> listBySchoolId() {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<ExamSemester> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamSemester::getSchoolId, schoolId);
+        queryWrapper.lambda().eq(ExamSemester::getSchoolId, schoolId)
+                .eq(ExamSemester::getEnable, true);
         return this.baseMapper.selectList(queryWrapper);
     }
 
@@ -72,4 +73,26 @@ public class ExamSemesterServiceImpl extends ServiceImpl<ExamSemesterMapper, Exa
         queryWrapper.lambda().eq(ExamSemester::getSchoolId, schoolId);
         return this.page(page, queryWrapper);
     }
+
+    @Override
+    public boolean enable(Long id) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        ExamSemester examSemester = this.getById(id);
+
+        if (examSemester.getEnable()) {
+            long currentTime = System.currentTimeMillis();
+            QueryWrapper<ExamScheduleTask> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ExamScheduleTask::getSchoolId, schoolId)
+                    .eq(ExamScheduleTask::getSemesterId, id)
+                    .lt(ExamScheduleTask::getStartTime, currentTime)
+                    .gt(ExamScheduleTask::getEndTime, currentTime);
+            int count = examScheduleTaskService.count(queryWrapper);
+            if (count != 0) {
+                throw ExceptionResultEnum.ERROR.exception("该学期下有未结束的定时任务,无法禁用");
+            }
+        }
+
+        examSemester.setEnable(!examSemester.getEnable());
+        return this.updateById(examSemester);
+    }
 }

+ 33 - 7
src/main/java/com/qmth/eds/service/impl/ExamSyncTotalServiceImpl.java

@@ -7,23 +7,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.eds.bean.dto.ExamSyncTotalDownloadDto;
 import com.qmth.eds.common.contant.SystemConstant;
-import com.qmth.eds.common.entity.ExamDownloadRecord;
-import com.qmth.eds.common.entity.ExamSyncTotal;
-import com.qmth.eds.common.entity.SysUser;
+import com.qmth.eds.common.entity.*;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.util.FileUtil;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.ExamSyncTotalMapper;
-import com.qmth.eds.service.ExamDownloadRecordService;
-import com.qmth.eds.service.ExamSyncTotalService;
-import com.qmth.eds.service.SysUserService;
+import com.qmth.eds.service.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ExamSyncTotalServiceImpl extends ServiceImpl<ExamSyncTotalMapper, ExamSyncTotal> implements ExamSyncTotalService {
@@ -31,14 +30,41 @@ public class ExamSyncTotalServiceImpl extends ServiceImpl<ExamSyncTotalMapper, E
     @Resource
     private SysUserService sysUserService;
 
+    @Resource
+    private ExamSemesterService examSemesterService;
+
+    @Resource
+    private ExamTypeService examTypeService;
+
     @Resource
     private ExamDownloadRecordService examDownloadRecordService;
 
     @Override
-    public IPage<ExamSyncTotal> list(Long syncDate, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamSyncTotal> list(Long semesterId, Long examTypeId, Long syncDate, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<ExamSyncTotal> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamSyncTotal::getSchoolId, schoolId);
+        if (semesterId != null) {
+            queryWrapper.lambda().eq(ExamSyncTotal::getSemesterId, semesterId);
+        } else {
+            List<ExamSemester> examSemesters = examSemesterService.listBySchoolId();
+            List<Long> semesterIds = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(examSemesters)) {
+                semesterIds = examSemesters.stream().map(ExamSemester::getId).collect(Collectors.toList());
+            }
+            queryWrapper.lambda().in(ExamSyncTotal::getSemesterId, semesterIds);
+        }
+        if (examTypeId != null) {
+            queryWrapper.lambda().eq(ExamSyncTotal::getExamTypeId, examTypeId);
+        } else {
+            List<ExamType> examTypes = examTypeService.listData();
+            List<Long> examTypeIds = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(examTypes)) {
+                examTypeIds = examTypes.stream().map(ExamType::getId).collect(Collectors.toList());
+            }
+            queryWrapper.lambda().in(ExamSyncTotal::getExamTypeId, examTypeIds);
+        }
+
         if (syncDate != null) {
             queryWrapper.lambda().eq(ExamSyncTotal::getSyncDate, syncDate);
         }

+ 24 - 1
src/main/java/com/qmth/eds/service/impl/ExamTypeServiceImpl.java

@@ -69,7 +69,30 @@ public class ExamTypeServiceImpl extends ServiceImpl<ExamTypeMapper, ExamType> i
     public List<ExamType> listData() {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<ExamType> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamType::getSchoolId, schoolId);
+        queryWrapper.lambda().eq(ExamType::getSchoolId, schoolId)
+                .eq(ExamType::getEnable, true);
         return this.list(queryWrapper);
     }
+
+    @Override
+    public boolean enable(Long id) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        ExamType examType = this.getById(id);
+
+        if (examType.getEnable()) {
+            long currentTime = System.currentTimeMillis();
+            QueryWrapper<ExamScheduleTask> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ExamScheduleTask::getSchoolId, schoolId)
+                    .eq(ExamScheduleTask::getExamTypeId, id)
+                    .lt(ExamScheduleTask::getStartTime, currentTime)
+                    .gt(ExamScheduleTask::getEndTime, currentTime);
+            int count = examScheduleTaskService.count(queryWrapper);
+            if (count != 0) {
+                throw ExceptionResultEnum.ERROR.exception("该考试类型下有未结束的定时任务,无法禁用");
+            }
+        }
+
+        examType.setEnable(!examType.getEnable());
+        return this.updateById(examType);
+    }
 }

+ 4 - 1
src/main/java/com/qmth/eds/service/impl/TeachcloudCommonServiceImpl.java

@@ -79,7 +79,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
 
         LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleNames, appSource);
-        if(sysUser.getSchoolId() != null) {
+        if (sysUser.getSchoolId() != null) {
             BasicSchool basicSchool = commonCacheService.schoolCache(sysUser.getSchoolId());
             loginResult.setSchoolInfo(Objects.nonNull(basicSchool) ? loginResult.new SchoolNativeBean(basicSchool) : null);
         }
@@ -87,6 +87,9 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         String mobileNumber = sysUser.getMobileNumber();
         int pwdCount = sysUser.getPwdCount();
         loginResult.setUserLoginCheckResult(new UserLoginCheckResult(sysUser.getId(), mobileNumber, pwdCount));
+        if (sysUser.getOrgId() != null) {
+            loginResult.setOrgId(String.valueOf(sysUser.getOrgId()));
+        }
         return loginResult;
     }
 

+ 62 - 4
src/main/java/com/qmth/eds/service/impl/WhuDataSyncServiceImpl.java

@@ -32,6 +32,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -348,7 +349,7 @@ public class WhuDataSyncServiceImpl implements WhuDataSyncService {
                 paramMap.put("a", Double.parseDouble(studentDto.getTotalScore()));
                 paramMap.put("b", value);
                 String assignScore = AviatorEvaluator.compile(formula1).execute(paramMap).toString();
-                studentDto.setAssignScore(stripTrailingZeros(assignScore));
+                studentDto.setAssignScore(stripTrailingZerosFormula1(assignScore));
                 finalList.add(studentDto);
             }
         }
@@ -389,13 +390,36 @@ public class WhuDataSyncServiceImpl implements WhuDataSyncService {
     }
 
     /**
-     * 处理计算出来的赋分值
+     * 处理公式1计算出来的赋分值
+     *
+     * @param value
+     * @return
+     */
+    private String stripTrailingZerosFormula1(String value) {
+        BigDecimal valueDecimal = new BigDecimal(value);
+        // 处理分数 86.221->86,86.34->86.5,86.664->87
+        int index = value.indexOf(".");
+        if (index > 0) {
+            // 小数部分值
+            double decimalPart = new BigDecimal("0" + value.substring(index)).doubleValue();
+            if (decimalPart < 0.5) {
+                String divide = valueDecimal.multiply(new BigDecimal("2")).setScale(0, RoundingMode.HALF_UP).divide(new BigDecimal("2")).toString();
+                value = stripTrailingZeros(divide);
+            } else {
+                value = valueDecimal.setScale(0, RoundingMode.HALF_UP).toString();
+            }
+        }
+        return stripTrailingZeros(value);
+    }
+
+    /**
+     * 处理公式2计算出来的赋分值
      *
      * @param value
      * @return
      */
     private String stripTrailingZeros(String value) {
-        return new BigDecimal(value).setScale(0, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();
+        return new BigDecimal(value).stripTrailingZeros().toPlainString();
     }
 
     @Transactional
@@ -405,6 +429,40 @@ public class WhuDataSyncServiceImpl implements WhuDataSyncService {
         if (examSyncTotal == null) {
             throw ExceptionResultEnum.ERROR.exception("未设置使用数据文件,请联系管理员处理");
         }
+        List<ExamSyncStudent> examSyncStudents = examSyncStudentService.listByExamSyncTotalId(examSyncTotal);
+        for (CloudMarkingScore cloudMarkingScore : cloudMarkingScoreList) {
+            Optional<ExamSyncStudent> optional = examSyncStudents.stream()
+                    .filter(s -> s.getJxbmc().equals(cloudMarkingScore.getClassName())
+                            && ((StringUtils.isBlank(s.getCloudMarkingCourseCode()) && s.getKch().equals(cloudMarkingScore.getSubjectCode())) || (StringUtils.isNotBlank(s.getCloudMarkingCourseCode()) && s.getCloudMarkingCourseCode().equals(cloudMarkingScore.getSubjectCode())))
+                            && s.getXh().equals(cloudMarkingScore.getStudentCode())).findFirst();
+            if (optional.isPresent()) {
+                ExamSyncStudent examSyncStudent = optional.get();
+                // 匹配上,保存考务数据表ID
+                cloudMarkingScore.setExamSyncStudentId(examSyncStudent.getId());
+            }
+        }
+
+        // 删除旧数据
+        cloudMarkingScoreService.deleteByKeys(collegeId, semesterId, examTypeId, examId);
+        List<CloudMarkingScore> data = new ArrayList<>();
+        //1000条提交一次
+        for (CloudMarkingScore markingScore : cloudMarkingScoreList) {
+            if (data.size() == 1000) {
+                cloudMarkingScoreService.saveBatch(data);
+                data.clear();
+            }
+            data.add(markingScore);
+        }
+        //将剩下的数据也导入
+        if (!data.isEmpty()) {
+            cloudMarkingScoreService.saveBatch(data);
+        }
+
+        /*// 查询对外数据
+        ExamSyncTotal examSyncTotal = examSyncTotalService.getBySemesterIdAndExamTypeIdAndUseFile(schoolId, semesterId, examTypeId, true);
+        if (examSyncTotal == null) {
+            throw ExceptionResultEnum.ERROR.exception("未设置使用数据文件,请联系管理员处理");
+        }
         List<CloudMarkingScoreForeign> cloudMarkingScoreForeigns = new ArrayList<>();
         List<ExamSyncStudent> examSyncStudents = examSyncStudentService.listByExamSyncTotalId(examSyncTotal);
         for (CloudMarkingScore cloudMarkingScore : cloudMarkingScoreList) {
@@ -458,7 +516,7 @@ public class WhuDataSyncServiceImpl implements WhuDataSyncService {
         //将剩下的数据也导入
         if (!foreignData.isEmpty()) {
             cloudMarkingScoreForeignService.saveBatch(foreignData);
-        }
+        }*/
     }
 
     /**

+ 15 - 2
src/main/resources/db/log/log-1.0.4.sql

@@ -30,7 +30,8 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('61', '参数保存', '/api/sys_setting/save', 'URL', '58', '2', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('62', '刷新参数缓存', '/api/sys_setting/flush_cache', 'URL', '58', '3', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('63', '发布赋分数据', '/api/assign/publish', 'URL', '45', '7', 'AUTH', '1', '1', '1');
-
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('64', '学期管理-启用/禁用', '/api/exam_semester/enable', 'URL', '17', '5', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('65', '考试类型管理-启用/禁用', '/api/exam_type/enable', 'URL', '21', '5', 'AUTH', '1', '1', '1');
 
 
 INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('45', '3', '45', '1');
@@ -43,6 +44,8 @@ INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VAL
 INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('52', '3', '53', '1');
 INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('53', '2', '57', '1');
 INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('54', '3', '63', '1');
+INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('55', '3', '41', '1');
+
 
 
 CREATE TABLE `exam_assign` (
@@ -73,4 +76,14 @@ ALTER TABLE `cloud_marking_score`
 ALTER TABLE `exam_sync_total`
     ADD COLUMN `use_file` TINYINT(1) NULL DEFAULT 0 COMMENT '是否使用当前数据文件' AFTER `download_status`;
 
-DELETE FROM `sys_role` WHERE (`id` = '1');
+ALTER TABLE `exam_semester`
+    ADD COLUMN `enable` TINYINT(1) NULL DEFAULT 1 COMMENT '启用/禁用' AFTER `name`;
+
+ALTER TABLE `exam_type`
+    ADD COLUMN `enable` TINYINT(1) NULL DEFAULT 1 COMMENT '启用/禁用' AFTER `name`;
+
+ALTER TABLE `exam_sync_total`
+    ADD INDEX `idx_school_semester_exam_type` (`school_id` ASC, `semester_id` ASC, `exam_type_id` ASC, `use_file` ASC) VISIBLE;
+
+ALTER TABLE `exam_sync_student`
+    ADD INDEX `idx_sync_total_id` (`exam_sync_total_id` ASC) VISIBLE;

+ 27 - 23
src/main/resources/mapper/CloudMarkingScoreMapper.xml

@@ -4,37 +4,41 @@
 
     <select id="pageData" resultType="com.qmth.eds.bean.dto.CloudMarkingScoreDto">
         SELECT
-            exam_id examId,
-            exam_code examCode,
-            exam_number examNumber,
-            student_code studentCode,
-            name name,
-            subject_code subjectCode,
-            subject_name subjectName,
-            paper_type paperType,
-            college,
-            class_name className,
-            teacher,
-            CASE status
+            cms.exam_id examId,
+            cms.exam_code examCode,
+            cms.exam_number examNumber,
+            cms.student_code studentCode,
+            cms.name name,
+            cms.subject_code subjectCode,
+            cms.subject_name subjectName,
+            cms.paper_type paperType,
+            cms.college,
+            cms.class_name className,
+            cms.teacher,
+            CASE cms.status
                 WHEN 1 THEN '正常'
                 WHEN 2 THEN '缺考'
                 WHEN 3 THEN '违纪'
                 END status,
-            total_score totalScore,
-            objective_score objectiveScore,
-            subjective_score subjectiveScore
+            cms.total_score totalScore,
+            cms.objective_score objectiveScore,
+            cms.subjective_score subjectiveScore
         FROM
-            cloud_marking_score
+            cloud_marking_score cms
+                join
+            (select * from exam_semester where enable = true) es on cms.semester_id = es.id
+                join
+            (select * from exam_type where enable = true) eti on cms.exam_type_id = eti.id
         <where>
-            and school_id = #{collegeId}
+            and cms.school_id = #{collegeId}
             <if test="semesterId != null">
-                and semester_id = #{semesterId}
+                and cms.semester_id = #{semesterId}
             </if>
             <if test="examTypeId != null">
-                and exam_type_id = #{examTypeId}
+                and cms.exam_type_id = #{examTypeId}
             </if>
             <if test="examId != null">
-                and exam_id = #{examId}
+                and cms.exam_id = #{examId}
             </if>
         </where>
     </select>
@@ -92,11 +96,11 @@
         exam_sync_student ess
         join cloud_marking_score t on ess.id = t.exam_sync_student_id
         <where> 1 = 1
-            <if test="schoolId != null and schoolId != ''">
+            <if test="schoolId != null">
                 and ess.school_id = #{schoolId}
             </if>
-            <if test="orgId != null and orgId != ''">
-                and t.school_id = #{orgId}
+            <if test="collegeId != null">
+                and t.school_id = #{collegeId}
             </if>
             <if test="semesterId != null and semesterId != ''">
                 and t.semester_id = #{semesterId}

+ 23 - 3
src/main/resources/mapper/ExamAssignMapper.xml

@@ -45,11 +45,11 @@
             exam_sync_student ess
         join cloud_marking_score cms on cms.exam_sync_student_id = ess.id
         <where>
-            <if test="schoolId != null and schoolId != ''">
+            <if test="schoolId != null">
                 and ess.school_id = #{schoolId}
             </if>
-            <if test="orgId != null and orgId != ''">
-                and cms.school_id = #{orgId}
+            <if test="collegeId != null">
+                and cms.school_id = #{collegeId}
             </if>
             <if test="kcCollege != null and kcCollege != ''">
                 and ess.jgmc = #{kcCollege}
@@ -90,4 +90,24 @@
             cms.assign_score
         order by ess.xh
     </select>
+    <select id="getBySchoolIdAndSemesterIdAndExamTypeIdAndCourseCodeAndOpenCollege"
+            resultType="com.qmth.eds.common.entity.ExamAssign">
+        select id,
+               school_id schoolId,
+               semester_id semesterId,
+               exam_type_id examTypeId,
+               course_code courseCode,
+               open_college openCollege,
+               formula,
+               coefficient,
+               status,
+               publish
+            from exam_assign t
+        where
+            t.school_id = #{collegeId}
+            and t.semester_id = #{semesterId}
+            and t.exam_type_id = #{examTypeId}
+            and t.course_code = #{courseCode}
+            and t.open_college = #{kkxy}
+    </select>
 </mapper>

+ 10 - 0
src/main/resources/mapper/ExamDownloadRecordMapper.xml

@@ -22,8 +22,18 @@
             exam_download_record a
                 JOIN
             exam_sync_total b ON a.sync_total_id = b.id
+                join
+            (select * from exam_semester where enable = true) es on b.semester_id = es.id
+                join
+            (select * from exam_type where enable = true) eti on b.exam_type_id = eti.id
         <where>
             and b.school_id = #{schoolId}
+            <if test="semesterId != null">
+                and b.semester_id = #{semesterId}
+            </if>
+            <if test="examTypeId != null">
+                and b.exam_type_id = #{examTypeId}
+            </if>
             <if test="operateDate != null and operateDate != ''">
                 and FROM_UNIXTIME(a.operate_time / 1000, '%Y-%m-%d') = #{operateDate}
             </if>

+ 67 - 0
src/test/java/com/qmth/eds/RoundTest.java

@@ -0,0 +1,67 @@
+package com.qmth.eds;
+
+import com.googlecode.aviator.AviatorEvaluator;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 武汉大学测试类
+ */
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class RoundTest {
+
+    public static void main(String[] args) {
+        RoundTest roundTest = new RoundTest();
+        String value0 = "86.0";
+        String value1 = "86.232";
+        String value2 = "86.25";
+        String value3 = "86.25111";
+        String value4 = "86.25655";
+        String value5 = "86.345";
+        String value6 = "86.432";
+        String value7 = "86.5";
+        String value8 = "86.5123";
+        String value9 = "86.653";
+
+        System.out.println(value0 + "-->" + roundTest.stripTrailingZerosFormula1(value0));
+        System.out.println(value1 + "-->" + roundTest.stripTrailingZerosFormula1(value1));
+        System.out.println(value2 + "-->" + roundTest.stripTrailingZerosFormula1(value2));
+        System.out.println(value3 + "-->" + roundTest.stripTrailingZerosFormula1(value3));
+        System.out.println(value4 + "-->" + roundTest.stripTrailingZerosFormula1(value4));
+        System.out.println(value5 + "-->" + roundTest.stripTrailingZerosFormula1(value5));
+        System.out.println(value6 + "-->" + roundTest.stripTrailingZerosFormula1(value6));
+        System.out.println(value7 + "-->" + roundTest.stripTrailingZerosFormula1(value7));
+        System.out.println(value8 + "-->" + roundTest.stripTrailingZerosFormula1(value8));
+        System.out.println(value9 + "-->" + roundTest.stripTrailingZerosFormula1(value9));
+
+    }
+
+    private String stripTrailingZerosFormula1(String value) {
+        BigDecimal valueDecimal = new BigDecimal(value);
+        // 处理分数 86.221->86,86.34->86.5,86.664->87
+        int index = value.indexOf(".");
+        if (index > 0) {
+            // 小数部分值
+            double decimalPart = new BigDecimal("0" + value.substring(index)).doubleValue();
+            if (decimalPart < 0.5) {
+                String divide = valueDecimal.multiply(new BigDecimal("2")).setScale(0, RoundingMode.HALF_UP).divide(new BigDecimal("2")).toString();
+                value = stripTrailingZeros(divide);
+            } else {
+                value = valueDecimal.setScale(0, RoundingMode.HALF_UP).toString();
+            }
+        }
+        return stripTrailingZeros(value);
+    }
+
+    private String stripTrailingZeros(String value) {
+        return new BigDecimal(value).stripTrailingZeros().toPlainString();
+    }
+}