xiejun
2023-12-06 980a7eab362b5a8c00f13427c73053382ca4ba44
集团码导入功能开发
已修改9个文件
已添加1个文件
475 ■■■■ 文件已修改
Source/UBCS/ubcs-codeApply/src/main/java/Test.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/rmip/code/client/codeapply/Apply410/CodeLibTreeCellRenderer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/rmip/code/client/codeapply/Apply410/Test.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/rmip/code/client/codeapply/Apply410/utils/VciBaseUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/ExecGroupCodePortDataDTO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 270 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-codeApply/src/main/java/Test.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
import java.util.Arrays;
import java.util.List;
public class Test {
    public static void main(String[] args) {
        String []res={"5","6","7","8","3"};
        List<String> newList=Arrays.asList(res);
        System.out.println(res);
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/rmip/code/client/codeapply/Apply410/CodeLibTreeCellRenderer.java
@@ -1,5 +1,7 @@
package com.vci.rmip.code.client.codeapply.Apply410;
import com.vci.base.ui.image.bundle.BundleImage;
import com.vci.base.ui.tree.VCIBaseTreeNode;
import com.vci.rmip.code.client.codeapply.Apply410.object.CodeClassify;
import javax.swing.*;
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/rmip/code/client/codeapply/Apply410/Test.java
@@ -1,10 +1,17 @@
package com.vci.rmip.code.client.codeapply.Apply410;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class Test {
    public static void main(String[] args) {
        String res=intToRoman(101);
        String res=intToRoman(1004);
        System.out.println("罗马数字->"+res);
        boolean isInterger=isRomanNumber(1004+"");
        int resInt=r2a(res);
        System.out.println("阿拉伯数字->"+resInt);
    }
    public static String intToRoman(int num) {
        int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1};
@@ -26,4 +33,46 @@
        String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        return M[num/1000]+C[(num%1000)/100]+X[(num%100)/10]+I[num%10];
    }
    /***
     * æ ¡éªŒæ˜¯å¦æ˜¯ç½—马数字
     * @param s
     * @return
     */
    public static boolean isRomanNumber(String s) {
        // æ£€æŸ¥è¾“入的字符串是否为空
        if (s == null || s.length() == 0) {
            return false;
        }
        // å°†è¾“入的字符串转换为大写字母
        s = s.toUpperCase();
        // è¿”回结果
        Pattern pattern = Pattern.compile("^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$");
        return pattern.matcher(s ).matches();
    }
    /**
     * æŠŠç½—马数字转换为阿拉伯数字
     *
     * @param m
     * @return
     */
    public static int r2a(String m) {
        int graph[] = new int[400];
        graph['I'] = 1;
        graph['V'] = 5;
        graph['X'] = 10;
        graph['L'] = 50;
        graph['C'] = 100;
        graph['D'] = 500;
        graph['M'] = 1000;
        char[] num = m.toCharArray();
        int sum = graph[num[0]];
        for (int i = 0; i < num.length - 1; i++) {
            if (graph[num[i]] >= graph[num[i + 1]]) {
                sum += graph[num[i + 1]];
            } else {
                sum = sum + graph[num[i + 1]] - 2 * graph[num[i]];
            }
        }
        return sum;
    }
}
Source/UBCS/ubcs-codeApply/src/main/java/com/vci/rmip/code/client/codeapply/Apply410/utils/VciBaseUtil.java
@@ -1388,6 +1388,25 @@
        return sb.toString();
    }
    public static String intToRomanOne(int num) {
        int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1};
        String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<values.length;i++){
            while(num>=values[i]){
                num=num-values[i];
                sb.append(romans[i]);
            }
        }
        return sb.toString();
    }
    public static String intToRomanTwo(int num) {
        String M[] = {"", "M", "MM", "MMM"};
        String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
        String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
        String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        return M[num/1000]+C[(num%1000)/100]+X[(num%100)/10]+I[num%10];
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/ExecGroupCodePortDataDTO.java
@@ -1,5 +1,7 @@
package com.vci.ubcs.code.dto;
import com.vci.ubcs.code.entity.CodeAllCode;
import com.vci.ubcs.starter.revision.model.BaseModel;
import lombok.Data;
import java.util.ArrayList;
@@ -18,9 +20,13 @@
     */
    private LinkedList<String> fieldList=new LinkedList<>();
    /**
     * æ•°æ®é›†æˆ
     * æ•°æ®å­˜å‚¨
     */
    private List<Map<String,String>> dataList=new ArrayList<>();
    /****
     * ç³»ç»Ÿä¸­çš„æ•°æ®å­˜å‚¨
     */
    private List<BaseModel>oldList=new ArrayList<>();
    /***
     * åˆ—名
     */
@@ -29,4 +35,8 @@
     * é›†å›¢å±žæ€§ä¸Žç¼–码属性映射关系
     */
    private List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=new ArrayList<>();
    /**
     * æ›´æ–°çš„码值对象
     */
    List<CodeAllCode> codeAllCodeList=new ArrayList<>();
}
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
@@ -101,12 +101,13 @@
     * @return
     * @throws VciBaseException
     */
    public static <T extends BaseModel> T copplyDefaultAttrAssimt(Map<String,String> dataMap, T object) throws VciBaseException {
    public static <T extends BaseModel> T copplyDefaultAttrAssimt(Map<String,String> dataMap, T object,boolean isCase) throws VciBaseException {
        BaseModel baseModel = object;
        baseModel.getData().putAll(dataMap);
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            baseModel.setOid(dataMap.getOrDefault("OID",""));
            baseModel.setId(dataMap.getOrDefault("ID",""));
            baseModel.setOid(dataMap.getOrDefault(isCase?"OID":"oid",""));
            baseModel.setId(dataMap.getOrDefault(isCase?"ID":"id",""));
            Map<String,Object> newDataMap=new HashMap<>();
            /*for (String key:dataMap.keySet()){
                Object value=dataMap.get(key);
@@ -116,52 +117,56 @@
                newDataMap.put(key.toLowerCase(Locale.ROOT),value);
            });*/
            //baseModel.setData((Map)newDataMap);
            Object createTimeObj=dataMap.getOrDefault("CREATETIME","");
            Object createTimeObj=dataMap.getOrDefault(isCase?"CREATETIME":"createtime","");
            if(createTimeObj!=null) {
                String createTime = createTimeObj.toString();
                baseModel.setCreateTime(chageStringToDate(createTime));
            }
            baseModel.setNameOid(dataMap.getOrDefault("NAMEOID",""));
            baseModel.setNameOid(dataMap.getOrDefault(isCase?"NAMEOID":"nameoid",""));
            Object lastModifyTimeObj=dataMap.getOrDefault("LASTMODIFYTIME","");
            Object lastModifyTimeObj=dataMap.getOrDefault(isCase?"LASTMODIFYTIME":"lastmodifytime","");
            if(lastModifyTimeObj!=null) {
                String lastModifyTime = lastModifyTimeObj.toString();
                baseModel.setLastModifyTime(chageStringToDate(lastModifyTime));
            }
            Object tsObj=dataMap.getOrDefault("TS","");
            Object tsObj=dataMap.getOrDefault(isCase?"TS":"ts","");
            if(tsObj!=null) {
                String ts = tsObj.toString();
                baseModel.setTs(chageStringToDate(ts));
            }
            baseModel.setRevisionOid(dataMap.getOrDefault("REVISIONOID",""));
            baseModel.setRevisionOid(dataMap.getOrDefault(isCase?"REVISIONOID":"revisionoid",""));
            //用户id ; è¦æ±‚改成了账号
            // String userId = AuthUtil.getUserId().toString();
            baseModel.setBtmname(dataMap.getOrDefault("BTMNAME",""));
            baseModel.setCreator(dataMap.getOrDefault("CREATOR",""));
            baseModel.setFirstR(dataMap.getOrDefault("FIRSTR",""));
            baseModel.setFirstV(dataMap.getOrDefault("FIRSTV",""));
            baseModel.setLastR(dataMap.getOrDefault("LASTR",""));
            baseModel.setLastV(dataMap.getOrDefault("LASTV",""));
            Object revisionseq =dataMap.getOrDefault("REVISIONSEQ","");
            baseModel.setBtmname(dataMap.getOrDefault(isCase?"BTMNAME":"btmname",""));
            baseModel.setCreator(dataMap.getOrDefault(isCase?"CREATOR":"creator",""));
            baseModel.setFirstR(dataMap.getOrDefault(isCase?"FIRSTR":"firstr",""));
            baseModel.setFirstV(dataMap.getOrDefault(isCase?"FIRSTV":"firstv",""));
            baseModel.setLastR(dataMap.getOrDefault(isCase?"LASTR":"lastr",""));
            baseModel.setLastV(dataMap.getOrDefault(isCase?"LASTV":"lastv",""));
            Object revisionseq =dataMap.getOrDefault(isCase?"REVISIONSEQ":"revisionseq","");
            if(revisionseq!=null){
                baseModel.setRevisionSeq(chageStringToInt(revisionseq.toString()));
            }
            baseModel.setOwner(dataMap.getOrDefault("OWNER",""));
            Object versionseq =dataMap.getOrDefault("VERSIONSEQ","");
            baseModel.setOwner(dataMap.getOrDefault(isCase?"OWNER":"owner",""));
            Object versionseq =dataMap.getOrDefault(isCase?"VERSIONSEQ":"versionseq","");
            if(versionseq!=null){
                baseModel.setVersionSeq(chageStringToInt(versionseq.toString()));
            }
            baseModel.setVersionRule(dataMap.getOrDefault("VERSIONRULE",""));
            baseModel.setVersionValue(dataMap.getOrDefault("VERSIONVALUE",""));
            baseModel.setRevisionOid(dataMap.getOrDefault("REVISIONOID",""));
            baseModel.setVersionRule(dataMap.getOrDefault(isCase?"VERSIONRULE":"versionrule",""));
            baseModel.setVersionValue(dataMap.getOrDefault(isCase?"VERSIONVALUE":"versionvalue",""));
            baseModel.setRevisionRule(dataMap.getOrDefault(isCase?"REVISIONRULE":"revisionrule",""));
            baseModel.setRevisionOid(dataMap.getOrDefault(isCase?"REVISIONOID":"revisionoid",""));
            baseModel.setRevisionValue(dataMap.getOrDefault(isCase?"REVISIONVALUE":"revisionvalue",""));
            baseModel.setLastModifier(AuthUtil.getUser().getAccount());
            baseModel.setLcStatus(dataMap.getOrDefault("LCSTATUS",""));
            baseModel.setName(dataMap.getOrDefault("NAME",""));
            baseModel.setTenantId(dataMap.getOrDefault("TENADTID",""));
            baseModel.setDescription(dataMap.getOrDefault("DESCRIOTION",""));
            baseModel.setCopyFromVersion(dataMap.getOrDefault("COPYFROMVERSION",""));
            Object secretgrade=dataMap.get("SECRETGRADE");
            baseModel.setLcStatus(dataMap.getOrDefault(isCase?"LCSTATUS":"lcstatus",""));
            baseModel.setName(dataMap.getOrDefault(isCase?"NAME":"name",""));
            baseModel.setTenantId(dataMap.getOrDefault(isCase?"TENANT_ID":"tenant_id",""));
            baseModel.setDescription(dataMap.getOrDefault(isCase?"DESCRIPTION":"description",""));
            baseModel.setCopyFromVersion(dataMap.getOrDefault(isCase?"COPYFROMVERSION":"copyfromversion",""));
            Object secretgrade=dataMap.get(isCase?"SECRETGRADE":"secretgrade");
            if(secretgrade!=null){
                baseModel.setSecretGrade(chageStringToInt(secretgrade.toString()));
            }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -844,17 +844,53 @@
     */
    @GetMapping("/exportGroupCodeExcel")
    @VciBusinessLog(operateName = "导出集团码")
    public void exportGroupCodeExcel(String codeClassifyOid, HttpServletResponse response) throws IOException{
    public R exportGroupCodeExcel(String codeClassifyOid, HttpServletResponse response) throws IOException{
        try {
            String excelName = mdmIOService.exportGroupCodeExcel(codeClassifyOid);
            ControllerUtil.writeFileToResponse(response,excelName);
        } catch (Throwable e) {
            //如果出错,把错误信息写到text
            String msg = LangBaseUtil.getErrorMsg(e);
            if(StringUtils.isBlank(msg)){
                msg = "未知错误";
            }
            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
            return R.fail(msg);
        //    ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
        }
        return R.status(true);
    }
    /***
     * é›†å›¢ç å¯¼å…¥
     * @param codeClassifyOid
     * @param file
     * @param response
     * @return
     */
    @PostMapping("/importGroupCode")
    public R  importGroupCode(String codeClassifyOid,MultipartFile file,HttpServletResponse response){
        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + file.getOriginalFilename();
        File file1 = new File(excelFileName);
        try {
            file.transferTo(new File(excelFileName));
            mdmIOService.importGroupCode(codeClassifyOid,file1);
            return R.success("操作成功!");
        }catch (Throwable e) {
            logger.error("导入错误",e);
            String errorFile = LocalFileUtil.getDefaultTempFolder() + File.separator + "错误.txt";
            LocalFileUtil.writeContentToFile(LangBaseUtil.getErrorMsg(e),errorFile);
            String uuid=ControllerUtil.putErrorFile(errorFile);
            CodeImProtRusultVO codeImProtRusultVO =new CodeImProtRusultVO();
            codeImProtRusultVO.setRedisUuid("");
            codeImProtRusultVO.setFileOid(uuid);
            codeImProtRusultVO.setFilePath(errorFile);
            R r = R.fail("导入失败");
            r.setData(codeImProtRusultVO);
            return r;
        }finally {
            file1.delete();
        }
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java
@@ -143,4 +143,13 @@
     * @return
     */
    String exportGroupCodeExcel(String classOid) throws ServiceException;
    /**
     * é›†å›¢ç å¯¼å…¥
     * @param codeClassifyOid
     * @param file
     * @return
     * @throws ServiceException
     */
    public String importGroupCode(String codeClassifyOid, File file) throws Throwable;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -31,6 +31,7 @@
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;
@@ -59,6 +60,7 @@
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.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -821,7 +823,7 @@
            //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)){
@@ -1094,7 +1096,7 @@
                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)) {
@@ -1615,7 +1617,7 @@
            //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)){
@@ -2102,7 +2104,7 @@
            //最后弄组合规则
            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)){
@@ -2308,7 +2310,7 @@
        //最后弄组合规则
        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();
@@ -4241,7 +4243,7 @@
     * @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);
@@ -4288,6 +4290,12 @@
                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()){
@@ -4296,7 +4304,7 @@
                    List<BaseModel> newCboList = new ArrayList<>();
                    newDataList.stream().forEach(stringStringMap -> {
                        BaseModel baseModel=new BaseModel();
                        DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel);
                        DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,true);
                        baseModel.setData(stringStringMap);
                        newCboList.add(baseModel);
                    });
