Переглянути джерело

Merge remote-tracking branch 'origin/dev_v3.2.5' into dev_v3.2.5

wangliang 2 роки тому
батько
коміт
f43f952a6f

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

@@ -12,7 +12,7 @@ import java.util.List;
 public enum RequiredFieldsEnum {
 
     STUDENT_CODE("studentCode", "学号"),
-    TICKET_NUMBER("ticketNumber", "考号"),
+//    TICKET_NUMBER("ticketNumber", "考号"),
     SITE_NUMBER("siteNumber", "座位号"),
     STUDENT_NAME("studentName","姓名"),
     COURSE_CODE("courseCode","课程代码"),

+ 52 - 27
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamRuleServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.FieldsDto;
 import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
@@ -20,9 +21,13 @@ import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.DigestUtils;
 
 import javax.annotation.Resource;
+import java.io.File;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -52,9 +57,9 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
         queryWrapper.lambda().eq(BasicExamRule::getSchoolId, schoolId);
 
         BasicExamRule basicExamRule = this.getOne(queryWrapper);
-        if(basicExamRule == null){
+        if (basicExamRule == null) {
             List<EnumResult> enumResultList = RequiredFieldsEnum.listTypes();
-            List<JSONObject> requiredObjects = enumResultList.stream().map(m->{
+            List<JSONObject> requiredObjects = enumResultList.stream().map(m -> {
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put("code", m.getCode());
                 jsonObject.put("name", m.getDesc());
@@ -87,6 +92,41 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
         examRule.setSchoolId(schoolId);
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
 
+        List<FieldsDto> extendFieldList = JSONObject.parseArray(examRule.getExtendFields(), FieldsDto.class);
+        if (!CollectionUtils.isEmpty(extendFieldList)) {
+            // 校验扩展字段变量名是否重复
+            Map<String, List<FieldsDto>> byCodeCollect = extendFieldList.stream().collect(Collectors.groupingBy(FieldsDto::getCode));
+            for (Map.Entry<String, List<FieldsDto>> entry : byCodeCollect.entrySet()) {
+                if (entry.getValue().size() > 1) {
+                    throw ExceptionResultEnum.ERROR.exception("扩展字段中字段变量名[" + entry.getKey() + "]有" + entry.getValue().size() + "个重复");
+                }
+            }
+            // 校验扩展字段名称是否重复
+            Map<String, List<FieldsDto>> byNameCollect = extendFieldList.stream().collect(Collectors.groupingBy(FieldsDto::getName));
+            for (Map.Entry<String, List<FieldsDto>> entry : byNameCollect.entrySet()) {
+                if (entry.getValue().size() > 1) {
+                    throw ExceptionResultEnum.ERROR.exception("扩展字段中字段名称[" + entry.getKey() + "]有" + entry.getValue().size() + "个重复");
+                }
+            }
+
+            // 校验扩展字段变量名是否与必选字段重复
+            List<FieldsDto> requiredFieldList = JSONObject.parseArray(examRule.getRequiredFields(), FieldsDto.class);
+            for (FieldsDto fieldsDto : extendFieldList) {
+                long count = requiredFieldList.stream().filter(t -> t.getCode().equals(fieldsDto.getCode())).count();
+                if (count > 0) {
+                    throw ExceptionResultEnum.ERROR.exception("扩展字段中字段变量名[" + fieldsDto.getCode() + "]在必选字段中已存在");
+                }
+            }
+
+            // 校验扩展字段名称是否与必选字段重复
+            for (FieldsDto fieldsDto : extendFieldList) {
+                long count = requiredFieldList.stream().filter(t -> t.getName().equals(fieldsDto.getName())).count();
+                if (count > 0) {
+                    throw ExceptionResultEnum.ERROR.exception("扩展字段中字段名称[" + fieldsDto.getName() + "]在必选字段中已存在");
+                }
+            }
+        }
+
         // 新增
         if (examRule.getId() == null) {
             examRule.insertInfo(sysUser.getId());
@@ -99,39 +139,24 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
             QueryWrapper<ExamPrintPlan> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(ExamPrintPlan::getSchoolId, schoolId).ne(ExamPrintPlan::getStatus, PrintPlanStatusEnum.END);
             List<ExamPrintPlan> examPrintPlanList = examPrintPlanService.list(queryWrapper);
-            if (examPrintPlanList != null && !examPrintPlanList.isEmpty()) {
-                // -- 可直接抛出异常下面的判断均可不用执行
+            if (!CollectionUtils.isEmpty(examPrintPlanList)) {
                 BasicExamRule basicExamRule = this.getById(examRule.getId());
                 // 匹配扩展字段是否有变动
                 String oldExtends = basicExamRule.getExtendFields();
                 String newExtends = examRule.getExtendFields();
-                List<Map> oldMapList = JSONObject.parseArray(oldExtends, Map.class);
-                List<Map> newMapList = JSONObject.parseArray(newExtends, Map.class);
-                if (oldMapList.size() != newMapList.size()) {
-                    throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改扩展字段");
-                }
-                for (Map map : oldMapList) {
-                    String code = String.valueOf(map.get("code"));
-                    String name = String.valueOf(map.get("name"));
-                    String enable = String.valueOf(map.get("enable"));
+                List<FieldsDto> oldFieldList = JSONObject.parseArray(oldExtends, FieldsDto.class);
+                List<FieldsDto> newFieldList = JSONObject.parseArray(newExtends, FieldsDto.class);
+                oldFieldList.sort(Comparator.comparing(FieldsDto::getCode));
+                newFieldList.sort(Comparator.comparing(FieldsDto::getCode));
 
-                    boolean flag = true;
-                    for (Map map1 : newMapList) {
-                        String code1 = String.valueOf(map1.get("code"));
-                        String name1 = String.valueOf(map1.get("name"));
-                        String enable1 = String.valueOf(map1.get("enable"));
-                        if (code.equals(code1) && name.equals(name1) && enable.equals(enable1)) {
-                            flag = false;
-                            break;
-                        }
-                    }
-                    if (flag) {
-                        throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改扩展字段");
-                    }
+                // md5加密
+                String md5OldExtends = DigestUtils.md5DigestAsHex(JSONObject.toJSONBytes(oldFieldList));
+                String newOldExtends = DigestUtils.md5DigestAsHex(JSONObject.toJSONBytes(newFieldList));
+                if (!md5OldExtends.equals(newOldExtends)) {
+                    throw ExceptionResultEnum.ERROR.exception("有未结束的印刷计划,不能修改扩展字段");
                 }
             }
             examRule.updateInfo(sysUser.getId());
-            examRule.setOrgId(sysUser.getOrgId());
             this.updateById(examRule);
         }
         return examRule.getId();

+ 43 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java

@@ -9,9 +9,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.TemplateDto;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
+import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.BasicTemplate;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.mapper.BasicTemplateMapper;
+import com.qmth.distributed.print.business.service.BasicExamRuleService;
 import com.qmth.distributed.print.business.service.BasicPrintConfigService;
 import com.qmth.distributed.print.business.service.BasicTemplateService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
@@ -36,9 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -70,6 +70,9 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
     @Resource
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
 
+    @Resource
+    private BasicExamRuleService basicExamRuleService;
+
     @Override
     public IPage<TemplateDto> list(Boolean enable, String type, String name, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -175,6 +178,43 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
             String url = teachcloudCommonService.filePreview(basicAttachment.getPath());
             basicTemplate.setUrl(url);
         }
+
+        // 新添加的字段,在已经印品中无法显示和选择
+        BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId();
+
+        JSONObject object = JSONObject.parseObject(basicTemplate.getDisplayRange());
+        List<JSONObject> displayRanges = JSONObject.parseArray(object.getString("basic"), JSONObject.class);
+        // 签到表
+        if(basicTemplate.getClassify().equals(ClassifyEnum.SIGN)){
+            List<JSONObject> signScopeList = JSONObject.parseArray(basicExamRule.getSignScope(), JSONObject.class);
+            for (JSONObject jsonObject : signScopeList) {
+                Optional<JSONObject> objectOptional = displayRanges.stream().filter(m -> m.getString("code").equals(jsonObject.getString("code"))).findFirst();
+                if(objectOptional.isPresent()){
+                    jsonObject.put("enable", objectOptional.get().getBoolean("enable"));
+                } else {
+                    jsonObject.put("enable", false);
+                }
+            }
+
+            object.put("basic", JSONObject.toJSONString(signScopeList));
+            basicTemplate.setDisplayRange(JSONObject.toJSONString(object));
+        }
+
+        // 签到表
+        if(basicTemplate.getClassify().equals(ClassifyEnum.PACKAGE)){
+            List<JSONObject> packageScopeList = JSONObject.parseArray(basicExamRule.getPackageScope(), JSONObject.class);
+            for (JSONObject jsonObject : packageScopeList) {
+                Optional<JSONObject> objectOptional = displayRanges.stream().filter(m -> m.getString("code").equals(jsonObject.getString("code"))).findFirst();
+                if(objectOptional.isPresent()){
+                    jsonObject.put("enable", objectOptional.get().getBoolean("enable"));
+                } else {
+                    jsonObject.put("enable", false);
+                }
+            }
+
+            object.put("basic", JSONObject.toJSONString(packageScopeList));
+            basicTemplate.setDisplayRange(JSONObject.toJSONString(object));
+        }
         return basicTemplate;
     }
 

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

@@ -504,7 +504,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                     SysConfig sysConfig = sysConfigService.getByKey("sys.user.initPassword");
                     cloudMarkingTaskUtils.syncUser(SpecialPrivilegeEnum.SUBJECT_HEADER.getPrefix() + markerUser.getLoginName(), markerUser.getRealName(), sysConfig.getConfigValue(), SpecialPrivilegeEnum.SUBJECT_HEADER.getValue(), markerUser.getEnable(), schoolId, orgCode);
 
-                    cloudMarkingTaskUtils.saveMarkLeader(schoolId, subjectCode, object.getString("loginName"));
+                    cloudMarkingTaskUtils.saveMarkLeader(schoolId, subjectCode, object.getString("loginName"), orgCode);
                 }
             }
             result = TaskResultEnum.SUCCESS;

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

@@ -254,7 +254,6 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         validExaminationFieldList.addAll(requiredFieldsList);
         validExaminationFieldList.addAll(validExtendList);
 
-        List<String> fieldsName = validExaminationFieldList.stream().map(FieldsDto::getName).collect(Collectors.toList());
         return validExaminationFieldList;
     }
 

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

@@ -157,7 +157,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
     public IPage<SyncListResult> query(Long schoolId, TaskStatusEnum status, PushTypeEnum type, TaskResultEnum result, int pageNumber, int pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId,requestUser.getId(),ServletUtil.getRequest().getServletPath());
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
 
         IPage<SyncListResult> page = this.baseMapper.query(new Page<>(pageNumber, pageSize), schoolId, status, type, result, dpr);
         List<SyncListResult> list = page.getRecords();
@@ -267,6 +267,9 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
             case MARKER_PUSH:
                 asyncCloudMarkingTaskService.syncMarker(examPaperStructureService.getById(tbSyncTask.getObjectId()), JSON.parseObject(tbSyncTask.getRemark(), GroupInfo.class));
                 break;
+            case MARK_LEADER_PUSH:
+                asyncCloudMarkingTaskService.syncMarkLeader(examPaperStructureService.getById(tbSyncTask.getObjectId()));
+                break;
             default:
                 break;
         }

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

@@ -710,13 +710,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         Long printPlanId = tbTask.getPrintPlanId();
         Long schoolId = tbTask.getSchoolId();
         if (!tbTaskService.countByPrintPlanIdAndEntityId(schoolId, printPlanId, null)) {
-            throw ExceptionResultEnum.ERROR.exception("当前印刷计划正在生成pdf,无法导入考务数据");
+            throw ExceptionResultEnum.ERROR.exception("当前印刷计划正在生成pdf文件,无法导入考务数据");
         }
         Long userId = tbTask.getCreateId();
         ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
 
         if (examPrintPlan == null) {
-            throw ExceptionResultEnum.ERROR.exception("[印刷计划]不存在");
+            throw ExceptionResultEnum.ERROR.exception("印刷计划不存在");
         }
 
         PrintPlanStatusEnum printPlanStatus = examPrintPlan.getStatus();

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

@@ -1084,7 +1084,7 @@ public class SystemConstant {
             if(studentCount == null || studentCount ==0){
                 return defaultValue;
             } else {
-                BigDecimal bigDecimal = new BigDecimal(studentCount).multiply(new BigDecimal(backupCount)).setScale(0, RoundingMode.FLOOR);
+                BigDecimal bigDecimal = new BigDecimal(studentCount).multiply(new BigDecimal(backupCount)).setScale(0, RoundingMode.CEILING);
                 if(bigDecimal.intValue() == 0){
                     return defaultValue;
                 } else {

+ 5 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java

@@ -184,7 +184,7 @@ public class CloudMarkingTaskUtils {
         map.put("password", validParam(password, null, false, "密码"));
         map.put("role", validParam(String.valueOf(roleValue), null, true, "类型:MARKER、SUBJECT_HEADER"));
         map.put("enable", validParam(enable, true, false, "是否启用"));
-        if(StringUtils.isNotBlank(orgCode)) {
+        if (StringUtils.isNotBlank(orgCode)) {
             map.put("schoolCode", validParam(orgCode, null, false, "子机构编号"));
         }
 
@@ -524,7 +524,7 @@ public class CloudMarkingTaskUtils {
      * @param subjectCode 科目代码
      * @param loginName   用户名
      */
-    public boolean saveMarkLeader(Long schoolId, String subjectCode, String loginName) {
+    public boolean saveMarkLeader(Long schoolId, String subjectCode, String loginName, String orgCode) {
         SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
         Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
         String hostUrl = sysConfig.getConfigValue();
@@ -536,6 +536,9 @@ public class CloudMarkingTaskUtils {
             Map<String, Object> map = new HashMap<>();
             map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
             map.put("account", SpecialPrivilegeEnum.SUBJECT_HEADER.getPrefix() + validParam(loginName, null, true, "用户名"));
+            if (StringUtils.isNotBlank(orgCode)) {
+                map.put("schoolCode", validParam(orgCode, null, false, "子机构编号"));
+            }
 
             String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, markLeaderSaveUrl), map, null, null, null);
             JSONObject jsonObject = JSONObject.parseObject(result);