xiejun
2023-10-17 d768706fc26c7874a8ce5ad41ee4a62b8bde426d
校验关键属性规则写到后面
已修改1个文件
68 ■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -1955,16 +1955,29 @@
        //都转换完了。需要批量检查
        //如果出错了,我们依然执行有效的数据,无效的数据写回到excel中
        Map<String,String> errorKeyMap=new HashMap<>();
        //1.分类注入
        batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
        //boolean
        reSwitchBooleanAttrOnOrder(attrVOS,cboList);
        // cboList.stream().forEach(cbo->{
        //2.校验规则
        batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
        //3.校验枚举是否正确
        batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap);
        //4.时间格式的验证
        //4.时间的,必须统一为yyyy-MM-dd HH:mm:ss
        batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
        //5.处理参照的情况
        batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
        //6设置默认值
        batchSwitchAttrDefault(attrVOS, cboList);
        //2.判断必输项。。需要全部的属性,如果是必输,但是表单里面不显示的,只能是分类注入或者组合规则
        batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
        /**
         * 关键熟悉错误提示
         */
        Map<String,String> errorKeyMap=new HashMap<>();
        //最后弄组合规则
        batchSwitchComponentAttrOnOrder(attrVOS,cboList);
        //3.判断关键属性
        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
        Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
@@ -2001,20 +2014,6 @@
                errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";关键属性与系统中的重复" );
            });
        }
        //分类注入
        batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,false);
        //boolean
        reSwitchBooleanAttrOnOrder(attrVOS,cboList);
        // cboList.stream().forEach(cbo->{
        //4.校验规则
        batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
        //5.校验枚举是否正确
        batchSwitchEnumAttrOnOrder(attrVOS,cboList,errorMap);
        //6.时间格式的验证
        //6.时间的,必须统一为yyyy-MM-dd HH:mm:ss
        batchSwitchDateAttrOnOrder(attrVOS,cboList,errorMap);
        //7.处理参照的情况
        batchSwitchReferAttrOnOrder(attrVOS,cboList,errorMap);
        //校验属性是否正确错误信息
        if(errorMap.size()>0){
            String[] newMsg = {""};
@@ -2115,10 +2114,7 @@
        }
        //  });
        //设置默认值
        batchSwitchAttrDefault(attrVOS, cboList);
        //最后弄组合规则
        batchSwitchComponentAttrOnOrder(attrVOS,cboList);
        //要把以上的错误的都抛出后,再继续处理时间和组合规则
        List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
            String rowIndex =cbo.getAttributeValue(IMPORT_ROW_INDEX);
@@ -2377,20 +2373,20 @@
                throw new VciBaseException("数据不是{0}的状态,不允许修改", new String[]{CodeDefaultLC.EDITING.getText()});
            }*/
            if(operation.equals("update")) {
                //1. 判断必输项
                checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap);
                //2.先注入,再组合,最后校验
                //1.先注入,再组合,最后校验
                switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO, errorMap);
                //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
                //2.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
                switchComponentAttrOnOrder(templateVO, orderDTO);
                //4.校验规则
                //3.校验规则
                checkVerifyOnOrder(templateVO, orderDTO, errorMap);
                //5.判断关键属性
                checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap);
                //6.校验枚举的内容是否正确
                //4.校验枚举的内容是否正确
                checkEnumOnOrder(templateVO, orderDTO, errorMap);
                //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
                //5.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
                switchDateAttrOnOrder(templateVO, orderDTO);
                //6. 判断必输项
                checkRequiredAttrOnOrder(templateVO, orderDTO, errorMap);
                //7.判断关键属性
                checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO, errorMap);
                //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
                copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true, errorMap);
                //企业码和集团码的不修改
@@ -3699,7 +3695,7 @@
     */
    private void batchCheckRequiredAttrOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String,String> errorMap){
        Map<String, CodeClassifyTemplateAttrVO> requiredAttrMap = templateVO.getAttributes().stream().filter(s ->
            VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && StringUtils.isBlank(s.getClassifyInvokeLevel())//不能是组合的和分类注入的
            VciBaseUtil.getBoolean(s.getRequireFlag()) && StringUtils.isBlank(s.getComponentRule()) && (StringUtils.isBlank(s.getClassifyInvokeLevel())||s.getClassifyInvokeLevel().equals("none"))//不能是组合的和分类注入的
        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        //与MdmEngineServiceImpl里面的checkRequiredAttrOnOrder 逻辑应该相似
        if(!CollectionUtils.isEmpty(requiredAttrMap)) {