历史数据导入、批量申请、申请编码接口代码逻辑中关键属性校验增加过滤条件
已修改7个文件
152 ■■■■■ 文件已修改
Source/UBCS-WEB/dist/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/dist/index.html
@@ -51,4 +51,4 @@
    .avue-home__sub-title {
      color: #ABABAB;
      font-size: 12px;
    }</style><link href=/css/chunk-74613652.418a3170.css rel=prefetch><link href=/css/page.e84a6fd9.css rel=prefetch><link href=/css/views.d93aedb9.css rel=prefetch><link href=/js/chunk-2d0e4caf.afe0104d.js rel=prefetch><link href=/js/chunk-74613652.bf501607.js rel=prefetch><link href=/js/page.7c6fcba2.js rel=prefetch><link href=/js/views.2093fe98.js rel=prefetch><link href=/css/app.d0623413.css rel=preload as=style><link href=/css/chunk-vendors.e41156d0.css rel=preload as=style><link href=/js/app.e531c9b4.js rel=preload as=script><link href=/js/chunk-vendors.7e1c637d.js rel=preload as=script><link href=/css/chunk-vendors.e41156d0.css rel=stylesheet><link href=/css/app.d0623413.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。</strong></noscript><div id=app><div class=avue-home><div class=avue-home__main><img class=avue-home__loading src=/svg/loading-spin.svg alt=loading><div class=avue-home__title>正在加载资源</div><div class="avue-home__sub-title d">初次加载资源可能需要较多时间 请耐心等待</div></div></div></div><script src=/util/aes.js charset=utf-8></script><script src=/cdn/vue/2.6.10/vue.min.js charset=utf-8></script><script src=/cdn/vuex/3.1.1/vuex.min.js charset=utf-8></script><script src=/cdn/vue-router/3.0.1/vue-router.min.js charset=utf-8></script><script src=/cdn/axios/1.0.0/axios.min.js charset=utf-8></script><script src=/cdn/element-ui/2.15.6/index.js charset=utf-8></script><script src=/cdn/avue/2.9.12/avue.min.js charset=utf-8></script><script src=/cdn/nutflow/wf-design-base/index.umd.min.js charset=utf-8></script><script src=/js/chunk-vendors.7e1c637d.js></script><script src=/js/app.e531c9b4.js></script></body></html>
    }</style><link href=/css/chunk-4662373c.418a3170.css rel=prefetch><link href=/css/page.e84a6fd9.css rel=prefetch><link href=/css/views.d93aedb9.css rel=prefetch><link href=/js/chunk-2d0e4caf.afe0104d.js rel=prefetch><link href=/js/chunk-4662373c.a7c0fbe4.js rel=prefetch><link href=/js/page.7c6fcba2.js rel=prefetch><link href=/js/views.2093fe98.js rel=prefetch><link href=/css/app.32d691ec.css rel=preload as=style><link href=/css/chunk-vendors.e41156d0.css rel=preload as=style><link href=/js/app.393bf56f.js rel=preload as=script><link href=/js/chunk-vendors.7e1c637d.js rel=preload as=script><link href=/css/chunk-vendors.e41156d0.css rel=stylesheet><link href=/css/app.32d691ec.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有 JavaScript 支持,Saber 将不能正常工作。请启用浏览器的 JavaScript 然后继续。</strong></noscript><div id=app><div class=avue-home><div class=avue-home__main><img class=avue-home__loading src=/svg/loading-spin.svg alt=loading><div class=avue-home__title>正在加载资源</div><div class="avue-home__sub-title d">初次加载资源可能需要较多时间 请耐心等待</div></div></div></div><script src=/util/aes.js charset=utf-8></script><script src=/cdn/vue/2.6.10/vue.min.js charset=utf-8></script><script src=/cdn/vuex/3.1.1/vuex.min.js charset=utf-8></script><script src=/cdn/vue-router/3.0.1/vue-router.min.js charset=utf-8></script><script src=/cdn/axios/1.0.0/axios.min.js charset=utf-8></script><script src=/cdn/element-ui/2.15.6/index.js charset=utf-8></script><script src=/cdn/avue/2.9.12/avue.min.js charset=utf-8></script><script src=/cdn/nutflow/wf-design-base/index.umd.min.js charset=utf-8></script><script src=/js/chunk-vendors.7e1c637d.js></script><script src=/js/app.393bf56f.js></script></body></html>
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/bo/CodeTemplateAttrSqlBO.java
@@ -45,12 +45,25 @@
     */
    private String sqlCount;
    /**
     * 查询重复数据时查出编码
     */
    private String sqlId;
    /**
     * 本次查询的字段
     */
    private  List<String> selectFieldList;
    public String getTableName() {
    public String getSqlId() {
        return sqlId;
    }
    public void setSqlId(String sqlId) {
        this.sqlId = sqlId;
    }
    public String getTableName() {
        return tableName;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -20,7 +20,9 @@
    List<String> selectById(@Param("inSql") String inSql);
    int  queryCountBySql(@Param("inSql") String inSql);
    List<String> selectList(@Param("inSql") String inSql);
    int queryCountBySql(@Param("inSql") String inSql);
    String queryCountStringBySql(@Param("inSql") String inSql);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -701,14 +701,16 @@
        //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可
        if (!CollectionUtils.isEmpty(conditionMap)) {
            conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
            // TODO: 同一个库判重不需要区分分类oid
            // conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'");
//            final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "};
            R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId()));
//                String referTable = VciBaseUtil.getTableName(referVO.getReferType());
            if (!listR.isSuccess() || listR.getData().size() == 0) {
                throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
            }
            final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
            //final String[] sql = {"select count(*) from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
            final String[] sql = {"select id from " + listR.getData().get(0).getTableName() + " t where 1 = 1 "};
            conditionMap.forEach((key, value) -> {
                if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)) {
                    sql[0] += " and " + key + " is null";
@@ -723,11 +725,16 @@
                sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
            }
            sql[0] += " and lastR = '1' and lastV = '1' ";
            String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
            if(Func.isNotEmpty(isParticipateCheckOids)){
                sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")";
            }
//            if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
            if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
            List<String> repeatData = commonsMapper.selectList(sql[0]);
            if (!repeatData.isEmpty()) {
                String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}";
                String[] objs = new String[]{trim ? "是" : "否", ignoreCase ? "是" : "否", ignoreWidth ? "是" : "否", trimAll ? "是" : "否"};
                throw new VciBaseException("根据您填写的关键属性的内容,结合关键属性查询规则,发现这个数据已经在系统中存在了。请修正!。" + ruleInfoMsg, objs);
                throw new VciBaseException("根据您填写的关键属性的内容,结合关键属性查询规则,发现该数据已经与系统中编号为"+repeatData.stream().collect(Collectors.joining(","))+"的数据重复。请修正!。" + ruleInfoMsg, objs);
            }
        }
    }
