ludc
2024-01-24 5ca05f604876cacca45e3bdfa9f54a997653da90
bug修改:290相似项查询sql拼接报错修改,291码值回收报错下标越界
已修改4个文件
104 ■■■■■ 文件已修改
Source/UBCS-WEB/src/views/code/code.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue
@@ -644,7 +644,7 @@
                v-model="form.prefixCode"
                :readonly="basicSecOnlyRead"
              ></el-input> -->
              <el-select v-model="form.prefixCode" :disabled="basicSecOnlyRead">
              <el-select v-model="form.prefixCode" :disabled="basicSecOnlyRead" clearable>
                <el-option
                  v-for="(option, index) in preFixOrSuffixChars"
                  :key="index"
@@ -661,7 +661,7 @@
                v-model="form.suffixCode"
                :readonly="basicSecOnlyRead">
              </el-input> -->
              <el-select v-model="form.suffixCode" :disabled="basicSecOnlyRead">
              <el-select v-model="form.suffixCode" :disabled="basicSecOnlyRead" clearable>
                <el-option
                  v-for="(option, index) in preFixOrSuffixChars"
                  :key="index"
@@ -852,6 +852,7 @@
                  :disabled="basicSecOnlyRead"
                  filterable
                  placeholder="请选择"
                  clearable
                >
                  <el-option
                    v-for="item in enumParam.codeFillSeparator"
@@ -1157,6 +1158,7 @@
                  :disabled="basicSecOnlyRead"
                  filterable
                  placeholder="请选择"
                  clearable
                >
                  <el-option
                    v-for="item in enumParam.codeFillSeparator"
@@ -2108,7 +2110,7 @@
        if (!this.tipsCodeSecValueMessage(this.codeClassifyForm.id)) {
          return;
        }
        if(!await this.regexCharacter(this.codeFixdForm.id)){
        if(!await this.regexCharacter(this.codeClassifyForm.id)){
          return;
        }
        this.codeClassifyForm.oid =
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -423,8 +423,7 @@
        try {
            VciBaseUtil.alertNotNull(baseModelDTO, "数据信息", baseModelDTO.getOid(), "主键", baseModelDTO.getBtmname(), "业务类型", baseModelDTO.getLcStatus(), "目标状态");
            List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid());
            List<BaseModel> baseModels = new ArrayList<>();
            baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid());
            List<BaseModel> baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid());
            if (baseModels.size() == 0) {
                throw new VciBaseException("未查询到相关数据。");
            }
@@ -1948,7 +1947,7 @@
            boolean ignoreCase = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorecaseflag());
            boolean ignoreWidth = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorewidthflag());
            boolean trimAll = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
            boolean trim = VciBaseUtil.getBoolean(resembleRuleVO.getIgnoreallspaceflag());
            boolean trim = VciBaseUtil.getBoolean(resembleRuleVO.getIgnorecaseflag());
            String temp = "";
            if (ignoreCase && ignoreSpace && ignoreWidth) {
                //忽略大小写,且去空,忽略全半角
@@ -1982,7 +1981,7 @@
                    temp = "replace(" + temp + ",'" + s + "','')";
                }
            }
            queryValue = String.format(temp, (trim ? value.trim() : value));
            queryValue = String.format(temp, (trim ? "'"+value.trim()+"'" : "'"+value+"'"));
            temp = temp.replace("to_single_byte('%s')", "to_single_byte(%s)");
            queryKey = String.format(temp, "t." + attrId);
            conditionMap.put(queryKey, QueryOptionConstant.OR + queryValue);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -3,7 +3,6 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.protobuf.ServiceException;
