| | |
| | | import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; |
| | | import com.vci.ubcs.code.dto.*; |
| | | import com.vci.ubcs.code.entity.CodeAllCode; |
| | | import com.vci.ubcs.code.enumpack.CodeDefaultLC; |
| | | import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum; |
| | | import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum; |
| | | import com.vci.ubcs.code.enumpack.*; |
| | | import com.vci.ubcs.code.lifecycle.CodeAllCodeLC; |
| | | import com.vci.ubcs.code.mapper.CommonsMapper; |
| | | import com.vci.ubcs.code.service.*; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.Func; |
| | |
| | | CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); |
| | | |
| | | //获取码段宽度 |
| | | //String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid()); |
| | | String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid()); |
| | | |
| | | if(isHistory){ |
| | | templateVOList= templateService.childTemplates(codeClassifyOid); |
| | |
| | | excelDataList.add(new WriteExcelData(0,0,"分类路径","")); |
| | | excelDataList.add(new WriteExcelData(0,1,"码段宽度","")); |
| | | excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"企业编码",idAttrVOList.get(0).getId())); |
| | | // 填充码段 |
| | | excelDataList.add(new WriteExcelData(1,1,secWidth)); |
| | | } |
| | | for (int i = 0; i < templateAttrVOS.size(); i++) { |
| | | CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i); |
| | |
| | | * @return |
| | | */ |
| | | private String getCodeSegmentWidth(String codeClassifyOid){ |
| | | CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid); |
| | | CodeClassifyFullInfoBO classifyFullInfoBO = classifyService.getClassifyFullInfo(codeClassifyOid); |
| | | // 要获取码段宽度,先要获取规则,当前没有往上找 |
| | | CodeRuleVO codeRuleByClassifyFullInfo = mdmEngineService.getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid)); |
| | | List<CodeBasicSecVO> secVOList = codeRuleByClassifyFullInfo.getSecVOList(); |
| | | if(secVOList.isEmpty()){ |
| | | return ""; |
| | | } |
| | | |
| | | StringBuffer secWidth = new StringBuffer(""); |
| | | |
| | | for (int j = 0; j < secVOList.size(); j++) { |
| | | CodeBasicSecVO secVO = secVOList.get(j); |
| | | int width = VciBaseUtil.getInt(secVO.getCodeSecLength()) + ((secVO.getPrefixCode() + secVO.getSuffixCode()).length()); |
| | | secWidth.append(width).append("#"); |
| | | } |
| | | secVOList.stream().forEach(item->{ |
| | | switch (item.getSecType().toLowerCase(Locale.ROOT)){ |
| | | case "codeclassifysec": |
| | | case "codevariablesec": |
| | | case "coderefersec": |
| | | case "codefixedsec": |
| | | case "codeattrsec": |
| | | case "codeserialsec": |
| | | countSecWith(item,secWidth); |
| | | break; |
| | | case "codelevelsec": |
| | | //层级码段,需要从分类上获取相应的信息 |
| | | String secValue = ""; |
| | | if (CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(item.getCodeLevelType())) { |
| | | //最小层,因为我们只能在叶子节点上申请编码,所以这个就是当前分类的 |
| | | if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType()) || CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) { |
| | | //就是当前分类的 |
| | | secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); |
| | | } else { |
| | | //我们需要从顶层开始找到当前分类为止 |
| | | secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); |
| | | } |
| | | } else { |
| | | //指定层,我们需要通过上级的来获取 |
| | | if (CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) { |
| | | //说明当前已经是最高的了 |
| | | secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); |
| | | } else { |
| | | //这个我们需要看看,层级是不是大于了最大层级的数 |
| | | List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList()); |
| | | if (item.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) { |
| | | //指定的层级比当前的层级还大了,所以只能获取当前层级了 |
| | | if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) { |
| | | secValue = classifyFullInfoBO.getCurrentClassifyVO().getId(); |
| | | } else { |
| | | secValue = parentClassifyVOList.stream().map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId(); |
| | | } |
| | | } else { |
| | | //我们获取其中指定层的内容 |
| | | if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) { |
| | | CodeClassifyVO classifyVO = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() == item.getCodeLevelValue().intValue()).findFirst().orElseGet(() -> null); |
| | | if (classifyVO != null) { |
| | | secValue = classifyVO.getId(); |
| | | } |
| | | } else { |
| | | //小于等于的全部拿出来 |
| | | secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= item.getCodeLevelValue().intValue()).sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //看看长度是否需要截断 |
| | | if (!CodeCutTypeEnum.NONE.getValue().equalsIgnoreCase(item.getValueCutType()) && |
| | | item.getValueCutLength() != null && item.getValueCutLength() > 0 && secValue.length() > item.getValueCutLength()) { |
| | | if (CodeCutTypeEnum.RIGHT.getValue().equalsIgnoreCase(item.getValueCutType())) { |
| | | //左截取是从左边剪掉,右截取是从右边剪掉--保留左边 |
| | | secValue = secValue.substring(0, item.getValueCutLength()); |
| | | } else { |
| | | secValue = secValue.substring(secValue.length() - item.getValueCutLength()); |
| | | } |
| | | } |
| | | secValue = productCodeService.joinPreffixAndSuffix(item,secValue); |
| | | secWidth.append(secValue.length()).append("#"); |
| | | break; |
| | | case "codedatesec": |
| | | String dateFormatStr = item.getCodeDateFormatStr(); |
| | | if(Func.isNotEmpty(dateFormatStr)) { |
| | | // 获取当前时间 |
| | | Date currentDate = new Date(); |
| | | // 指定日期格式 |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatStr); |
| | | // 将当前时间转换为指定日期格式 |
| | | // 使用正则表达式去掉除数字以外的所有字符串 |
| | | String cleanedDate = dateFormat.format(currentDate).replaceAll("[^0-9]", ""); |
| | | int width = cleanedDate.length(); |
| | | if (Func.isNotEmpty(item.getPrefixCode())) { |
| | | width += item.getPrefixCode().length(); |
| | | } |
| | | if (Func.isNotEmpty(item.getSuffixCode())) { |
| | | width += item.getSuffixCode().length(); |
| | | } |
| | | secWidth.append(width).append("#"); |
| | | } |
| | | break; |
| | | } |
| | | }); |
| | | return secWidth.toString().substring(0, secWidth.length() - 1); |
| | | } |
| | | |
| | | /** |
| | | * 计算码段长度加前后缀的长度 |
| | | * @param codeBasicSecVO |
| | | * @param secWidth |
| | | */ |
| | | private void countSecWith(CodeBasicSecVO codeBasicSecVO,StringBuffer secWidth){ |
| | | if(Func.isNotEmpty(codeBasicSecVO.getCodeSecLength())){ |
| | | int width = VciBaseUtil.getInt(codeBasicSecVO.getCodeSecLength()); |
| | | if(Func.isNotEmpty(codeBasicSecVO.getPrefixCode())){ |
| | | width += codeBasicSecVO.getPrefixCode().length(); |
| | | } |
| | | if(Func.isNotEmpty(codeBasicSecVO.getSuffixCode())){ |
| | | width += codeBasicSecVO.getSuffixCode().length(); |
| | | } |
| | | secWidth.append(width).append("#"); |
| | | }else { |
| | | secWidth.append(0).append("#"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | |
| | | Map<String/**模板属性字段oid**/, String /**模板属性外部名称**/> fieldNameMap =attrVOS.stream().collect(Collectors.toMap(CodeClassifyTemplateAttrVO::getId,s->s.getName())); |
| | |
| | | //2.判断必输项。。需要全部的属性,如果是必输,但是表单里面不显示的,只能是分类注入或者组合规则 |
| | | batchCheckRequiredAttrOnOrder(templateVO,allCboList,errorMap); |
| | | //3.判断关键属性 |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,errorMap); |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, allCboList,false,errorMap); |
| | | Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); |
| | | Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); |
| | | if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){ |
| | |
| | | batchSwitchComponentAttrOnOrder(attrVOS, cboList); |
| | | |
| | | //3.判断关键属性 |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap); |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,false,errorMap); |
| | | Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); |
| | | Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); |
| | | if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { |
| | |
| | | //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo(); |
| | | List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; |
| | | CodeClassifyTemplateVO finalTemplateVO = templateVO; |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> { |
| | | //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); |
| | | List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); |
| | |
| | | if (!CollectionUtils.isEmpty(thisCbos)) { |
| | | try { |
| | | // TODO 多线程流问题 |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList); |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, finalTemplateVO, ruleVOMap.get(ruleOid), null, dataCBOList,user); |
| | | importCount.add(dataCBOList.size()); |
| | | } catch (Throwable e) { |
| | | log.error("批量产生编码的时候出错了", e); |
| | |
| | | |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap = new HashMap<>(); |
| | | List<String> titleRowData = dataSet.getColName(); |
| | |
| | | //2.判断必输项。。需要全部的属性,如果是必输,但是表单里面不显示的,只能是分类注入或者组合规则 |
| | | batchCheckRequiredAttrOnOrder(templateVO,cboList,errorMap); |
| | | //3.判断关键属性 |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorMap); |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO,cboList,false,errorMap); |
| | | Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); |
| | | Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); |
| | | if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){ |
| | |
| | | createRedisDatas(uuid + "-ok",templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap,true); |
| | | }else { |
| | | uuid=""; |
| | | |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | //要把以上的错误的都抛出后,再继续处理时间和组合规则 |
| | | needSaveCboList = cboList.stream().filter(cbo -> { |
| | | String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); |
| | |
| | | dataCBOIdList.add(baseModel.getOid()); |
| | | }); |
| | | try { |
| | | codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList); |
| | | codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList,user); |
| | | //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面 |
| | | engineService.batchSaveSelectChar(templateVO, dataCBOList); |
| | | } catch (Exception e) { |
| | |
| | | tableName = VciBaseUtil.getTableName(btmTypeId); |
| | | } |
| | | |
| | | String countSql = "select count(*) from (select * FROM " + tableName +" where 1=1" + |
| | | String countSql = "select count(*) from " + tableName +" where 1=1" + |
| | | " and lastr = '1'" + |
| | | " and lastv='1'" + |
| | | " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%' {}"; |
| | | |
| | | " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%'"; |
| | | //先查询总数 |
| | | int total = 0; |
| | | if(exportAttrDTO.getEndPage()!=null && exportAttrDTO.getEndPage()>0 |
| | | &&exportAttrDTO.getPage() !=null && exportAttrDTO.getPage() >0 |
| | | &&exportAttrDTO.getEndPage()>exportAttrDTO.getPage()){ |
| | | //从多少页到多少页的查询方式, |
| | | String countPageSql = "select count(*) from (select * FROM " + tableName +" where 1=1" + |
| | | " and lastr = '1'" + |
| | | " and lastv='1'" + |
| | | " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%' {}"; |
| | | for(int i = exportAttrDTO.getPage() ;i <= exportAttrDTO.getEndPage();i++){ |
| | | PageHelper thisPage = new PageHelper(exportAttrDTO.getLimit()==null?-1:exportAttrDTO.getLimit()); |
| | | thisPage.setPage(exportAttrDTO.getPage()==null?1:exportAttrDTO.getPage()); |
| | | thisPage.setSort(exportAttrDTO.getSort()); |
| | | thisPage.setOrder(exportAttrDTO.getOrder()); |
| | | thisPage.addDefaultDesc("createTime"); |
| | | total += commonsMapper.queryCountBySql(StringUtil.format(countSql," limit " + exportAttrDTO.getLimit() +" offset "+ i +")subquery;")); |
| | | total += commonsMapper.queryCountBySql(StringUtil.format(countPageSql," limit " + exportAttrDTO.getLimit() +" offset "+ i +")subquery;")); |
| | | } |
| | | }else{ |
| | | total = commonsMapper.queryCountBySql(countSql); |
| | |
| | | CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo); |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s -> |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | !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); |
| | |
| | | //最后弄组合规则 |
| | | batchSwitchComponentAttrOnOrder(attrVOS,cboList); |
| | | //3.判断关键属性 |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,errorMap); |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, codeClassifyTemplateVO, cboList,false,errorMap); |
| | | Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); |
| | | Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); |
| | | if(!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)){ |
| | |
| | | }).collect(Collectors.toList()); |
| | | List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList; |
| | | Map<String, CodeRuleVO> finalRuleVOMap = ruleVOMap; |
| | | // TODO: 多线程流套多线程流,有坑,我把这儿改了 |
| | | // TODO: 多线程流套多线程流,有坑,我把这儿改成单线程了 |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | ruleRowIndexMap.keySet().stream().forEach(ruleOid -> { |
| | | List <BaseModel>dataCBOList=new CopyOnWriteArrayList<>(); |
| | | List<String> rowIndexList = ruleRowIndexMap.get(ruleOid); |
| | |
| | | dataCBOList.add(baseModel); |
| | | }); |
| | | try { |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList); |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList, user); |
| | | } catch (Throwable e) { |
| | | //success=false; |
| | | log.error("批量产生编码的时候出错了", e); |
| | |
| | | engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList); |
| | | }); |
| | | }else { |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | List<BaseModel> dataCBOList=new ArrayList<>(); |
| | | List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> { |
| | | String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX); |
| | |
| | | dataCBOList.add(baseModel); |
| | | }); |
| | | try { |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList); |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList,user); |
| | | } catch (Exception e) { |
| | | log.error("批量产生编码的时候出错了", e); |
| | | needSaveCboList.stream().forEach(cbo -> { |
| | |
| | | |
| | | //校验模板是不是最新的 |
| | | //checkTemplateSync(sheetDataSetList,templateVO); |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | //除去默认的属性.还有只有具有分类注入的才过滤出来 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter( |
| | | s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap = new HashMap<>(); |
| | | List<String> titleRowData = dataObjectVO.getColName(); |
| | |
| | | //最后弄组合规则 |
| | | batchSwitchComponentAttrOnOrder(attrVOS,cboList); |
| | | //3.判断关键属性 |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,errorKeyMap); |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,false,errorKeyMap); |
| | | Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); |
| | | Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); |
| | | |
| | |
| | | if (!CollectionUtils.isEmpty(newCboList)) { |
| | | //处理关键属性查出多条的话,根据集成调用的当前分类代号取当前分类的码值。 |
| | | Map<String/**编码**/, BaseModel/**重复编码数据**/> classOidTOBaseModelMap = new HashMap<>(); |
| | | newCboList.stream().forEach(baseModel->{ |
| | | String codeclsfid=baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toUpperCase(Locale.ROOT)); |
| | | classOidTOBaseModelMap.put(codeclsfid,baseModel); |
| | | }); |
| | | newCboList.stream().forEach(baseModel->{ |
| | | String codeclsfid=baseModel.getData().get(CODE_CLASSIFY_OID_FIELD.toLowerCase(Locale.ROOT)); |
| | | classOidTOBaseModelMap.put(codeclsfid,baseModel); |
| | | }); |
| | | String codeclsfid= classifyFullInfo.getCurrentClassifyVO().getOid(); |
| | | if(classOidTOBaseModelMap.containsKey(codeclsfid)){ |
| | | BaseModel newCbo= classOidTOBaseModelMap.get(codeclsfid); |
| | |
| | | } |
| | | } |
| | | }); |
| | | //关键熟悉更改 |
| | | //关键属性更改 |
| | | if (!CollectionUtils.isEmpty(editBoList)) { |
| | | engineService.updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmTypeId(),editBoList);//保存数据 |
| | | } |
| | |
| | | |
| | | List<String>allNeedSaveCboList=new ArrayList<>(); |
| | | List<BaseModel> dataCBOList=new ArrayList<>(); |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | needSaveCboList.stream().forEach(clientBusinessObject -> { |
| | | BaseModel baseModel=new BaseModel(); |
| | | BeanUtil.convert(clientBusinessObject,baseModel); |
| | |
| | | }); |
| | | try { |
| | | List<String>applyGroupCodeIdList=new ArrayList<>(); |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList); |
| | | productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList,user); |
| | | //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面 |
| | | engineService.batchSaveSelectChar(templateVO, dataCBOList); |
| | | // if(!isProcess){ |
| | |
| | | //校验模板是不是最新的 |
| | | //checkTemplateSync(sheetDataSetList,templateVO); |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | Map<Integer/**列号**/, String/**字段的名称**/> fieldIndexMap = new HashMap<>(); |
| | | List<String> titleRowData = dataObjectVO.getColName(); |
| | |
| | | } |
| | | |
| | | List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString()); |
| | | DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true); |
| | | List<ClientBusinessObject> cboList= ChangeMapTOClientBusinessObjects(dataMapList); |
| | | Map<String, ClientBusinessObject> codeSystemObjectMap = cboList.stream().filter(systeDataObject -> systeDataObject != null && StringUtils.isNotBlank(systeDataObject.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId(), t -> t)); |
| | | Map<String, String> errorMap = new HashMap<>(); |
| | |
| | | String oid=rowData.getOid(); |
| | | String rowNumber=rowData.getRowIndex(); |
| | | ClientBusinessObject cbo = new ClientBusinessObject(); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId(),null); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); |
| | | rowData.getData().forEach((index,value)->{ |
| | | String field = fieldIndexMap.get(index); |
| | | if(StringUtils.isBlank(field)){ |
| | |
| | | String fullPath = getFullPath(classifyFullInfo); |
| | | codeImprotDataVO.getDatas().stream().forEach(rowData -> { |
| | | ClientBusinessObject cbo=new ClientBusinessObject(); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId(),null); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); |
| | | rowData.forEach((field,value)->{ |
| | | try { |
| | | cbo.setAttributeValueWithNoCheck(field,value); |
| | |
| | | String fullPath,boolean newCode){ |
| | | rowDataList.stream().forEach(rowData -> { |
| | | ClientBusinessObject cbo=new ClientBusinessObject(); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId(),null); |
| | | DefaultAttrAssimtUtil.addDefaultAttrAssimt(cbo, classifyFullInfo.getTopClassifyVO().getBtmTypeId()); |
| | | rowData.getData().forEach((index,value)->{ |
| | | String field = fieldIndexMap.get(index); |
| | | if (StringUtils.isBlank(field)) { |
| | |
| | | String sql = "select " + valueField + "," + showText.toLowerCase(Locale.ROOT) +" from " + table + " where " + showText + " in (%s)"; |
| | | valueCollections.stream().forEach(values->{ |
| | | List<Map<String,String>> dataMapList = commonsMapper.queryByOnlySqlForMap(String.format(sql, VciBaseUtil.toInSql(values.toArray(new String[0])))); |
| | | List<ClientBusinessObject> cbos= ChangeMapTOClientBusinessObjects(dataMapList); |
| | | DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true); |
| | | List<ClientBusinessObject> cbos=ChangeMapTOClientBusinessObjects(dataMapList); |
| | | if(!CollectionUtils.isEmpty(cbos)){ |
| | | valueOidTextMap.putAll(cbos.stream().collect(Collectors.toMap(s->s.getAttributeValue(valueField),t->t.getAttributeValue(showText)))); |
| | | } |
| | |
| | | * @param cboList 批量的数据 |
| | | */ |
| | | private CodeImportResultVO batchCheckKeyAttrOnOrder(CodeClassifyFullInfoBO classifyFullInfo, CodeClassifyTemplateVO templateVO, |
| | | List<ClientBusinessObject> cboList,Map<String,String> errorMap) { |
| | | List<ClientBusinessObject> cboList,boolean isEdit,Map<String,String> errorMap) { |
| | | //与MdmEngineServiceImpl里的checkKeyAttrOnOrder相似 |
| | | //先获取关键属性的规则,也利用继承的方式 |
| | | CodeKeyAttrRepeatVO keyRuleVO = keyRuleService.getRuleByClassifyFullInfo(classifyFullInfo); |
| | |
| | | Map<String,List<BaseModel>> indexTODataMap=new ConcurrentHashMap<>(); |
| | | // 查询不需要参与关键属性校验的除自己以外的所有分类oid |
| | | final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid()); |
| | | final HttpServletRequest request = org.springblade.core.tool.utils.WebUtil.getRequest(); |
| | | List<ClientBusinessObject> repeatDataMap = cboList.parallelStream().filter(cbo -> { |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | cboList = new CopyOnWriteArrayList<>(cboList); |
| | | // TODO:Thread limit exceeded replacing blocked 异常是这部分代码抛出的,所以暂时将parallelStream改成了stream |
| | | List<ClientBusinessObject> repeatDataMap = cboList.stream().filter(cbo -> { |
| | | //每行都得查询.如果其中出现了错误,我们就直接抛出异常,其余的显示 |
| | | //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo); |
| | | Map<String, String> conditionMap = new HashMap<>(); |
| | |
| | | if(Func.isNotBlank(isParticipateCheckOids)){ |
| | | conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids); |
| | | } |
| | | if(isEdit){//如果是更改则需排除系统本身 |
| | | conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId()); |
| | | } |
| | | conditionMap.put("t.lastr", "1"); |
| | | conditionMap.put("t.lastv", "1"); |
| | | |
| | | CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null); |
| | | List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId()); |
| | | if(!repeatData.isEmpty()){ |
| | | final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); |
| | | DefaultAttrAssimtUtil.mapToLowerCase(newDataList,true); |
| | | //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList); |
| | | List<BaseModel> newCboList = new ArrayList<>(); |
| | | newDataList.stream().forEach(stringStringMap -> { |
| | | BaseModel baseModel=new BaseModel(); |
| | | DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,request); |
| | | DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,false,user); |
| | | baseModel.setData(stringStringMap); |
| | | newCboList.add(baseModel); |
| | | }); |
| | |
| | | } |
| | | private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){ |
| | | List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>(); |
| | | DefaultAttrAssimtUtil.mapToLowerCase(oldDataMap,true); |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | oldDataMap.stream().forEach(dataMap->{ |
| | | ClientBusinessObject clientBusinessObject=new ClientBusinessObject(); |
| | | DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,null); |
| | | DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,false,user); |
| | | for (String key:dataMap.keySet()){ |
| | | Object value= dataMap.getOrDefault(key,""); |
| | | clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString()); |
| | |
| | | private void createExeclClassData(List<String> titleRowData, CodeClassifyTemplateVO newTemplateVO, Map<Integer, String> execlData, CodeImprotDataVO codeImprotDataVO){ |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = newTemplateVO.getAttributes().stream().filter(s -> |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | !DEFAULT_ATTR_LIST.contains(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | Map<String/**中文名称**/, String/**英文名称**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId())); |
| | | List<String> fields=new ArrayList<>(); |
| | |
| | | pageHelper.addDefaultDesc("id"); |
| | | CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(btmtypeid, templateVO, conditionMap, pageHelper); |
| | | List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage()); |
| | | DefaultAttrAssimtUtil.mapToLowerCase(dataMapList,true); |
| | | List<ClientBusinessObject> resembleCboList= ChangeMapTOClientBusinessObjects(dataMapList); |
| | | if(!CollectionUtils.isEmpty(resembleCboList)) { |
| | | List<Map<String, String>> finalDataMap = dataMap; |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public String exportGroupCodeExcel(String codeClassifyOid) throws ServiceException { |
| | | public String exportGroupCodeExcel(String codeClassifyOid) throws VciBaseException { |
| | | VciBaseUtil.alertNotNull(codeClassifyOid,"主题库分类的主键"); |
| | | CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); |
| | | CodeClassifyVO codeClassifyVO= classifyFullInfo.getCurrentClassifyVO(); |
| | |
| | | |
| | | ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO(); |
| | | createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//组织数据 |
| | | if(!CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())){ |
| | | throw new ServiceException("集团属性映射未配置"); |
| | | if(CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())){ |
| | | throw new VciBaseException("集团属性映射未配置"); |
| | | } |
| | | fieldList=execGroupCodePortDataDTO.getFieldList(); |
| | | List<Map<String,String>>dataList=new ArrayList<>(); |
| | |
| | | List<WriteExcelData> excelDataList = new ArrayList<>(); |
| | | Workbook workbook = new HSSFWorkbook(); |
| | | List<CodeAndGroupCodeAttrMappingDTO> codeAndGroupCodeAttrMappingDTOList= execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS(); |
| | | |
| | | Map<String, CodeAndGroupCodeAttrMappingDTO> jAttrVOMap = codeAndGroupCodeAttrMappingDTOList.stream().filter(s-> finalFieldList.contains(s.getTargetAttrKey().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getTargetAttrKey().toLowerCase(Locale.ROOT), t -> t)); |
| | | |
| | | WriteExcelData codeExcelData = new WriteExcelData(0, 0, "企业编码"); |
| | | WriteExcelData groupExcelData = new WriteExcelData(0, 1, "集团码"); |
| | | excelDataList.add(codeExcelData); |
| | |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public String improtGroupCode(String codeClassifyOid, File file) throws ServiceException { |
| | | @Transactional(rollbackFor = VciBaseException.class) |
| | | @Override |
| | | public String importGroupCode(String codeClassifyOid, File file) throws Throwable { |
| | | VciBaseUtil.alertNotNull(codeClassifyOid,"分类的主键"); |
| | | ReadExcelOption reo = new ReadExcelOption(); |
| | | reo.setReadAllSheet(true); |
| | |
| | | throw new ServiceException("为了保证系统的稳定性,请一次不要导入超过1万条的数据"); |
| | | } |
| | | CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); |
| | | CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO(); |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag()) |
| | | //获取最新的模板 |
| | | CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid); //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO(); |
| | | createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//组织数据 |
| | | List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS(); |
| | | if(!CollectionUtils.isEmpty(codeAttrMapGroupAttrDTOS)){ |
| | | if(CollectionUtils.isEmpty(codeAttrMapGroupAttrDTOS)){ |
| | | throw new ServiceException("集团属性映射未配置"); |
| | | } |
| | | Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t)); |
| | |
| | | Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap = new HashMap<>(); |
| | | getGroupCodeFieldIndexMap(titleRowData,codeAttrMapGroupAttrDTOS,fieldIndexMap); |
| | | //需要判断是否所有的属性都在模板上了 |
| | | List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT)) |
| | | /** List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT)) |
| | | && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getComponentRule()) && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getClassifyInvokeAttr())//组合规则和分类注入确实没给用户导出去 |
| | | ).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(unExistAttrVOs)){ |
| | | String message=unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE)); |
| | | throw new VciBaseException("【" + message + "】这些属性在excel中没有找到"); |
| | | } |
| | | }**/ |
| | | List<ClientBusinessObject> cboList = new ArrayList<>(); |
| | | List<SheetRowData> rowDataList = dataSet.getRowData(); |
| | | |
| | | getExportGroupCodeDatas(fieldIndexMap,rowDataList,cboList);//构建数据对象 |
| | | |
| | | List<String> codeList= cboList.stream().map(ClientBusinessObject::getId).collect(Collectors.toList()); |
| | | List<Map<String,String>>dataList=new ArrayList<>(); |
| | | getDatas(classifyFullInfo,templateVO,execGroupCodePortDataDTO.getFieldList(),dataList,codeList); |
| | | //查询系统中存在 |
| | | if(!CollectionUtils.isEmpty(dataList)){ |
| | | Map<String,String> errorMap=new HashMap<>(); |
| | | batchSwitchCheckExist(errorMap,cboList,classifyFullInfo,templateVO,execGroupCodePortDataDTO,fieldIndexMap); |
| | | //判断必输项 |
| | | batchCheckRequiredAttrOnOrder(templateVO, cboList, errorMap); |
| | | // //优先校验编码是否存在 |
| | | // batchCheckIdExistOnOrder(templateVO, cboList, errorMap); |
| | | //boolean |
| | | reSwitchBooleanAttrOnOrder(attrVOS, cboList); |
| | | |
| | | // 枚举的内容需要根据名称转换为枚举的值 |
| | | batchSwitchEnumAttrOnOrder(attrVOS, cboList, errorMap); |
| | | |
| | | batchSwitchReferAttrOnOrder(attrVOS, cboList, errorMap); |
| | | //6.处理分类注入 |
| | | batchSwitchClassifyAttrOnOrder(attrVOS, cboList, classifyFullInfo,false); |
| | | |
| | | //设置默认值 |
| | | batchSwitchAttrDefault(attrVOS, cboList); |
| | | |
| | | //7.处理组合规则 |
| | | batchSwitchComponentAttrOnOrder(attrVOS, cboList); |
| | | //4.校验规则 |
| | | batchCheckVerifyOnOrder(attrVOS, cboList, errorMap); |
| | | //6.时间的,必须统一为yyyy-MM-dd HH:mm:ss |
| | | batchSwitchDateAttrOnOrder(attrVOS, cboList, errorMap); |
| | | //3.判断关键属性 |
| | | CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList,true,errorMap); |
| | | Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList(); |
| | | Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList(); |
| | | if (!CollectionUtils.isEmpty(selfRepeatRowIndexList)) { |
| | | selfRepeatRowIndexList.stream().forEach(rowIndex -> { |
| | | errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";在当前excel文件中关键属性重复"); |
| | | }); |
| | | } |
| | | return ""; |
| | | if (!CollectionUtils.isEmpty(keyAttrRepeatRowIndexList)) { |
| | | keyAttrRepeatRowIndexList.stream().forEach(rowIndex -> { |
| | | errorMap.put(rowIndex, "关键属性与系统中的重复;" + errorMap.getOrDefault(rowIndex, "")); |
| | | }); |
| | | } |
| | | Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>(); |
| | | createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, templateVO); |
| | | String excelFileName=""; |
| | | if(errorMap.size()==0) { |
| | | try { |
| | | String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); |
| | | List<BaseModel>oldCbos= execGroupCodePortDataDTO.getOldList(); |
| | | List<BaseModel>newCbos=new ArrayList<>(); |
| | | // 修改版次号 |
| | | engineService.updateBatchByBaseModel(btmTypeId,oldCbos); |
| | | List<CodeAllCode> codeAllCodeList=new ArrayList<>(); |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | cboList.stream().forEach(clientBusinessObject -> { |
| | | BaseModel newBaseModel=new BaseModel(); |
| | | DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,false,user); |
| | | newCbos.add(newBaseModel); |
| | | }); |
| | | // 插入新的数据 |
| | | engineService.insertBatchByType(btmTypeId, newCbos); |
| | | codeAllCodeService.saveOrUpdateBatch(execGroupCodePortDataDTO.getCodeAllCodeList()); |
| | | engineService.batchSaveSelectChar(templateVO, newCbos); |
| | | // 记录数据更改日志 |
| | | saveLogUtil.operateLog("数据更改", false, StringUtil.format("{}\n修改为:\n{}", JSON.toJSONString(oldCbos), JSON.toJSONString(newCbos))); |
| | | } catch (Exception vciError) { |
| | | // 记录数据更改报错时的日志 |
| | | saveLogUtil.operateLog("数据更改", true, vciError.toString()); |
| | | throw new VciBaseException("数据更改保存出错了", new String[0], vciError); |
| | | } |
| | | }else{ |
| | | excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误信息.xls"; |
| | | WriteExcelOption eo = new WriteExcelOption(); |
| | | shetNameMap.forEach((shetName, errorDataList) -> { |
| | | eo.addSheetDataList(shetName, errorDataList); |
| | | }); |
| | | try { |
| | | new File(excelFileName).createNewFile(); |
| | | } catch (IOException e) { |
| | | throw new VciBaseException(LangBaseUtil.getErrorMsg(e)); |
| | | } |
| | | ExcelUtil.writeDataToFile(excelFileName, eo); |
| | | } |
| | | 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<>(); |
| | | final BladeUser user = AuthUtil.getUser(); |
| | | cboList.stream().forEach(clientBusinessObject -> { |
| | | String code=clientBusinessObject.getId(); |
| | | String rowIndex=clientBusinessObject.getAttributeValue(IMPORT_ROW_INDEX); |
| | | List<Map<String,String>>dataList=new ArrayList<>(); |
| | | List<String> fieldList= execGroupCodePortDataDTO.getFieldList(); |
| | | getDatas(classifyFullInfo,templateVO,execGroupCodePortDataDTO.getFieldList(),dataList,Arrays.asList(code)); |
| | | DefaultAttrAssimtUtil.mapToLowerCase(dataList,true); |
| | | if(!CollectionUtils.isEmpty(dataList)){ |
| | | Map<String,String> newDataMap=new HashMap<>();//将新对象属性暂时存储在Map<> |
| | | newDataMap.putAll(clientBusinessObject.getData()); |
| | | Map<String,String> dataMap=dataList.get(0); |
| | | BaseModel oldBaseModel=new BaseModel(); |
| | | DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,oldBaseModel,false,user); |
| | | String oldOid=oldBaseModel.getOid(); |
| | | |
| | | clientBusinessObject.setCopyFromVersion(oldOid); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("copyfromversion",oldOid); |
| | | String oid=VciBaseUtil.getPk(); |
| | | clientBusinessObject.setOid(oid); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("oid",oid); |
| | | clientBusinessObject.setBtmname(oldBaseModel.getBtmname()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("btmname",oldBaseModel.getBtmname()); |
| | | clientBusinessObject.setLastR("1"); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("lastr","1"); |
| | | clientBusinessObject.setFirstR("1"); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("firstr","1"); |
| | | clientBusinessObject.setFirstV("1"); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("firstv","1"); |
| | | clientBusinessObject.setLastV("1"); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("lastv","1"); |
| | | clientBusinessObject.setRevisionSeq(1); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("revisionseq","1"); |
| | | clientBusinessObject.setVersionSeq(1); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("versionseq","1"); |
| | | clientBusinessObject.setRevisionRule(oldBaseModel.getRevisionRule()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("revisionrule",oldBaseModel.getRevisionRule()); |
| | | clientBusinessObject.setVersionRule(oldBaseModel.getRevisionRule()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("versionrule",oldBaseModel.getVersionRule()); |
| | | clientBusinessObject.setVersionValue(oldBaseModel.getVersionValue()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("versionvalue",oldBaseModel.getVersionValue()); |
| | | clientBusinessObject.setLctid(oldBaseModel.getLctid()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("lctid",oldBaseModel.getLctid()); |
| | | clientBusinessObject.setId(oldBaseModel.getId()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("id",oldBaseModel.getId()); |
| | | clientBusinessObject.setName(oldBaseModel.getName()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("name",oldBaseModel.getName()); |
| | | clientBusinessObject.setLcStatus(CodeDefaultLC.RELEASED.getValue()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("lcstatus",CodeDefaultLC.RELEASED.getValue()); |
| | | clientBusinessObject.setDescription("导入集团码"); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("description","导入集团码"); |
| | | clientBusinessObject.setOwner("1"); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("owner","1"); |
| | | clientBusinessObject.setTenantId(AuthUtil.getTenantId()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("tenant_id",AuthUtil.getTenantId()); |
| | | clientBusinessObject.setCreator(oldBaseModel.getCreator()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("creator",oldBaseModel.getCreator()); |
| | | SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | clientBusinessObject.setCreateTime(oldBaseModel.getCreateTime()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("createtime", formatter.format(oldBaseModel.getCreateTime())); |
| | | clientBusinessObject.setLastModifier(AuthUtil.getUserAccount()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("lastmodifier",AuthUtil.getUserAccount()); |
| | | clientBusinessObject.setCreateTime(new Date()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("lastmodifytime", formatter.format(new Date())); |
| | | clientBusinessObject.setRevisionValue(String.valueOf(Integer.parseInt(oldBaseModel.getRevisionValue())+1)); |
| | | clientBusinessObject.setRevisionOid(oldBaseModel.getRevisionOid()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("revisionoid",oldBaseModel.getRevisionOid()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("revisionvalue",String.valueOf(Integer.parseInt(oldBaseModel.getRevisionValue())+1)); |
| | | |
| | | clientBusinessObject.setNameOid(oldBaseModel.getNameOid()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("nameoid",oldBaseModel.getNameOid()); |
| | | |
| | | clientBusinessObject.setAttributeValueWithNoCheck(CODE_CLASSIFY_OID_FIELD,oldBaseModel.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,"")); |
| | | clientBusinessObject.setAttributeValueWithNoCheck(CODE_FULL_PATH_FILED,oldBaseModel.getData().getOrDefault(CODE_FULL_PATH_FILED,"")); |
| | | clientBusinessObject.setAttributeValueWithNoCheck(CODE_TEMPLATE_OID_FIELD,oldBaseModel.getData().getOrDefault(CODE_TEMPLATE_OID_FIELD,"")); |
| | | clientBusinessObject.setTs(new Date()); |
| | | clientBusinessObject.setAttributeValueWithNoCheck("ts",formatter.format(new Date())); |
| | | oldBaseModel.setLastV("0"); |
| | | oldBaseModel.getData().put("lastv","0"); |
| | | oldBaseModelList.add(oldBaseModel); |
| | | List<CodeAllCode> oldCodeAllCodeList= codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getId,code)); |
| | | CodeAllCode codeAllCode=new CodeAllCode(); |
| | | if(!CollectionUtils.isEmpty(oldCodeAllCodeList)){ |
| | | codeAllCode=oldCodeAllCodeList.get(0); |
| | | codeAllCode.setId(code); |
| | | codeAllCode.setLcStatus(CodeDefaultLC.RELEASED.getValue()); |
| | | codeAllCode.setCreateCodeOid(clientBusinessObject.getOid()); |
| | | codeAllCode.setCreateCodeBtm(clientBusinessObject.getBtmname()); |
| | | codeAllCode.setLastModifyTime(new Date()); |
| | | codeAllCode.setLastModifier(AuthUtil.getUserAccount()); |
| | | codeAllCodeList.add(codeAllCode); |
| | | if(!oldBaseModel.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue())||!codeAllCode.getLcStatus().equals(CodeDefaultLC.RELEASED.getValue())){ |
| | | errorMap.put(rowIndex,"第"+rowIndex+"行,在系统中数据不是发布状态"); |
| | | } |
| | | }else{ |
| | | errorMap.put(rowIndex,"第"+rowIndex+"行,在系统中未查询到相应的码值数据"); |
| | | } |
| | | //除去默认的属性.还有只有表单显示的字段才导入 |
| | | List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!fieldIndexMap.containsValue(s.getId()) && |
| | | ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())) |
| | | ).collect(Collectors.toList()); |
| | | attrVOS.stream().forEach(codeClassifyTemplateAttrVO -> {//将不需要更改的默认字段或者不更改的属性复制到新的版本上 |
| | | String arrtibuteKey=codeClassifyTemplateAttrVO.getId(); |
| | | Map<String,String>attrDataMap=oldBaseModel.getData(); |
| | | if(attrDataMap.containsKey(arrtibuteKey)){ |
| | | String arrtibuteValue=attrDataMap.get(arrtibuteKey); |
| | | clientBusinessObject.setAttributeValueWithNoCheck(arrtibuteKey,arrtibuteValue); |
| | | } |
| | | }); |
| | | }else{ |
| | | errorMap.put(rowIndex,"第"+rowIndex+"行,在系统中未查询到相应的最新版数据"); |
| | | } |
| | | }); |
| | | execGroupCodePortDataDTO.setOldList(oldBaseModelList); |
| | | execGroupCodePortDataDTO.setCodeAllCodeList(codeAllCodeList); |
| | | } |
| | | /** |
| | | * |
| | | * @param fieldIndexMap |
| | |
| | | */ |
| | | private void getExportGroupCodeDatas(Map<Integer,String> fieldIndexMap,List<SheetRowData> rowDataList,List<ClientBusinessObject>cboList){ |
| | | rowDataList.stream().forEach(sheetRowData -> { |
| | | String rowIndex= sheetRowData.getRowIndex(); |
| | | ClientBusinessObject cbo=new ClientBusinessObject(); |
| | | cbo.setAttributeValue(IMPORT_ROW_INDEX,rowIndex); |
| | | sheetRowData.getData().forEach((index,value)->{ |
| | | ClientBusinessObject cbo=new ClientBusinessObject(); |
| | | String field = fieldIndexMap.get(index); |
| | | if (StringUtils.isBlank(field)) { |
| | | throw new VciBaseException("第" + (index + 1) + "列的标题在系统中不存在"); |
| | |
| | | } catch (VciBaseException e) { |
| | | log.error("设置属性的值错误", e); |
| | | } |
| | | cboList.add(cbo); |
| | | }); |
| | | cboList.add(cbo); |
| | | }); |
| | | } |
| | | /*** |
| | |
| | | Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t)); |
| | | for (int i = 0; i < titleRowData.size(); i++) { |
| | | String title = titleRowData.get(i); |
| | | CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO =codeSystemObjectMap.get(title.replace(KEY_ATTR_CHAR,"").replace(REQUIRED_CHAR,"")); |
| | | String id=codeAndGroupCodeAttrMappingDTO.getTargetAttrKey(); |
| | | if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "集团码".equalsIgnoreCase(title)){ |
| | | String id = ""; |
| | | if ("集团码".equalsIgnoreCase(title)) { |
| | | id = CODE_GROUP_FIELD; |
| | | } |
| | | if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "企业编码".equalsIgnoreCase(title)){ |
| | | if ("企业编码".equalsIgnoreCase(title)) { |
| | | id = CODE_FIELD; |
| | | } |
| | | if(com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)){ |
| | | fieldIndexMap.put(i,id); |
| | | if(codeSystemObjectMap.containsKey(title)) { |
| | | CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO = codeSystemObjectMap.get(title.replace(KEY_ATTR_CHAR, "").replace(REQUIRED_CHAR, "")); |
| | | id = codeAndGroupCodeAttrMappingDTO.getTargetAttrKey(); |
| | | } |
| | | if (com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)) { |
| | | fieldIndexMap.put(i, id); |
| | | } |
| | | } |
| | | |
| | |
| | | * @param selectFieldList |
| | | * @param dataList |
| | | */ |
| | | private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList,List<String> codeList ){ |
| | | private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList,List<String> codeList){ |
| | | //先查询数据 |
| | | String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId(); |
| | | String codeClassifyOid=classifyFullInfo.getCurrentClassifyVO().getOid(); |