ludc
2023-12-07 80da77d96adf4acbf25ea5c8614ae485bc02da2d
下载历史数据导入模板带上码段宽度
已修改3个文件
135 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java
@@ -2,6 +2,7 @@
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
@@ -41,4 +42,13 @@
     */
    List<String> productCodeAndSaveDataBZ(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO,
                                        CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception;
    /**
     * 码段前后缀拼接
     * @param secVO
     * @param secValue
     * @return
     */
    String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -13,9 +13,7 @@
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.*;
@@ -383,7 +381,7 @@
        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
        //获取码段宽度
        //String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
        String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
        if(isHistory){
            templateVOList= templateService.childTemplates(codeClassifyOid);
@@ -434,6 +432,8 @@
                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);
@@ -620,25 +620,124 @@
     * @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 单元格的值
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -928,7 +928,7 @@
     * @param secValue 码值
     * @return
     */
    private String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
    public String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
        StringBuilder joinSecValue = new StringBuilder();
        // 拼接前缀
        if (Func.isNotEmpty(secVO.getPrefixCode()) && Func.isNotEmpty(secValue)) {