xiejun
2023-07-05 b04005e136d7de620bb66660cc268f5750ca7b42
集成接口保存
已修改8个文件
已删除1个文件
已添加2个文件
633 ■■■■ 文件已修改
.idea/workspace.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/classify/LibraryVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeRuleVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionValueVO.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultClassifyRuleVO.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultClassifyVO.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultCodeRuleVO.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/result.json 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 163 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml
@@ -2,10 +2,12 @@
<project version="4">
  <component name="ChangeListManager">
    <list default="true" id="16f0b01c-a58c-44dd-9719-cb51eacd47bf" name="Default Changelist" comment="增加树参照组件">
      <change afterPath="$PROJECT_DIR$/Source/UBCS-WEB/src/api/refer/tree.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/Source/UBCS-WEB/src/components/refer/vciWebRefer.vue" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/Source/UBCS-WEB/src/components/FormTemplate/index.vue" beforeDir="false" afterPath="$PROJECT_DIR$/Source/UBCS-WEB/src/components/FormTemplate/index.vue" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeRuleVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeRuleVO.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionVO.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionValueVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionValueVO.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultClassifyVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultClassifyVO.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java" afterDir="false" />
    </list>
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -25,9 +27,14 @@
    <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
    <property name="WebServerToolWindowFactoryState" value="false" />
    <property name="aspect.path.notification.shown" value="true" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$/Source/UBCS" />
    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
    <property name="project.structure.last.edited" value="Project" />
    <property name="project.structure.proportion" value="0.0" />
    <property name="project.structure.side.proportion" value="0.0" />
  </component>
  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="16f0b01c-a58c-44dd-9719-cb51eacd47bf" name="Default Changelist" comment="" />
