ludc
2023-07-18 67a8703176c9f36519d98c52130b12316029bb23
Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs
已修改22个文件
已添加1个文件
826 ■■■■ 文件已修改
Source/UBCS-WEB/.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/modeling/cycle.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/ShowImportData.vue 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/index.vue 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Master/MasterTransfer.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Master/MasterTree.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/attrCrud.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/flow-cycle/components/DetailForm.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/flow-cycle/components/DetailPanel.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/flow-cycle/flowchartEditor.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/template/SetPersonnel.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/work/BusinessWork.vue 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/page/index/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/cycle.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/work/process/leave/handle.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/webService/config/AttributeMapConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/.gitignore
@@ -5,6 +5,7 @@
/tests/e2e/videos/
/tests/e2e/screenshots/
# local env files
.env.local
.env.*.local
Source/UBCS-WEB/src/api/modeling/cycle.js
@@ -42,10 +42,19 @@
      data
  })
}
// èŽ·å–ç”Ÿå‘½å‘¨æœŸäº‹ä»¶
export const getEventList = (params) => {
  return request({
      url: '/api/ubcs-omd/lifeCycle/page-event',
      method: 'get',
      params
  })
}
export default {
  getList,
  add,
  detail,
  del,
  edit
  edit,
  getEventList
}
Source/UBCS-WEB/src/components/BatchImport/ShowImportData.vue
@@ -281,7 +281,7 @@
        title: "查看详细信息",
        setForm: {},
      },
      batchApplyCodeTableData: {},
      batchSelectTableData: {},
      savedList: [],
      tab1Loading: false,
      tab2Loading: false,
@@ -308,7 +308,7 @@
        if (first === true) {
          this.codeRuleOid = data.codeRuleOid;
          // ç¬¬ä¸€æ¬¡æ‰“开直接赋值不校验
          this.batchApplyCodeTableData[data.codeRuleOid] = {
          this.batchSelectTableData[data.codeRuleOid] = {
            name: data.name,
            templateOid: data.oid,
            cloNamesList: data.cloNamesList,
@@ -328,8 +328,8 @@
            }
          }
        }
        if (!this.batchApplyCodeTableData[data.codeRuleOid]) {
          this.batchApplyCodeTableData[data.codeRuleOid] = {
        if (!this.batchSelectTableData[data.codeRuleOid]) {
          this.batchSelectTableData[data.codeRuleOid] = {
            name: data.name,
            templateOid: data.oid,
            cloNamesList: data.cloNamesList,
@@ -337,6 +337,31 @@
            codeRuleOid: data.codeRuleOid,
          };
        }
      }
      if (this.type === 'historyImport') {
        if (first === true) {
          // ç¬¬ä¸€æ¬¡æ‰“开直接赋值不校验
          this.batchSelectTableData[data.codeClassifyOid] = {
            name: data.name,
            templateOid: data.oid,
            cloNamesList: data.cloNamesList,
            codeClassifyOid: data.codeClassifyOid,
            codeRuleOid: data.codeRuleOid,
          };
          // ä¸æ˜¯ç¬¬ä¸€æ¬¡æ‰“开需要优先校验
        }else if (this.localCodeClassifyOid === data.codeClassifyOid) {
          console.log("重复点击");
        }
        if (!this.batchSelectTableData[data.codeClassifyOid]) {
          this.batchSelectTableData[data.codeClassifyOid] = {
            name: data.name,
            templateOid: data.oid,
            cloNamesList: data.cloNamesList,
            codeClassifyOid: data.codeClassifyOid,
            tab1Selected: []
          };
        }
        this.selection = this.batchSelectTableData[this.localCodeClassifyOid]['tab1Selected']
      }
      this.localCodeClassifyOid = data.codeClassifyOid;
      this.cloNamesList = data.cloNamesList;
@@ -352,7 +377,11 @@
          (item) => !this.savedList.includes(item.oid)
        );
        if (this.type === "batchApplyCode") {
          this.batchApplyCodeTableData[data.codeRuleOid]["tab1"] =
          this.batchSelectTableData[data.codeRuleOid]["tab1"] =
            this.tab1Table;
        }
        if (this.type === "historyImport") {
          this.batchSelectTableData[data.codeClassifyOid]["tab1"] =
            this.tab1Table;
        }
      });