@@ -1793,7 +1800,6 @@
        }
    }
    /**
     * 根据模板属性生成相应的sql信息
     *
@@ -1959,6 +1965,8 @@
        String sqlHasPage = pageHelper.getLimit() > 0 ? ("select * from (select A.*,rownum RN from (" + sql + whereSubfixForPage) : sql;
        String sqlCount = "select count(1) from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
                + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
        String sqlId = "select ID from " + tableName + SPACE + "t" + SPACE + joinTableList.values().stream().collect(Collectors.joining(SPACE))
            + (StringUtils.isBlank(whereSql) ? "" : " where ") + whereSql;
        CodeTemplateAttrSqlBO sqlBO = new CodeTemplateAttrSqlBO();
        sqlBO.setTableName(tableName);
        sqlBO.setJoinTable(joinTableList);
@@ -1967,9 +1975,9 @@
        sqlBO.setSqlHasPage(sqlHasPage);
        sqlBO.setSqlCount(sqlCount);
        sqlBO.setSqlUnPage(sql);
        sqlBO.setSqlId(sqlId);
        return sqlBO;
    }
    /**
     * 组合查询条件的sql
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -529,7 +529,7 @@
        //校验模板是不是最新的
        checkTemplateSync(sheetDataSetList,templateVO,0);
        //先不用管属性是否都存在,先转换一下数据
        Map<String,String> errorMap = new HashMap<>();
        Map<String,String> errorMap = new ConcurrentHashMap<>();
        String redisUUid=batchImportCodes(orderDTO,templateVO,dataSet,errorMap,true);
        CodeImProtRusultVO codeImProtRusultVO = new CodeImProtRusultVO();
        List<String> needRowIndexList = new ArrayList<>();
@@ -654,7 +654,7 @@
            //2.判断必输项。。需要全部的属性,如果是必输,但是表单里面不显示的,只能是分类注入或者组合规则
            batchCheckRequiredAttrOnOrder(templateVO,allCboList,errorMap);
            //3.判断关键属性
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList);
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,errorMap);
            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
            if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
@@ -664,7 +664,7 @@
            }
            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
                keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";关键属性与系统中的重复" );
                    errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex,"") );
                });
            }
            //分类注入
@@ -903,7 +903,7 @@
            //判断必输项
            batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap);
            //有限校验编码是否存在
            //优先校验编码是否存在
            batchCheckIdExistOnOrder(templateVO, cboList, errorMap);
            //boolean
@@ -913,15 +913,18 @@
            batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap);
            batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap);
            //6.处理分类注入
            batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo,true);
            //设置默认值
            batchSwitchAttrDefault(attrVOS, cboList);
            //7.处理组合规则
            batchSwitchComponentAttrOnOrder(attrVOS, cboList);
            //3.判断关键属性
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
            if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
@@ -931,7 +934,7 @@
            }
            if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) {
                keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> {
                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";关键属性与系统中的重复");
                    errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex, ""));
                });
            }
            //4.校验规则
@@ -1301,7 +1304,7 @@
        //2.判断必输项。。需要全部的属性,如果是必输,但是表单里面不显示的,只能是分类注入或者组合规则
        batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap);
        //3.判断关键属性
        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
        Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
        Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
        if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
@@ -1311,7 +1314,7 @@
        }
        if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
            keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
                errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";关键属性与系统中的重复" );
                errorMap.put(rowIndex,"关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex,""));
            });
        }
        //分类注入
@@ -1737,7 +1740,7 @@
            ).collect(Collectors.toList());
            String fullPath = getFullPath(classifyFullInfo);
            excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot);
            Map<String,String> errorMap=new HashMap<>();
            Map<String,String> errorMap=new ConcurrentHashMap<>();
            Map<String/**路径**/, CodeClassifyVO> pathMap=new HashMap<>() ;
            //校验编码规则和码段是否正确
            Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>();