@@ -36,9 +43,13 @@
      <option name="presentableId" value="Default" />
      <updated>1679912923408</updated>
      <workItem from="1679912925465" duration="56000" />
      <workItem from="1688456866976" duration="772000" />
    </task>
    <servers />
  </component>
  <component name="TypeScriptGeneratedFilesManager">
    <option name="version" value="3" />
  </component>
  <component name="VcsManagerConfiguration">
    <MESSAGE value="增加树参照组件" />
    <option name="LAST_COMMIT_MESSAGE" value="增加树参照组件" />
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/classify/LibraryVO.java
@@ -6,7 +6,7 @@
import java.util.List;
@XStreamAlias("library ")
@XStreamAlias("library")
public class LibraryVO {
    @XStreamAsAttribute
    private String id;
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeRuleVO.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionVO.java
@@ -67,7 +67,7 @@
    /***
     * ç æ®µç å€¼
     */
    private List<CodeSectionValueVO> sectionValues;
    private List<CodeSectionValueVO> sectionValue;
    /**
     * æ—¥æœŸæ ¼å¼
     */
@@ -146,6 +146,22 @@
        this.codeDateFormatStr = codeDateFormatStr;
    }
    public String getParentClassifySecOid() {
        return parentClassifySecOid;
    }
    public void setParentClassifySecOid(String parentClassifySecOid) {
        this.parentClassifySecOid = parentClassifySecOid;
    }
    public List<CodeSectionValueVO> getSectionValue() {
        return sectionValue;
    }
    public void setSectionValue(List<CodeSectionValueVO> sectionValue) {
        this.sectionValue = sectionValue;
    }
    @Override
    public String toString() {
        return "CodeSectionVO{" +
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/CodeSectionValueVO.java
@@ -1,19 +1,38 @@
package com.vci.ubcs.code.vo.webserviceModel.coderule;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("sectionValue")
public class CodeSectionValueVO {
    public CodeSectionValueVO() {
    }
    public CodeSectionValueVO(String id, String num, String value,String name ,String description) {
        this.id = id;
        this.num = num;
        this.value = value;
        this.description = description;
    }
    /***
     * ç å€¼ä¸»é”®
     */
    @XStreamAsAttribute
    private String id;
    /***
     * ç å€¼ç¼–号
     */
    @XStreamAsAttribute
    private String num;
    @XStreamAsAttribute
    private String name;
    /***
     * ç æ®µå€¼
     */
    @XStreamAsAttribute
    private String value;
    /**
@@ -21,4 +40,55 @@
     */
    @XStreamAsAttribute
    private String description;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "CodeSectionValueVO{" +
            "id='" + id + '\'' +
            ", num='" + num + '\'' +
            ", name='" + name + '\'' +
            ", value='" + value + '\'' +
            ", description='" + description + '\'' +
            '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultClassifyRuleVO.java
@@ -2,20 +2,21 @@
public class ResultClassifyRuleVO {
   private ResultClassifyRuleData resultData;
   private ResultClassifyRuleData data;
    public ResultClassifyRuleData getResultData() {
        return resultData;
    }
    public void setResultData(ResultClassifyRuleData resultData) {
        this.resultData = resultData;
    }
    public ResultClassifyRuleData getData() {
        return data;
    }
    @Override
    public String toString() {
        return "ResultClassifyVO{" +
                "resultData=" + resultData +
                '}';
    }
    public void setData(ResultClassifyRuleData data) {
        this.data = data;
    }
    @Override
    public String toString() {
        return "ResultClassifyRuleVO{" +
            "data=" + data +
            '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultClassifyVO.java
@@ -50,7 +50,7 @@
     * è§„则id
     */
    @XStreamAsAttribute
    private CodeRuleVO codeRuleVO;
    private ResultCodeRuleVO codeRule;
    /***
     * æ˜¯å¦ä¸ºå¶å­èŠ‚ç‚¹
     */
@@ -129,9 +129,17 @@
        isLeaf = leaf;
    }
    public ResultCodeRuleVO getCodeRule() {
        return codeRule;
    }
    public void setCodeRule(ResultCodeRuleVO codeRule) {
        this.codeRule = codeRule;
    }
    @Override
    public String toString() {
        return "ClassifyVO{" +
        return "ResultClassifyVO{" +
            "id='" + id + '\'' +
            ", name='" + name + '\'' +
            ", pid='" + pid + '\'' +
@@ -140,6 +148,7 @@
            ", fullPathName='" + fullPathName + '\'' +
            ", lcStatus='" + lcStatus + '\'' +
            ", codeRuleId='" + codeRuleId + '\'' +
            ", codeRule=" + codeRule +
            ", isLeaf=" + isLeaf +
            '}';
    }
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/ResultCodeRuleVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.vci.ubcs.code.vo.webserviceModel.coderule;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;
@XStreamAlias("codeRule")
public class ResultCodeRuleVO {
    /**
     * ç¼–码规则的编号
     */
    @XStreamAsAttribute
    private String id;
    /**
     * è§„则编号
     */
    @XStreamAsAttribute
    private String num;
    /**
     * ç¼–码规则的名称
     */
    @XStreamAsAttribute
    private String name;
    /**
     * è§„则的描述
     */
    @XStreamAsAttribute
    private String description;
    /**
     * ç¼–码的码段信息
     */
    @XStreamImplicit
    private List<CodeSectionVO> codeSection;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getNum() {
        return num;
    }
    public void setNum(String num) {
        this.num = num;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public List<CodeSectionVO> getCodeSection() {
        return codeSection;
    }
    public void setCodeSection(List<CodeSectionVO> codeSection) {
        this.codeSection = codeSection;
    }
    @Override
    public String toString() {
        return "CodeRuleVO{" +
            "id='" + id + '\'' +
            ", num='" + num + '\'' +
            ", name='" + name + '\'' +
            ", description='" + description + '\'' +
            ", codeSection=" + codeSection +
            '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/coderule/result.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
{
  "resultData": {
    "msg": "成功!",
    "library": {
      "classify": [
        {
          "classCode": "020202",
          "lcStatus": "Enabled",
          "name": "口盖",
          "description": "口盖",
          "pid": "0C600A6A-6398-FC30-D13E-121201FDA908",
          "codeRule": {
            "num": "001-copy",
            "description": "物品编码规则",
            "codeSection": [
              {
                "sectionValue": [
                  {
                    "num": "0",
                    "id": "B6C55202-A224-9098-6A82-E3FC5DEEF790",
                    "value": "020202"
                  }
                ],
                "num": "01",
                "codeSecLengthType": "code_sec_length_variable",
                "name": "层级码段",
                "secType": "codelevelsec",
                "id": "1674682431208296448",
                "pkCodeRule": "9FE2AF3E-2940-BD80-D46F-E3853314673D"
              },
              {
                "sectionValue": [],
                "num": "02",
                "name": "流水码段",
                "description": "流水码段",
                "secType": "codeserialsec",
                "id": "801B6412-E617-214A-08A5-9EDF5821AA66",
                "pkCodeRule": "9FE2AF3E-2940-BD80-D46F-E3853314673D",
                "codeSecLength": "4"
              }
            ],
            "id": "9FE2AF3E-2940-BD80-D46F-E3853314673D"
          },
          "id": "B6C55202-A224-9098-6A82-E3FC5DEEF790",
          "leaf": false
        },
        {
          "classCode": "020201",
          "lcStatus": "Enabled",
          "name": "锁",
          "description": "锁",
          "pid": "0C600A6A-6398-FC30-D13E-121201FDA908",
          "codeRule": {
            "num": "001-copy",
            "description": "物品编码规则",
            "codeSection": [
              {
                "sectionValue": [
                  {
                    "num": "0",
                    "id": "46B5DB5E-F783-DFE9-B48A-C4A367D02AC0",
                    "value": "020201"
                  }
                ],
                "num": "01",
                "codeSecLengthType": "code_sec_length_variable",
                "name": "层级码段",
                "secType": "codelevelsec",
                "id": "1674682431208296448",
                "pkCodeRule": "9FE2AF3E-2940-BD80-D46F-E3853314673D"
              },
              {
                "sectionValue": [],
                "num": "02",
                "name": "流水码段",
                "description": "流水码段",
                "secType": "codeserialsec",
                "id": "801B6412-E617-214A-08A5-9EDF5821AA66",
                "pkCodeRule": "9FE2AF3E-2940-BD80-D46F-E3853314673D",
                "codeSecLength": "4"
              }
            ],
            "id": "9FE2AF3E-2940-BD80-D46F-E3853314673D"
          },
          "id": "46B5DB5E-F783-DFE9-B48A-C4A367D02AC0",
          "leaf": false
        }
      ],
      "name": "",
      "id": "wupin"
    },
    "errorid": "0"
  }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -38,10 +38,7 @@
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.KeyValue;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import com.vci.ubcs.starter.web.pagemodel.UIFormReferVO;
import com.vci.ubcs.starter.web.pagemodel.*;
import com.vci.ubcs.starter.web.toolmodel.DateConverter;
import com.vci.ubcs.starter.web.util.*;
import lombok.AllArgsConstructor;
@@ -1451,7 +1448,8 @@
    @Override
    public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) {
        List<BaseModel> dataCBOList=new ArrayList<>();
        boolean success=true;
        codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> {
            List<SheetRowData> rowDataList = new ArrayList<>();
            List<ClientBusinessObject>cboList=new ArrayList<>();
@@ -1490,19 +1488,31 @@
            String fullPath = getFullPath(classifyFullInfo);
            excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot);
            Map<String,String> errorMap=new HashMap<>();
            Map<String/**路径**/, CodeClassifyVO> pathMap=new HashMap<>() ;
            //校验编码规则和码段是否正确
            Map<String, List<String>> ruleRowIndexMap = new ConcurrentHashMap<>();
            Map<String, CodeRuleVO> ruleVOMap =new ConcurrentHashMap<>();
            if(isImprot) {
                Map<String/**主键**/, String/**路径**/> childOidPathMap = getChildClassifyPathMap(classifyFullInfo, fullPath);
                //都转换完了。需要批量检查
                //找所有的分类路径,需要校验路径是否正确,是否都在当前的分类的下级
                List<CodeClassifyVO> childClassifyVOs = classifyService.listChildrenClassify(orderDTO.getCodeClassifyOid(), true, classifyAttr, true);
                Map<String/**路径**/, CodeClassifyVO> pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
                pathMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getPath().startsWith("#") ? s.getPath().substring(1) : s.getPath(), t -> t));
                Map<String/**主键**/, CodeClassifyVO> classifyVOMap = Optional.ofNullable(childClassifyVOs).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
                classifyVOMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO());
                pathMap.put("#current#", classifyFullInfo.getCurrentClassifyVO());
                //我们需要判断这些分类的模板是不是一样的,只需要校验,不用获取
                //检查分类的路径
                checkClassifyPathInHistory(cboList, errorMap, pathMap, childOidPathMap);
                //检查规则
                Map<String/**分类主键**/, String/**规则主键**/> ruleOidMap = new ConcurrentHashMap<String, String>();
                List<String> unExistRuleClassifyOidList = new CopyOnWriteArrayList<>();
                checkRuleOidInHistory(classifyVOMap, ruleOidMap, unExistRuleClassifyOidList);
                ruleVOMap = ruleService.listCodeRuleByIds(ruleOidMap.values(), true).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
                checkSecLengthInHistory(cboList, classifyVOMap, ruleVOMap, ruleOidMap, errorMap, ruleRowIndexMap);
            }
            //分类注入
            batchSwitchClassifyAttrOnOrder(attrVOS,cboList,classifyFullInfo,isImprot);
            //boolean
@@ -1532,36 +1542,58 @@
            //4.校验规则
            batchCheckVerifyOnOrder(attrVOS, cboList,errorMap);
            //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
            List<ClientBusinessObject>needSaveCboList = cboList.stream().filter(cbo -> {
                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                return !errorMap.containsKey(rowIndex);
            }).collect(Collectors.toList());
            log.info("分类:"+classifyFullInfo.getCurrentClassifyVO().getName()+"数据:"+needSaveCboList.size());
            if (!CollectionUtils.isEmpty(needSaveCboList)) {
//                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);
                });
                try {
                //9.我们处理业务数据
                    if (isImprot) {
                        productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, null, dataCBOList);
                    }else {
                        productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
            if(isImprot){
                List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                    return !errorMap.containsKey(rowIndex);
                }).collect(Collectors.toList());
                List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList;
                Map<String, CodeRuleVO> finalRuleVOMap = ruleVOMap;
                ruleRowIndexMap.keySet().parallelStream().forEach(ruleOid -> {
                    List <BaseModel>dataCBOList=new CopyOnWriteArrayList<>();
                    List<String> rowIndexList = ruleRowIndexMap.get(ruleOid);
                    List<ClientBusinessObject> thisCbos = needSaveCboList.stream().filter(cbo -> rowIndexList.contains(cbo.getAttributeValue(IMPORT_ROW_INDEX)) && !errorMap.containsKey(cbo.getAttributeValue(IMPORT_ROW_INDEX))).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(thisCbos)) {
                        thisCbos.stream().forEach(clientBusinessObject -> {
                            BaseModel baseModel = new BaseModel();
                            BeanUtil.convert(clientBusinessObject, baseModel);
                            dataCBOList.add(baseModel);
                        });
                        try {
                            productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, finalRuleVOMap.get(ruleOid), null, dataCBOList);
                        } catch (Throwable e) {
                            //success=false;
                            log.error("批量产生编码的时候出错了", e);
                            thisCbos.stream().forEach(cbo -> {
                                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";系统错误,存储数据的时候出错了");
                            });
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
                });
            }else {
                List<BaseModel> dataCBOList=new ArrayList<>();
                List<ClientBusinessObject> needSaveCboList = cboList.stream().filter(cbo -> {
                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                    return !errorMap.containsKey(rowIndex);
                }).collect(Collectors.toList());
                log.info("分类:" + classifyFullInfo.getCurrentClassifyVO().getName() + "数据:" + needSaveCboList.size());
                if (!CollectionUtils.isEmpty(needSaveCboList)) {
                    needSaveCboList.stream().forEach(clientBusinessObject -> {
                        BaseModel baseModel = new BaseModel();
                        BeanUtil.convert(clientBusinessObject, baseModel);
                        dataCBOList.add(baseModel);
                    });
                    try {
                        productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
                }
            }
            //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
            engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
        });
        return  R.success(isImprot?"批量历史导入成功":"批量申请成功");
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -20,6 +20,11 @@
import com.vci.ubcs.code.vo.webserviceModel.attrmap.*;
import com.vci.ubcs.code.vo.webserviceModel.attrmap.DataObjectVO;
import com.vci.ubcs.code.vo.webserviceModel.classify.*;
import com.vci.ubcs.code.vo.webserviceModel.classify.QueryClassifyVO;
import com.vci.ubcs.code.vo.webserviceModel.classify.QueryData;
import com.vci.ubcs.code.vo.webserviceModel.classify.QueryLibraryVO;
import com.vci.ubcs.code.vo.webserviceModel.classify.ResultClassifyVO;
import com.vci.ubcs.code.vo.webserviceModel.coderule.*;
import com.vci.ubcs.code.vo.webserviceModel.data.*;
import com.vci.ubcs.code.vo.webserviceModel.result.json.*;
import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultClassfyVO;
@@ -48,6 +53,7 @@
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
import static com.vci.ubcs.code.constant.MdmEngineConstant.IMPORT_ROW_INDEX;
import static com.vci.ubcs.code.enumpack.CodeSecTypeEnum.CODE_CLASSIFY_SEC;
/***
@@ -480,17 +486,48 @@
                errorid = "101";
                throw new Throwable("接口参数:账号信息获取失败");
            }
            if(!CollectionUtils.isEmpty(classifyIdList)){
                //先简称是否有关联模板,有模板要先删除
                List<CodeClassify> libIdDos = classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().in(CodeClassify::getId, classifyIdList));
                codeClassifyVOS=classifyService.codeClassifyDO2VOs(libIdDos);
            }else {
                List<CodeClassify> libIdDos = classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().eq(CodeClassify::getId, libId));
                String oid= libIdDos.get(0).getOid();
                TreeQueryObject treeQueryObject=new TreeQueryObject();
                treeQueryObject.setParentOid(oid);
                treeQueryObject.setQueryAllLevel(true);
                codeClassifyVOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject);
            List<CodeClassify> libIdDos =classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().in(CodeClassify::getId, libId));
            if(CollectionUtils.isEmpty(libIdDos)) {
                CodeClassify libCodeClassify =libIdDos.get(0);
                String oid=libCodeClassify.getOid();
                if (!CollectionUtils.isEmpty(classifyIdList)) {
                    //先简称是否有关联模板,有模板要先删除
                    List<CodeClassify> childCodeClassifyList = classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().in(CodeClassify::getId, classifyIdList));
                    List<CodeClassify>newchildCodeClassifyList=new ArrayList<>();
                    if(!CollectionUtils.isEmpty(childCodeClassifyList)) {
                        Map<String,String> errorMap=new HashMap<>();
                        childCodeClassifyList.stream().forEach(codeClassify -> {
                            CodeClassifyVO toClassifyVO=    classifyService.getTopClassifyVO(codeClassify.getOid());
                            if(toClassifyVO.getOid().equals(libCodeClassify.getOid())){
                                newchildCodeClassifyList.add(codeClassify);
                            }
                        });
                        Map<String/**分类编号**/, CodeClassify/**分类对象**/> classifyfCodeMap = newchildCodeClassifyList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
                        classifyIdList.stream().forEach(classifyfCode -> {
                            if(!classifyfCodeMap.containsKey(classifyfCode)) {
                                errorMap.put("error", errorMap.getOrDefault("error", "") + ";根据classCode:【" + classifyfCode + "】在library:【" + libCodeClassify.getId() + "】下未查询到");
                            }
                        });
                        if(errorMap.size()>0){
                            errorid = "101";
                            msg = errorMap.getOrDefault("error","");
                            throw new Throwable(msg);
                        }
                        codeClassifyVOS = classifyService.codeClassifyDO2VOs(newchildCodeClassifyList);
                    }else{
                        errorid = "101";
                        msg = "接口参数:classCode æœªæŸ¥è¯¢åˆ°å¯¹åº”的分类信息";
                        throw new Throwable(msg);
                    }
                } else {
                    TreeQueryObject treeQueryObject = new TreeQueryObject();
                    treeQueryObject.setParentOid(oid);
                    treeQueryObject.setQueryAllLevel(true);
                    codeClassifyVOS = classifyService.selectCodeClassifyDOByTree(treeQueryObject);
                }
            }else{
                errorid = "101";
                throw new Throwable("接口参数:账号信息获取失败");
            }
            LibraryVO libraryVo=new LibraryVO();
            libraryVo.setId(libId);
