ludc
2024-03-04 95a283a441c93ce5ab63df93bc39beadd2f34f51
近义词查询规则功能完善
已修改5个文件
90 ■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportResultVO.java
@@ -27,6 +27,11 @@
     */
    private String keyAttrRuleInfo;
    /**
     * 近义词查询属性校验规则的信息
     */
    private String synonymRuleInfo;
    /**
     * 关键属性校验后,重复的行号
     */
@@ -62,7 +67,23 @@
     */
    private Set<String> unPassVerifyRowIndexSet = new HashSet<>();
    public Set<String> getUnPassVerifyRowIndexSet() {
    public void setSuccess(boolean success) {
        this.success = success;
    }
    public void setSynonymRuleInfo(String synonymRuleInfo) {
        this.synonymRuleInfo = synonymRuleInfo;
    }
    public boolean isSuccess() {
        return success;
    }
    public String getSynonymRuleInfo() {
        return synonymRuleInfo;
    }
    public Set<String> getUnPassVerifyRowIndexSet() {
        return unPassVerifyRowIndexSet;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeSynonymController.java
@@ -17,6 +17,7 @@
package com.vci.ubcs.code.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
import com.vci.ubcs.code.entity.CodeSynonym;
import com.vci.ubcs.code.service.ICodeSynonymService;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
@@ -93,6 +94,7 @@
    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "新增", notes = "传入codeSynonym")
    public R save(@Valid @RequestBody CodeSynonym codeSynonym) {
        codeSynonym.setLcStatus(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED);
        return R.status(codeSynonymService.save(codeSynonym));
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -1322,7 +1322,7 @@
    public String getValueToSynony(/*近义词查询规则*/List<CodeSynonym> codeSynonymMaps,String value){
        // 获取并判断是否配置了近义词查询规则
        // TODO:近义词替换成源值(源值是正确的值,近义词是相当于输错笔误的字符)
        if(!codeSynonymMaps.isEmpty()){
        if(Func.isNotEmpty(codeSynonymMaps)){
            for (int i = 0; i < codeSynonymMaps.size(); i++) {
                value = value.replace(codeSynonymMaps.get(i).getSynonymValue(),codeSynonymMaps.get(i).getSourceValue());
            }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -206,8 +206,6 @@
    @Autowired
    private SaveLogUtil saveLogUtil;
    /**
     * 客户现场excel为老版本,导出的总数限制为65535
     */
@@ -944,12 +942,12 @@
            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
            if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
                selfRepeatRowIndexList.stream().forEach(rowIndex->{
                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";在当前处理的数据文件中关键属性重复" );
                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";在当前处理的数据文件中关键属性重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                });
            }
            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
                keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
                    errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex,"") );
                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("关键属性与系统中的重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                });
            }
            //分类注入
@@ -1216,12 +1214,12 @@
                Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
                if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
                    selfRepeatRowIndexList.stream().forEach(rowIndex -> {
                        errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";在当前excel文件中关键属性重复");
                        errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";在当前excel文件中关键属性重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                    });
                }
                if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) {
                    keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> {
                        errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex, ""));
                        errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("关键属性与系统中的重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                    });
                }
                //4.校验规则
@@ -1733,12 +1731,12 @@
            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
            if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
                selfRepeatRowIndexList.stream().forEach(rowIndex->{
                    errorMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";在当前处理的数据文件中关键属性重复" );
                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";在当前处理的数据文件中关键属性重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                });
            }
            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
                keyAttrRepeatRowIndexList.stream().forEach(rowIndex->{
                    errorMap.put(rowIndex,"关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex,""));
                    errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("关键属性与系统中的重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                });
            }
            //分类注入
@@ -2232,7 +2230,7 @@
            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, "") + String.format("关键属性与系统中的重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                });
            }
            //4.校验规则
@@ -2456,7 +2454,7 @@
                resultDataObjectDetailDO.setMsg(errorMap.getOrDefault(rowIndex,"") + ";关键属性重复");
                resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
                */
                errorKeyMap.put(rowIndex,errorMap.getOrDefault(rowIndex,"") + ";传入的数据中关键属性重复");
                errorKeyMap.put(rowIndex, errorKeyMap.getOrDefault(rowIndex, "") + String.format(";传入的数据中关键属性重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
            });
        }
        /****
@@ -2477,7 +2475,7 @@
                if(indexTODataMap.containsKey(rowIndex)){
                    List<BaseModel> baseModelList= indexTODataMap.get(rowIndex);
                }
                errorKeyMap.put(rowIndex, "关键属性与系统中的重复;" + errorKeyMap.getOrDefault(rowIndex,""));
                errorKeyMap.put(rowIndex, errorKeyMap.getOrDefault(rowIndex, "") + String.format("关键属性与系统中的重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
            });
        }
        //校验属性是否正确错误信息
@@ -4393,6 +4391,7 @@
            });
        }
    }
    /**
     * 校验关键属性,和近义词查询规则
     * @param classifyFullInfo 分类的全部信息
@@ -4425,10 +4424,17 @@
        //1. 我们需要先判断excel导入的内容是否正确
        CodeImportResultVO resultVO = new CodeImportResultVO();
        resultVO.setKeyAttrRuleInfo(String.format(keyRuleVO ==null?"":"查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}",
            new String[]{trim?"是":"否",ignoreCase?"是":"否",ignoreWidth?"是":"否",trimAll?"是":"否"}));
        StringBuilder synonymResString = new StringBuilder();
        if(Func.isNotEmpty(codeSynonymMaps)){
            codeSynonymMaps.keySet().stream().forEach(item->{
                synonymResString.append(item);
                synonymResString.append(",");
            });
        }
        resultVO.setSynonymRuleInfo(Func.isEmpty(codeSynonymMaps) ? "":String.format("以下[%s]被设置了近义词查询规则的关键属性,中出现了重复:",synonymResString));
        resultVO.setKeyAttrRuleInfo(keyRuleVO == null ? "":String.format("查询规则:去除空格--{%s},忽略大小写--{%s},忽略全半角--{%s},忽略全部空格--{%s}"
            ,trim?"是":"否",ignoreCase?"是":"否",ignoreWidth?"是":"否",trimAll?"是":"否"));
        //resultVO.setSelfRepeatRowIndexList(getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO));
        // 先在表格中查询关键属性和近义词转换后重复的列
        getSelfRepeatRowIndex(keyAttrMap,cboList,keyRuleVO,codeSynonymMaps,resultVO);
        // 再在表格中查询近义词查询规则的列
@@ -4623,7 +4629,7 @@
    private void getSelfRepeatRowIndex(Map<String/**属性的编号**/, CodeClassifyTemplateAttrVO> ketAttrMap,
                                       List<ClientBusinessObject> dataList,CodeKeyAttrRepeatVO keyRuleVO,/*近义词查询规则*/Map<String,List<CodeSynonym>> codeSynonymMaps, CodeImportResultVO resultVO){
        Set<String> selfRepeatRowIndexList = new CopyOnWriteArraySet<>();
        Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new HashMap<>();
        Map<String,List<String>> keyAttrOkOidTORepeatOidMap=new ConcurrentHashMap<>();
        boolean trimAll =keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag());
        //全部去空的优先级大于去空
        boolean trim =keyRuleVO ==null?false:  VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag());
@@ -4631,17 +4637,16 @@
        boolean ignoreWidth = keyRuleVO ==null?false: VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag());
        //必须将属性按照顺序排序好
        List<CodeClassifyTemplateAttrVO> attrVOList = ketAttrMap.values().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
        Map<String/**行号**/,String/**关键属性的组合内容**/> rowIndexKeyStringMap = new HashMap<>();
        Map<String/**关键属性的组合内容**/,String/**第一个关键属性的数据oid**/> okOidKeyStringMap = new HashMap<>();
        dataList.parallelStream().forEach(cbo-> {
        Map<String/**行号**/,String/**关键属性的组合内容**/> rowIndexKeyStringMap = new ConcurrentHashMap<>();
        Map<String/**关键属性的组合内容**/,String/**第一个关键属性的数据oid**/> okOidKeyStringMap = new ConcurrentHashMap<>();
        dataList.stream().forEach(cbo-> {
            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
            String oid=cbo.getOid();
            StringBuilder sb = new StringBuilder();
            // TODO: 2024-02-25改造实现近义词查询规则功能;关键属性重复校验值处理
            attrVOList.stream().forEach(item->{
                String attrId = item.getId().toLowerCase(Locale.ROOT);
                String value = cbo.getAttributeValue( attrId);
                String value = cbo.getAttributeValue(attrId);
                if (value == null) {
                    value = "";
                }
@@ -4675,11 +4680,12 @@
                }
            }else {
                okOidKeyStringMap.put(sb.toString(),oid);
                rowIndexKeyStringMap.put(rowIndex, sb.toString());
                rowIndexKeyStringMap.put(rowIndex, keyString);
            }
        });
        //因为只是关键属性重复,所以我们不能重复的多条选一条来报错
        resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
//        resultVO.setKeyAttrRepeatRowIndexList(selfRepeatRowIndexList);
        resultVO.setSelfRepeatRowIndexList(selfRepeatRowIndexList);
        resultVO.setKeyAttrOkOidTORepeatOidMap(keyAttrOkOidTORepeatOidMap);
    }
@@ -5112,6 +5118,7 @@
            bladeRedis.expire(uuid, BATCHADD_REDIS_TIME);//redis过期时间
        }
    }
    /**
     * 拷贝业务类型到map
     * @param cbo 业务数据
@@ -5353,12 +5360,14 @@
        Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
        if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) {
            selfRepeatRowIndexList.stream().forEach(rowIndex -> {
                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";在当前excel文件中关键属性重复");
                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format(";传入的数据中关键属性重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                // errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";在当前excel文件中关键属性重复");
            });
        }
        if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) {
            keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> {
                errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex, ""));
                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + String.format("关键属性与系统中的重复[%s],[%s];",keyResultVO.getKeyAttrRuleInfo(),keyResultVO.getSynonymRuleInfo()));
                // errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex, ""));
            });
        }
        Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>();
@@ -5404,6 +5413,7 @@
        }
        return excelFileName;
    }
    public void batchSwitchCheckExist(Map<String,String> errorMap,List<ClientBusinessObject> cboList,CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,ExecGroupCodePortDataDTO execGroupCodePortDataDTO,Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap){
        List<BaseModel> oldBaseModelList=new ArrayList<>();
        List<CodeAllCode> codeAllCodeList=new ArrayList<>();
@@ -5523,6 +5533,7 @@
        execGroupCodePortDataDTO.setOldList(oldBaseModelList);
        execGroupCodePortDataDTO.setCodeAllCodeList(codeAllCodeList);
    }
    /**
     *
     * @param fieldIndexMap
@@ -5551,6 +5562,7 @@
            cboList.add(cbo);
        });
    }
    /***
     * 集团导出模板属性映射信息获取
     * @param templateVO
@@ -5614,6 +5626,7 @@
    }
    /***
     * 查询未有集团码的数据
     * @param classifyFullInfo
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -1215,7 +1215,7 @@
            for (int j = 0; j < serialSecVOList.size(); j++) {
                CodeBasicSecVO secVO = serialSecVOList.get(j);
                if(lastMaxSerialValueMap.containsKey(secVO.getOid())){//此为最后需要存入流水依赖的最大流水
                    Map<String/**流水依据**/, String> serialValueMap=    lastMaxSerialValueMap.get(secVO.getOid());
                    Map<String/**流水依据**/, String> serialValueMap = lastMaxSerialValueMap.get(secVO.getOid());
                    serialValueMap.forEach((maxSerialUnitString,serialValue)->{
                        if(StringUtils.isNotBlank(serialValue)){
                            serialUnitString.set(maxSerialUnitString);