1、主要对对批量保存流程执行页面修改的内容接口与修改主题库数据接口的测试,以及对升版接口的移植及调试
已修改6个文件
371 ■■■■■ 文件已修改
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -14,6 +14,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class BaseModel implements Serializable {
    @JsonSerialize(
@@ -108,7 +109,7 @@
    private String secretGradeText;
    @TableField(exist = false)
    private Map<String, String> data;
    private Map<String, String> data = new HashMap<>();
    public BaseModel() {
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -51,4 +51,12 @@
     */
    Integer deleteByTaleAndOid(String tableName,String oids);
    /**
     * 传入表名,nameoid获取新的版本号等
     * @param tableName
     * @param nameoid
     * @return
     */
    Map<String,Object> getNextRevision(@Param("tableName")String tableName,@Param("nameoid") String nameoid);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -103,7 +103,7 @@
     * @param cboList    数据的内容
     */
    void batchSaveSelectChar(CodeClassifyTemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
                             List<String> cboList);
                             List<BaseModel> cboList);
    /**
     * 使用模板的主键获取表单的信息
@@ -418,14 +418,15 @@
     * @param attrName 属性的名字
     * @return true 表示应该忽略
     */
    default boolean checkUnAttrUnEdit(String attrName){
        return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
            ||"ts".equalsIgnoreCase(attrName)
            || "lastmodifier".equalsIgnoreCase(attrName)
            || "lastmodifytime".equalsIgnoreCase(attrName)
            || "createtime".equalsIgnoreCase(attrName)
            || "checkintime".equalsIgnoreCase(attrName)
            ||"checkouttime".equalsIgnoreCase(attrName));
    }
    boolean checkUnAttrUnEdit(String attrName);
//    {
//        return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
//            ||"ts".equalsIgnoreCase(attrName)
//            || "lastmodifier".equalsIgnoreCase(attrName)
//            || "lastmodifytime".equalsIgnoreCase(attrName)
//            || "createtime".equalsIgnoreCase(attrName)
//            || "checkintime".equalsIgnoreCase(attrName)
//            ||"checkouttime".equalsIgnoreCase(attrName));
//    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.corba.se.impl.orbutil.ObjectUtility;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
@@ -69,15 +70,21 @@
import javax.annotation.Resource;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
@@ -118,7 +125,7 @@
    @Resource
    ISysClient iSysClient;
    /**
     * 系统的服务
     * 密级服务
     */
    @Resource
    private IWebSecretClient secretService;
@@ -434,11 +441,11 @@
        List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(),cboList);
        List<String> charList = new ArrayList<>();
        for (BaseModel baseModel : cboList) {
            charList.add(baseModel.getId());
        }
        batchSaveSelectChar(templateVO, charList);
//        List<String> charList = new ArrayList<>();
//        for (BaseModel baseModel : cboList) {
//            charList.add(baseModel.getId());
//        }
        batchSaveSelectChar(templateVO, cboList);
        return codeList.size() > 0 ? codeList.get(0) : "";
//        return null;
    }
@@ -662,7 +669,7 @@
            } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
                sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
            }
            sql[0] += " and islastR = '1' and islastV = '1' ";
            sql[0] += " and lastR = '1' and lastV = '1' ";
//            if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
            if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
                String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}";
@@ -957,7 +964,7 @@
     */
    @Override
    public void batchSaveSelectChar(CodeClassifyTemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
                                    List<String> cboList) {
                                    List<BaseModel> cboList) {
        if (templateVO != null && !CollectionUtils.isEmpty(cboList)) {
            //是异步的,所以直接循环
            List<CodeClassifyTemplateAttrVO> selectAttrVOs = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getLibraryIdentification())).collect(Collectors.toList());
