xiaofei 2 лет назад
Родитель
Сommit
5daa33bb51

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

@@ -61,7 +61,7 @@ public class ExamAssignController {
     @ApiOperation(value = "计算")
     @PostMapping("/calc")
     @ApiResponses({@ApiResponse(code = 200, message = "保存/更新成功", response = EditResult.class)})
-    public Result save(@RequestParam(value = "semesterId", required = false) ExamAssign examAssign) {
+    public Result save(@RequestParam(value = "examAssign", required = false) ExamAssign examAssign) {
         return ResultUtil.ok(examAssignService.calcData(examAssign));
     }
 

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

@@ -44,6 +44,17 @@ public class ExamSyncTotalController {
         return ResultUtil.ok(examSyncTotalService.list(syncDate, pageNumber, pageSize));
     }
 
+    /**
+     * 设置为使用当前数据文件
+     *
+     * @param id ID
+     */
+    @ApiOperation(value = "设置为使用当前数据文件")
+    @PostMapping("/used")
+    public Result page(@RequestParam(value = "id") Long id) {
+        return ResultUtil.ok(examSyncTotalService.used(id));
+    }
+
     /**
      * 下载
      *

+ 31 - 0
src/main/java/com/qmth/eds/bean/dto/ExamSyncStudentDto.java

@@ -0,0 +1,31 @@
+package com.qmth.eds.bean.dto;
+
+import com.qmth.eds.common.entity.ExamSyncStudent;
+
+/**
+ * 学期表
+ */
+public class ExamSyncStudentDto extends ExamSyncStudent {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long cloudMarkingScoreId;
+
+    private String totalScore;
+
+    public Long getCloudMarkingScoreId() {
+        return cloudMarkingScoreId;
+    }
+
+    public void setCloudMarkingScoreId(Long cloudMarkingScoreId) {
+        this.cloudMarkingScoreId = cloudMarkingScoreId;
+    }
+
+    public String getTotalScore() {
+        return totalScore;
+    }
+
+    public void setTotalScore(String totalScore) {
+        this.totalScore = totalScore;
+    }
+}

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

@@ -76,6 +76,9 @@ public class CloudMarkingScore implements Serializable {
     @ApiModelProperty(value = "总分")
     private String totalScore;
 
+    @ApiModelProperty(value = "赋分值")
+    private String assignScore;
+
     @ApiModelProperty(value = "客观题总分")
     private String objectiveScore;
 
@@ -238,6 +241,14 @@ public class CloudMarkingScore implements Serializable {
         this.totalScore = totalScore;
     }
 
+    public String getAssignScore() {
+        return assignScore;
+    }
+
+    public void setAssignScore(String assignScore) {
+        this.assignScore = assignScore;
+    }
+
     public String getObjectiveScore() {
         return objectiveScore;
     }

+ 12 - 0
src/main/java/com/qmth/eds/common/entity/ExamSyncTotal.java

@@ -62,6 +62,9 @@ public class ExamSyncTotal extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "数据md5值")
     private String dataMd5;
 
+    @ApiModelProperty(value = "是否使用文件")
+    private Boolean useFile;
+
     public ExamSyncTotal() {
     }
 
@@ -78,6 +81,7 @@ public class ExamSyncTotal extends BaseEntity implements Serializable {
         this.students = students;
         this.dataMd5 = dataMd5;
         this.downloadStatus = true;
+        this.useFile = false;
     }
 
     public Long getSyncDate() {
@@ -191,4 +195,12 @@ public class ExamSyncTotal extends BaseEntity implements Serializable {
     public void setDataMd5(String dataMd5) {
         this.dataMd5 = dataMd5;
     }
+
+    public Boolean getUseFile() {
+        return useFile;
+    }
+
+    public void setUseFile(Boolean useFile) {
+        this.useFile = useFile;
+    }
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.eds.bean.dto.CloudMarkingScoreDto;
+import com.qmth.eds.bean.dto.ExamSyncStudentDto;
 import com.qmth.eds.common.entity.CloudMarkingScore;
 import org.apache.ibatis.annotations.Param;
 
@@ -25,4 +26,6 @@ public interface CloudMarkingScoreMapper extends BaseMapper<CloudMarkingScore> {
      * @return
      */
     List<CloudMarkingScore> queryBySyncCourseCode(@Param("schoolId") Long schoolId, @Param("orgId") Long orgId, @Param("courseCode") String courseCode);
+
+    List<ExamSyncStudentDto> listExamSyncStudentDtos(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examTypeId") Long examTypeId, @Param("courseCode") String courseCode, @Param("openCollege") String openCollege);
 }

+ 5 - 0
src/main/java/com/qmth/eds/service/AsyncTaskService.java

@@ -1,5 +1,6 @@
 package com.qmth.eds.service;
 
+import com.qmth.eds.common.entity.ExamAssign;
 import com.qmth.eds.common.entity.ExamScheduleTask;
 import com.qmth.eds.common.entity.TBSyncTask;
 import com.qmth.eds.common.enums.TaskTypeEnum;
@@ -36,4 +37,8 @@ public class AsyncTaskService {
         TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(collegeId, semesterId, examTypeId, TaskTypeEnum.CLOUD_MARKING_STUDENT_SCORE, remark);
         whuDataSyncService.syncCloudMarkingStudentScoreData(schoolId, tbSyncTask, examId);
     }
+
+    public void calcAssignScore(ExamAssign examAssign) {
+        whuDataSyncService.calcAssignScore(examAssign);
+    }
 }

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

@@ -3,6 +3,7 @@ package com.qmth.eds.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.eds.bean.dto.CloudMarkingScoreDto;
+import com.qmth.eds.bean.dto.ExamSyncStudentDto;
 import com.qmth.eds.common.entity.CloudMarkingScore;
 
 import java.util.List;
@@ -25,4 +26,6 @@ public interface CloudMarkingScoreService extends IService<CloudMarkingScore> {
      * @return
      */
     List<CloudMarkingScore> queryBySyncCourseCode(Long schoolId, Long orgId, String courseCode);
+
+    List<ExamSyncStudentDto> listExamSyncStudentDtos(Long schoolId, Long semesterId, Long examTypeId, String courseCode, String openCollege);
 }

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

@@ -22,4 +22,6 @@ public interface ExamSyncTotalService extends IService<ExamSyncTotal> {
     List<ExamSyncTotalDownloadDto> listDownloadRecordInfos(Long schoolId, Long semesterId, Long examTypeId);
 
     ExamSyncTotal getBySemesterIdAndExamTypeIdAndDownloadStatus(Long schoolId, Long semesterId, Long examTypeId, boolean status);
+
+    boolean used(Long id);
 }

+ 6 - 0
src/main/java/com/qmth/eds/service/impl/CloudMarkingScoreServiceImpl.java

@@ -5,6 +5,7 @@ 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.bean.dto.CloudMarkingScoreDto;
+import com.qmth.eds.bean.dto.ExamSyncStudentDto;
 import com.qmth.eds.common.entity.CloudMarkingScore;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.CloudMarkingScoreMapper;
@@ -49,4 +50,9 @@ public class CloudMarkingScoreServiceImpl extends ServiceImpl<CloudMarkingScoreM
     public List<CloudMarkingScore> queryBySyncCourseCode(Long schoolId, Long orgId, String courseCode) {
         return cloudMarkingScoreMapper.queryBySyncCourseCode(schoolId, orgId, courseCode);
     }
+
+    @Override
+    public List<ExamSyncStudentDto> listExamSyncStudentDtos(Long schoolId, Long semesterId, Long examTypeId, String courseCode, String openCollege) {
+        return this.baseMapper.listExamSyncStudentDtos(schoolId, semesterId, examTypeId, courseCode, openCollege);
+    }
 }

+ 3 - 6
src/main/java/com/qmth/eds/service/impl/ExamAssignServiceImpl.java

@@ -11,10 +11,7 @@ import com.qmth.eds.common.enums.ExamAssignStatusEnum;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.ExamAssignMapper;
-import com.qmth.eds.service.ExamAssignService;
-import com.qmth.eds.service.ExamSyncStudentService;
-import com.qmth.eds.service.ExamSyncTotalService;
-import com.qmth.eds.service.WhuDataSyncService;
+import com.qmth.eds.service.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -40,7 +37,7 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
     ExamSyncStudentService examSyncStudentService;
 
     @Resource
-    WhuDataSyncService whuDataSyncService;
+    AsyncTaskService asyncTaskService;
 
     @Override
     public IPage<ExamAssignDto> pageData(Long semesterId, Long examTypeId, String courseCode, Integer pageNumber, Integer pageSize) {
@@ -88,7 +85,7 @@ public class ExamAssignServiceImpl extends ServiceImpl<ExamAssignMapper, ExamAss
         this.saveOrUpdate(examAssign);
 
         // 计算赋分
-        whuDataSyncService.calcAssignScore(examAssign);
+        asyncTaskService.calcAssignScore(examAssign);
         return true;
     }
 

+ 20 - 0
src/main/java/com/qmth/eds/service/impl/ExamSyncTotalServiceImpl.java

@@ -18,6 +18,7 @@ import com.qmth.eds.service.ExamDownloadRecordService;
 import com.qmth.eds.service.ExamSyncTotalService;
 import com.qmth.eds.service.SysUserService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -100,4 +101,23 @@ public class ExamSyncTotalServiceImpl extends ServiceImpl<ExamSyncTotalMapper, E
                 .eq(ExamSyncTotal::getDownloadStatus, status);
         return this.getOne(queryWrapper);
     }
+
+    @Transactional
+    @Override
+    public boolean used(Long id) {
+        ExamSyncTotal examSyncTotal = this.getById(id);
+        // 将其它已设置为true的数据改为false
+        UpdateWrapper<ExamSyncTotal> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamSyncTotal::getUseFile, false)
+                .eq(ExamSyncTotal::getSchoolId, examSyncTotal.getSchoolId())
+                .eq(ExamSyncTotal::getSemesterId, examSyncTotal.getSemesterId())
+                .eq(ExamSyncTotal::getExamTypeId, examSyncTotal.getExamTypeId())
+                .eq(ExamSyncTotal::getUseFile, true);
+        this.update(updateWrapper);
+
+        UpdateWrapper<ExamSyncTotal> updateWrapper1 = new UpdateWrapper<>();
+        updateWrapper1.lambda().set(ExamSyncTotal::getUseFile, true)
+                .eq(ExamSyncTotal::getId, id);
+        return this.update(updateWrapper1);
+    }
 }