import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient;
@@ -27,7 +26,6 @@
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.feign.IWebSecretClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.RevisionRuleVO;
import com.vci.ubcs.starter.bo.WriteExcelData;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
@@ -56,7 +54,6 @@
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Workbook;
import org.aspectj.apache.bcel.classfile.Code;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
@@ -70,7 +67,6 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
@@ -89,6 +85,7 @@
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import static com.alibaba.druid.util.FnvHash.Constants.LIMIT;
@@ -1350,8 +1347,6 @@
                    engineService.batchSaveSelectChar(templateVO, dataCBOIdList);
                }
            }
            //long end = System.currentTimeMillis();
            //log.info("=============for执行时间================="+String.valueOf((end-start)/1000));
            String excelFileName="";
            if(isExport&&!CollectionUtils.isEmpty(shetNameMap)) {
                excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误信息.xls";
@@ -1365,14 +1360,17 @@
                    throw new VciBaseException(LangBaseUtil.getErrorMsg(e));
                }
                ExcelUtil.writeDataToFile(excelFileName, eo);
                saveLogUtil.operateLog("历史数据导入",true, StringUtil.format("错误信息:{}",JSON.toJSONString(shetNameMap)));
            }else{
                // 历史数据导入时出现了相似项返回结果时不算导入成功
                if(shetNameMap.isEmpty() || !isCreateUUid){
                    saveLogUtil.operateLog("历史数据导入",false, StringUtil.format("导入到分类{}中,导入成功总数为:{}", JSON.toJSONString(classifyFullInfo), Func.isEmpty(importCount) ? 0:importCount.get(0)));
                }
            }
            CodeImProtRusultVO codeImProtRusultVO=new CodeImProtRusultVO();
            if(StringUtils.isNotBlank(excelFileName)) {
                codeImProtRusultVO.setFilePath(excelFileName);
                codeImProtRusultVO.setFileOid("");
                saveLogUtil.operateLog("历史数据导入",true, StringUtil.format("错误信息:{}",JSON.toJSONString(shetNameMap)));
            }else{
                saveLogUtil.operateLog("历史数据导入",false, StringUtil.format("导入到分类{}中,导入成功总数为:{}", JSON.toJSONString(classifyFullInfo),importCount.get(0)));
            }
            if(isCreateUUid){
                codeImProtRusultVO.setRedisUuid(uuid);
@@ -2119,10 +2117,18 @@
        ExcelUtil.writeDataToFile(excelName, excelOption);
    }
    /**
     * 相似项查询出来之后再点击确认时调用的
     * @param codeImprotSaveDatVOList
     * @param classifyAttr
     * @param isImprot
     * @return
     */
    @Override
    public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) {
        WriteExcelOption eo = new WriteExcelOption();
        AtomicBoolean success= new AtomicBoolean(true);
        AtomicReference<CodeClassifyTemplateVO> codeClassifyTemplateVO = new AtomicReference<>();
        codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> {
            List<SheetRowData> rowDataList = new ArrayList<>();
            List<ClientBusinessObject>cboList=new ArrayList<>();
@@ -2151,16 +2157,16 @@
            log.info("分类:"+classifyFullInfo.getCurrentClassifyVO().getName()+"数据:"+codeImprotSaveDatVO.getDataList().size());
            // CodeClassifyTemplateVO codeClassifyTemplateVO=   engineService.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
            CodeClassifyTemplateVO codeClassifyTemplateVO=  templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
            codeClassifyTemplateVO.set(templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()));
            //规则的主键需要去获取
            CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
            //除去默认的属性.还有只有表单显示的字段才导入
            List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s ->
            List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.get().getAttributes().stream().filter(s ->
                !DEFAULT_ATTR_LIST.contains(s.getId()) &&
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            String fullPath = getFullPath(classifyFullInfo);
            excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot);
            excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO.get(),cboList,fullPath,!isImprot);
            Map<String,String> errorMap=new ConcurrentHashMap<>();
            Map<String/**路径**/, CodeClassifyVO> pathMap=new HashMap<>() ;
            //校验编码规则和码段是否正确