@@ -965,13 +972,26 @@
            if (!CollectionUtils.isEmpty(selectAttrVOs)) {
//                SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
                selectAttrVOs.parallelStream().forEach(attrVO -> {
                    List<String> valuesList = cboList;
//                    cboList.parallelStream().forEach(cbo -> {
                    List<String> valuesList = new ArrayList<>();
                    cboList.parallelStream().forEach(cbo -> {
//                        String value = cbo.get.getAttributeValue(attrVO.getId());
//                        if (StringUtils.isNotBlank(value)) {
//                            valuesList.add(value);
//                        }
                        //将bean转为map,mybatis统一处理
                        Map<String,String> map = null;
//                        baseModels.stream().forEach(model-> {
                        try {
                            map = VciBaseUtil.convertBean2Map(cbo);
                        } catch (Exception e) {
                            throw new VciBaseException("类型转换错误:" + e.getMessage());
                        }
//                    });
                        String value = map.get(attrVO.getId());
                        if (StringUtils.isNotBlank(value)) {
                            valuesList.add(value);
                        }
                    });
                    if (!CollectionUtils.isEmpty(valuesList)) {
                        for (String s : valuesList) {
                            DictBiz dictBiz = new DictBiz();
@@ -1989,12 +2009,15 @@
//        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        //找业务类型,然后使用主键去获取数据库里的数据
//        List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getOid()));
        List<BaseModel> cbos = selectByTypeAndOid(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), orderDTO.getOid());
        QueryWrapper<CodeWupin> btmWrapper = new QueryWrapper<>();
        btmWrapper.eq("OID",orderDTO.getOid());
        CodeWupin cbo = codeWupinMapper.selectOne(btmWrapper);
        if (CollectionUtils.isEmpty(cbos)) {
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
//        QueryWrapper<CodeWupin> btmWrapper = new QueryWrapper<>();
//        btmWrapper.eq("OID",orderDTO.getOid());
//        CodeWupin cbo = codeWupinMapper.selectOne(btmWrapper);
        BaseModel cbo = cbos.get(0);
//        CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
//        CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
@@ -2032,7 +2055,7 @@
        cbo.setDescription(orderDTO.getDescription());
        cbo.setName(orderDTO.getName());
        try {
            cbo.setDescription(orderDTO.getDescription());
            cbo.setDescription( StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
            cbo.setName(orderDTO.getName());
////            cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
//            cbo.setAttributeValue("name", orderDTO.getName());
@@ -2040,8 +2063,9 @@
            e.printStackTrace();
        }
        cbo.setLastModifyTime(new Date());
        cbo.setLastModifier(AuthUtil.getUser().getUserName());
        codeWupinMapper.updateById(cbo);
        cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
        updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), Collections.singletonList(cbo));
//        codeWupinMapper.updateById(cbo);
//
//        List<CodeWupinEntity> cboList = new ArrayList<>();
//
@@ -2067,7 +2091,8 @@
//        List<ClientBusinessObject> cboList = new ArrayList<>();
//        cboList.add(cbo);
//        boService.persistenceBatch(batchCBO);
        batchSaveSelectChar(templateVO, Arrays.asList(cbo.getId()));
        batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
//        batchSaveSelectChar(templateVO, Arrays.asList(cbo.getId()));
    }
    /**
@@ -2235,67 +2260,77 @@
     */
    @Override
    public R batchUpdateCode(List<CodeOrderDTO> orderDTOList) {
//        VciBaseUtil.alertNotNull(orderDTOList,"编码申请相关的属性内容");
//        orderDTOList.forEach(orderDTO -> {
//            VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性的内容都为空", orderDTO.getOid(), "数据主键",
//                orderDTO.getCodeClassifyOid(), "主题库分类的主键");
//        });
//        Map<String, CodeOrderDTO> orderDTOMap = orderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
//        List<ClientBusinessObject> updateList = new ArrayList<>();
//        // 应该都是一个分类下的业务数据,找第一条的就行
//        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid());
        VciBaseUtil.alertNotNull(orderDTOList,"编码申请相关的属性内容");
        orderDTOList.forEach(orderDTO -> {
            VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性的内容都为空", orderDTO.getOid(), "数据主键",
                orderDTO.getCodeClassifyOid(), "主题库分类的主键");
        });
        Map<String, CodeOrderDTO> orderDTOMap = orderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
        List<BaseModel> updateList = new ArrayList<>();
        // 应该都是一个分类下的业务数据,找第一条的就行
        CodeClassifyFullInfoBO topClassifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid());
//        Map<String,String> cboOidMap = new HashMap<>();
//        if (CollectionUtils.isEmpty(orderDTOMap.keySet())){
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
        if (CollectionUtils.isEmpty(orderDTOMap.keySet())){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
        List<BaseModel> cboList = selectByTypeAndOid(topClassifyFullInfo.getTopClassifyVO().getBtmtypeid(), VciBaseUtil.array2String(orderDTOMap.keySet().toArray(new String[0])));
//        cboOidMap.put("oid",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(orderDTOMap.keySet().toArray(new String[0])) + ")");
//        List<ClientBusinessObject> cboList = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), cboOidMap);
//        if (CollectionUtils.isEmpty(cboList)){
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
        if (CollectionUtils.isEmpty(cboList)){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
//        BatchCBO batchCBO = new BatchCBO();
//        CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
//        Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
//        orderDTOMap.keySet().stream().forEach(oid -> {
//            CodeOrderDTO orderDTO = orderDTOMap.get(oid);
//            ClientBusinessObject cbo = cboMap.get(oid);
//            if (!cbo.getTs().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
//                throw new VciBaseException("数据不是最新的,可能他人已经修改,请刷新后再试");
//            }
//            if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
//                throw new VciBaseException("数据不是{0}的状态,不允许修改", new String[]{CodeDefaultLC.EDITING.getText()});
//            }
//            //1. 判断必输项
//            CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
//            checkRequiredAttrOnOrder(templateVO, orderDTO);
//            //2.先注入,再组合,最后校验
//            switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
//            //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
//            switchComponentAttrOnOrder(templateVO, orderDTO);
//            //4.校验规则
//            checkVerifyOnOrder(templateVO, orderDTO);
//            //5.判断关键属性
//            checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
//            //6.校验枚举的内容是否正确
//            checkEnumOnOrder(templateVO, orderDTO);
//            //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
//            switchDateAttrOnOrder(templateVO, orderDTO);
//            //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
//            copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
//            //企业码和集团码的不修改
//            cbo.setDescription(orderDTO.getDescription());
//            cbo.setName(orderDTO.getName());
        Map<String, BaseModel> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
        orderDTOMap.keySet().stream().forEach(oid -> {
            CodeOrderDTO orderDTO = orderDTOMap.get(oid);
            CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
            CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
            BaseModel cbo = cboMap.get(oid);
            String code=cbo.getId();
            if (!cbo.getTs().toString().contains(orderDTO.getTs().toString())) {
                throw new VciBaseException("数据不是最新的,可能他人已经修改,请刷新后再试");
            }
            if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
                throw new VciBaseException("数据不是{0}的状态,不允许修改", new String[]{CodeDefaultLC.EDITING.getText()});
            }
            //1. 判断必输项
            CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
            checkRequiredAttrOnOrder(templateVO, orderDTO);
            //2.先注入,再组合,最后校验
            switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
            //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
            switchComponentAttrOnOrder(templateVO, orderDTO);
            //4.校验规则
            checkVerifyOnOrder(templateVO, orderDTO);
            //5.判断关键属性
            checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
            //6.校验枚举的内容是否正确
            checkEnumOnOrder(templateVO, orderDTO);
            //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
            switchDateAttrOnOrder(templateVO, orderDTO);
            //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
            copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
            //企业码和集团码的不修改
            cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
            cbo.setName(orderDTO.getName());
//            try {
//                cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
//                cbo.setAttributeValue("id",code);
            cbo.setId(code);
            cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
//                cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
//                cbo.setAttributeValue("name", orderDTO.getName());
            cbo.setName(orderDTO.getName());
//            } catch (VCIError e) {
//                e.printStackTrace();
//            }
//            batchCBO.getUpdateCbos().add(cbo);
//            updateList.add(cbo);
//        });
            updateList.add(cbo);
            batchSaveSelectChar(firstTemplateVO, cboList);
        });
//        boService.persistenceBatch(batchCBO);
//        batchSaveSelectChar(firstTemplateVO, cboList);
        updateBatchByBaseModel(topClassifyFullInfo.getTopClassifyVO().getBtmtypeid(),updateList);
        return R.success("操作成功!");
    }
@@ -2378,64 +2413,76 @@
     */
    @Override
    public void upSaveCode(CodeOrderDTO orderDTO) {
        VciBaseUtil.alertNotNull(orderDTO, "编码数据所在业务类名称", orderDTO.getBtmname());
        String btmName=orderDTO.getBtmname();
        //找业务类型,然后使用主键去获取数据库里的数据
        List<BaseModel> cbos = selectByTypeAndOid(btmName, orderDTO.getCopyFromVersion());
        if (CollectionUtils.isEmpty(cbos)) {
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
        BaseModel oldCbo = cbos.get(0);
        if (!CodeDefaultLC.RELEASED.getValue().equalsIgnoreCase(oldCbo.getLcStatus())) {
            throw new VciBaseException("数据不是{0}的状态,不允许数据更改", new String[]{CodeDefaultLC.RELEASED.getText()});
        }
        //根据数据获取分类oid
        String codeClassifyOid=oldCbo.getData().get(CODE_CLASSIFY_OID_FIELD.toUpperCase());
        orderDTO.setCodeClassifyOid(codeClassifyOid);
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        CodeClassifyTemplateVO templateVO= this.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
        orderDTO.setTemplateOid(templateVO.getOid());
        VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性的内容为空", orderDTO.getCopyFromVersion(), "原始数据的主键",
            orderDTO.getCodeClassifyOid(), "主题库分类的主键");
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        //找业务类型,然后使用主键去获取数据库里的数据
//        List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getCopyFromVersion()));
//        if (CollectionUtils.isEmpty(cbos)) {
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
//        ClientBusinessObject oldCbo = cbos.get(0);
//        if (!CodeDefaultLC.RELEASED.getValue().equalsIgnoreCase(oldCbo.getLcStatus())) {
//            throw new VciBaseException("数据不是{0}的状态,不允许数据更改", new String[]{CodeDefaultLC.RELEASED.getText()});
//        }
//        //需要升版
        //需要升版
//        ClientBusinessObjectOperation cboOperation = new ClientBusinessObjectOperation();
//        ClientBusinessObject cbo = null;
        BaseModel cbo = null;
//        try {
//            //cbo = cboOperation.createBusinessObjectVersion(oldCbo,VciBaseUtil.getCurrentUserId());
//            cbo = cboOperation.reviseBusinessObject(oldCbo, "");
        cbo = reviseBusinessObject(oldCbo);
//        } catch (VCIError e) {
//            throw new VciBaseException("初始化相关的内容出现了错误", new String[0], e);
//        }
//        //1. 判断必输项
        //1. 判断必输项
//        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
//        checkRequiredAttrOnOrder(templateVO, orderDTO);
//        //2.先注入,再组合,最后校验
//        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
//        //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
//        switchComponentAttrOnOrder(templateVO, orderDTO);
//        //4.校验规则
//        checkVerifyOnOrder(templateVO, orderDTO);
//        //5.判断关键属性
//        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
//        //6.校验枚举的内容是否正确
//        checkEnumOnOrder(templateVO, orderDTO);
//        //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
//        switchDateAttrOnOrder(templateVO, orderDTO);
//        //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
//        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
//        //企业码和集团码的不修改
//        cbo.setDescription(orderDTO.getDescription());
//        cbo.setName(orderDTO.getName());
        checkRequiredAttrOnOrder(templateVO, orderDTO);
        //2.先注入,再组合,最后校验
        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
        //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
        switchComponentAttrOnOrder(templateVO, orderDTO);
        //4.校验规则
        checkVerifyOnOrder(templateVO, orderDTO);
        //5.判断关键属性
        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
        //6.校验枚举的内容是否正确
        checkEnumOnOrder(templateVO, orderDTO);
        //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
        switchDateAttrOnOrder(templateVO, orderDTO);
        //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
        //企业码和集团码的不修改
        cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
        cbo.setName(orderDTO.getName());
//        try {
//            cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
//            cbo.setAttributeValue("name", orderDTO.getName());
        cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
//        cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
        cbo.setName(orderDTO.getName());
//        } catch (VCIError e) {
//            e.printStackTrace();
//        }
//        //数据的时候,编码是不变的
//        cbo.setCreateTime(DateUtils.convert2String(new Date(Long.parseLong(cbo.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
//        cbo.setLastModifyTime(DateUtils.convert2String(new Date(Long.parseLong(cbo.getLastModifyTime())), "yyyy-MM-dd HH:mm:ss"));
        //数据的时候,编码是不变的
        cbo.setCreateTime(cbo.getCreateTime());
        cbo.setLastModifyTime(cbo.getLastModifyTime());
//        List<ClientBusinessObject> cboList = new ArrayList<>();
//        cboList.add(cbo);
//        try {
        try {
//            cboOperation.saveRevisionBuinessObject(cbo);
//        } catch (VCIError vciError) {
//            throw new VciBaseException("数据更改保存出错了", new String[0], vciError);
//        }
//        batchSaveSelectChar(templateVO, cboList);
            insertBatchByType(cbo.getBtmname(), Collections.singletonList(cbo));
        } catch (Exception vciError) {
            throw new VciBaseException("数据更改保存出错了", new String[0], vciError);
        }
        batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
    }
    /**
@@ -3358,4 +3405,45 @@
        return "pl_code_"+refertype.trim().toLowerCase();
    }
    public BaseModel reviseBusinessObject(BaseModel fromBo) {
        BaseModel toBo = new BaseModel();
//        Map<String,String> data = new HashMap<>();
//        toBo.getData().put(data);
        toBo.setOid(VciBaseUtil.getPk());
        toBo.setRevisionOid(VciBaseUtil.getPk());
        toBo.setNameOid(fromBo.getNameOid());
        toBo.setBtmname(fromBo.getBtmname());
        toBo.setLastR(String.valueOf(1));
        toBo.setFirstR(String.valueOf(0));
        toBo.setFirstV(String.valueOf(1));
        toBo.setLastV(String.valueOf(1));
        toBo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setCreateTime(new Date());
        toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setLastModifyTime(new Date());
        toBo.setRevisionRule(fromBo.getRevisionRule());
        toBo.setVersionRule(fromBo.getVersionRule());
//        RevisionValueObject rvObj = this.getNextRevision(fromBo.getBtmName(), fromBo.getNameoid(), item.revRuleName, item.revInput, revisionVal);
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(fromBo.getBtmname()));
        Map<String, Object> nextRevision = commonsMapper.getNextRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid());
        toBo.setRevisionSeq(Integer.parseInt(nextRevision.get("REVISIONSEQ").toString()));
        toBo.setRevisionValue(nextRevision.get("REVISIONVAL").toString());
//        VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
        toBo.setVersionSeq(Integer.valueOf(nextRevision.get("VERSIONSEQ").toString()));
        toBo.setVersionValue(nextRevision.get("VERSIONVAL").toString());
        toBo.setLctid(fromBo.getLctid());
        toBo.setLcStatus("Editing");
        toBo.setId(fromBo.getId());
        toBo.setName(fromBo.getName());
        toBo.setDescription(fromBo.getDescription());
        toBo.setOwner(String.valueOf(AuthUtil.getUser().getUserId()));
//        toBo.setCheckinBy(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setCopyFromVersion(fromBo.getOid());
        toBo.getData().putAll(fromBo.getData());
        toBo.getData().put("CHECKINBY",String.valueOf(AuthUtil.getUser().getUserId()));
//        this.initRevisionTypeAttributeValue(fromBo, toBo);
        return toBo;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -997,7 +997,7 @@
            if (isExport||newErrorMap.size() > 0) {
                createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true);
            } else {
                List<String> dataCBOIdList=new ArrayList<>();
                List<BaseModel> dataCBOIdList=new ArrayList<>();
                //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
                List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList;
                CodeClassifyTemplateVO finalTemplateVO = templateVO;
@@ -1011,7 +1011,7 @@
                        BeanUtil.convert(clientBusinessObject,baseModel);
                        baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
                        dataCBOList.add(baseModel);
                        dataCBOIdList.add(baseModel.getOid());
                        dataCBOIdList.add(baseModel);
                    });
                    if (!CollectionUtils.isEmpty(thisCbos)) {
@@ -1338,7 +1338,7 @@
                try {
                    codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList);
                    //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                    engineService.batchSaveSelectChar(templateVO, dataCBOIdList);
                    engineService.batchSaveSelectChar(templateVO, dataCBOList);
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("批了申请时失败");
@@ -1427,7 +1427,7 @@
    @Override
    public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) {
        List<String> allNeedSaveCboList=new ArrayList<>();
        List<BaseModel> dataCBOList=new ArrayList<>();
        codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> {
            List<SheetRowData> rowDataList = new ArrayList<>();
            List<ClientBusinessObject>cboList=new ArrayList<>();
@@ -1517,13 +1517,13 @@
            log.info("分类:"+classifyFullInfo.getCurrentClassifyVO().getName()+"数据:"+needSaveCboList.size());
            if (!CollectionUtils.isEmpty(needSaveCboList)) {
                List<BaseModel> dataCBOList=new ArrayList<>();
//                List<BaseModel> dataCBOList=new ArrayList<>();
                needSaveCboList.stream().forEach(clientBusinessObject -> {
                    BaseModel baseModel=new BaseModel();
                    BeanUtil.convert(clientBusinessObject,baseModel);
                    baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
                    dataCBOList.add(baseModel);
                    allNeedSaveCboList.add(baseModel.getOid());
//                    allNeedSaveCboList.add(baseModel);
                });
                try {
                //9.我们处理业务数据
@@ -1537,7 +1537,7 @@
                }
            }
            //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
            engineService.batchSaveSelectChar(codeClassifyTemplateVO, allNeedSaveCboList);
            engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
        });
        return  R.success(isImprot?"批量历史导入成功":"批量申请成功");
    }
@@ -1802,7 +1802,7 @@
            try {
                productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
                //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                engineService.batchSaveSelectChar(templateVO, allNeedSaveCboList);
                engineService.batchSaveSelectChar(templateVO, dataCBOList);
                // if(!isProcess){
                needSaveCboList.stream().forEach(needSaveCbo->{
                    XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -63,4 +63,13 @@
        END;
    </update >
    <select id="getNextRevision" resultType="map" >
        select max(revisionSeq) + 1 revisionSeq,
               max(RevisionValue) + 1 revisionVal,
               max(VersionSeq) + 1 VersionSeq,
               max(VersionValue) + 1 VersionVal
        from ${tableName}
        where nameoid = #{nameoid}
    </select>
</mapper>