@@ -1782,12 +1785,12 @@
            //最后弄组合规则
            batchSwitchComponentAttrOnOrder(attrVOS,cboList);
            //3.判断关键属性
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList);
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,errorMap);
            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
                keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";关键属性与系统中的重复" );
                    errorMap.put(rowIndex,"关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex,""));
                });
            }
            //4.校验规则
@@ -1916,7 +1919,7 @@
     */
    @Override
    public void batchSyncApplyCode(CodeOrderDTO orderDTO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) {
        Map<String,String> errorMap=new HashMap<>();
        Map<String,String> errorMap=new ConcurrentHashMap<>();
        VciBaseUtil.alertNotNull(orderDTO,"编码申请相关的数据",orderDTO.getCodeClassifyOid(),"主题库分类主键");
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        //规则的主键需要去获取
@@ -1988,7 +1991,7 @@
        //最后弄组合规则
        batchSwitchComponentAttrOnOrder(attrVOS,cboList);
        //3.判断关键属性
        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
        CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap);
        Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
        Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
        Map<String,List<String>>keyAttrOkOidTORepeatOidMap= keyResultVO.getKeyAttrOkOidTORepeatOidMap();
@@ -2020,7 +2023,7 @@
                resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";关键属性与系统中的重复" );
                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
                */
                errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";关键属性与系统中的重复" );
                errorKeyMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex,""));
            });
        }
        //校验属性是否正确错误信息