@@ -750,9 +787,9 @@
        String systemId="";
        log.info("查询分类的数据参数:->"+data);
        log.info("查询分类的数据类型:->"+dataType);
        ResultClassifyVO resultClassifyVO =new ResultClassifyVO();
        List<ClassifyVO> classifyVOList=new ArrayList<>();
        ResultData resultData=new ResultData();
        ResultClassifyRuleVO resultClassifyRuleVO =new ResultClassifyRuleVO();
        List<com.vci.ubcs.code.vo.webserviceModel.coderule.ResultClassifyVO> classifyVOList=new ArrayList<>();
        ResultClassifyRuleData resultClassifyRuleData=new ResultClassifyRuleData();
        try {
            if (StringUtils.isBlank(data)) {
                errorid = "101";
@@ -807,14 +844,89 @@
                treeQueryObject.setQueryAllLevel(true);
                codeClassifyVOS=classifyService.selectCodeClassifyDOByTree(treeQueryObject);
            }
            LibraryVO libraryVo=new LibraryVO();
            libraryVo.setId(libId);
            libraryVo.setName("");
            ResultLibraryVO resultLibraryVO=new ResultLibraryVO();
            resultLibraryVO.setId(libId);
            resultLibraryVO.setName("");
            if(!CollectionUtils.isEmpty(codeClassifyVOS)){
                errorid = "0";
                msg="成功!";
                codeClassifyVOS.stream().forEach(codeClassifyDO -> {
                    ClassifyVO classifyVO=new ClassifyVO();
                    //后去包含码段的编码规则
                    CodeRuleVO codeRuleVO=    this.engineService.getCodeRuleByClassifyOid(codeClassifyDO.getOid());
                    ResultCodeRuleVO resultCodeRuleVO=new ResultCodeRuleVO();
                    if(codeRuleVO!=null){
                        CodeRuleVO resultClassifyRuleVO1=new CodeRuleVO();
                        List<CodeBasicSecVO>  codeBasicSecVOS=    codeRuleVO.getSecVOList();
                        List<CodeSectionVO> codeSectionVOList=new CopyOnWriteArrayList<>();
                        if(!CollectionUtils.isEmpty(codeBasicSecVOS)){
                            codeBasicSecVOS.stream().forEach(codeBasicSecVO -> {
                                List<CodeSectionValueVO> codeSectionValueVOList=new ArrayList<>();
                                String secType=    codeBasicSecVO.getSecType();
                                if(secType.equals("codevariablesec")){//可变码段
                                    CodeSectionValueVO sectionValueVO=new CodeSectionValueVO("","","","","");
                                    codeSectionValueVOList.add(sectionValueVO);
                                }else if(secType.equals("codefixedsec")){//固定码段
                                    List<CodeFixedValueVO> fixedValueVOList=codeBasicSecVO.getFixedValueVOList();
                                    fixedValueVOList.stream().forEach(codeFixedValueVO -> {
                                    CodeSectionValueVO sectionValueVO=new CodeSectionValueVO(codeFixedValueVO.getOid(),codeFixedValueVO.getOrderNum()+"",codeFixedValueVO.getId(),codeFixedValueVO.getName(),codeFixedValueVO.getDescription());
                                    codeSectionValueVOList.add(sectionValueVO);
                                    });
                                }else if(secType.equals("codeclassifysec")){//分类码段
                                    String  secOid=codeBasicSecVO.getOid();
                                    String parentClassifySecOid= codeBasicSecVO.getParentClassifySecOid();
                                    List<CodeClassifyValueVO> codeClassifyValueVOS=    this.codeClassifyValueService.listCodeClassifyValueBySecOid(secOid,parentClassifySecOid);
                                    if(CollectionUtils.isEmpty(codeClassifyValueVOS)){
                                        codeClassifyValueVOS.stream().forEach(codeClassifyValueVO -> {
                                            CodeSectionValueVO sectionValueVO=new CodeSectionValueVO(codeClassifyValueVO.getOid(),codeClassifyValueVO.getOrderNum()+"",codeClassifyValueVO.getId(),codeClassifyValueVO.getName(),codeClassifyValueVO.getDescription());
                                        });
                                    }
                                }else if(secType.equals("codedatesec")){//日期码段
                                }else if(secType.equals("coderefersec")){//引用码段
                                }else if(secType.equals("codelevelsec")) {//层级码段
                                    int level = codeBasicSecVO.getCodeLevelValue();
                                    CodeClassifyVO levelCodeClassifyVO = new CodeClassifyVO();
                                    CodeClassifyFullInfoBO classifyFullInfoBO = this.classifyService.getClassifyFullInfo(codeClassifyDO.getOid());
                                    if(codeBasicSecVO.getCodeLevelType().equals("code_level_special")){//指定层级
                                        List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
                                        if (classifyVOS.size() >= level && level > 0) {
                                            levelCodeClassifyVO = classifyVOS.get(level - 1);
                                        }
                                    }else{//最小层
                                        levelCodeClassifyVO=codeClassifyDO;
                                    }
                                    CodeSectionValueVO sectionValueVO=new CodeSectionValueVO(levelCodeClassifyVO.getOid(),"0",levelCodeClassifyVO.getId(),codeBasicSecVO.getName(),codeBasicSecVO.getDescription());
                                    codeSectionValueVOList.add(sectionValueVO);
                                }else if(secType.equals("codeattrsec")){//属性码段
                                }else if(secType.equals("codeserialsec")){//流水码段
                                }
                                //构建规则码段
                                CodeSectionVO codeSectionVO=new CodeSectionVO();
                                codeSectionVO.setId(codeBasicSecVO.getOid());//主键
                                codeSectionVO.setName(codeBasicSecVO.getName());//码段名称
                                codeSectionVO.setCodeSecLength(codeBasicSecVO.getCodeSecLength());//码段长度
                                codeSectionVO.setNum(codeBasicSecVO.getId());//码段编号
                                codeSectionVO.setCodeDateFormatStr(codeBasicSecVO.getCodeDateFormatStr());//日期类型
                                codeSectionVO.setCodeSecLengthType(codeBasicSecVO.getCodeSecLengthType());//码段长度类型
                                codeSectionVO.setPkCodeRule(codeRuleVO.getOid());
                                codeSectionVO.setSecType(codeBasicSecVO.getSecType());//码段类型
                                codeSectionVO.setDescription(codeBasicSecVO.getDescription());
                                codeSectionVO.setParentClassifySecOid(codeBasicSecVO.getParentClassifySecOid());
                                codeSectionVO.setSectionValue(codeSectionValueVOList);
                                codeSectionVOList.add(codeSectionVO);
                            });
                        }
                        //构建规则信息
                        resultCodeRuleVO.setId(codeRuleVO.getOid());
                        resultCodeRuleVO.setNum(codeRuleVO.getId());
                        resultCodeRuleVO.setDescription(codeRuleVO.getDescription());
                        resultCodeRuleVO.setCodeSection(codeSectionVOList);
                    }
                    //构建分类信息
                    com.vci.ubcs.code.vo.webserviceModel.coderule.ResultClassifyVO classifyVO=new com.vci.ubcs.code.vo.webserviceModel.coderule.ResultClassifyVO();
                    classifyVO.setId(codeClassifyDO.getOid());
                    classifyVO.setLcStatus(codeClassifyDO.getLcStatus());
                    classifyVO.setClassCode(codeClassifyDO.getId());
@@ -822,32 +934,33 @@
                    classifyVO.setName(codeClassifyDO.getName());
                    classifyVO.setPid(codeClassifyDO.getParentcodeclassifyoid());
                    classifyVO.setFullPathName(codeClassifyDO.getPath());
                    classifyVO.setCodeRule(resultCodeRuleVO);
                    classifyVOList.add(classifyVO);
                });
                libraryVo.setClassify(classifyVOList);
                resultLibraryVO.setClassify(classifyVOList);
            }else{
                errorid = "100";
                msg="未查询到相关的分类信息";
            }
            issucess=true;
            resultData.setLibrary(libraryVo);
            resultClassifyRuleData.setLibrary(resultLibraryVO);
        }catch (Throwable e){
            e.printStackTrace();;
            msg="查询分类失败:"+e.getMessage();
        }finally {
            resultData.setErrorid(errorid);
            resultData.setMsg(msg);
            resultClassifyVO.setResultData(resultData);
            resultClassifyRuleData.setErrorid(errorid);
            resultClassifyRuleData.setMsg(msg);
            resultClassifyRuleVO.setData(resultClassifyRuleData);
        }
        if(dataType.equals("xml")){
            //组织返回接口信息
            XStream xStream = new XStream(new DomDriver());
            xStream.processAnnotations(XMLResultSystemVO.class);
            xStream.autodetectAnnotations(true);
            resultStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(resultData);
            resultStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(resultClassifyRuleData);
        }else{
            Object object = JSONObject.toJSON(resultClassifyVO);
            Object object = JSONObject.toJSON(resultClassifyRuleVO);
            resultStr = object.toString();
        }
        try {