@@ -366,13 +395,17 @@
        this.tab2Loading = false
        this.tab2Table = res.data.data;
        if (this.tab2Table.length > 0 && this.type === "batchApplyCode") {
          this.batchApplyCodeTableData[data.codeRuleOid]["codeApply"] = {};
          this.batchApplyCodeTableData[data.codeRuleOid]["tab2"] =
            res.data.data;
          this.batchSelectTableData[data.codeRuleOid]["codeApply"] = {};
          this.batchSelectTableData[data.codeRuleOid]["tab2"] =
            this.tab2Table
          if (this.$refs.CodeApply) {
            this.$refs.CodeApply.loading = true;
          }
          this.getCodeRule();
        }
        if (this.type === "historyImport") {
          this.batchSelectTableData[data.codeClassifyOid]["tab2"] =
            this.tab2Table
        }
      });
      getFormTemplate({
@@ -384,6 +417,9 @@
    },
    tab1TableSelectChange(selection) {
      this.selectedTab1Table = selection;
      if (this.batchSelectTableData[this.localCodeClassifyOid]) {
        this.batchSelectTableData[this.localCodeClassifyOid]['tab1Selected'] = selection
      }
    },
    resembleRowChange(row) {
      if (!row || !row.oid) {
@@ -425,7 +461,7 @@
            return false;
          }
        }
        let lookedCodeRuleOidList = Object.keys(this.batchApplyCodeTableData);
        let lookedCodeRuleOidList = Object.keys(this.batchSelectTableData);
        let noLookCodeRuleOidList = this.leftTree.filter(
          (item) => !lookedCodeRuleOidList.includes(item.codeRuleOid)
        );
@@ -436,9 +472,9 @@
        }
        let errorData = [];
        let successData = [];
        for (const key in this.batchApplyCodeTableData) {
          if (Object.hasOwnProperty.call(this.batchApplyCodeTableData, key)) {
            const element = this.batchApplyCodeTableData[key];
        for (const key in this.batchSelectTableData) {
          if (Object.hasOwnProperty.call(this.batchSelectTableData, key)) {
            const element = this.batchSelectTableData[key];
            if (element.tab1.length > 0) {
              errorData.push(element);
            }
@@ -479,6 +515,27 @@
            },
          };
        });
      } else if (this.type === 'historyImport') {
        let lookedCodeRuleOidList = Object.keys(this.batchSelectTableData);
        let noLookCodeRuleOidList = this.leftTree.filter(
          (item) => !lookedCodeRuleOidList.includes(item.codeClassifyOid)
        );
        let noLookName = noLookCodeRuleOidList.map((item) => item.name);
        if (noLookName.length > 0) {
          this.$message.warning(`数据${noLookName}还未曾查看,请先查看!`);
          return false;
        }
        params.codeImprotSaveDatVOList = this.batchSelectTableData.map(item => {
          return {
            Clos: item.cloNamesList,
            dataList: item.tab2.concat(item.tab1Selected),
            orderDTO: {
              codeClassifyOid: item.codeClassifyOid,
              templateOid: item.templateOid,
              secDTOList: this.secDTOList,
            },
          }
        })
      } else {
        params.codeImprotSaveDatVOList = [
          {
@@ -495,7 +552,6 @@
        this.submitLoading = true
      submitHistoryimport(params).then((res) => {
        this.submitLoading = false
                console.log(res);
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
        }
@@ -503,7 +559,6 @@
    },
    // é‡æ–°ç¼–辑
    reEdit(row) {
      console.log(row, "row");
      this.currentSelectedResembleRow = {
        templateOid: row.codetemplateoid,
        codeClassifyOid: row.codeclassifyid,
@@ -517,7 +572,6 @@
    // ç›´æŽ¥ç¼–辑后保存
    FormTemplateSubmit(form) {
      addSaveCode(form).then((res) => {
        console.log(res);
        if (res.data.code === 200) {
          this.savedList.push(form.oid);
          this.$message.success("新增成功!");
Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue
@@ -67,15 +67,20 @@
                              :type="edit"
                              :visible.sync="DataVisible"></FormTemplateDialog>
<!--          å‘布-->
          <set-personnel :parameter="this.parameter" :visible.sync="visibleFlow"></set-personnel>
          <set-personnel :parameter="this.parameter" :visible.sync="visibleFlow" :title="title"></set-personnel>
<!--          åœç”¨-->
            <set-personnel :parameter="this.parameter" :visible.sync="visibleDeactivate" :title="title"></set-personnel>
<!--          å¯ç”¨-->
            <set-personnel :parameter="this.parameter" :visible.sync="visibleEnable" :title="title"></set-personnel>
<!--          å›žæ”¶-->
            <set-personnel :parameter="this.parameter" :visible.sync="visibleRecovery" :title="title"></set-personnel>
<!--          é«˜çº§æŸ¥è¯¢-->
          <advanced-query :options="this.options" :visible.sync="findvisible" @echoContion="echoContion"></advanced-query>
          <integration-transfer :data="transferData" :props="transferProps" :visible.sync="dialogPush"
                                @save="handelTransferSave"></integration-transfer>
<!--          å¯¼å‡º-->
          <MasterTransfer :visible.sync="dialogPush" :tableHeadData="tableHeadFindData" :codeClassifyOid="codeClassifyOid" :tableData="tableData"></MasterTransfer>
<!--          ç›¸ä¼¼é¡¹-->
          <ResembleQueryDialog :codeClassifyOid="codeClassifyOid" :codeRuleOid="this.codeRuleOid" :rowOid="rowOid"
                               :templateOid="templateOid" :visible.sync="similarVisible"></ResembleQueryDialog>
        <div class="block" style="display: flex; justify-content: flex-end">
          <el-pagination :current-page="page.currentPage" :page-size="page.pageSizes" :page-sizes="page.pageSizes"
                         :total="page.total" layout="total, sizes, prev, pager, next, jumper"
@@ -166,7 +171,8 @@
      parameter: {
        ids: [],
        code: "",
        type: "PUBLIC",
        type: '',
        // this.visibleDeactivate ?'ENABLE':this.visibleEnable ? 'DISABLE' :this.visibleRecovery ? 'ROLLBACK' :'PUBLIC'
        template: "",
        vars: {
          codeClassifyOid: "",
@@ -174,7 +180,15 @@
        }
      },
      visibleNames:[],
      //发布
      visibleFlow: false,
      //停用
      visibleDeactivate:false,
      //启用
      visibleEnable:false,
      //回收
      visibleRecovery:false,
      title:'',
      transferData: [],
      transferProps: {
        key: "oid",
@@ -308,16 +322,6 @@
        this.$refs.dataTable.doLayout()
      }
    },
    // å‘布
    setHandler() {
      if (this.selectRow.length <= 0) {
        this.$message.warning("请选择一条数据");
      } else {
        this.userName = localStorage.getItem("username");
        this.parameter.template = this.userName + "-发布" + "[物品]";
        this.visibleFlow = true;
      }
    },
    openVis(visible) {
      console.log(visible)
      this[visible] = true
@@ -334,9 +338,14 @@
        //  if(uniqueFlag === 'CODEEDIT') return this.openBatchImport('batchApplyCode')
        if (uniqueFlag === 'CODESTARTPROCESS') return this.setHandler()
        if (uniqueFlag === 'CODEUPREVISION') return this.DataChange()
        if (uniqueFlag === 'CODERECYCLE') return this.huishouHandler()
        if (uniqueFlag === 'CODEEXPORT') return this.openD()
        if (uniqueFlag === 'CODEQUERY') return this.findHandler()
        //停用
        if (uniqueFlag === 'CODEDISABLE') return this.Deactivate()
        //启用
        if (uniqueFlag === 'CODEENABLE') return this.Enable()
        //回收
        if (uniqueFlag === 'CODERECYCLE') return this.Recovery()
        //  ç›¸ä¼¼é¡¹æŸ¥è¯¢
        //  if(uniqueFlag === 'CODEEDIT') return this.similarHandler()
      });
@@ -361,6 +370,74 @@
    rend() {
      this.tableData = this.tableHeadData;
    },
    // å‘布
    setHandler() {
      // let EditFlag1=false
      // let EditFlag2=false
      // if(EditFlag1){
      //   this.$message.warning('只有状态是【编辑中】的数据才可以发起流程')
      // }else if(EditFlag2){
      //   this.$message.warning('您选择的数据全部为【编辑中】才可以发起流程')
      // }
      this.selectRow.forEach(item=>{
        if(this.selectRow.length === 1 && item.lcstatus !== "Editing"){
          this.$message.warning('只有状态是【编辑中】的数据才可以发起流程')
        }else if(item.lcstatus !== 'Editing'){
          this.$message.warning('您选择的数据全部为【编辑中】才可以发起流程')
        }else {
          this.userName = localStorage.getItem("username");
          this.parameter.template = this.userName + "-发布" + "[物品]";
          this.parameter.type='PUBLIC'
          this.title='流程审批'
          this.visibleFlow = true;
        }
      })
      // if (this.selectRow.length <= 0) {
      //   this.$message.warning("请选择一条数据");
      // } else {
      //   this.userName = localStorage.getItem("username");
      //   this.parameter.template = this.userName + "-发布" + "[物品]";
      //   this.parameter.type='PUBLIC'
      //   this.title='流程审批'
      //   this.visibleFlow = true;
      // }
    },
    //停用
    Deactivate(){
      if (this.selectRow.length <= 0) {
        this.$message.warning("请选择一条数据");
      }  else {
        this.userName = localStorage.getItem("username");
        this.parameter.template = this.userName + "-发布" + "[物品]";
        this.parameter.type='DISABLE'
        this.title='停用(冻结)编码数据'
        this.visibleDeactivate=true;
      }
    },
    //启用
    Enable(){
      if (this.selectRow.length <= 0) {
        this.$message.warning("请选择一条数据");
      } else {
        this.userName = localStorage.getItem("username");
        this.parameter.template = this.userName + "-发布" + "[物品]";
        this.parameter.type='ENABLE'
        this.title='启用(解冻)编码数据'
        this.visibleEnable=true;
      }
    },
    //回收
    Recovery(){
      if (this.selectRow.length <= 0) {
        this.$message.warning("请选择一条数据");
      } else {
        this.userName = localStorage.getItem("username");
        this.parameter.template = this.userName + "-发布" + "[物品]";
        this.parameter.type='ROLLBACK'
        this.title='回收编码数据'
        this.visibleRecovery=true;
      }
    },
    handleSizeChange(val) {
      this.isLoading = true;
      setTimeout(() => {
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -328,42 +328,8 @@
          this.form
        );
      }
      if (resembleQueryList.length === 0) {
        let resForm = {};
        const { defaultValue, formValue } = this.getDefaultValueAndFormValues(
          this.form
        );
        const noData = [
          "jiliangdwname",
          "materialtypeText",
          "morengongysname",
          "$caigouwl",
          "$xiaoshouwl",
          "$shifoupihaoguanli",
          "lcstatus_text",
          "hesuanfenleiname",
          "$kucunwl",
        ];
        noData.forEach((item) => {
          this.$delete(formValue, item);
        });
        resForm.data = formValue;
        resForm = Object.assign({}, resForm, defaultValue);
        resForm.secDTOList = [];
        for (const key in this.codeApplyForm) {
          if (Object.hasOwnProperty.call(this.codeApplyForm, key)) {
            const value = this.codeApplyForm[key];
            if (value) {
              resForm.secDTOList.push({ secOid: key, secValue: value });
            }
          }
        }
        resForm.codeClassifyOid = this.codeClassifyOid;
        resForm.codeRuleOid = this.codeRuleOid;
        resForm.templateOid = this.templateOid;
        this.$emit("submit", resForm);
      } else {
        this.$confirm(
      if (resembleQueryList.length > 0) {
        await this.$confirm(
          `该物料已有${resembleQueryList.length}条相似数据,是否继续保存?`,
          "需要您确认",
          {
@@ -371,8 +337,8 @@
            cancelButtonText: "取消",
            type: "warning",
          }
        )
          .then(() => {
        );
      }
            // æŽ’除一些字段
            const noData = [
              "jiliangdwname",
@@ -386,11 +352,22 @@
              "$kucunwl",
            ];
            let resForm = {};
            const { defaultValue, formValue } =
              this.getDefaultValueAndFormValues(this.form);
      const { defaultValue, formValue } = this.getDefaultValueAndFormValues(
        this.form
      );
            noData.forEach((item) => {
              this.$delete(formValue, item);
            });
      const keys = Object.keys(formValue);
      debugger
      keys.forEach((item, index) => {
        keys.forEach((itm, idx) => {
          if ((item === ('$' + itm)) && idx !== index) {
            this.$delete(formValue, keys[index]);
          }
        })
      });
            resForm.data = formValue;
            resForm = Object.assign({}, resForm, defaultValue);
            resForm.secDTOList = this.secVOList.map((item) => {
@@ -403,9 +380,6 @@
            resForm.codeRuleOid = this.codeRuleOid;
            resForm.templateOid = this.templateOid;
            this.$emit("submit", resForm);
          })
          .catch(() => {});
      }
    },
    getDefaultValueAndFormValues(form) {
      let defaultValue = {};
Source/UBCS-WEB/src/components/Master/MasterTransfer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
<template>
<el-dialog :visible.sync="dialogPush" append-to-body  :close-on-click-modal="false"  @close="recoverPage" title="导出">
  <div style="margin-bottom: 10px">
    <el-button type="success"
               @click="handleExcel">下载 å¤šçº§è¡¨å¤´excel</el-button>
    <el-radio-group v-model="radio">
      <el-radio :label="0">选择</el-radio>
      <el-radio :label="1">全部</el-radio>
      <el-radio :label="2">页码</el-radio>
    </el-radio-group>
  </div>
  <div style="text-align: center">
  <el-transfer
    style="text-align: left; display: inline-block;height: 400px"
    filterable
    :filter-method="filterMethod"
    filter-placeholder="关键词搜索"
    v-model="value"
    :titles="['未选属性', '已选属性']"
    :data="data">
  </el-transfer>
  </div>
</el-dialog>
</template>
<script>
export default {
name: "MasterTransfer",
  props:['visible','tableHeadData','codeClassifyOid','tableData'],
  data(){
    return {
      data: [],
      value: [],
      filterMethod(query, item) {
        return item.label.indexOf(query) > -1;
      },
      dialogPush:this.visible,
      radio:0,
      tableHeadFindData:[],
      tableExportData:[],
      option:{
        title: '文档标题',
        column: [{
          label: '多级表头',
          prop: 'header',
          children: []
        }],
        data: []
      }
    };
  },
  watch:{
    //监听初始化
    visible (){
      this.dialogPush = this.visible;
    },
    //表头数据 ç”¨æ¥æ¸²æŸ“穿梭框
    tableHeadData:{
      handler(newval,oldval){
        console.log(newval)
       if(newval){
         //excel表头数据转换
         this.tableHeadFindData=newval.map(obj => obj.label);
         this.tableHeadFindData.forEach((city, index) => {
           this.data.push({
             label: city,
             key: index,
           });
         });
         //excel表格数据转换
         this.option.column[0].children=newval.map(obj => {
           return {
             label: obj.label,
             prop: obj.prop
           }
         })
       }
      }
},
    tableData(){
      // å°†å€¼é‡Œé¢çš„true或false改变为是或否
      this.option.data = this.tableData.map(obj => {
          for (let prop in obj) {
            if (obj[prop] === "true") {
              obj[prop] = "是";
            } else if (obj[prop] === "false") {
              obj[prop] = "否";
            }
          }
        return obj;
      });
    },
    codeClassifyOid:{
      handler(newval,oldval){
      }
    }
  },
  computed:{
  },
  mounted() {
  },
  methods:{
    //关闭页面
    recoverPage(){
      this.$emit('update:visible', false);
    },
    handleExcel(){
      this.$Export.excel({
        title: this.option.title,
        columns: this.option.column,
        data: this.option.data
      });
    },
  }
}
</script>
<style scoped lang="scss">
</style>
Source/UBCS-WEB/src/components/Master/MasterTree.vue
@@ -121,9 +121,7 @@
          codeClassifyOid: this.nodeClickList.oid,
          functionId: 5,
        }).then(res => {
          console.log('1-', res.data)
          console.log('123-', res.data.buttons)
          const flagsToDeleteBtn = ["CODEIMPORTHISTORY", "CODEBATCHADD", "CODESTARTPROCESS", "CODEEXPORT", "CODEQUERY"];
          const flagsToDeleteBtn = ["CODEIMPORTHISTORY", "CODEEXPORT", "CODEQUERY","batchApplyCode"];
          //不同节点显示不同按钮
          if (!res.data.leaf) {
            this.masterVrBtnList = res.data.buttons.filter(obj => flagsToDeleteBtn.includes(obj.uniqueFlag));
Source/UBCS-WEB/src/components/Tree/attrCrud.vue
@@ -242,7 +242,7 @@
    </div>
    <el-table :data="ProData"
              style="width: 100%"
              height="280"
              height="750"
              @cell-click="handleCellClicks"
              @select="selectHandle"
              @selection-change="selectionChange"
@@ -1637,15 +1637,26 @@
    },
    //枚举注入保存
    enumAddHandle() {
      if (this.enumRow.length < 1) {
        this.$message.warning('请至少选择一条数据')
      } else {
      let hasError = false; // æ·»åŠ ä¸€ä¸ªå˜é‡
      this.tableData.forEach((item, index) => {
        if (item.key === '') {
          this.$message.warning(`第${index + 1}行的选项值不能为空`);
          hasError = true;
          return;
        } else if (item.value === '') {
          this.$message.warning(`第${index + 1}行的选项中文标签不能为空`);
          hasError = true;
          return;
        }
      });
        // ä¿å­˜æ‰§è¡Œé€»è¾‘
      if (!hasError) {
        if(this.CurrentCell){
          this.$set(this.CurrentCell, 'enumString', JSON.stringify(this.enumRow));
          this.$set(this.CurrentCell, 'enumString', JSON.stringify(this.tableData));
          this.enumVisible = false;
        }else {
          this.$set(this.attrSelectList[0], 'enumString', JSON.stringify(this.enumRow));
          this.tableData=[]
          this.$set(this.attrSelectList[0], 'enumString', JSON.stringify(this.tableData));
          this.tableData=[];
          this.enumVisible = false;
        }
      }
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
@@ -923,7 +923,8 @@
    selectHandle(selection,row){
      this.crudOid=row.oid;
      this.crudArray=selection;
      gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': this.Formlist[0].oid}).then(res => {
      console.log(selection,row)
      gridCodeClassifyTemplateAttr({'conditionMap[classifyTemplateOid]': row.oid}).then(res => {
        this.ProData = res.data.data;
      }).catch(res => {
        this.$message.error(res)
Source/UBCS-WEB/src/components/flow-cycle/components/DetailForm.vue
@@ -124,7 +124,6 @@
  created() {
    const formModel = this.root.propsAPI.getSelected()[0].getModel()
    console.log(formModel, 'formModel');
    this.formModel = Object.assign(
      { width: 80, height: 48 },
      { shape: 'flow-smooth' },
Source/UBCS-WEB/src/components/flow-cycle/components/DetailPanel.vue
@@ -46,33 +46,34 @@
        <group-panel :status="status">
          <detail-form type="group" />
        </group-panel>
        <node-panel :status="status">
        <!-- <edge-panel :status="status">
          <div class="event">
            <hr />
            <div class="btn_box">
              <el-button type="primary" size="mini">新增</el-button>
              <el-button type="danger" size="mini">删除</el-button>
              <el-button type="primary" size="mini">保存</el-button>
            </div>
              <div  class="flex" v-for="(item, index) in eventList" :key="index" :class="{active: index === currentActive}">
                <el-select size="mini" style="width: 70%" v-if="item.isEdit">
                  <el-option></el-option>
            <h4>跃迁事件</h4>
            <el-select
              size="mini"
              style="width: 100%"
              value-key="oid"
              v-model="saveEventList"
              multiple
            >
              <el-option
                v-for="itm in eventList"
                :key="itm.oid"
                :value="itm"
                :label="itm.eventShowName"
              ></el-option>
                </el-select>
                <span v-else style="width: 70%">{{item.evenName}}</span>
                <el-button size="mini" type="text" class="red">删除</el-button>
                <el-button size="mini" type="text" @click="editChange(item)">{{item.isEdit ? '暂存' : '编辑'}}</el-button>
              </div>
          </div>
        </node-panel>
        <!-- <multi-panel :status="status" /> -->
        <!-- <canvas-panel :status="status" /> -->
        </edge-panel> -->
      </template>
    </detail-panel>
  </div>
</template>
<script>
import API from "@/api/modeling/cycle";
import {
  NodePanel,
  EdgePanel,
@@ -94,7 +95,7 @@
    DetailPanel,
    DetailForm,
  },
  props: ["rowData", "existNodes", "type"],
  props: ["rowData", "existNodes", "existEdges", "type", "currentSelectedLine"],
  data() {
    return {
      newRowData: {
@@ -117,9 +118,14 @@
          { required: true, message: "起始状态不能为空", trigger: "change" },
        ],
      },
      eventList: [{evenName: '123123'}],
      currentActive: 0
      eventList: [],
      saveEventList: [],
      edgeEventList: {},
      currentActive: 0,
    };
  },
  created() {
    this.getEventList();
  },
  methods: {
    getNewRowDate() {
@@ -133,9 +139,13 @@
        });
      });
    },
    editChange(row) {
      this.$set(row, 'isEdit', !row.isEdit)
    getEventList() {
      API.getEventList().then((res) => {
        if (res.data.code === 200) {
          this.eventList = res.data.data;
    }
      });
    },
  },
  watch: {
    rowData: {
@@ -157,6 +167,25 @@
        this.newRowData.startStatus = undefined;
      }
    },
    currentSelectedLine: {
      deep: true,
      handler(newV) {
        if (newV.id) {
          if (this.edgeEventList[newV.id]) {
            this.saveEventList = this.edgeEventList[newV.id]
          } else {
            this.edgeEventList[newV.id] = []
            this.saveEventList = []
          }
        }
      }
    },
    saveEventList: {
      deep: true,
      handler(newV) {
        this.edgeEventList[this.currentSelectedLine.id] = newV
      }
    }
  },
};
</script>
@@ -174,6 +203,6 @@
  color: red;
}
.active {
  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4)
  // box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4)
}
</style>
Source/UBCS-WEB/src/components/flow-cycle/flowchartEditor.vue
@@ -14,7 +14,11 @@
        </div>
        <!-- Main Chart -->
        <div class="vfe-chart-main">
          <flow :data="flowChartData" :onAfterChange="onAfterChange" />
          <flow
            :data="flowChartData"
            :onAfterChange="onAfterChange"
            :onAfterItemSelected="onAfterItemSelected"
          />
          <div class="tooltip">
            <template v-for="item in tooltipData">
              <p>{{ item.name }}: {{ item.value }}</p>
@@ -23,7 +27,14 @@
        </div>
        <div class="vfe-chart-panel" v-if="type !== 'detail'">
          <div class="vfe-chart-panel-detail">
            <editor-detail-panel :rowData="rowData" ref="EditorDetailPanel" :existNodes="existNodes" :type="type"/>
            <editor-detail-panel
              :rowData="rowData"
              ref="EditorDetailPanel"
              :existNodes="existNodes"
              :existEdges="existEdges"
              :currentSelectedLine="currentSelectedLine"
              :type="type"
            />
          </div>
        </div>
      </div>
@@ -83,7 +94,9 @@
      },
      tooltipShow: true,
      tooltipData: [],
      existNodes: this.chartData.nodes || []
      existNodes: this.chartData.nodes || [],
      existEdges: this.chartData.edges || [],
      currentSelectedLine: {}
    };
  },
@@ -114,10 +127,21 @@
          this.$message.error("不能添加已存在的节点!");
        }
      }
      const { nodes } = this.$refs.flowChart.propsAPI.save()
      this.existNodes = nodes || []
      console.log(this.$refs.flowChart.propsAPI.save());
      const { nodes, edges } = this.$refs.flowChart.propsAPI.save();
      this.existNodes = nodes || [];
      this.existEdges = edges || [];
    },
    onAfterItemSelected({item}) {
      if (item.target) {
        const currentEdge = this.existEdges.filter(itm => itm.id === item.id)[0] || {}
        console.log(currentEdge, 'currentEdgecurrentEdge');
        if (!Array.isArray(currentEdge.events)) {
          currentEdge.events = []
        }
        this.currentSelectedLine = currentEdge
      }
    },
    _downloadImage(data, filename = "flowchart.png") {
      const a = document.createElement("a");
      a.href = data;
@@ -136,6 +160,9 @@
    getFlowData() {
      return this.$refs.flowChart.propsAPI.save();
    },
    getEdgesEvents() {
      return this.$refs.EditorDetailPanel.edgeEventList;
    }
  },
};
</script>
Source/UBCS-WEB/src/components/template/SetPersonnel.vue
@@ -118,10 +118,8 @@
    },
    mounted() {
      console.log('---',this.parameter)
    },
  created() {
    console.log('parameter',this.parameter)
  },
  methods: {
        setSaveParam() {
Source/UBCS-WEB/src/components/work/BusinessWork.vue
@@ -1,6 +1,6 @@
<template>
<div>
  <el-button  @click="HandlerRend" size="small" type="primary">保存</el-button>
  <el-button  @click="HandlerSave" v-if="hasEditor" size="small" type="primary" style="margin-bottom: 20px">保存</el-button>
  <el-table
    v-loading="isLoading"
    :data="tableData"
@@ -8,7 +8,6 @@
    style=""
    @cell-click="handleCellClick"
  >
    <el-table-column fixed type="selection" width="55"> </el-table-column>
    <el-table-column fixed label="序号" type="index" width="55">
    </el-table-column>
    <el-table-column
@@ -23,13 +22,13 @@
      align="center"
    >
      <template slot-scope="{ row }">
        <el-input v-if="editingRow === row && editShow== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text'  ||item.edit == 'refer' )" v-model="row[item.prop]"
        <el-input v-if="editingRow === row && editShow== item.prop && item.edit == 'text'" v-model="row[item.prop]"
                  @blur="editingRows=null"></el-input>
        <el-input-number size="small" controls-position="right" v-if="editingRow === row && editShow== item.prop && item.edit == 'number'" v-model="row[item.prop]"
                         @blur="editingRows=null" :style="{width:(item.width-10)+'px'}"></el-input-number>
        <el-select v-model="row[item.prop]" filterable  allow-create  default-first-option slot="prepend" v-if="editingRow === row && editShow== item.prop && item.edit == 'select' " @blur="editingRows=null">
          <el-option
            v-for="optionItem in item.data"
            v-for="optionItem in item.dicData"
            :key="optionItem.dictValue"
            :label="optionItem.dictValue"
            :value="optionItem.dictValue">
@@ -39,7 +38,13 @@
          v-if="item.edit === 'switch' || item.edit === 'truefalse'" v-model="row[item.prop]" active-value="true"
          inactive-value="false">
        </el-switch>
        <span v-else>{{ row[item.prop] }}</span>
        <vciWebRefer v-if="editingRow === row && editShow== item.prop && item.edit == 'refer'"
          :referConfig="item.referConfig || {}"
          :value="row[item.referConfig.field] || row[item.prop]"
          :text="row[item.referConfig.showField]"
          @setReferValue="setReferValue"
        ></vciWebRefer>
        <span v-else  v-html="formatter(row,item)"></span>
      </template>
    </el-table-column>
  </el-table>
@@ -50,6 +55,7 @@
import {businese} from '@/api/work/businese'
import {FlowTable} from "@/api/GetItem";
import {validatenull} from "@/util/validate";
import {getDictionary} from "@/api/system/dict";
export default {
  name: "BusinessWork",
  props:['ids','templateId',"taskId","modelKey","codeClassifyOid"],
@@ -62,12 +68,16 @@
      editingRow: null,
      editShow: "",
      editAttr: "",
      hasEditor:false,
      columnType: {
        text: "input",
        combox: "select",
        truefalse: "switch",
        number: "number",
        textarea: "textarea",
        datetime: "datetime",
        date: "date",
        refer: "refer"
      }
    }
  },
@@ -86,8 +96,10 @@
  mounted() {
  },
  methods:{
    HandlerRend(){
    HandlerSave(){
      this.editingRow = null;
      //保存
      this.$message.success(this.tableData[0].tuhao)
    },
    //表格头渲染
    CrudHeaderRend() {
@@ -103,6 +115,7 @@
          'modelKey': this.modelKey,
          'codeClassifyOid': this.codeClassifyOid
        }).then((res) => {
          this.hasEditor=res.data.tableDefineVO.hasEditor;
          this.options = res.data.tableDefineVO.seniorQueryColumns;
          this.List = res.data.tableDefineVO.cols[0];
          this.tableHeadData=[];
@@ -112,7 +125,8 @@
              prop: item.field,
              type: this.columnType[item.type],
              sortable: item.sort,
              width: item.minWidth
              width: item.minWidth,
              edit:this.columnType[item.edit]
            };
            if(item.field == 'id' && validatenull(item.templet)){
              //企业编码的默认添加超链接,暂未实现
@@ -125,11 +139,28 @@
                  return row[column.property] == 'true' || row[column.property] == '1' ? '是' : '否'
                }
              }
            }
            if(validatenull(item.edit)) {
              if (typeof item.editConfig == "string") {
                columnItem.editConfig = eval("(" + item.editConfig + ")");
              } else {
                columnItem.editConfig = item.editConfig
              }
              if (item.edit == 'select') {
                //需要获取下拉框数据
                columnItem.data=[]
                columnItem.dicData = columnItem.editConfig.comboxConfig.data || this.geDictData(columnItem.editConfig.comboxConfig.comboxKey)
              }
              if (item.edit == 'refer') {
                columnItem.referConfig = {
                  title: item.title,
                  showField: item.showField || item.field,
                  field: item.field,
                  options:  columnItem.editConfig.referConfig
              }
            }
            }
            this.tableHeadData.push(Object.assign(item, columnItem))
          });
        });
