xiaofei пре 2 година
родитељ
комит
22c44d83a4
15 измењених фајлова са 314 додато и 268 уклоњено
  1. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  2. 15 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicCardRuleServiceImpl.java
  3. 0 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  5. 12 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  6. 7 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  7. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  8. 6 0
      distributed-print-business/src/main/resources/db/log/3.2.5-脚本-xiaof.sql
  9. 144 137
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  10. 64 65
      distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml
  11. 14 18
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  12. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  13. 15 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  14. 2 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicStudentService.java
  15. 30 25
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

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

@@ -117,4 +117,6 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
     IPage<SyncExamTaskDto> listSyncExamTask(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
 
     void checkSyncMode(SyncDataParam syncDataParam);
+
+    boolean planFinish(Long id);
 }

+ 15 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicCardRuleServiceImpl.java

@@ -73,23 +73,32 @@ public class BasicCardRuleServiceImpl extends ServiceImpl<BasicCardRuleMapper, B
 
         List<JSONObject> allExamRuleFieldList = new ArrayList<>();
         allExamRuleFieldList.addAll(examRuleRequiredFieldList);
-        if(!CollectionUtils.isEmpty(examRuleExtendFieldList)){
-            allExamRuleFieldList.addAll(examRuleExtendFieldList);
+        if (!CollectionUtils.isEmpty(examRuleExtendFieldList)) {
+            for (JSONObject jsonObject : examRuleExtendFieldList) {
+                if (jsonObject.getBoolean("enable"))
+                    allExamRuleFieldList.add(jsonObject);
+            }
         }
         List<EnumResult> enumResults = CardRequiredFieldsEnum.listTypes();
+        List<JSONObject> removeJsonObject = new ArrayList<>();
         for (int i = 0; i < allExamRuleFieldList.size(); i++) {
             JSONObject jsonObject = allExamRuleFieldList.get(i);
             Optional<EnumResult> resultOptional = enumResults.stream().filter(t -> t.getCode().equals(jsonObject.getString("code"))).findFirst();
-            if(resultOptional.isPresent()){
-                allExamRuleFieldList.remove(i);
+            if (resultOptional.isPresent()) {
+                removeJsonObject.add(jsonObject);
             }
         }
 
+        // 删除必填字段重复的
+        if (!CollectionUtils.isEmpty(removeJsonObject)) {
+            allExamRuleFieldList.removeAll(removeJsonObject);
+        }
+
         for (CardRuleDto record : cardRuleDtoIPage.getRecords()) {
             List<JSONObject> cardRuleExtendFieldList = JSONObject.parseArray(record.getExtendFields(), JSONObject.class);
             for (JSONObject jsonObject : allExamRuleFieldList) {
                 Optional<JSONObject> objectOptional = cardRuleExtendFieldList.stream().filter(m -> m.getString("code").equals(jsonObject.getString("code"))).findFirst();
-                if(objectOptional.isPresent()){
+                if (objectOptional.isPresent()) {
                     jsonObject.put("enable", objectOptional.get().getBoolean("enable"));
                 } else {
                     jsonObject.put("enable", false);
@@ -178,7 +187,7 @@ public class BasicCardRuleServiceImpl extends ServiceImpl<BasicCardRuleMapper, B
     @Override
     public boolean enable(Long id, Boolean enable) {
         BasicCardRule basicCardRule = this.getById(id);
-        if(basicCardRule == null){
+        if (basicCardRule == null) {
             throw ExceptionResultEnum.ERROR.exception("题卡规则不存在");
         }
         UpdateWrapper<BasicCardRule> updateWrapper = new UpdateWrapper<>();

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

@@ -569,7 +569,6 @@ public class ClientServiceImpl implements ClientService {
     @Override
     public void exportClientPrintTask(HttpServletResponse response, String machineCode, Long orgId, Long semesterId, Long examId, String printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Boolean isDownload, Boolean validate) throws Exception {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-//        Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         List<ClientPrintTaskDto> printTaskDtoIList = examPrintPlanService.listClientPrintTask(schoolId, semesterId, examId, machineCode, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, isDownload, validate, orgId);
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         printTaskDtoIList = printTaskDtoIList.stream().map(m -> {

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

@@ -763,7 +763,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
 
         // 更新基础学生表和附加数据
-        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser);
+        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser, false);
         for (ExamStudent examStudent : examStudentList) {
             examStudent.setClazzId(String.valueOf(basicClazzService.getOne(new QueryWrapper<BasicClazz>()
                     .lambda()

+ 12 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.service.impl;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,12 +15,9 @@ import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.bean.result.PrintPlanResult;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.*;
-import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.distributed.print.business.enums.ExamTaskSyncStatusEnum;
+import com.qmth.distributed.print.business.enums.*;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.MessageEnum;
-import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
-import com.qmth.distributed.print.business.enums.SyncCardTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamPrintPlanMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncCloudMarkingTaskService;
@@ -146,9 +144,9 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
             if (privilegeId == null) {
                 dpr.setRequestUserId(sysUser.getId());
                 dpr.setOrgIdSet(null);
-            } else if ("44".equals(privilegeId.toString())){
+            } else if ("44".equals(privilegeId.toString())) {
                 dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
-            }else {
+            } else {
                 dpr = basicRoleDataPermissionService.findDataPermission();
             }
             String[] status = {PrintPlanStatusEnum.NEW.name(), PrintPlanStatusEnum.READY.name()};
@@ -530,6 +528,14 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         }
     }
 
+    @Override
+    public boolean planFinish(Long id) {
+        UpdateWrapper<ExamPrintPlan> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamPrintPlan::getStatus, PrintPlanStatusEnum.END)
+                .eq(ExamPrintPlan::getId, id);
+        return this.update(updateWrapper);
+    }
+
 
     /**
      * 查找子机构

+ 7 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -1182,15 +1182,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Override
     public void verifyCourseCodeByPaperNumber(Long schoolId, Long examId, String paperNumber, String courseCode) {
         List<ExamTask> examTaskList = this.list(new QueryWrapper<ExamTask>().lambda()
-                .eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, paperNumber));
+                .eq(ExamTask::getSchoolId, schoolId)
+                .eq(ExamTask::getExamId, examId)
+                .eq(ExamTask::getPaperNumber, paperNumber));
         if (examTaskList.size() > 1) {
-            throw ExceptionResultEnum.ERROR.exception("异常 :[试卷编号]" + paperNumber + "有多条命题任务记录");
+            BasicExam basicExam = basicExamService.getById(examId);
+            throw ExceptionResultEnum.ERROR.exception(String.format("试卷编号[%s]在考试[%s]下有多条命题任务", paperNumber, basicExam.getName()));
         } else if (examTaskList.size() == 1) {
             ExamTask examTask = examTaskList.get(0);
             if (!courseCode.equals(examTask.getCourseCode())) {
-                throw ExceptionResultEnum.ERROR.exception("要导入的考务数据的试卷编号在命题任务中已存在,但该试卷编号对应的考务数据课程代码和命题任务中的课程代码不匹配  \n【试卷编号】 : " + paperNumber
-                        + "\n【考务导入的课程编码】 : " + courseCode
-                        + "\n【命题任务的课程编码】 : " + examTask.getCourseCode());
+                throw ExceptionResultEnum.ERROR.exception(String.format("文件中试卷编号[%s]对应课程代码为[%s],但该试卷编号对应命题任务课程代码为[%s]", paperNumber, courseCode, examTask.getCourseCode()));
             }
         }
     }
@@ -2244,7 +2245,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             basicStudentExtrasParam.setClazzName(e.getClazzName());
             return Stream.of(basicStudentExtrasParam);
         }).collect(Collectors.toList());
-        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, requestUser);
+        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, requestUser, false);
 
 
         // 考生信息回溯

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -869,7 +869,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             List<String> tmp = examinationImportDtoList.stream().filter(e -> paperNumber.equals(e.getPaperNumber()))
                     .map(ExaminationImportDto::getCourseCode).distinct().collect(Collectors.toList());
             if (tmp.size() != 1) {
-                throw ExceptionResultEnum.ERROR.exception("试卷编号为 " + paperNumber + ",对应多个课程代码 : " + tmp);
+                throw ExceptionResultEnum.ERROR.exception(String.format("试卷编号[%s]对应多个课程代码[%s]", paperNumber, String.join(",", tmp)));
             }
         }
 

+ 6 - 0
distributed-print-business/src/main/resources/db/log/3.2.5-脚本-xiaof.sql

@@ -8,3 +8,9 @@ ALTER TABLE `exam_print_plan`
 
 ALTER TABLE `basic_print_config`
     CHANGE COLUMN `backup_count` `backup_count` DOUBLE NULL DEFAULT NULL COMMENT '试卷、题卡备份数量(0-1为按比例,大于等于1为按数量)' ;
+
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('867', '下载', 'Download', 'LINK', '624', '9', 'AUTH', '868', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('868', '下载', '/api/admin/exam/card/download_card', 'URL', '624', '6', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('869', '试卷题卡预览日志记录接口', '/api/admin/basic/operation_log/save_preview_log', 'URL', '149', '14', 'SYS', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('870', '结束', 'Finish', 'LINK', '43', '4', 'AUTH', '871', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('871', '结束', '/api/admin/exam/print/plan_finish', 'URL', '43', '7', 'AUTH', '1', '1', '1');

+ 144 - 137
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -50,12 +50,43 @@
             b.print_house_id as printHouseId,
             e.name as printHouseName,
             e.code as printHouseCode,
-            bs.id as semesterId,
-            bs.name as semesterName,
-            be.id as examId,
-            be.name as examName
+            a.semester_id as semesterId,
+            a.semester_name as semesterName,
+            a.exam_id as examId,
+            a.exam_name as examName
         FROM
-            exam_print_plan a
+            (select epp.id, epp.exam_id, epp.name, be.name exam_name, bs.id semester_id, bs.name semester_name
+             from exam_print_plan epp
+                LEFT JOIN
+                basic_exam be ON be.id = epp.exam_id
+                LEFT JOIN
+                basic_semester bs ON bs.id = be.semester_id
+            <where>
+                and be.enable = true
+                <if test="schoolId != null">
+                    and epp.school_id = #{schoolId}
+                </if>
+                <if test="semesterId != null">
+                    and bs.id = #{semesterId}
+                </if>
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanId != null">
+                    and epp.id = #{printPlanId}
+                </if>
+                <if test="dpr != null">
+                    <if test="dpr.requestUserId != null">
+                        AND epp.create_id = #{dpr.requestUserId}
+                    </if>
+                    <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                        AND epp.org_id IN
+                        <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                            #{item}
+                        </foreach>
+                    </if>
+                </if>
+            </where>) a
                  JOIN
             exam_detail b ON a.id = b.print_plan_id
                  JOIN
@@ -76,27 +107,8 @@
                 </where>
             GROUP BY exam_detail_id) c ON b.id = c.exam_detail_id
                 LEFT JOIN
-            sys_user d on a.create_id = d.id
-                LEFT JOIN
             sys_org e ON b.print_house_id = e.id
-                LEFT JOIN
-            basic_exam be ON be.id = a.exam_id
-                LEFT JOIN
-            basic_semester bs ON bs.id = be.semester_id
             <where>
-                and be.enable = true
-                <if test="schoolId != null and schoolId != ''">
-                    and a.school_id = #{schoolId}
-                </if>
-                <if test="semesterId != null and semesterId != ''">
-                    and bs.id = #{semesterId}
-                </if>
-                <if test="examId != null and examId != ''">
-                    and be.id = #{examId}
-                </if>
-                <if test="printPlanId != null and printPlanId != ''">
-                    and a.id = #{printPlanId}
-                </if>
                 <if test="status != null and status != ''">
                     and b.status = #{status}
                 </if>
@@ -121,17 +133,6 @@
                 <if test="printHouseId != null and printHouseId != ''">
                     and b.print_house_id = #{printHouseId}
                 </if>
-                <if test="dpr != null">
-                    <if test="dpr.requestUserId != null">
-                        AND a.create_id = #{dpr.requestUserId}
-                    </if>
-                    <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-                        AND a.org_id IN
-                        <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
-                            #{item}
-                        </foreach>
-                    </if>
-                </if>
             </where>
         ORDER BY a.id desc, b.id desc
     </select>
@@ -235,88 +236,94 @@
             stu.site_number AS siteNumber,
             stu.create_id AS createId,
             stu.create_time AS createTime,
-            bs.id AS semesterId,
-            bs.name AS semesterName,
-            be.id AS examId,
-            be.name AS examName,
-            CONCAT(cou.course_name,
+            a.exam_id AS examId,
+            a.exam_name AS examName,
+            CONCAT(a.course_name,
                    '(',
-                   cou.course_code,
+                   a.course_code,
                    ')') AS courseNameCode,
-            cou.paper_number AS paperNumber,
-            et.specialty,
-            det.print_plan_id AS printPlanId,
-            det.print_plan_name AS printPlanName,
-            det.exam_start_time AS examStartTime,
-            det.exam_end_time AS examEndTime,
-            det.exam_place AS examPlace,
-            det.exam_room AS examRoom
+            a.paper_number AS paperNumber,
+            a.print_plan_id AS printPlanId,
+            a.print_plan_name AS printPlanName,
+            a.exam_start_time AS examStartTime,
+            a.exam_end_time AS examEndTime,
+            a.exam_place AS examPlace,
+            a.exam_room AS examRoom
         FROM
-            exam_student stu
-                INNER JOIN
-            exam_detail_course cou ON stu.exam_detail_course_id = cou.id
-                INNER JOIN
-            exam_detail det ON cou.exam_detail_id = det.id
-                LEFT JOIN
-            exam_print_plan epp ON det.print_plan_id = epp.id
-                LEFT JOIN
-            exam_task et on cou.school_id = et.school_id
-                AND et.exam_id = epp.exam_id
-                AND cou.paper_number = et.paper_number
+            (select be.id exam_id,
+                    be.name exam_name,
+                    edc.id exam_detail_course_id,
+                    edc.course_code,
+                    edc.course_name,
+                    edc.paper_number,
+                    ed.print_plan_id,
+                    ed.print_plan_name,
+                    ed.exam_start_time,
+                    ed.exam_end_time,
+                    ed.exam_place,
+                    ed.exam_room
+             from exam_detail ed
+                JOIN
+            exam_detail_course edc on ed.id = edc.exam_detail_id
                 LEFT JOIN
-            sys_user b on det.create_id = b.id
+            sys_user b on ed.create_id = b.id
                 LEFT JOIN
-            basic_exam be ON be.id = et.exam_id
+            basic_exam be ON be.id = ed.exam_id
                 LEFT JOIN
             basic_semester bs ON bs.id = be.semester_id
-        <where>
-            and be.enable = true
-            <if test="schoolId != null and schoolId > 0">
-                AND det.school_id = #{schoolId}
-            </if>
-            <if test="semesterId != null">
-                and bs.id = #{semesterId}
-            </if>
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanIdList != null and printPlanIdList != '' and printPlanIdList.size() > 0">
-                AND det.print_plan_id IN
-                <foreach collection="printPlanIdList" item="item" index="index" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
-            <if test="courseCode != null and courseCode != ''">
-                AND cou.course_code = #{courseCode}
-            </if>
-            <if test="paperNumber != null and paperNumber != ''">
-                AND cou.paper_number = #{paperNumber}
-            </if>
-            <if test="examPlace != null and examPlace != ''">
-                AND det.exam_place = #{examPlace}
-            </if>
-            <if test="examRoom != null and examRoom != ''">
-                AND det.exam_room = #{examRoom}
-            </if>
-            <if test="studentParams != null and studentParams != ''">
-                AND (stu.ticket_number LIKE CONCAT('%',#{studentParams},'%') OR stu.student_code LIKE CONCAT('%',#{studentParams},'%') OR stu.student_name LIKE CONCAT('%',#{studentParams},'%'))
-            </if>
-            <if test="startDate != null and startDate > 0">
-                AND det.exam_start_time >= #{startDate}
-            </if>
-            <if test="endDate != null and endDate > 0">
-                AND #{endDate} >= det.exam_end_time
-            </if>
-            <if test="dpr != null">
-                <if test="dpr.requestUserId != null">
-                    AND b.id = #{dpr.requestUserId}
+            <where>
+                and be.enable = true
+                <if test="schoolId != null">
+                    AND ed.school_id = #{schoolId}
                 </if>
-                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-                    AND b.org_id IN
-                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                <if test="semesterId != null">
+                    and bs.id = #{semesterId}
+                </if>
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanIdList != null and printPlanIdList != '' and printPlanIdList.size() > 0">
+                    AND ed.print_plan_id IN
+                    <foreach collection="printPlanIdList" item="item" index="index" open="(" separator="," close=")">
                         #{item}
                     </foreach>
                 </if>
+                <if test="courseCode != null and courseCode != ''">
+                    AND edc.course_code = #{courseCode}
+                </if>
+                <if test="paperNumber != null and paperNumber != ''">
+                    AND edc.paper_number = #{paperNumber}
+                </if>
+                <if test="examPlace != null and examPlace != ''">
+                    AND ed.exam_place = #{examPlace}
+                </if>
+                <if test="examRoom != null and examRoom != ''">
+                    AND ed.exam_room = #{examRoom}
+                </if>
+                <if test="startDate != null and startDate > 0">
+                    AND ed.exam_start_time &gt;= #{startDate}
+                </if>
+                <if test="endDate != null and endDate > 0">
+                    AND ed.exam_end_time &lt;= #{endDate}
+                </if>
+                <if test="dpr != null">
+                    <if test="dpr.requestUserId != null">
+                        AND b.id = #{dpr.requestUserId}
+                    </if>
+                    <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                        AND b.org_id IN
+                        <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                            #{item}
+                        </foreach>
+                    </if>
+                </if>
+            </where>) a
+                join
+            exam_student stu ON a.exam_detail_course_id = stu.exam_detail_course_id
+        <where>
+
+            <if test="studentParams != null and studentParams != ''">
+                AND (stu.ticket_number LIKE CONCAT('%',#{studentParams},'%') OR stu.student_code LIKE CONCAT('%',#{studentParams},'%') OR stu.student_name LIKE CONCAT('%',#{studentParams},'%'))
             </if>
         </where>
         order by stu.exam_detail_course_id desc, stu.id desc
@@ -376,29 +383,40 @@
             ifnull(sum(case b.status when 'FINISH' then 0 else ifnull(b.card_pages, 0) end),0)/2 cardPagesLeft,
             ifnull(sum(case b.status when 'FINISH' then 0 else ifnull(b.pages_a4, 0) end),0)/2 pagesA4Left
         FROM
-            exam_print_plan a
+            (select epp.id from exam_print_plan epp
+                LEFT JOIN
+                basic_exam be ON be.id = epp.exam_id
+                LEFT JOIN
+                basic_semester bs ON bs.id = be.semester_id
+            <where>
+                and be.enable = true
+                <if test="schoolId != null">
+                    and epp.school_id = #{schoolId}
+                </if>
+                <if test="semesterId != null">
+                    and bs.id = #{semesterId}
+                </if>
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanId != null">
+                    and epp.id = #{printPlanId}
+                </if>
+                <if test="dpr != null">
+                    <if test="dpr.requestUserId != null">
+                        AND epp.create_id = #{dpr.requestUserId}
+                    </if>
+                    <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                        AND epp.org_id IN
+                        <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                            #{item}
+                        </foreach>
+                    </if>
+                </if>
+            </where>) a
          JOIN
             exam_detail b ON a.id = b.print_plan_id
-        JOIN
-            sys_user d on a.create_id = d.id
-        LEFT JOIN
-            basic_exam be ON be.id = a.exam_id
-        LEFT JOIN
-            basic_semester bs ON bs.id = be.semester_id
         <where>
-            and be.enable = true
-            <if test="schoolId != null and schoolId != ''">
-                and a.school_id = #{schoolId}
-            </if>
-            <if test="semesterId != null">
-                and bs.id = #{semesterId}
-            </if>
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanId != null and printPlanId != ''">
-                and a.id = #{printPlanId}
-            </if>
             <if test="status != null and status != ''">
                 and b.status = #{status}
             </if>
@@ -423,17 +441,6 @@
             <if test="printHouseId != null and printHouseId != ''">
                 and b.print_house_id = #{printHouseId}
             </if>
-            <if test="dpr != null">
-                <if test="dpr.requestUserId != null">
-                    AND a.create_id = #{dpr.requestUserId}
-                </if>
-                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-                    AND a.org_id IN
-                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
-                        #{item}
-                    </foreach>
-                </if>
-            </if>
         </where>
     </select>
     <select id="listClientExamStudentPage"

+ 64 - 65
distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml

@@ -180,13 +180,27 @@
             case c.isTry when 0 then true else false end isTry,
             case c.isPass when 0 then true else false end isPass
         FROM
-            exam_print_plan a
+            (select epp.id,epp.name,epp.print_content,epp.variable_content,epp.ordinary_content,epp.status from exam_print_plan epp
+                LEFT JOIN
+                basic_exam be ON epp.exam_id = be.id
+            <where>
+                and epp.school_id = #{schoolId}
+                and be.enable = true
+                AND epp.status != 'END'
+                and be.semester_id = #{semesterId}
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanId != null">
+                    and epp.id = #{printPlanId}
+                </if>
+            </where>
+            ) a
                 JOIN
             exam_detail b ON a.id = b.print_plan_id
                 JOIN
             (SELECT
                     a.exam_detail_id,
-                    c.print_plan_id,
                     GROUP_CONCAT(CONCAT(a.course_name, '(', a.course_code, ')')) courseNameCode,
                     GROUP_CONCAT(a.paper_number) paperNumber,
                     GROUP_CONCAT(a.clazz_id) classId,
@@ -205,33 +219,19 @@
                     END) isPass
             FROM
                 exam_detail_course a
-            LEFT JOIN exam_detail c ON a.exam_detail_id = c.id
             LEFT JOIN client_status b ON a.school_id = b.school_id
                 AND a.exam_detail_id = b.exam_detail_id
                 AND a.course_code = b.course_code
                 AND a.paper_number = b.paper_number
                 AND b.machine_code = #{machineCode}
-            GROUP BY a.exam_detail_id , c.print_plan_id) c ON a.id = c.print_plan_id and b.id = c.exam_detail_id
+            GROUP BY a.exam_detail_id) c ON b.id = c.exam_detail_id
                 LEFT JOIN
             sys_user e ON a.school_id = e.school_id and b.print_user = e.login_name
-                LEFT JOIN
-            sys_user d ON a.create_id = d.id
-                LEFT JOIN
-            basic_exam be ON a.exam_id = be.id
         <where>
-            and a.school_id = #{schoolId} and be.enable = true
-            AND a.status != 'END'
             AND b.status not IN
             <foreach collection="examDetailStatus" item="item" index="index" open="(" separator="," close=")">
                 #{item}
             </foreach>
-            and be.semester_id = #{semesterId}
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanId != null and printPlanId != ''">
-                and a.id = #{printPlanId}
-            </if>
             <if test="status != null and status != ''">
                 and b.status = #{status}
             </if>
@@ -268,7 +268,7 @@
                 AND (b.print_house_id = #{orgId} or b.print_house_id is null)
             </if>
         </where>
-        order by a.id desc
+        order by a.id desc, b.id desc
     </select>
     <select id="clientTaskTotalData" resultType="com.qmth.distributed.print.business.bean.dto.ClientPrintTaskTotalDto">
         SELECT
@@ -282,13 +282,26 @@
             ifnull(sum(case b.status when 'FINISH' then 0 else ifnull(b.pages_a4, 0) end),0)/2 pagesA4Left,
             GROUP_CONCAT(c.paperType) paperNumberAndType
         FROM
-            exam_print_plan a
+            (select epp.id from exam_print_plan epp
+                LEFT JOIN
+                basic_exam be ON epp.exam_id = be.id
+            <where>
+                and epp.school_id = #{schoolId}
+                and be.enable = true
+                AND epp.status != 'END'
+                and be.semester_id = #{semesterId}
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanId != null">
+                    and epp.id = #{printPlanId}
+                </if>
+            </where>) a
         JOIN
             exam_detail b ON a.id = b.print_plan_id
         JOIN
             (SELECT
                 a.exam_detail_id,
-                c.print_plan_id,
                 GROUP_CONCAT(CONCAT(a.course_name, '(', a.course_code, ')')) courseNameCode,
                 GROUP_CONCAT(CONCAT(a.paper_number, ':', a.paper_type)) paperType,
                 GROUP_CONCAT(a.paper_number) paperNumber,
@@ -307,33 +320,17 @@
                     END) isPass
         FROM
             exam_detail_course a
-                LEFT JOIN exam_detail c ON a.exam_detail_id = c.id
                 LEFT JOIN client_status b ON a.school_id = b.school_id
                 AND a.exam_detail_id = b.exam_detail_id
                 AND a.course_code = b.course_code
                 AND a.paper_number = b.paper_number
                 AND b.machine_code = #{machineCode}
-        GROUP BY a.exam_detail_id , c.print_plan_id) c ON a.id = c.print_plan_id and b.id = c.exam_detail_id
-            LEFT JOIN
-        sys_user e ON a.school_id = e.school_id and b.print_user = e.login_name
-            LEFT JOIN
-        sys_user d ON a.create_id = d.id
-            LEFT JOIN
-        basic_exam be ON a.exam_id = be.id
+        GROUP BY a.exam_detail_id) c ON b.id = c.exam_detail_id
         <where>
-            and a.school_id = #{schoolId} and be.enable = true
-            AND a.status != 'END'
             AND b.status not IN
             <foreach collection="examDetailStatus" item="item" index="index" open="(" separator="," close=")">
                 #{item}
             </foreach>
-            and be.semester_id = #{semesterId}
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanId != null and printPlanId != ''">
-                and a.id = #{printPlanId}
-            </if>
             <if test="status != null and status != ''">
                 and b.status = #{status}
             </if>
@@ -401,7 +398,21 @@
             END) pagesA4Left,
             ROUND(AVG(IFNULL(b.print_progress, 0)), 0) progress
         FROM
-            exam_print_plan a
+            (select epp.id, epp.name from exam_print_plan epp
+                LEFT JOIN
+                basic_exam be ON epp.exam_id = be.id
+            <where>
+                and epp.school_id = #{schoolId}
+                and be.enable = true
+                AND epp.status != 'END'
+                and be.semester_id = #{semesterId}
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanId != null">
+                    and epp.id = #{printPlanId}
+                </if>
+            </where>) a
                 JOIN
             exam_detail b ON a.id = b.print_plan_id
                 JOIN
@@ -420,24 +431,11 @@
                         </if>
                     </where>
                 GROUP BY exam_detail_id) c ON b.id = c.exam_detail_id
-            LEFT JOIN
-            sys_user d ON a.create_id = d.id
-                LEFT JOIN
-            basic_exam be ON a.exam_id = be.id
         <where>
-            and a.school_id = #{schoolId} and be.enable = true
-            AND a.status != 'END'
             AND b.status not IN
             <foreach collection="examDetailStatus" item="item" index="index" open="(" separator="," close=")">
                 #{item}
             </foreach>
-            and be.semester_id = #{semesterId}
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanId != null and printPlanId != ''">
-                and a.id = #{printPlanId}
-            </if>
             <if test="examPlace != null and examPlace != ''">
                 and b.exam_place = #{examPlace}
             </if>
@@ -475,7 +473,21 @@
                 ELSE ifnull(b.pages_a4,0)
             END)/2 pagesA4Left
         FROM
-            exam_print_plan a
+            (select epp.id, epp.name from exam_print_plan epp
+                LEFT JOIN
+                basic_exam be ON epp.exam_id = be.id
+            <where>
+                and epp.school_id = #{schoolId}
+                and be.enable = true
+                AND epp.status != 'END'
+                and be.semester_id = #{semesterId}
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                <if test="printPlanId != null">
+                    and epp.id = #{printPlanId}
+                </if>
+            </where>) a
         JOIN
             exam_detail b ON a.id = b.print_plan_id
         JOIN
@@ -495,24 +507,11 @@
             </if>
         </where>
         GROUP BY exam_detail_id) c ON b.id = c.exam_detail_id
-        LEFT JOIN
-        sys_user d ON a.create_id = d.id
-            LEFT JOIN
-        basic_exam be ON a.exam_id = be.id
         <where>
-            and a.school_id = #{schoolId} and be.enable = true
-            AND a.status != 'END'
             AND b.status not IN
             <foreach collection="examDetailStatus" item="item" index="index" open="(" separator="," close=")">
                 #{item}
             </foreach>
-            and be.semester_id = #{semesterId}
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanId != null and printPlanId != ''">
-                and a.id = #{printPlanId}
-            </if>
             <if test="examPlace != null and examPlace != ''">
                 and b.exam_place = #{examPlace}
             </if>

+ 14 - 18
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -664,7 +664,19 @@
             ifnull(e.is_pass, false) isPass,
             e.try_time tryTime
         FROM
-            exam_print_plan a
+            (select epp.id, epp.school_id, epp.exam_id, epp.name, epp.status from exam_print_plan  epp
+                LEFT JOIN
+                basic_exam be ON epp.exam_id = be.id
+            <where>
+                and epp.school_id = #{schoolId}
+                and be.enable = true
+                and be.semester_id = #{semesterId}
+                <if test="examId != null">
+                    and be.id = #{examId}
+                </if>
+                and epp.status = #{printPlanStatus}
+                and LOCATE('PAPER', epp.print_content) > 0
+            </where>) a
         JOIN
             exam_detail b ON a.id = b.print_plan_id
         JOIN
@@ -674,8 +686,6 @@
             AND d.exam_id = b.exam_id
             AND d.course_code = c.course_code
             AND d.paper_number = c.paper_number
-        left join
-            t_f_flow_approve ffa on d.flow_id = ffa.flow_id
         LEFT JOIN
         client_status e ON e.school_id = d.school_id
             AND b.id = e.exam_detail_id
@@ -683,28 +693,14 @@
             AND e.course_code = d.course_code
             AND e.paper_number = d.paper_number
             and e.machine_code = #{machineCode}
-        LEFT JOIN
-            basic_exam be ON a.exam_id = be.id
+
         LEFT JOIN
             sys_user f ON d.user_id = f.id
-        LEFT JOIN
-            sys_user g ON a.create_id = g.id
         <where>
-            and a.school_id = #{schoolId} and be.enable = true
-            and a.status = #{printPlanStatus}
-            AND (d.status = 'SUBMIT' and (ffa.status = 'FINISH' or ffa.status is null))
-            and LOCATE('PAPER', a.print_content) > 0
             and b.status not in
             <foreach item="item" collection="examDetailStatus" separator="," open="(" close=")" index="">
                 #{item}
             </foreach>
-            and be.semester_id = #{semesterId}
-            <if test="examId != null">
-                and be.id = #{examId}
-            </if>
-            <if test="printPlanId != null and printPlanId != ''">
-                and a.id = #{printPlanId}
-            </if>
             <if test="printPlanId != null and printPlanId != ''">
                 and a.id = #{printPlanId}
             </if>

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

@@ -237,7 +237,7 @@ public class ExamCardController {
      */
     @ApiOperation(value = "导出题卡文件")
     @RequestMapping(value = "/download_card", method = RequestMethod.POST)
-    public void cardDownload(HttpServletResponse response, @RequestParam(value = "id") String id) throws Exception {
+    public void cardDownload(HttpServletResponse response, @RequestParam(value = "id") String id) {
         examCardService.cardDownload(response, id);
     }
 }

+ 15 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -12,6 +12,7 @@ import com.qmth.distributed.print.business.bean.params.PrintPlanParams;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.entity.ExamDetail;
+import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.service.ExamDetailService;
@@ -451,5 +452,19 @@ public class ExamPrintPlanController {
         boolean isSuccess = examDetailService.taskNormal(examDetail);
         return ResultUtil.ok(isSuccess);
     }
+
+    /**
+     * 印刷任务结束
+     *
+     * @param id 计划id
+     * @return
+     */
+    @ApiOperation(value = "印刷任务管理-结束计划")
+    @RequestMapping(value = "/plan_finish", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
+    public Result planFinish(@ApiParam(value = "计划ID") @RequestParam Long id) {
+        boolean isSuccess = examPrintPlanService.planFinish(id);
+        return ResultUtil.ok(isSuccess);
+    }
 }
 

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicStudentService.java

@@ -85,8 +85,9 @@ public interface BasicStudentService extends IService<BasicStudent> {
      *
      * @param basicStudentExtrasParamList 参数集合
      * @param requestUser                 请求人
+     * @param saveBasicStudent            是否保存基础学生数据
      */
-    void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser) throws IllegalAccessException;
+    void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser, boolean saveBasicStudent) throws IllegalAccessException;
 
     /**
      * 批量删除学生基本信息(逻辑)

+ 30 - 25
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicStudentServiceImpl.java

@@ -24,6 +24,7 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
@@ -112,7 +113,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser) throws IllegalAccessException {
+    public void saveBasicStudentWithExtrasList(List<BasicStudentExtrasParam> basicStudentExtrasParamList, SysUser requestUser, boolean saveBasicStudent) throws IllegalAccessException {
         Long schoolId = requestUser.getSchoolId();
         // key = collegeName
         Map<String, Long> collegeMap = new HashMap<>();
@@ -209,32 +210,36 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                     clazzMap.put(clazzKey, clazzId);
                 }
             }
-            // 学生信息组装
-            BasicStudentParams basicStudentParams = new BasicStudentParams();
-            basicStudentParams.setStudentName(studentName);
-            basicStudentParams.setStudentCode(studentCode);
-            basicStudentParams.setPhoneNumber(phoneNumber);
-            if (SystemConstant.longNotNull(collegeId)) {
-                basicStudentParams.setCollegeId(collegeId);
-            }
-            if (SystemConstant.longNotNull(majorId)) {
-                basicStudentParams.setMajorId(majorId);
-            }
-            if (SystemConstant.longNotNull(clazzId)) {
-                basicStudentParams.setClazzId(clazzId);
-            }
+            if (saveBasicStudent) {
+                // 学生信息组装
+                BasicStudentParams basicStudentParams = new BasicStudentParams();
+                basicStudentParams.setStudentName(studentName);
+                basicStudentParams.setStudentCode(studentCode);
+                basicStudentParams.setPhoneNumber(phoneNumber);
+                if (SystemConstant.longNotNull(collegeId)) {
+                    basicStudentParams.setCollegeId(collegeId);
+                }
+                if (SystemConstant.longNotNull(majorId)) {
+                    basicStudentParams.setMajorId(majorId);
+                }
+                if (SystemConstant.longNotNull(clazzId)) {
+                    basicStudentParams.setClazzId(clazzId);
+                }
 
-            BasicStudent tmp = this.getOne(new QueryWrapper<BasicStudent>().lambda()
-                    .eq(BasicStudent::getSchoolId, requestUser.getSchoolId())
-                    .eq(BasicStudent::getEnable, true)
-                    .eq(BasicStudent::getStudentCode, studentCode));
-            if (Objects.nonNull(tmp)) {
-                basicStudentParams.setId(tmp.getId());
+                BasicStudent tmp = this.getOne(new QueryWrapper<BasicStudent>().lambda()
+                        .eq(BasicStudent::getSchoolId, requestUser.getSchoolId())
+                        .eq(BasicStudent::getEnable, true)
+                        .eq(BasicStudent::getStudentCode, studentCode));
+                if (Objects.nonNull(tmp)) {
+                    basicStudentParams.setId(tmp.getId());
+                }
+                addBasicStudentParamsList.add(basicStudentParams);
             }
-            addBasicStudentParamsList.add(basicStudentParams);
         }
-        List<BasicStudent> basicStudentList = this.editEntityHelp(addBasicStudentParamsList, requestUser);
-        this.saveOrUpdateBatch(basicStudentList);
+        if (!CollectionUtils.isEmpty(addBasicStudentParamsList)) {
+            List<BasicStudent> basicStudentList = this.editEntityHelp(addBasicStudentParamsList, requestUser);
+            this.saveOrUpdateBatch(basicStudentList);
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -307,7 +312,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                 basicStudentExtrasParam.setClazzName(e.getClazzName());
                 return Stream.of(basicStudentExtrasParam);
             }).collect(Collectors.toList());
-            this.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser);
+            this.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser, true);
             map.put("dataCount", datasource.size());
         }
         return map;