@@ -2268,6 +2271,7 @@
        }
        return  resultDataObjectDetailDOs;
    }
    /***
     * 集成批量同步更新接口
     * @param codeClassifyVO;
@@ -2563,6 +2567,7 @@
            });
        }
    }
    /**
     * 转换组合规则的值
     *
@@ -2609,6 +2614,7 @@
            });
        }
    }
    /**
     * 校验关键属性
     *
@@ -2637,7 +2643,6 @@
        });
        //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可
        if (!CollectionUtils.isEmpty(conditionMap)) {
            String tableName="";
            R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
@@ -2649,11 +2654,12 @@
                }
            }
            if (StringUtils.isBlank(tableName)) {
                String errormsg="根据业务类型为查询到相关业务表";
                String errormsg="根据业务类型未查询到相关业务表";
                errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
                return;
            }
            final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "};
            //final String[] sql = {"select count(*) from " + tableName + " t where 1 = 1 "};
            final String[] sql = {"select id from " + tableName + " t where 1 = 1 "};
            conditionMap.forEach((key, value) -> {
                if(StringUtils.isBlank(value)||value.equals(QueryOptionConstant.ISNULL)){
                    sql[0] += " and " + key + " is null ";
@@ -2668,17 +2674,24 @@
            } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
                sql[0] += " and t.oid != '" + orderDTO.getCopyFromVersion() + "'";
            }
            // 不需要参与校验的规则oid
            String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
            if(Func.isNotBlank(isParticipateCheckOids)){
                sql[0] += " and codeclsfid not in("+isParticipateCheckOids+")";
            }
            sql[0] += " and t.lastR = '1' and t.lastV = '1' ";
            if (commonsMapper.queryCountBySql(sql[0]) > 0) {
            List<String> repeatData = commonsMapper.selectList(sql[0]);
            if (!repeatData.isEmpty()) {
                String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}";
                String[] objs = new String[]{trim ? "是" : "否", ignoreCase ? "是" : "否", ignoreWidth ? "是" : "否", trimAll ? "是" : "否"};
                String defaultValue=";根据您填写的关键属性的内容,结合关键属性查询规则,发现这个数据已经在系统中存在了。请修正!。";
                String defaultValue=";根据您填写的关键属性的内容,结合关键属性查询规则,发现这个数据已经在系统中存在了,数据的编号如下:"+repeatData.stream().collect(Collectors.joining(","))+"。请修正!。";
                String errormsg=defaultValue+ MessageFormat.format(ruleInfoMsg, objs);
                errorMap.put(orderDTO.getId(),errorMap.getOrDefault(orderDTO.getId(),"")+errormsg);
                // throw new VciBaseException("根据您填写的关键属性的内容,结合关键属性查询规则,发现这个数据已经在系统中存在了。请修正!。" + ruleInfoMsg, objs);
            }
        }
    }
    /**
     * 校验枚举的内容
     *
@@ -2702,6 +2715,7 @@
            });
        }
    }
    /**
     * 转换时间的格式
     *
@@ -2794,6 +2808,7 @@
            orderDTO.getData().put(attrId, value);
        }
    }
    /**
     * 从编码申请信息对象上获取某个属性的值
     *
@@ -2813,6 +2828,7 @@
        }
        return value;
    }
    /**
     * 处理分类注入的信息
     *
@@ -2858,6 +2874,7 @@
            });
        }
    }
    /***
     *
     * @param codeClassifyVO
@@ -3098,6 +3115,7 @@
        });
    }
    /**
     * excel转换为cbo的对象
     * @param classifyFullInfo 分类的全部信息
@@ -3236,6 +3254,7 @@
            }
        }
    }
    /**
     * 批量转换时间都为指定的格式
     * @param attrVOS 模板属性
@@ -3461,6 +3480,7 @@
        }
    }
    /**
     * 批量检查企业编码是否存在
     * @param templateVO 模板的显示对象
@@ -3668,6 +3688,7 @@
        }
        return showText;
    }
    /**
     * 处理枚举的显示对象
     * @param attrVOS 模板属性
@@ -3792,7 +3813,7 @@
     * @param cboList 批量的数据
     */
    private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO,
                                                        List<ClientBusinessObject> cboList) {
                                                        List<ClientBusinessObject> cboList,Map<String,String> errorMap) {
        //与MdmEngineServiceImpl里的checkKeyAttrOnOrder相似
        //先获取关键属性的规则,也利用继承的方式
        CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo);
@@ -3821,7 +3842,7 @@
        //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
        Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>();
        // 查询不需要参与关键属性校验的除自己以外的所有分类oid
        String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
        final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
        List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> {
            //每行都得查询.如果其中出现了错误,我们就直接抛出异常,其余的显示
            //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
@@ -3840,21 +3861,24 @@
                    conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids);
                }
                CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
                boolean isKeyCheck= commonsMapper.queryCountBySql(sqlBO.getSqlCount()) > 0;
                if(isKeyCheck){
                    List<Map<String,String>> newDataList=  commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
                    //List<ClientBusinessObject> newCboList=    ChangeMapTOClientBusinessObjects(newDataList);
                    List<BaseModel> newCboList=new ArrayList<>();
                List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId());
                if(!repeatData.isEmpty()){
                    final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
                    //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList);
                    List<BaseModel> newCboList = new ArrayList<>();
                    newDataList.stream().forEach(stringStringMap -> {
                        BaseModel baseModel=new BaseModel();
                        DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel);
                        newCboList.add(baseModel);
                    });
                    // 添加错误值
                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                    errorMap.put(rowIndex, "重复的记录编号为:"+repeatData.stream().collect(Collectors.joining(",")));
                    if(!CollectionUtils.isEmpty(newCboList)) {
                        indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
                    }
                }
                return isKeyCheck;
                return !repeatData.isEmpty();
            }else{
                return false;
            }