@@ -2206,7 +2212,7 @@
            //最后弄组合规则
            batchSwitchComponentAttrOnOrder(attrVOS,cboList);
            //3.判断关键属性
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,false,errorMap);
            CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO.get(), cboList,false,errorMap);
            Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
            Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
            if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){
@@ -2237,7 +2243,7 @@
                            dataCBOList.add(baseModel);
                        });
                        try {
                            productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList, user);
                            productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO.get(), finalRuleVOMap.get(ruleOid), null, dataCBOList, user);
                        } catch (Throwable e) {
                            //success=false;
                            log.error("批量产生编码的时候出错了", e);
@@ -2247,7 +2253,7 @@
                            });
                        }
                    }
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO.get(), dataCBOList);
                });
            }else {
                final BladeUser user = AuthUtil.getUser();
@@ -2264,7 +2270,7 @@
                        dataCBOList.add(baseModel);
                    });
                    try {
                        productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList,user);
                        productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO.get(), ruleVO, orderDTO.getSecDTOList(), dataCBOList,user);
                    } catch (Exception e) {
                        log.error("批量产生编码的时候出错了", e);
                        needSaveCboList.stream().forEach(cbo -> {
@@ -2273,7 +2279,7 @@
                        });
                    }
                    //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO.get(), dataCBOList);
                }
            }
            if(errorMap.size()>0) {
@@ -2284,14 +2290,16 @@
                errorMap.forEach((key,v)->{
                    excelDataList.add(new WriteExcelData(index[0]++, 0, "第"+(Integer.parseInt(key)+1)+"行数据:"+v));
                });
                eo.addSheetDataList(codeClassifyTemplateVO.getName() + "导入模板", excelDataList);
                eo.addSheetDataList(codeClassifyTemplateVO.get().getName() + "导入模板", excelDataList);
            }
        });
        if(!success.get()){
            String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (isImprot?"批量历史错误信息.xls":"批量申请错误信息.xls");
            ExcelUtil.writeDataToFile(excelName,eo);
            return  R.fail(excelName);
            saveLogUtil.operateLog("历史数据导入",true, StringUtil.format("错误信息:{}",JSON.toJSONString(eo.getWriteDataMap())));
            return R.fail(excelName);
        }else {
            saveLogUtil.operateLog("历史数据导入",false, StringUtil.format("导入到分类{}中,导入成功总数为:{}", JSON.toJSONString(codeClassifyTemplateVO), Func.isEmpty(codeImprotSaveDatVOList.get(0).getDataList().size())));
            return R.success(isImprot ? "批量历史导入成功" : "批量申请成功");
        }
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -93,10 +93,6 @@
    @Autowired
    private FormulaServiceImpl formulaService;
    // 注入事务管理器
//    @Autowired
//    private TransactionTemplate transactionTemplate;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public List<String> productCodeAndSaveData(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO, CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList,BladeUser user) throws Exception {
@@ -303,10 +299,6 @@
                if(!CollectionUtils.isEmpty(editCodeDOs)){
                    codeAllCodeService.updateBatchById(editCodeDOs);
                }
                // 获取事务定义
                //DefaultTransactionDefinition def = new DefaultTransactionDefinition();
                // 开始事务
                //TransactionStatus status = transactionTemplate.getTransactionManager().getTransaction(def);
                if(!CollectionUtils.isEmpty(addCodeDOs)){
                    Map<String, String> statusMap = addCodeDOs.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
                    addCodeDOs.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
@@ -331,17 +323,24 @@
                    for (CodeAllCode codeAllCode : takeBack) {
                        codeAllCode.setTs(new Date());
                        codeAllCode.setLastModifyTime(new Date());
                        codeAllCode.setLastModifier(AuthUtil.getUserId().toString());
                        Iterator<CodeAllCode> iterator = addCodeDOs.iterator();
                        codeAllCode.setLastModifier(Func.isNotEmpty(user) ? user.getAccount():AuthUtil.getUserAccount());
                        for (int i = 0; i < addCodeDOs.size(); i++) {
                            if(codeAllCode.getId().equals(addCodeDOs.get(i).getId())){
                                codeAllCode.setCreateCodeOid(addCodeDOs.get(i).getCreateCodeOid());
                                codeAllCode.setLcStatus(addCodeDOs.get(i).getLcStatus());
                                addCodeDOs.remove(i);
                            }
                        }
                        /*Iterator<CodeAllCode> iterator = addCodeDOs.iterator();
                        while (iterator.hasNext()){
                            CodeAllCode next = iterator.next();
                            if(codeAllCode.getId().equals(next.getId())){
                                codeAllCode.setCreateCodeOid(next.getCreateCodeOid());
                                codeAllCode.setLcStatus(next.getLcStatus());
                                // TODO: 这儿先暂时注释掉,没看懂这儿为什么要这样做,导致报错
                                //iterator.remove();
                                iterator.remove();
                            }
                        }
                        }*/
                    }
                    if(takeBack.size()>0){
                        codeAllCodeService.updateBatchById(takeBack);
@@ -349,16 +348,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 {
@@ -463,19 +453,8 @@
                codeAllCodeService.updateBatchById(takeBack);
            }
            codeAllCodeService.saveBatch(allCodeDOList);
//            iCodeWupinService.saveBatch(dataCBOList);
            mdmEngineService.insertBatchByType(dataCBOList.get(0).getBtmname(),dataCBOList);
//            batchCBO.getCreateCbos().stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmName())).forEach(s -> {
//                s.setLcStatus(statusMap.get(s.getOid()));
//                try {
//                    s.setAttributeValue("lcstatus",statusMap.get(s.getOid()));
//                } catch (VCIError e) {
//                    e.printStackTrace();
//                }
//            });
        }
        // WebUtil.setPersistence(true);
        // boService.persistenceBatch(batchCBO);
        return codeList;
    }