Browse Source

3.2.7 bug修改

xiaofei 1 year ago
parent
commit
e1e4bebf11

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

@@ -31,7 +31,7 @@ public interface ConditionMapper {
 
     List<BasicCourse> listCourseForScore(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("basicCourses") List<BasicCourse> basicCourses, @Param("dpr") DataPermissionRule dpr);
 
-    List<BasicClazz> listClazz(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("dpr") DataPermissionRule dpr);
+    List<BasicClazz> listClazz(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("clazzName") String clazzName, @Param("dpr") DataPermissionRule dpr);
 
     List<PrintPlanBrief> listPrintPlanForClient(@Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("examDetailStatus") String[] examDetailStatus);
 }

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

@@ -22,7 +22,7 @@ public interface ConditionService {
 
     List<PrintPlanBrief> listPrintPlan(Long semesterId, Long examId, String source);
 
-    List<BasicClazz> listClazz(Long semesterId, Long examId, String courseCode);
+    List<BasicClazz> listClazz(Long semesterId, Long examId, String courseCode, String clazzName);
 
     List<SysOrg> listCollege();
 }

+ 4 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java

@@ -17,6 +17,7 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -149,14 +150,14 @@ public class ConditionServiceImpl implements ConditionService {
     }
 
     @Override
-    public List<BasicClazz> listClazz(Long semesterId, Long examId, String courseCode) {
+    public List<BasicClazz> listClazz(Long semesterId, Long examId, String courseCode, String clazzName) {
         Long privilegeId = ServletUtil.getCurrentPrivilegeId();
         String privilegeIdString = privilegeId == null ? null : String.valueOf(privilegeId);
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(privilegeId);
         if ("487".equals(privilegeIdString)) {
-            return conditionMapper.listClazz(semesterId, examId, courseCode, dpr);
+            return conditionMapper.listClazz(semesterId, examId, courseCode, clazzName, dpr);
         }
-        return null;
+        return new ArrayList<>();
     }
 
     @Override

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

@@ -692,8 +692,6 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         List<String> examStudentTicketNumberList = examStudentService.listTicketNumberByExamId(examId);
 
         List<ExamStudent> examStudentList = new ArrayList<>();
-        Set<String> ticketNumberRepeatList = new HashSet<>();
-        StringJoiner stringJoiner = new StringJoiner(",");
         Long schoolId = sysUser.getSchoolId();
         for (ExaminationImportDto examinationImportDto : examDetailCourseStudentList) {
             String paperNumber = examinationImportDto.getPaperNumber();

+ 58 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperClassMarkerServiceImpl.java

@@ -1,23 +1,30 @@
 package com.qmth.distributed.print.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.marking.ClassMarker;
+import com.qmth.distributed.print.business.bean.marking.EvaluationParameters;
+import com.qmth.distributed.print.business.bean.marking.GroupInfo;
+import com.qmth.distributed.print.business.bean.marking.Marker;
 import com.qmth.distributed.print.business.entity.ExamPaperClassMarker;
 import com.qmth.distributed.print.business.entity.ExamPaperStructure;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamPaperClassMarkerMapper;
 import com.qmth.distributed.print.business.service.ExamPaperClassMarkerService;
 import com.qmth.distributed.print.business.service.ExamPaperStructureService;
+import com.qmth.distributed.print.business.service.ExamStudentService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 班级和评卷员关系服务实现类
@@ -28,23 +35,61 @@ public class ExamPaperClassMarkerServiceImpl extends ServiceImpl<ExamPaperClassM
     @Resource
     ExamPaperStructureService examPaperStructureService;
 
+    @Resource
+    ExamStudentService examStudentService;
+
     @Transactional
     @Override
     public void saveExamPaperClassInfo(ExamPaperStructure examPaperStructure, Boolean openClassReading, List<ClassMarker> classInfo) {
         // 1.删除原有数据
         this.deleteExamPaperClassInfo(examPaperStructure.getId());
-        if (openClassReading != null && openClassReading && !CollectionUtils.isEmpty(classInfo)) {
-            List<ExamPaperClassMarker> list = new ArrayList<>();
-            for (ClassMarker classMarker : classInfo) {
-                ExamPaperClassMarker examPaperClassMarker = new ExamPaperClassMarker();
-                examPaperClassMarker.setId(SystemConstant.getDbUuid());
-                examPaperClassMarker.setExamPaperStructureId(examPaperStructure.getId());
-                examPaperClassMarker.setMarkerId(Long.valueOf(classMarker.getId()));
-                examPaperClassMarker.setLoginName(classMarker.getLoginName());
-                examPaperClassMarker.setClassName(classMarker.getClassName());
-                list.add(examPaperClassMarker);
+        if (openClassReading != null && openClassReading) {
+            // 校验分组、班级
+            List<String> listUserClass = examStudentService.listUserClass(examPaperStructure.getSchoolId(), examPaperStructure.getExamId(), examPaperStructure.getPaperNumber());
+            if (!CollectionUtils.isEmpty(listUserClass)) {
+                EvaluationParameters evaluationParameters = JSON.parseObject(examPaperStructure.getPaperInfoJson(), EvaluationParameters.class);
+                List<GroupInfo> groupInfos = evaluationParameters.getGroupInfo();
+                Map<Integer, String> groupClassMap = new HashMap<>();
+                for (GroupInfo groupInfo : groupInfos) {
+                    Set<String> unbindClassSet = new HashSet<>();
+                    Set<String> bindClassSet = new HashSet<>();
+                    List<Marker> markerList = groupInfo.getMarkerList();
+                    for (Marker marker : markerList) {
+                        Optional<ClassMarker> optional = classInfo.stream().filter(m -> StringUtils.isNotBlank(m.getClassName()) && m.getId().equals(marker.getId()) && m.getLoginName().equals(marker.getLoginName())).findFirst();
+                        if (optional.isPresent()) {
+                            bindClassSet.addAll(new HashSet<>(Arrays.asList(optional.get().getClassName().split(","))));
+                        }
+                    }
+                    for (String s : listUserClass) {
+                        if (!bindClassSet.contains(s)) {
+                            unbindClassSet.add(s);
+                        }
+                    }
+                    if (!CollectionUtils.isEmpty(unbindClassSet)) {
+                        groupClassMap.put(groupInfo.getGroupNumber(), String.join(",", unbindClassSet));
+                    }
+                }
+
+                if (!groupClassMap.isEmpty()) {
+                    StringJoiner stringJoiner = new StringJoiner(";");
+                    for (Map.Entry<Integer, String> entry : groupClassMap.entrySet()) {
+                        stringJoiner.add(String.format("班级[%s]在分组[%s]中未被评卷员绑定", entry.getValue(), entry.getKey()));
+                    }
+                    throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
+                }
+
+                List<ExamPaperClassMarker> list = new ArrayList<>();
+                for (ClassMarker classMarker : classInfo) {
+                    ExamPaperClassMarker examPaperClassMarker = new ExamPaperClassMarker();
+                    examPaperClassMarker.setId(SystemConstant.getDbUuid());
+                    examPaperClassMarker.setExamPaperStructureId(examPaperStructure.getId());
+                    examPaperClassMarker.setMarkerId(Long.valueOf(classMarker.getId()));
+                    examPaperClassMarker.setLoginName(classMarker.getLoginName());
+                    examPaperClassMarker.setClassName(classMarker.getClassName());
+                    list.add(examPaperClassMarker);
+                }
+                this.saveBatch(list);
             }
-            this.saveBatch(list);
         }
         examPaperStructure.setStatus(ExamPaperStructure.parseStatus(examPaperStructure.getStatus(), ExamPaperStructureStatusTypeEnum.MARKER_CLASS.getType(), "save", true));
         examPaperStructureService.updateById(examPaperStructure);

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

@@ -583,11 +583,14 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
 
     @Override
     public ExamTaskDetail getByExamTaskId(Long examTaskId) {
+        ExamTask examTask = examTaskService.getById(examTaskId);
         QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTaskId);
         ExamTaskDetail examTaskDetail = this.getOne(queryWrapper);
         if (examTaskDetail == null) {
-            throw ExceptionResultEnum.ERROR.exception("未找到命题任务详情数据," + String.format("命题任务ID[%s]", examTaskId));
+            throw ExceptionResultEnum.ERROR.exception(String.format("课程[%s(%s)],试卷编号[%s]的命题任务未找到命题详情", examTask.getCourseName(), examTask.getCourseCode(), examTask.getPaperNumber()));
+        } else if (!examTaskDetail.getEnable()) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("课程[%s(%s)],试卷编号[%s]的命题任务卷库已禁用", examTask.getCourseName(), examTask.getCourseCode(), examTask.getPaperNumber()));
         }
         return examTaskDetail;
     }

+ 2 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -41,7 +41,6 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.slf4j.helpers.BasicMarker;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -50,7 +49,6 @@ import org.springframework.util.FileCopyUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import javax.swing.plaf.basic.BasicTableUI;
 import java.io.*;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
@@ -700,10 +698,10 @@ public class PrintCommonServiceImpl implements PrintCommonService {
 
         // 删除学院下专业、班级
         List<BasicMajor> basicMajorList = basicMajorService.list(new QueryWrapper<BasicMajor>().lambda().eq(BasicMajor::getBelongOrgId, id));
-        if(!CollectionUtils.isEmpty(basicMajorList)){
+        if (!CollectionUtils.isEmpty(basicMajorList)) {
             List<Long> basicMajorIds = basicMajorList.stream().map(BasicMajor::getId).collect(Collectors.toList());
             List<BasicClazz> basicClazzList = basicClazzService.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getMajorId, basicMajorIds));
-            if(!CollectionUtils.isEmpty(basicClazzList)){
+            if (!CollectionUtils.isEmpty(basicClazzList)) {
                 List<Long> basicClazzIds = basicClazzList.stream().map(BasicClazz::getId).collect(Collectors.toList());
                 basicClazzService.removeBasicClazzBatch(basicClazzIds);
             }

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

@@ -860,7 +860,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 }
                 // 校验2 - 文件中课程代码对应的课程名称和课程管理中对应课程名称不一致
                 String basicName = courseCodeNameInBasicCourseMap.get(courseCode);
-                if (!courseName.equals(basicName)) {
+                if (StringUtils.isBlank(basicName)) {
+                    errorRowDate.add(String.format("文件中课程代码[%s]对应课程名称为[%s],课程管理中课程不存在", courseCode, courseName));
+                } else if (!courseName.equals(basicName)) {
                     errorRowDate.add(String.format("文件中课程代码[%s]对应课程名称为[%s],课程管理中对应课程名称为[%s]", courseCode, courseName, basicName));
                 }
             }

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

@@ -281,6 +281,9 @@
             <if test="courseCode != null and courseCode != ''">
                 AND et.course_code = #{courseCode}
             </if>
+            <if test="clazzName != null and clazzName != ''">
+                AND tsess.clazz_name like concat(#{clazzName}, '%')
+            </if>
             <if test="dpr != null">
                 <if test="dpr.requestUserId != null">
                     AND tc.user_id = #{dpr.requestUserId}

+ 4 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java

@@ -75,9 +75,10 @@ public class ConditionController {
     @RequestMapping(value = "/list_clazz", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicClazz.class)})
     public Result listClazz(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
-                                  @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
-                                  @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode) {
-        return ResultUtil.ok(conditionService.listClazz(semesterId, examId, courseCode));
+                            @ApiParam(value = "考试ID") @RequestParam(required = false) Long examId,
+                            @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                            @ApiParam(value = "班级名称") @RequestParam(required = false) String clazzName) {
+        return ResultUtil.ok(conditionService.listClazz(semesterId, examId, courseCode, clazzName));
     }
 
     @ApiOperation(value = "学院")

+ 4 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.ExamDetailService;
+import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.bean.result.TaskListResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -51,6 +52,9 @@ public class TBTaskController {
     @Resource
     ExamDetailService examDetailService;
 
+    @Resource
+    PrintCommonService printCommonService;
+
     @ApiOperation(value = "任务管理查询接口")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "任务管理列表信息", response = TaskListResult.class)})