Procházet zdrojové kódy

新增印刷管理条码校验

wangliang před 2 měsíci
rodič
revize
02fc16d374

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

@@ -6,14 +6,16 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.InitExamDetailDto;
-import com.qmth.teachcloud.common.bean.examRule.FieldsDto;
 import com.qmth.distributed.print.business.bean.result.ExaminationDetailResult;
 import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.bean.result.SummarizedDataResult;
-import com.qmth.distributed.print.business.entity.*;
+import com.qmth.distributed.print.business.entity.ExamDetail;
+import com.qmth.distributed.print.business.entity.ExamPrintPlan;
+import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.common.bean.examRule.FieldsDto;
 import com.qmth.teachcloud.common.entity.BasicExamStudent;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.CreatePdfTypeEnum;
@@ -187,6 +189,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
     List<InitExamDetailDto> listPrintFinishExamDetailCourseIds(Long examId, String paperNumber, Integer serialNumber);
 
     boolean allExamDetailIsExist(Long examId, Long courseId, String paperNumber);
+
     boolean allExamDetailIsFinish(Long examId, Long courseId, String paperNumber);
 
     List<ExamDetail> listExamDetailByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String paperNumber);
@@ -198,4 +201,24 @@ public interface ExamDetailService extends IService<ExamDetail> {
     void updateTotalSubjects(Long id, int totalSubjects);
 
     void updateMergePdfPath(Long id, String toJSONString);
+
+    /**
+     * 根据考试id和条码查找
+     *
+     * @param examId
+     * @param packageCode
+     * @return
+     */
+    ExamDetail findByExamIdAndPackageCode(Long examId, String packageCode);
+
+    /**
+     * 条码校验
+     *
+     * @param semesterId
+     * @param examId
+     * @param packageCodeStart
+     * @param packageCodeEnd
+     * @return
+     */
+    Boolean packageCodeVerify(Long semesterId, Long examId, String packageCodeStart, String packageCodeEnd);
 }

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

@@ -27,16 +27,13 @@ import com.qmth.teachcloud.common.bean.examRule.CodeNameEnableValue;
 import com.qmth.teachcloud.common.bean.examRule.FieldsDto;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.BasicAttachment;
-import com.qmth.teachcloud.common.entity.BasicExamStudent;
-import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.*;
-import com.qmth.teachcloud.common.service.BasicAttachmentService;
-import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
-import com.qmth.teachcloud.common.service.CommonCacheService;
-import com.qmth.teachcloud.common.service.TeachcloudCommonService;
-import com.qmth.teachcloud.common.util.*;
+import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.ConvertUtil;
+import com.qmth.teachcloud.common.util.RedisCounterUtil;
+import com.qmth.teachcloud.common.util.RedisUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
@@ -143,6 +140,9 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Resource
     private TBTaskPdfService tbTaskPdfService;
 
+    @Resource
+    BasicSemesterService basicSemesterService;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public double calculateTotalSubjects(Long printPlanId) {
@@ -1188,4 +1188,42 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                 .eq(ExamDetail::getId, id);
         this.update(updateWrapper);
     }
+
+    /**
+     * 根据考试id和条码查找
+     *
+     * @param examId
+     * @param packageCode
+     * @return
+     */
+    @Override
+    public ExamDetail findByExamIdAndPackageCode(Long examId, String packageCode) {
+        QueryWrapper<ExamDetail> examDetailQueryWrapper = new QueryWrapper<>();
+        examDetailQueryWrapper.lambda().eq(ExamDetail::getExamId, examId).eq(ExamDetail::getPackageCode, packageCode);
+        return this.getOne(examDetailQueryWrapper);
+    }
+
+    /**
+     * 条码校验
+     *
+     * @param semesterId
+     * @param examId
+     * @param packageCodeStart
+     * @param packageCodeEnd
+     * @return
+     */
+    @Override
+    public Boolean packageCodeVerify(Long semesterId, Long examId, String packageCodeStart, String packageCodeEnd) {
+        BasicSemester basicSemester = basicSemesterService.getById(semesterId);
+        Objects.requireNonNull(basicSemester, "未找到学期信息");
+
+        ExamDetail examDetail = this.findByExamIdAndPackageCode(examId, packageCodeStart);
+        Objects.requireNonNull(examDetail, "起始条码有误,请重新扫描");
+
+        String tempCode = StringUtils.substring(packageCodeEnd, 0, packageCodeEnd.length() - 2);
+        if (!Objects.equals(tempCode, examDetail.getPackageCode())) {
+            throw ExceptionResultEnum.ERROR.exception("结束条码有误,请重新扫描");
+        }
+        return true;
+    }
 }

+ 6 - 0
distributed-print/install/mysql/upgrade/3.4.5.sql

@@ -92,3 +92,9 @@ VALUES(1229, 'AI智能评卷待复核', 'InspectedAiMark', 'LINK', 946, 9, 'AUTH
 
 -- 2025-04-15
 ALTER TABLE `mark_task` ADD COLUMN `ai_mark_error_msg` VARCHAR(2000) NULL COMMENT 'AI评卷错误信息' AFTER `ai_marked`;
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(1230, '校验', 'Verify', 'BUTTON', 47, 3, 'AUTH', '1231', 1, 0, 1);
+INSERT INTO sys_privilege
+(id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
+VALUES(1231, '校验code', '/api/admin/exam/print/package_code/verify', 'URL', 47, 10, 'AUTH', NULL, 1, 1, 1);

+ 10 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintTaskController.java

@@ -219,5 +219,15 @@ public class ExamPrintTaskController {
         examTaskWholeService.checkAndCreateTask(examId, courseId, paperNumber);
         return ResultUtil.ok();
     }
+
+    @ApiOperation(value = "条码校验")
+    @RequestMapping(value = "/package_code/verify", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "成功/失败", response = EditResult.class)})
+    public Result packageCodeVerify(@ApiParam(value = "学期ID", required = true) @RequestParam Long semesterId,
+                                    @ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                                    @ApiParam(value = "起始条码", required = true) @RequestParam String packageCodeStart,
+                                    @ApiParam(value = "结束条码", required = true) @RequestParam String packageCodeEnd) {
+        return ResultUtil.ok(examDetailService.packageCodeVerify(semesterId, examId, packageCodeStart, packageCodeEnd));
+    }
 }
 

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

@@ -120,7 +120,7 @@ public class MarkInspectedController extends BaseController {
     @ApiOperation(value = "获取AI智能评卷任务数量")
     @RequestMapping(value = "/ai/mark/getTask/count", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "AI智能评卷任务数量", response = MarkAiScoreDto.class)})
-    public Result getAiMarkInspectedTaskCount(@ApiParam(value = "考ID", required = true) @RequestParam Long examId,
+    public Result getAiMarkInspectedTaskCount(@ApiParam(value = "考ID", required = true) @RequestParam Long examId,
                                               @ApiParam(value = "试卷编码", required = true) @RequestParam String paperNumber) {
 
         return ResultUtil.ok(markStudentService.findScoreByAiMark(examId, paperNumber));