wangliang 3 сар өмнө
parent
commit
bc50e25c93

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCardModelFour.java

@@ -84,6 +84,10 @@ public class ExamCardModelFour extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private String courseName;
 
+    @ApiModelProperty(value = "学期id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long semesterId;
+
     public ExamCardModelFour() {
 
     }
@@ -105,6 +109,14 @@ public class ExamCardModelFour extends BaseEntity implements Serializable {
         this.courseId = params.getCourseId();
     }
 
+    public Long getSemesterId() {
+        return semesterId;
+    }
+
+    public void setSemesterId(Long semesterId) {
+        this.semesterId = semesterId;
+    }
+
     public String getCourseCode() {
         return courseCode;
     }

+ 18 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ConditionMapper.java

@@ -16,51 +16,51 @@ import java.util.List;
 public interface ConditionMapper {
 
     List<BasicCourse> listCourse(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("enable") Boolean enable, @Param("printPlanIds") List<String> printPlanIds,
-            @Param("dpr") DataPermissionRule dpr);
+                                 @Param("dpr") DataPermissionRule dpr);
 
     List<String> listPaperNumber(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseId") Long courseId, @Param("printPlanIds") List<String> printPlanIds,
-            @Param("dpr") DataPermissionRule dpr);
+                                 @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForApply(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("userId") Long userId);
 
     List<BasicCourse> listCourseForAudit(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("enable") Boolean enable);
 
-    List<String> listPaperNumberForApply(@Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("userId") Long userId);
+    List<String> listPaperNumberForApply(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("userId") Long userId);
 
-    List<String> listPaperNumberAudit(@Param("semesterId") Long semesterId, @Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId);
+    List<String> listPaperNumberAudit(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId);
 
     List<PrintPlanBrief> listPrintPlan(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("status") String status,
-            @Param("dpr") DataPermissionRule dpr);
+                                         @Param("dpr") DataPermissionRule dpr);
 
     List<PrintPlanBrief> listPrintPlanForClient(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("examDetailStatus") String[] examDetailStatus);
 
     List<BasicCourse> listCourseForPlanTask(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
 
     List<String> listPaperNumberPlanTask(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("courseId") Long courseId,
-            @Param("dpr") DataPermissionRule dpr);
+                                         @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForEntrance(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("userId") Long userId, @Param("status") String status);
 
-    List<String> listPaperNumberForEntrance(@Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("userId") Long userId, @Param("courseId") Long courseId, @Param("status") String status);
+    List<String> listPaperNumberForEntrance(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("userId") Long userId, @Param("courseId") Long courseId, @Param("status") String status);
 
     List<BasicCourse> listCourseFromMarkPaper(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId,
-            @Param("dpr") DataPermissionRule dpr);
+                                              @Param("dpr") DataPermissionRule dpr);
 
-    List<String> listPaperNumberFromMarkPaper(@Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
+    List<String> listPaperNumberFromMarkPaper(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseFromExamTaskByCreateId(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseFromExamTaskByUserId(@Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 
-    List<String> listPaperNumberFromExamTaskByCreateId(@Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
+    List<String> listPaperNumberFromExamTaskByCreateId(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
 
     List<String> listPaperNumberFromExamTaskByUserIdAndPass(@Param("examId") Long examId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForQuery(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("dpr") DataPermissionRule dpr);
 
-    List<String> listPaperNumberForQuery(@Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
+    List<String> listPaperNumberForQuery(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForApproveHistory(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 
@@ -69,19 +69,19 @@ public interface ConditionMapper {
     List<String> listPaperNumberForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
     List<DictionaryResult> listOutlineSemester(@Param("schoolId") Long schoolId, @Param("professionalId") Long professionalId, @Param("cultureProgramId") Long cultureProgramId,
-            @Param("dpr") DataPermissionRule dpr);
+                                               @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCultureProgramCourse(@Param("schoolId") Long schoolId, @Param("professionalId") Long professionalId, @Param("cultureProgramId") Long cultureProgramId,
-            @Param("semesterId") Long semesterId, @Param("dpr") DataPermissionRule dpr);
+                                               @Param("semesterId") Long semesterId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForDocument(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForBasicExamStudent(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("dpr") DataPermissionRule dpr);
 
-    List<String> listPaperNumberFromBasicExamStudent(@Param("examId") Long examId,@Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
+    List<String> listPaperNumberFromBasicExamStudent(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("courseId") Long courseId, @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForPrintCount(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId,
-            @Param("dpr") DataPermissionRule dpr);
+                                              @Param("dpr") DataPermissionRule dpr);
 
     List<BasicCourse> listCourseForScanCount(@Param("examId") Long examId, @Param("openCollegeId") Long openCollegeId, @Param("dpr") DataPermissionRule dpr);
 
@@ -102,5 +102,7 @@ public interface ConditionMapper {
     List<BasicCourse> listCourseForExamDetail(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("dpr") DataPermissionRule dpr);
 
     List<String> listPaperNumberForExamDetail(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIds") List<String> printPlanIds, @Param("courseId") Long courseId,
-            @Param("dpr") DataPermissionRule dpr);
+                                              @Param("dpr") DataPermissionRule dpr);
+
+    List<BasicCourse> listCourseForMarkPaper(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 }

+ 6 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java

@@ -3,8 +3,12 @@ package com.qmth.distributed.print.business.service;
 import com.qmth.distributed.print.business.bean.result.BasicTeachClazzResult;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.teachcloud.common.bean.result.DictionaryResult;
-import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.entity.BasicCourse;
+import com.qmth.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.common.entity.BasicSemester;
+import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
+import com.qmth.teachcloud.common.enums.ExamModelEnum;
 
 import java.util.List;
 
@@ -17,7 +21,7 @@ public interface ConditionService {
 
     List<BasicSemester> listSemester(Boolean enable);
 
-    List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable);
+    List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable, ExamModelEnum model);
 
     List<BasicCourse> listCourse(Long semesterId, Long examId, Boolean enable, List<String> printPlanId, Long openCollegeId);
 

+ 13 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -9,11 +9,11 @@ import com.qmth.distributed.print.business.mapper.ConditionMapper;
 import com.qmth.distributed.print.business.service.BasicExamService;
 import com.qmth.distributed.print.business.service.BasicTeachClazzService;
 import com.qmth.distributed.print.business.service.ConditionService;
-import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.result.DictionaryResult;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
+import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * <p>
@@ -64,15 +65,18 @@ public class ConditionServiceImpl implements ConditionService {
     }
 
     @Override
-    public List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable) {
+    public List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable, ExamModelEnum model) {
         QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicExam::getSemesterId, semesterId);
-        if (category != null) {
+        if (Objects.nonNull(category)) {
             queryWrapper.lambda().eq(BasicExam::getCategory, category);
         }
-        if (enable != null) {
+        if (Objects.nonNull(enable)) {
             queryWrapper.lambda().eq(BasicExam::getEnable, enable);
         }
+        if (Objects.nonNull(model)) {
+            queryWrapper.lambda().eq(BasicExam::getExamModel, model);
+        }
         queryWrapper.lambda().orderByDesc(BasicExam::getCreateTime);
         return basicExamService.list(queryWrapper);
     }
@@ -152,6 +156,9 @@ public class ConditionServiceImpl implements ConditionService {
         } // 扫描任务统计(2089)
         else if ("2089".equals(privilegeIdString)) {
             return conditionMapper.listCourseForScanCount(examId, openCollegeId, dpr);
+            //答题卡管理
+        } else if ("1199".equals(privilegeIdString)) {
+            return conditionMapper.listCourseForMarkPaper(semesterId, examId, dpr);
         } else {
             return conditionMapper.listCourse(semesterId, examId, enable, printPlanIds, dpr);
         }
@@ -235,8 +242,8 @@ public class ConditionServiceImpl implements ConditionService {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
         if ("client".equals(source)) {
-            String[] examDetailStatus = new String[] { ExamDetailStatusEnum.NEW.name(),
-                    PrintPlanStatusEnum.READY.name() };
+            String[] examDetailStatus = new String[]{ExamDetailStatusEnum.NEW.name(),
+                    PrintPlanStatusEnum.READY.name()};
             return conditionMapper.listPrintPlanForClient(semesterId, examId, examDetailStatus);
         } else {
             // 如果byAssignUser为true时,不能通过层级关系查询

+ 31 - 0
distributed-print-business/src/main/resources/mapper/ConditionMapper.xml

@@ -1184,4 +1184,35 @@
             </if>
         </where>
     </select>
+
+    <select id="listCourseForMarkPaper" resultType="com.qmth.teachcloud.common.entity.BasicCourse">
+        select distinct bc.id,bc.code,bc.name
+        from
+            mark_paper mp
+            left join basic_exam be on be.id = mp.exam_id
+            left join basic_course bc on bc.id = mp.course_id
+        <where>
+            <if test="semesterId != null and semesterId != ''">
+                and be.semester_id = ${semesterId}
+            </if>
+            <if test="examId != null and examId != ''">
+                and mp.exam_id = ${examId}
+            </if>
+            and exists(select 1 from basic_exam_student bes where bes.exam_id = ${examId} and mp.course_id = bes.course_id
+            <if test="dpr != null">
+                <if test="dpr.requestUserId != null">
+                    AND bes.create_id = #{dpr.requestUserId}
+                </if>
+                <if test="dpr.courseUserId != null">
+                    AND EXISTS( SELECT 1 FROM (select course_id from teach_course where exam_id = #{examId} and user_id = #{dpr.courseUserId}) tc WHERE tc.course_id = bes.course_id)
+                </if>
+                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                    AND bc.teaching_room_id IN
+                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </if> )
+        </where>
+    </select>
 </mapper>

+ 15 - 27
distributed-print-business/src/main/resources/mapper/ExamCardModelFourMapper.xml

@@ -3,36 +3,24 @@
 <mapper namespace="com.qmth.distributed.print.business.mapper.ExamCardModelFourMapper">
 
     <select id="listPage" resultType="com.qmth.distributed.print.business.entity.ExamCardModelFour">
-        select bc.code courseCode,
-        bc.name courseName,
-        ecmf.*
+        select distinct bc.code courseCode,bc.name courseName,be.semester_id as semesterId,ecmf.*
         from exam_card_model_four ecmf
         left join basic_course bc on ecmf.course_id = bc.id
+        left join basic_exam be on be.id = ecmf.exam_id
+        left join basic_exam_student bes on bes.semester_id = be.semester_id and bes.exam_id = be.id and bes.course_id = bc.id
         <where>
-            ecmf.school_id = #{schoolId}
-            <if test="semesterId != null || examId != null">
-                AND EXISTS(SELECT 1 FROM
-                (SELECT REPLACE(substring_index(substring_index(CONVERT((etd.paper_attachment_ids ->>'$[*].cardId')
-                USING utf8), ']', 1), '[',-1),'"','') as cardId
-                FROM exam_task et
-                LEFT JOIN exam_task_detail etd ON et.id = etd.exam_task_id
-                LEFT JOIN basic_exam be ON et.exam_id = be.id
-                <where>
-                    <if test="semesterId != null and semesterId != ''">
-                        AND be.semester_id = #{semesterId}
-                    </if>
-                    <if test="examId != null and examId != ''">
-                        AND et.exam_id = #{examId}
-                    </if>
-                    <if test="courseId != null and courseId != ''">
-                        AND et.course_id = #{courseId}
-                    </if>
-                    <if test="paperNumber != null and paperNumber != ''">
-                        AND et.paper_number = #{paperNumber}
-                    </if>
-                </where>
-                ) t
-                WHERE LOCATE(ecmf.id,t.cardId) > 0)
+                ecmf.school_id = #{schoolId}
+            <if test="semesterId != null and semesterId != ''">
+                AND be.semester_id = #{semesterId}
+            </if>
+            <if test="examId != null and examId != ''">
+                AND be.id = #{examId}
+            </if>
+            <if test="courseId != null and courseId != ''">
+                AND bc.id = #{courseId}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                AND bes.paper_number = #{paperNumber}
             </if>
             <if test="collegeId != null and collegeId != ''">
                 AND bc.teaching_room_id = #{collegeId}

+ 5 - 1
distributed-print/install/mysql/upgrade/3.4.4.sql

@@ -273,4 +273,8 @@ WHERE id=1204;
 -- 2025-03-11
 UPDATE sys_privilege
 SET name='答题卡管理', url='ModeCardManage', `type`='MENU', parent_id=3, `sequence`=4, property='AUTH', related=NULL, enable=1, default_auth=0, front_display=1
-WHERE id=1199;
+WHERE id=1199;
+
+INSERT INTO sys_config
+(id, school_id, org_id, config_key, config_name, config_value, remark, enable, sort, create_id, create_time, update_id, update_time)
+VALUES(52, NULL, NULL, 'sms.mark.task.create.code', '阅卷待办短信通知', 'SMS_480165252', NULL, 1, 21, 1, 1733878447209, NULL, 1733878447249);

+ 31 - 28
distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

@@ -9,6 +9,7 @@ import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.BasicSemester;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
+import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.mark.service.ScanConditionService;
@@ -42,118 +43,120 @@ public class ConditionController {
 
     @ApiOperation(value = "学期")
     @RequestMapping(value = "/list_semester", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicSemester.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicSemester.class)})
     public Result listSemester(@ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
         return ResultUtil.ok(conditionService.listSemester(enable));
     }
 
     @ApiOperation(value = "考试")
     @RequestMapping(value = "/list_exam", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicExam.class) })
-    public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试类型") @RequestParam(required = false) ExamCategoryEnum category,
-            @ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
-        return ResultUtil.ok(conditionService.listExam(semesterId, category, enable));
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicExam.class)})
+    public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                           @ApiParam(value = "考试类型") @RequestParam(required = false) ExamCategoryEnum category,
+                           @ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable,
+                           @ApiParam(value = "考试模式") @RequestParam(required = false) ExamModelEnum model) {
+        return ResultUtil.ok(conditionService.listExam(semesterId, category, enable, model));
     }
 
     @ApiOperation(value = "课程")
     @RequestMapping(value = "/list_course", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = BasicCourse.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicCourse.class)})
     public Result listCourse(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-            @ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId,
-            @ApiParam(value = "开课学院ID") @RequestParam(required = false) Long openCollegeId) {
+                             @ApiParam(value = "启用/禁用") @RequestParam(required = false) Boolean enable, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId,
+                             @ApiParam(value = "开课学院ID") @RequestParam(required = false) Long openCollegeId) {
         return ResultUtil.ok(conditionService.listCourse(semesterId, examId, enable, printPlanId, openCollegeId));
     }
 
     @ApiOperation(value = "试卷编号")
     @RequestMapping(value = "/list_paper_number", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = String.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = String.class)})
     public Result listPaperNumber(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-            @ApiParam(value = "开课学院id") @RequestParam(required = false) Long openCollegeId,
-            @ApiParam(value = "课程代码") @RequestParam(required = false) Long courseId, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
+                                  @ApiParam(value = "开课学院id") @RequestParam(required = false) Long openCollegeId,
+                                  @ApiParam(value = "课程代码") @RequestParam(required = false) Long courseId, @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
         return ResultUtil.ok(conditionService.listPaperNumber(semesterId, examId, openCollegeId, courseId, printPlanId));
     }
 
     @ApiOperation(value = "印刷计划")
     @RequestMapping(value = "/list_print_plan", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = PrintPlanBrief.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = PrintPlanBrief.class)})
     public Result listPrintPlan(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId, @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-            @ApiParam(value = "source") @RequestParam(required = false) String source) {
+                                @ApiParam(value = "source") @RequestParam(required = false) String source) {
         return ResultUtil.ok(conditionService.listPrintPlan(semesterId, examId, source));
     }
 
     @ApiOperation(value = "学院")
     @RequestMapping(value = "/list_college", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = SysOrg.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = SysOrg.class)})
     public Result listCollege() {
         return ResultUtil.ok(conditionService.listCollege());
     }
 
     @ApiOperation(value = "扫描-获取学期、考试列表")
     @RequestMapping(value = "/scan/semester/list", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
     public Result scanSemesterList(@ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
         return ResultUtil.ok(scanConditionService.scanSemesterList(enable));
     }
 
     @ApiOperation(value = "扫描-获取课程、试卷编号列表")
     @RequestMapping(value = "/scan/course/list", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
     public Result scanCourseList(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") Long examId) {
         return ResultUtil.ok(scanConditionService.scanCourseList(examId));
     }
 
     @ApiOperation(value = "扫描-获取校区、考场")
     @RequestMapping(value = "/scan/campus/list", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
     public Result scanCampusList(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") Long examId,
-            @ApiParam(value = "课程代码") @RequestParam(value = "courseId", required = false) Long courseId, @ApiParam(value = "试卷编号") @RequestParam(value = "coursePaperId", required = false) String coursePaperId) {
+                                 @ApiParam(value = "课程代码") @RequestParam(value = "courseId", required = false) Long courseId, @ApiParam(value = "试卷编号") @RequestParam(value = "coursePaperId", required = false) String coursePaperId) {
         return ResultUtil.ok(scanConditionService.scanCampusList(examId, courseId, coursePaperId));
     }
 
     @ApiOperation(value = "教学班字典")
     @RequestMapping(value = "/list_basic_teach_clazz", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询成功", response = Map.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Map.class)})
     public Result listBasicTeachClazz(@ApiParam(value = "考试ID", required = true) @RequestParam(value = "examId") String examId,
-            @ApiParam(value = "课程编号") @RequestParam(value = "courseCode", required = false) String courseCode, @ApiParam(value = "名称") @RequestParam(value = "clazzName", required = false) String clazzName) {
+                                      @ApiParam(value = "课程编号") @RequestParam(value = "courseCode", required = false) String courseCode, @ApiParam(value = "名称") @RequestParam(value = "clazzName", required = false) String clazzName) {
         return ResultUtil.ok(
                 conditionService.listBasicTeachClazz(SystemConstant.convertIdToLong(examId), courseCode, clazzName));
     }
 
     @ApiOperation(value = "OBE-专业")
     @RequestMapping(value = "/list_professional", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
     public Result listProfessional() {
         return ResultUtil.ok(obeConditionService.listProfessional());
     }
 
     @ApiOperation(value = "OBE-所有专业")
     @RequestMapping(value = "/list_professional_all", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
     public Result listProfessionalAll() {
         return ResultUtil.ok(obeConditionService.listProfessionalAll());
     }
 
     @ApiOperation(value = "OBE-培养方案")
     @RequestMapping(value = "/list_culture_program", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
     public Result listCultureProgram(@ApiParam(value = "专业ID") @RequestParam(value = "professionalId", required = false) Long professionalId) {
         return ResultUtil.ok(obeConditionService.listCultureProgram(professionalId));
     }
 
     @ApiOperation(value = "OBE-学期")
     @RequestMapping(value = "/list_outline_semester", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
     public Result listOutlineSemester(@ApiParam(value = "专业ID") @RequestParam(value = "professionalId", required = false) Long professionalId,
-            @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId) {
+                                      @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId) {
         return ResultUtil.ok(obeConditionService.listOutlineSemester(professionalId, cultureProgramId));
     }
 
     @ApiOperation(value = "OBE-课程")
     @RequestMapping(value = "/list_culture_program_course", method = RequestMethod.POST)
-    @ApiResponses({ @ApiResponse(code = 200, message = "查询", response = Result.class) })
+    @ApiResponses({@ApiResponse(code = 200, message = "查询", response = Result.class)})
     public Result listCultureProgramCourse(@ApiParam(value = "专业ID") @RequestParam(value = "professionalId", required = false) Long professionalId,
-            @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId,
-            @ApiParam(value = "学期id") @RequestParam(value = "semesterId", required = false) Long semesterId) {
+                                           @ApiParam(value = "培养方案ID") @RequestParam(value = "cultureProgramId", required = false) Long cultureProgramId,
+                                           @ApiParam(value = "学期id") @RequestParam(value = "semesterId", required = false) Long semesterId) {
         return ResultUtil.ok(obeConditionService.listCultureProgramCourse(professionalId, cultureProgramId, semesterId));
     }
 }

+ 5 - 7
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardModelFourController.java

@@ -12,11 +12,12 @@ import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import io.swagger.annotations.*;
-import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.util.List;
@@ -62,10 +63,7 @@ public class ExamCardModelFourController {
     @RequestMapping(value = "/save_generic", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.SAVE, detail = "新增/修改操作,题卡ID:{{params.id}}、题卡标题:{{params.title}}")
     @ApiResponses({@ApiResponse(code = 200, message = "新增/修改", response = EditResult.class)})
-    public Result saveGeneric(@ApiParam(value = "题卡信息", required = true) @Valid @RequestBody GenericExamCardModelFourParams params, BindingResult bindingResult) throws Exception {
-        if (bindingResult.hasErrors()) {
-            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
-        }
+    public Result saveGeneric(GenericExamCardModelFourParams params) throws Exception {
         return ResultUtil.ok(examCardModelFourService.saveGeneric(params));
     }
 

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -220,6 +220,7 @@ public class SystemConstant {
     public static final String SMS_UPLOAD_STRUCTURE_CODE = "sms.upload.structure.code";
     public static final String SMS_AUDIT_COPY_USER_CODE = "sms.audit.copy.user.code";
     public static final String SMS_SYNC_DATA_CODE = "sms.sync.data.code";
+    public static final String SMS_MARK_TASK_CREATE_CODE = "sms.mark.task.create.code";
 
     /**
      * 系统学校配置

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/MessageEnum.java

@@ -47,7 +47,8 @@ public enum MessageEnum {
      * 审核抄送
      */
     NOTICE_OF_AUDIT_COPY_USER("审核抄送生成通知","${userName}您好,${courseName}相关命题任务已经提交,由${auditUserNames}负责审核,请您查看!"),
-    NOTICE_SYNC_DATA("数据同步失败通知","管理员好,${schoolName}学校,数据同步失败,请尽快检查");
+    NOTICE_SYNC_DATA("数据同步失败通知","管理员好,${schoolName}学校,数据同步失败,请尽快检查"),
+    NOTICE_OF_MARK_TASK_CREATED("阅卷待办通知","老师好,${courseName}课程${examName}评卷已启动。请您登录“阅卷系统”,点击“评卷管理”->“评卷入口”,进入评卷界面进行评卷操作。");
 
     MessageEnum(String name, String template) {
         this.name = name;

+ 4 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/SmsSendUtil.java

@@ -217,6 +217,10 @@ public class SmsSendUtil {
                 templateCode = SystemConstant.SMS_SYNC_DATA_CODE;
                 templateContent = messageEnum.getTemplate();
                 break;
+            case NOTICE_OF_MARK_TASK_CREATED:
+                templateCode = SystemConstant.SMS_MARK_TASK_CREATE_CODE;
+                templateContent = messageEnum.getTemplate();
+                break;
             default:
                 break;
         }