@@ -3968,7 +3992,6 @@
        return childOidPathMap;
    }
    /**
     * 获取导入的内容中关键属性重复的行号
     * @param ketAttrMap 关键属性的映射
@@ -4037,6 +4060,7 @@
        resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
        resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
    }
    /**
     * excel的标题上获取字段所在的位置
     * @param titleRowData 标题的内容
@@ -4152,6 +4176,7 @@
        codeClassifyDatas.addAll(newCodeImprotDataVO);
        log.info("222");
    }
    /***
     *  @param titleRowData
     * @param newTemplateVO
@@ -4197,7 +4222,8 @@
        codeImprotDataVO.setColNames(colNames);
        codeImprotDataVO.getDatas().add(filedValueMap);
    }
    /***
    /**
     * 正确错误数据redis缓存
     * @param uuid
     * @param templateVO
@@ -4511,4 +4537,5 @@
            mdmInterJtClient.receiveEditApply(oids,btmName);
        }
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -111,7 +111,7 @@
                log.info("code:----->"+cbo.getId());
                //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
                String code = cbo.getId();
                List<String> serialUnitList = new ArrayList<>();
                List<String> serialUnitList = new CopyOnWriteArrayList<>();
                String seclenghStr=cbo.getData().get(CODE_SEC_LENGTH_FIELD);
                String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#");
                cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//将此key除去
@@ -236,8 +236,8 @@
                // TODO 历史数据导入的时候这儿偶尔会触发空指针异常
                Map<String,List<CodeAllCode>> ruleGroup = allCodeDOList.stream().collect(Collectors.groupingBy(s -> s.getCodeRuleOid()));
                Map<String, CodeAllCode> codeDOMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getCodeRuleOid() + "${SEP}" + s.getId(), t -> t));
                List<CodeAllCode> addCodeDOs = new ArrayList<>();
                List<CodeAllCode> editCodeDOs = new ArrayList<>();
                List<CodeAllCode> addCodeDOs = new CopyOnWriteArrayList<>();
                List<CodeAllCode> editCodeDOs = new CopyOnWriteArrayList<>();
                ruleGroup.forEach((ruleOid,allCodeDOS)->{
                    VciBaseUtil.switchCollectionForOracleIn(allCodeDOS).stream().forEach(codeDOs->{
                        QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
@@ -286,7 +286,7 @@
                        .collectingAndThen(
                            Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CodeAllCode::getId))),
                            ArrayList::new));
                    if( distinctCodeAllCOdes.size() != addCodeDOs.size() ){
                    if(distinctCodeAllCOdes.size() != addCodeDOs.size() ){
                        throw new VciBaseException("编码数据重复,无法保存,请注意!");
                    }
                    QueryWrapper<CodeAllCode> wrapper = new QueryWrapper<>();
@@ -307,7 +307,8 @@
                            if(codeAllCode.getId().equals(next.getId())){
                                codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
                                codeAllCode.setLcStatus(next.getLcStatus());
                                iterator.remove();
                                // TODO: 这儿先暂时注释掉,没看懂这儿为什么要这样做,导致报错
                                //iterator.remove();
                            }
                        }
                    }
@@ -317,16 +318,7 @@
                    codeAllCodeService.saveBatch(addCodeDOs);
                }
//                try {
                mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
                    // 提交事务
                    //transactionTemplate.getTransactionManager().commit(status);
//                }catch (Exception e){
//                    // 出现异常时回滚事务
//                    transactionTemplate.getTransactionManager().rollback(status);
//                }
            }
            return codeList;
        }else {
@@ -390,12 +382,10 @@
                allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
            );
            Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
            allCodeDOList.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
                s.setLcStatus(statusMap.get(s.getOid()));
            });
            //通过ID来进行去重
            List<CodeAllCode> distinctCodeAllCOdes = allCodeDOList.stream().collect(Collectors
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -17,6 +17,10 @@
        ${inSql}
    </select>
    <select id="selectList" resultType="java.lang.String">
        ${inSql}
    </select>
    <select id="selectCountByTableName" resultType="java.lang.String">
        select COUNT(*) FROM ${tableName}
    </select>