@@ -144,11 +175,36 @@
        this.tableData = res.data.data;
      })
    },
    // å¼‚步获取字典数据
    geDictData(dictKey) {
      getDictionary({code: dictKey}).then((res) => {
        if (res.data && res.data.code === 200) {
          return (res.data.data || []).map((itm) => {
            itm.value = itm.dictValue;
            itm.key = itm.dictKey;
            return itm;
          });
        }
      });
    },
    // ç›‘听单元格点击事件并存储正在编辑的行
    handleCellClick(row, column, cell, event) {
      this.editingRow = row;
      this.editShow = column.property;
    },
    formatter(row, column){
      if(column.formatter){
        return column.formatter(row,column)
      }else{
        return row[column.prop]
      }
    },
    setReferValue(data) {
      if (data.field) {
        this.editingRow[data.field] = data.value || "";
        this.editingRow[data.showField] = data.text || "";
      }
    }
  }
}
</script>
Source/UBCS-WEB/src/main.js
@@ -51,10 +51,9 @@
import FlowPath from "@/components/template/FlowPath";
import Stage from "@/components/template/Stage";
import businesswork from "@/components/work/BusinessWork"
import MasterTransfer from "@/components/Master/MasterTransfer";
// å°†å·¥å…·å‡½æ•°æ·»åŠ åˆ°å…¨å±€
import utilFunc from './util/func'
import flowPath from "@/views/flow/flowPath";
Vue.prototype.$utilFunc = utilFunc
// æ³¨å†Œå…¨å±€crud驱动
window.$crudCommon = crudCommon;
@@ -104,6 +103,7 @@
Vue.component('Stage',Stage)
Vue.component('Divider', Divider)
Vue.component('businesswork', businesswork)
Vue.component('MasterTransfer', MasterTransfer)
// åŠ è½½ç›¸å…³url地址
Object.keys(urls).forEach(key => {
Source/UBCS-WEB/src/page/index/index.vue
@@ -18,10 +18,9 @@
        <!-- ä¸»ä½“视图层 -->
        <div style="height:100%;overflow-y:auto;overflow-x:hidden;" id="avue-view" v-show="!isSearch">
          <keep-alive>
            <!--<router-view class="avue-view" v-if="$route.meta.keepAlive"/>-->
            <router-view class="avue-view"/>
            <router-view class="avue-view" v-if="$route.meta.keepAlive"/>
          </keep-alive>
          <!--<router-view class="avue-view" v-if="!$route.meta.keepAlive"/>-->
          <router-view class="avue-view" v-if="!$route.meta.keepAlive"/>
        </div>
      </div>
    </div>
Source/UBCS-WEB/src/views/modeling/cycle.vue
@@ -103,12 +103,7 @@
  components: { CycleFlow },
  data() {
    return {
      form: {
        // 'contionMap[id]': 'qwe'
        // contionMap: [
        //   {id: 'qwe'}
        // ]
      },
      form: {},
      page: {
        pageSize: 10,
        total: 0,
@@ -286,10 +281,138 @@
      });
    },
    async submit() {
      // const data = {
      //   startStatus: "Auditing",
      //   name: "22",
      //   id: "asas",
      //   nodes: [
      //     {
      //       type: "node",
      //       size: "80*48",
      //       shape: "flow-rect",
      //       color: "#1890FF",
      //       label: "Auditing",
      //       x: 278.60856031183397,
      //       y: 84.12841612613737,
      //       id: "Auditing",
      //       change: true,
      //       index: 0,
      //       name: "Auditing",
      //       indexNum: 0,
      //     },
      //     {
      //       type: "node",
      //       size: "80*48",
      //       shape: "flow-rect",
      //       color: "#1890FF",
      //       label: "Editing",
      //       x: 294.17388658989535,
      //       y: 299.9676071819219,
      //       id: "Editing",
      //       change: true,
      //       index: 1,
      //       name: "Editing",
      //       indexNum: 1,
      //     },
      //     {
      //       type: "node",
      //       size: "80*48",
      //       shape: "flow-rect",
      //       color: "#1890FF",
      //       label: "drg",
      //       x: 278.60856031183397,
      //       y: 463.92237731083515,
      //       id: "drg",
      //       change: true,
      //       index: 3,
      //       name: "drg",
      //       indexNum: 3,
      //     },
      //   ],
      //   edges: [
      //     {
      //       source: "Auditing",
      //       sourceAnchor: 2,
      //       target: "Editing",
      //       targetAnchor: 0,
      //       id: "3083896f",
      //       index: 2,
      //       indexNum: 2,
      //       events: [
      //         {
      //           eventFullName:
      //             "plm.bs.omd.lifecycle.server.pubimpl.TransationEvente",
      //           eventShowName: "TransationEventE",
      //           description: "",
      //           bizDomain: "mdm",
      //           oid: "5",
      //           creator: "",
      //           createTime: "",
      //           lastModifier: "",
      //           lastModifyTime: "",
      //           ts: "",
      //         },
      //       ],
      //     },
      //     {
      //       source: "Editing",
      //       sourceAnchor: 2,
      //       target: "drg",
      //       targetAnchor: 0,
      //       id: "b941a21d",
      //       index: 4,
      //       indexNum: 4,
      //       events: [
      //         {
      //           eventFullName:
      //             "plm.bs.omd.lifecycle.server.pubimpl.TransationEventf",
      //           eventShowName: "TransationEventF",
      //           description: "",
      //           bizDomain: "mdm",
      //           oid: "6",
      //           creator: "",
      //           createTime: "",
      //           lastModifier: "",
      //           lastModifyTime: "",
      //           ts: "",
      //         },
      //         {
      //           eventFullName:
      //             "plm.bs.omd.lifecycle.server.pubimpl.TransationEvente",
      //           eventShowName: "TransationEventE",
      //           description: "",
      //           bizDomain: "mdm",
      //           oid: "5",
      //           creator: "",
      //           createTime: "",
      //           lastModifier: "",
      //           lastModifyTime: "",
      //           ts: "",
      //         },
      //       ],
      //     },
      //   ],
      // };
      // API.add(data)
      //   .then((res) => {
      //     this.submitLoading = false;
      //     if (res.data.code === 200) {
      //       this.$message.success(
      //         this.type === "edit" ? "修改成功!" : "新增成功!"
      //       );
      //       this.visible = false;
      //       this.search();
      //     }
      //   })
      //   .catch(() => {
      //     this.submitLoading = false;
      //   });
      // return;
      const newRowData = await this.$refs.vueFlowchartEditor.getNewRowData();
      if (!newRowData) {
        return;
      }
      // const edgeEvents = this.$refs.vueFlowchartEditor.getEdgesEvents();
      const flowData = await this.$refs.vueFlowchartEditor.getFlowData();
      if (Array.isArray(flowData.nodes)) {
        flowData.nodes = flowData.nodes.map((item) => {
@@ -302,6 +425,7 @@
        flowData.edges = flowData.edges.map((item) => {
          item.name = item.label;
          item.indexNum = item.index;
          // item.events = edgeEvents[item.id] || [];
          return item;
        });
      }
@@ -309,7 +433,7 @@
        ...newRowData,
        ...flowData,
      };
      debugger;
      this.submitLoading = true;
      let APIFun = API.add;
      if (this.type === "edit") {
Source/UBCS-WEB/src/views/work/process/leave/handle.vue
@@ -165,6 +165,9 @@
    },
    handelExecute(event) {
      console.log(event)
      if(this.$refs.businesswork.hasEditor){
        this.$refs.businesswork.HandlerSave()
      }
      const { toName, conditionKey, conditionValue } = event
      let param = {
        comment: this.opinionVal || '同意',
Source/UBCS-WEB/vue.config.js
@@ -26,10 +26,10 @@
    proxy: {
      '/api': {
        //本地服务接口地址
        target: 'http://localhost:37000',
        // target: 'http://localhost:37000',
        // target: 'http://192.168.1.51:37000',
        // target: 'http://192.168.1.46:37000',
        // target: 'http://dev.vci-tech.com:37000',
        target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        // target: 'http://192.168.1.104:37000',
        // target: 'http://192.168.1.63:37000',
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -8,7 +8,6 @@
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.entity.CodeAllCode;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.enumpack.CodeDefaultLC;
import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
@@ -33,7 +32,6 @@
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
@@ -41,7 +39,6 @@
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;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.HashedMap;
@@ -51,7 +48,6 @@
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Workbook;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.beans.BeanUtils;
@@ -68,6 +64,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import static com.alibaba.druid.util.FnvHash.Constants.LIMIT;
@@ -1455,8 +1452,8 @@
    @Override
    public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) {
        boolean success=true;
        WriteExcelOption eo = new WriteExcelOption();
        AtomicBoolean success= new AtomicBoolean(true);
        codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> {
            List<SheetRowData> rowDataList = new ArrayList<>();
            List<ClientBusinessObject>cboList=new ArrayList<>();
@@ -1573,7 +1570,7 @@
                            log.error("批量产生编码的时候出错了", e);
                            thisCbos.stream().forEach(cbo -> {
                                String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";系统错误,存储数据的时候出错了");
                                errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";系统错误,存储数据的时候出错了:"+e.getMessage());
                            });
                        }
                    }
@@ -1595,14 +1592,34 @@
                    try {
                        productCodeService.productCodeAndSaveData(classifyFullInfo, codeClassifyTemplateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
                    } catch (Exception e) {
                        e.printStackTrace();
                        log.error("批量产生编码的时候出错了", e);
                        needSaveCboList.stream().forEach(cbo -> {
                            String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                            errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";系统错误,存储数据的时候出错了:"+e.getMessage());
                        });
                    }
                    //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                    engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
                }
            }
            if(errorMap.size()>0) {
                success.set(false);
                LinkedList<WriteExcelData> excelDataList = new LinkedList<>();
                excelDataList.add(new WriteExcelData(0, 0, "错误信息"));
                final int[] index = {1};
                errorMap.forEach((key,v)->{
                    excelDataList.add(new WriteExcelData(index[0]++, 0, "第"+(Integer.parseInt(key)+1)+"行数据:"+v));
        });
                eo.addSheetDataList(codeClassifyTemplateVO.getName() + "导入模板", excelDataList);
            }
        });
        if(!success.get()){
            String excelName = LocalFileUtil.getDefaultTempFolder() + File.separator + (isImprot?"批量历史错误信息.xls":"批量申请错误信息.xls");
            ExcelUtil.writeDataToFile(excelName,eo);
            return  R.fail(excelName);
        }else {
        return  R.success(isImprot?"批量历史导入成功":"批量申请成功");
        }
    }
    /***
@@ -2723,6 +2740,7 @@
                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
                        cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
                    }
                    cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
                }else{
                    //此时还没有转换路径
                    //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
@@ -2779,6 +2797,7 @@
                        Integer userSecret = VciBaseUtil.getCurrentUserSecret();
                        cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
                    }
                    cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
                }else{
                    //此时还没有转换路径
                    //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
@@ -3624,13 +3643,15 @@
        }
    }
    private List<ClientBusinessObject> ChangeMapTOClientBusinessObjects(List<Map<String,String>> oldDataMap){
        List<ClientBusinessObject> clientBusinessObjectList=new CopyOnWriteArrayList<>();
        oldDataMap.parallelStream().forEach(dataMap->{
        List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
        oldDataMap.stream().forEach(dataMap->{
            ClientBusinessObject clientBusinessObject=new ClientBusinessObject();
            DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject);
            dataMap.forEach((key,value)->{
                clientBusinessObject.setAttributeValue(key,value);
            });
            for (String key:dataMap.keySet()){
                Object value= dataMap.getOrDefault(key,"");
                clientBusinessObject.setAttributeValue(key,value.toString());
            }
            clientBusinessObjectList.add(clientBusinessObject);
        });
        return clientBusinessObjectList;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -104,6 +104,7 @@
                String[] secLengths = cbo.getData().get(CODE_SEC_LENGTH_FIELD).split("#");
                cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//将此key除去
                cbo.getData().remove(IMPORT_ROW_INDEX);//将此key除去
                cbo.getData().remove("codeclassifyid");//将此key除去
                List<CodeBasicSecVO> secVOList = ruleVO.getSecVOList().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
                Map<String/**码段的主键**/,String/**码段的值**/> serialValueMap = new HashMap<>();
                Map<String, CodeBasicSecVO> secVOMap = secVOList.stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
@@ -290,6 +291,9 @@
            for (int i = 0; i < dataCBOList.size(); i++) {
                BaseModel cbo = dataCBOList.get(i);
                cbo.getData().remove(CODE_SEC_LENGTH_FIELD);//将此key除去
                cbo.getData().remove(IMPORT_ROW_INDEX);//将此key除去
                cbo.getData().remove("codeclassifyid");//将此key除去
                List<String> thisSecValueList = new LinkedList<>();
                for (int j = 0; j < secValueList.size(); j++) {
                    thisSecValueList.add(secValueList.get(j));
@@ -323,15 +327,17 @@
            }
            saveSerialValue( ruleVO, lastMaxSerialValueMap, maxSerialValueMap);
            allCodeDOList.stream().forEach(
                allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
            );
            Map<String, String> statusMap = allCodeDOList.stream().collect(Collectors.toMap(s -> s.getOid(), s -> s.getLcStatus()));
            allCodeDOList.stream().filter(s -> StringUtils.equalsIgnoreCase("codeallcode",s.getBtmname())).forEach(s -> {
                s.setLcStatus(statusMap.get(s.getOid()));
            });
            allCodeDOList.stream().forEach(
                allCode -> {DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCode,"codeallcode");allCode.setLctid("codeAllCodeLC");}
            );
            codeAllCodeService.saveBatch(allCodeDOList);
//            iCodeWupinService.saveBatch(dataCBOList);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -65,7 +65,7 @@
@Slf4j
@VciWebservice(path = "/universalInterface")
public class UniversalInterfaceImpl<IDockingLogeServiceing> implements UniversalInterfaceI {
    @Value("${code.checkConfig:true}")
    @Value("${code.universalinterface.checkSystemConfig:true}")
    public boolean CODE_CHECKCONFIG;
    @Autowired(required = false)
    private AttributeMapConfig attributeMapConfig;
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/webService/config/AttributeMapConfig.java
@@ -6,7 +6,7 @@
import java.util.List;
import java.util.Map;
@ConfigurationProperties(prefix="attrconfig")
@ConfigurationProperties(prefix="code.universalinterface.attrconfig")
@Component
public class AttributeMapConfig {
    private Map<String,String> system_attrmap;