@@ -4522,7 +4530,7 @@
        List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
        oldDataMap.stream().forEach(dataMap->{
            ClientBusinessObject clientBusinessObject=new ClientBusinessObject();
            DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject);
            DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,true);
            for (String key:dataMap.keySet()){
                Object value= dataMap.getOrDefault(key,"");
                clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString());
@@ -4974,7 +4982,7 @@
     * @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();
@@ -4985,8 +4993,8 @@
        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<>();
@@ -5006,9 +5014,7 @@
        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);
@@ -5086,7 +5092,9 @@
     * @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);
@@ -5096,14 +5104,14 @@
            throw new ServiceException("为了保证系统的稳定性,请一次不要导入超过1万条的数据");
        }
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
        CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
        //除去默认的属性.还有只有表单显示的字段才导入
        //获取最新的模板
        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);        //除去默认的属性.还有只有表单显示的字段才导入
        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && 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));
@@ -5112,28 +5120,219 @@
        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<>();
                cboList.stream().forEach(clientBusinessObject -> {
                    BaseModel newBaseModel=new BaseModel();
                    DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(clientBusinessObject.getData(),newBaseModel,true);
                    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<>();
        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));
            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);
                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()) && 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
@@ -5142,8 +5341,10 @@
     */
    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) + "列的标题在系统中不存在");
@@ -5156,8 +5357,8 @@
                } catch (VciBaseException e) {
                    log.error("设置属性的值错误", e);
                }
                cboList.add(cbo);
            });
            cboList.add(cbo);
        });
    }
    /***
@@ -5205,16 +5406,19 @@
        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);
            }
        }
@@ -5227,7 +5431,7 @@
     * @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();
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -2297,7 +2297,7 @@
        List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
        oldDataMap.stream().forEach(dataMap->{
            ClientBusinessObject clientBusinessObject=new ClientBusinessObject();
            DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject);
            DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,true);
            for (String key:dataMap.keySet()){
                Object value= dataMap.getOrDefault(key,"");
                clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString());