Prechádzať zdrojové kódy

3.2.6 广药新需求

xiaofei 2 rokov pred
rodič
commit
8f4c98d9ab

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailParams.java

@@ -16,6 +16,7 @@ public class ExamDetailParams {
     private Double backupCount;
     private Integer totalSubjects; // 总数量,适用于模式2
     private Long printHouseId; // 总印刷室,适用于模式2
+    private String classId; // 适用班级,适用于模式2
     private List<ExamDetailList> list;
 
     public Long getExamStartTime() {
@@ -82,6 +83,14 @@ public class ExamDetailParams {
         this.printHouseId = printHouseId;
     }
 
+    public String getClassId() {
+        return classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
     public List<ExamDetailList> getList() {
         return list;
     }

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamStatusEnum.java

@@ -14,7 +14,8 @@ public enum ExamStatusEnum {
 
     DRAFT("新建"),
     STAGE("待命题"),
-    SUBMIT("已提交");
+    SUBMIT("已提交"),
+    CANCEL("作废");
 
     ExamStatusEnum(String desc) {
         this.desc = desc;

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java

@@ -120,4 +120,6 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
     List<ExamDetailPdfDownloadDto> findPdfDownload(@Param("ids") List<Long> ids);
 
     SummarizedDataResult findSummarizedData(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIdList") List<Long> printPlanIdList, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("examPlace") String examPlace, @Param("examRoom") String examRoom, @Param("packageCode") String packageCode, @Param("startDate") Long startDate, @Param("endDate") Long endDate, @Param("dpr") DataPermissionRule dpr);
+
+    List<ExamDetailCourse> listByExamIdAndCourseCode(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseCode") String courseCode);
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -247,4 +247,6 @@ public interface ExamDetailService extends IService<ExamDetail> {
     void dataDelete(Long id);
 
     List<ExamStudent> listStudentByExamDetailId(String examDetailId);
+
+    List<ExamDetailCourse> listByExamIdAndCourseCode(Long schoolId, Long examId, String courseCode);
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java

@@ -60,4 +60,6 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
     List<String> listRelateCommonTypes(Long semesterId, Long examId, String relateType, List<Long> idList, String courseCode, String paperNumber, String userName, Long cardRuleId);
 
     ExamTaskDetail findByExamIdAndCourseCodeAndPaperNumber(Long schoolId, Long examId, String code, String number);
+
+    boolean cancel(Long id);
 }

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.qmth.boot.api.exception.ApiException;
@@ -88,6 +89,8 @@ public class ActivitiServiceImpl implements ActivitiService {
     @Resource
     ExamTaskService examTaskService;
 
+    @Resource
+    ExamCardService examCardService;
     @Resource
     ExamTaskDetailService examTaskDetailService;
 
@@ -827,13 +830,20 @@ public class ActivitiServiceImpl implements ActivitiService {
             String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
             if (StringUtils.isNotBlank(paperAttachmentIds)) {
                 List<JSONObject> objects = JSON.parseArray(paperAttachmentIds, JSONObject.class);
+                List<Long> cardIds = new ArrayList<>();
                 for (JSONObject object : objects) {
+                    cardIds.add(object.getLong("cardId"));
                     object.put("cardId", "");
                     object.put("cardType", "");
                     object.put("cardTitle", "");
                 }
                 examTaskDetail.setPaperAttachmentIds(JSON.toJSONString(objects));
                 examTaskDetailService.updateById(examTaskDetail);
+
+                // 更新题卡为未使用
+                UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.lambda().set(ExamCard::getUsed, false).in(ExamCard::getId, cardIds);
+                examCardService.update(updateWrapper);
             }
         }
     }

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -1132,6 +1132,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         return null;
     }
 
+    @Override
+    public List<ExamDetailCourse> listByExamIdAndCourseCode(Long schoolId, Long examId, String courseCode) {
+        return this.baseMapper.listByExamIdAndCourseCode(schoolId, examId, courseCode);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void deleteExaminationData(Long printPlanId, ExamDataSourceEnum source) {

+ 11 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -11,10 +11,7 @@ import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailPdfDownloadDto
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.cache.CreatePdfCacheUtil;
 import com.qmth.distributed.print.business.entity.*;
-import com.qmth.distributed.print.business.enums.CardTypeEnum;
-import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.distributed.print.business.enums.FlowJoinTypeEnum;
-import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
+import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.mapper.ExamTaskDetailMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
@@ -549,6 +546,16 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return this.getByExamTaskId(examTask.getId());
     }
 
+    @Override
+    public boolean cancel(Long id) {
+        ExamTask examTask = examTaskService.getById(id);
+        examTask.setStatus(ExamStatusEnum.CANCEL);
+        examTaskService.updateById(examTask);
+
+        // todo 作废后,考务数据、考场状态怎么处理
+        return false;
+    }
+
     /**
      * 卷库校验
      *

+ 33 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -1731,15 +1731,32 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
                 examPrintPlanService.save(examPrintPlan);
 
+                // 查询考试+课程下已用过的班级
+                List<String> usedClassIds = new ArrayList<>();
+                List<ExamDetailCourse> examDetailCourseList = examDetailService.listByExamIdAndCourseCode(schoolId, examTask.getExamId(), examTask.getCourseCode());
+                if (!CollectionUtils.isEmpty(examDetailCourseList)) {
+                    examDetailCourseList.stream().filter(m -> StringUtils.isNotBlank(m.getClazzId())).forEach(m -> {
+                        usedClassIds.addAll(Arrays.asList(m.getClazzId().split(",")));
+                    });
+                }
+
+                // 已使用过的班级集合(报错用)
+                List<String> errorClassIds = new ArrayList<>();
+
                 String paperNumber = examTask.getPaperNumber();
                 if (ExamModelEnum.MODEL1.equals(basicExam.getExamModel())) {
                     List<ExamDetailList> examDetailLists = JSONObject.parseArray(JSONObject.toJSONString(examDetailParams.getList()), ExamDetailList.class);
-                    int i = 1;
                     for (ExamDetailList examDetailList : examDetailLists) {
                         int count = examDetailList.getStudentCount();
                         String clazzName = examDetailList.getClassName();
                         if (count == 0) {
-                            throw ExceptionResultEnum.ERROR.exception("选择的考试班级【" + clazzName + "】下无学生,请确认该班级学生信息。");
+                            throw ExceptionResultEnum.ERROR.exception("选择的考试班级【" + clazzName + "】下无学生,请确认该班级学生信息");
+                        }
+
+                        for (String s : examDetailList.getClassId().split(",")) {
+                            if (usedClassIds.contains(s)) {
+                                errorClassIds.add(s);
+                            }
                         }
 
                         SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
@@ -1796,9 +1813,15 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                             updateWrapper.lambda().set(ExamDetailCourse::getTotalSubjects, studentCount).eq(ExamDetailCourse::getId, examDetailCourse.getId());
                             examDetailCourseService.update(updateWrapper);
                         }
-                        i++;
                     }
                 } else if (ExamModelEnum.MODEL2.equals(basicExam.getExamModel())) {
+                    if (StringUtils.isNotBlank(examDetailParams.getClassId())) {
+                        for (String s : examDetailParams.getClassId().split(",")) {
+                            if (usedClassIds.contains(s)) {
+                                errorClassIds.add(s);
+                            }
+                        }
+                    }
                     SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
                     ExamDetail examDetail = new ExamDetail();
                     examDetail.setId(SystemConstant.getDbUuid());
@@ -1830,10 +1853,17 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     examDetailCourse.setCourseCode(examTask.getCourseCode());
                     examDetailCourse.setCourseName(examTask.getCourseName());
                     examDetailCourse.setPaperNumber(paperNumber);
+                    examDetailCourse.setClazzId(examDetailParams.getClassId());
                     examDetailCourse.setTotalSubjects(examDetailParams.getTotalSubjects());
                     examDetailCourse.setCreateId(sysUser.getId());
                     examDetailCourseService.save(examDetailCourse);
                 }
+
+                if (CollectionUtils.isEmpty(errorClassIds)) {
+                    List<BasicClazz> basicClazzList = basicClazzService.listByIds(errorClassIds);
+                    String clazzNames = basicClazzList.stream().map(m -> m.getClazzName()).collect(Collectors.joining(","));
+                    throw ExceptionResultEnum.ERROR.exception("考试对象[" + clazzNames + "]已被其它人占用");
+                }
             }
 
             if (Objects.nonNull(examTask.getFlowId())) {

+ 9 - 1
distributed-print-business/src/main/resources/db/log/脚本-xiaof.sql

@@ -84,4 +84,12 @@ update `exam_task_sync` set total_paper_type = paper_type where total_paper_type
 ALTER TABLE `basic_school`
     ADD COLUMN `init_password` VARCHAR(100) NULL COMMENT '该学校用户的初始密码,默认为12345678' AFTER `logo`;
 
-update `basic_school` set init_password = 'MTIzNDU2Nzg=';
+update `basic_school` set init_password = 'MTIzNDU2Nzg=';
+
+-----------------------3.2.6 start 需求 2023-06-13----------------------
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('875', '我教课程选择', 'MyTeachCourse', 'BUTTON', '40', '10', 'AUTH', '759', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('876', '学生库选择', 'StudentLibrary', 'BUTTON', '40', '11', 'AUTH', '759', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('877', '选择学生(学生库选择)', 'SelectStudent', 'BUTTON', '40', '12', 'AUTH', '1', '0', '1');
+
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('878', '作废', 'Cancel', 'LINK', '42', '5', 'AUTH', '879', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('879', '作废', '/api/admin/exam/task/cancel', 'URL', '42', '8', 'AUTH', '1', '1', '1');

+ 12 - 0
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -664,4 +664,16 @@
             </if>
         </trim>
     </select>
+    <select id="listByExamIdAndCourseCode"
+            resultMap="com.qmth.distributed.print.business.mapper.ExamDetailCourseMapper.BaseResultMap">
+        SELECT
+            *
+        FROM
+            exam_detail_course edc
+                JOIN
+            exam_detail ed ON edc.exam_detail_id = ed.id
+        WHERE
+            edc.school_id = #{schoolId} AND ed.exam_id = #{examId}
+          AND edc.course_code = #{courseCode}
+    </select>
 </mapper>

+ 15 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -620,7 +620,7 @@ public class ExamTaskController {
             Boolean isCreate = printCommonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getCourseCode(), examTask.getPaperNumber());
             // 校验是否可以提交打印状态
             if (isCreate) {
-                printCommonService.checkData(examTask.getSchoolId(),examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
+                printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
             }
         }
         return ResultUtil.ok(isSuccess);
@@ -924,5 +924,19 @@ public class ExamTaskController {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         return ResultUtil.ok(examTaskService.examTaskExamStudentImport(file, requestUser));
     }
+
+    /**
+     * 卷库查询-作废
+     *
+     * @param id 命题任务ID
+     * @return Result
+     */
+    @ApiOperation(value = "卷库查询-作废")
+    @RequestMapping(value = "/cancel", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
+    public Result cancel(@RequestParam Long id) {
+        boolean isSuccess = examTaskDetailService.cancel(id);
+        return ResultUtil.ok(isSuccess);
+    }
 }