| | |
| | | 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.*; |
| | |
| | | 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("#"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 导出的时候封装必输和关键属性 |
| | | * @param attrVO 属性的显示对象 |
| | | * @param text 单元格的值 |