+ 25 - 0
src/main/java/com/qmth/eds/service/impl/WhuDataSyncServiceImpl.java

@@ -8,8 +8,10 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.eds.bean.dto.ExamSyncStudentDto;
 import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.common.entity.*;
+import com.qmth.eds.common.enums.ExamAssignStatusEnum;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.enums.TaskResultEnum;
 import com.qmth.eds.common.enums.TaskStatusEnum;
@@ -71,6 +73,9 @@ public class WhuDataSyncServiceImpl implements WhuDataSyncService {
     @Resource
     private BasicMessageService basicMessageService;
 
+    @Resource
+    private ExamAssignService examAssignService;
+
     @Async
     @Override
     public void syncWuhanUniversityExamData(ExamScheduleTask examScheduleTask, TBSyncTask tbSyncTask, boolean isAuto) {
@@ -269,7 +274,27 @@ public class WhuDataSyncServiceImpl implements WhuDataSyncService {
 
     @Override
     public void calcAssignScore(ExamAssign examAssign) {
+        examAssign.setStatus(ExamAssignStatusEnum.RUNNING);
+        examAssignService.updateById(examAssign);
+        try {
+            // 选模式
+
+            // 解析计算参数
+
+            List<ExamSyncStudentDto> examSyncStudentDtoList = cloudMarkingScoreService.listExamSyncStudentDtos(examAssign.getSchoolId(), examAssign.getSemesterId(), examAssign.getExamTypeId(), examAssign.getCourseCode(), examAssign.getOpenCollege());
+            Map<String, List<ExamSyncStudentDto>> collect = examSyncStudentDtoList.stream().collect(Collectors.groupingBy(ExamSyncStudentDto::getJgmc));
+            for (Map.Entry<String, List<ExamSyncStudentDto>> entry : collect.entrySet()) {
 
+            }
+
+            // 更新云阅卷同步表中的赋分值
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            examAssign.setStatus(ExamAssignStatusEnum.FINISH);
+            examAssignService.updateById(examAssign);
+        }
     }
 
     @Transactional

+ 13 - 0
src/main/resources/db/log/log-1.0.4.sql

@@ -20,6 +20,11 @@ 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 ('51', '赋分计算结果对比', '/api/assign/contrast', 'URL', '45', '5', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('52', '同步结果查询', '/api/sync_task/page', 'URL', '33', '1', 'SYS', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('53', '赋分准备计算', '/api/assign/to_calc', 'URL', '45', '6', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` VALUES (54, '查询考查学院列表', '/api/common/examine/college/list', 'URL', 45, 7, 'SYS', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (55, '查询班级列表', '/api/common/clazz/list', 'URL', 45, 8, 'SYS', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` VALUES (56, '查询班级列表', '/api/common/teacher/list', 'URL', 45, 9, 'SYS', NULL, 1, 1, 1);
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('57', '考务数据列表-设置使用当前数据文件', '/api/exam_sync_total/used', 'URL', '9', '4', 'AUTH', '1', '1', '1');
+
 
 
 INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('45', '3', '45', '1');
@@ -30,6 +35,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 ('50', '3', '50', '1');
 INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES ('51', '3', '51', '1');
 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');
+
 
 CREATE TABLE `exam_assign` (
      `id` BIGINT(20) NOT NULL,
@@ -50,3 +57,9 @@ CREATE TABLE `exam_assign` (
 
 ALTER TABLE `cloud_marking_score`
     ADD COLUMN `exam_sync_student_id` BIGINT(20) NULL COMMENT '教务数据表id' AFTER `mark_tags`;
+
+ALTER TABLE `cloud_marking_score`
+    ADD COLUMN `assign_score` VARCHAR(45) NULL COMMENT '赋分值' AFTER `total_score`;
+
+ALTER TABLE `exam_sync_total`
+    ADD COLUMN `use_file` TINYINT(1) NULL DEFAULT 0 COMMENT '是否使用当前数据文件' AFTER `download_status`;

+ 28 - 0
src/main/resources/mapper/CloudMarkingScoreMapper.xml

@@ -64,4 +64,32 @@
                     </where>)
         </where>
     </select>
+    <select id="listExamSyncStudentDtos" resultType="com.qmth.eds.bean.dto.ExamSyncStudentDto">
+        SELECT
+            cms.id cloudMarkingScoreId,
+            cms.total_score totalScore,
+            ess.jgmc,
+            ess.jgmc
+        FROM
+            cloud_marking_score cms
+                LEFT JOIN
+            exam_sync_student ess ON cms.exam_sync_student_id = ess.id
+        <where>
+            <if test="schoolId != null">
+                and cms.school_id = #{schoolId}
+            </if>
+            <if test="semesterId != null">
+                and cms.semester_id = #{semesterId}
+            </if>
+            <if test="examTypeId != null">
+                and cms.exam_type_id = #{examTypeId}
+            </if>
+            <if test="courseCode != null and courseCode != ''">
+                and ess.kch = #{courseCode}
+            </if>
+            <if test="openCollege != null and openCollege != ''">
+                and ess.kkbm = #{openCollege}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 2 - 1
src/main/resources/mapper/ExamAssignMapper.xml

@@ -7,7 +7,8 @@
             school_id schoolId,
             semester_id semesterId,
             exam_type_id examTypeId,
-            subject_code courseCode
+            subject_code courseCode,
+            subject_name courseName,
             from cloud_marking_score
         <where>
             school_id = #{schoolId}