ludc
2023-07-14 54e14bff397221b5b0d64720f77217f4d34ebf98
Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs
已修改30个文件
已添加12个文件
2346 ■■■■■ 文件已修改
Source/UBCS-WEB/src/api/docking/data.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/docking/loge.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/docking/task.js 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/modeling/cycle.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/ShowImportData.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/file/main.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/flow-cycle/components/DetailPanel.vue 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/flow-cycle/flowchartEditor.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/omd/enum.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/data.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/loge.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/task.vue 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/Business.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/cycle.vue 175 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 435 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/docking/data.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
import request from '@/router/axios';
export const getList = (page, size, params) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/gridDockingData',
    method: 'get',
    params: {
      ...params,
      page,
      size
    }
  })
}
Source/UBCS-WEB/src/api/docking/loge.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
import request from '@/router/axios';
export const getList = (page, size, params) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/gridLoge',
    method: 'get',
    params: {
      ...params,
      page,
      size
    }
  })
}
Source/UBCS-WEB/src/api/docking/task.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
import request from '@/router/axios';
export const getList = (page, size, params) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/gridDockingTask',
    method: 'get',
    params: {
      ...params,
      page,
      size
    }
  })
}
export const sendData = (oid) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/sendData',
    method: 'post',
    data: oid
  })
}
Source/UBCS-WEB/src/api/modeling/cycle.js
@@ -15,6 +15,14 @@
      data
  })
}
// ä¿®æ”¹
export const edit = (data) => {
  return request({
      url: '/api/ubcs-omd/lifeCycle/edit-save',
      method: 'put',
      data
  })
}
export const detail = (params) => {
  return request({
      url: '/api/ubcs-omd/lifeCycle/detail',
@@ -22,8 +30,22 @@
      params
  })
}
// åˆ é™¤
export const del = (data, isBatch) => {
  let url = '/api/ubcs-omd/lifeCycle/remove'
  if (isBatch) {
    url = '/api/ubcs-omd/lifeCycle/batch-remove'
  }
  return request({
      url,
      method: 'post',
      data
  })
}
export default {
  getList,
  add,
  detail
  detail,
  del,
  edit
}
Source/UBCS-WEB/src/components/BatchImport/ShowImportData.vue
@@ -57,11 +57,12 @@
                border
                :data="tab1Table"
                style="width: 100%"
                height="400px"
                height="40vh"
                highlight-current-row
                @current-change="resembleRowChange"
                @selection-change="tab1TableSelectChange"
                v-if="cloNamesList.length > 1"
                v-loading="tab1Loading"
              >
                <el-table-column
                  v-if="type !== 'batchApplyCode'"
@@ -103,7 +104,8 @@
                  border
                  :data="currentSelectedResemble"
                  style="width: 100%"
                  height="200px"
                  height="20vh"
                  v-loading="tab1BottomTableLoading"
                >
                  <el-table-column
                    v-for="item in resembleColumList"
@@ -138,12 +140,9 @@
            <el-tab-pane :label="tab2Name" name="tab2">
              <el-table
                border
                v-loading="tab2Loading"
                :data="tab2Table"
                :height="
                  type === 'batchApplyCode' && tab2Table.length > 0
                    ? '400px'
                    : '700px'
                "
                height="60vh"
              >
                <el-table-column
                  v-for="item in successTableColumns"
@@ -179,7 +178,7 @@
    </div>
    <template #footer>
      <div>
        <el-button size="small" type="primary" @click="submit"
        <el-button size="small" type="primary" @click="submit" :loading="submitLoading"
          >确定导入</el-button
        >
        <el-button size="small" @click="dialogVisible = false">取消</el-button>
@@ -284,6 +283,10 @@
      },
      batchApplyCodeTableData: {},
      savedList: [],
      tab1Loading: false,
      tab2Loading: false,
      tab1BottomTableLoading: false,
      submitLoading: false
    };
  },
@@ -338,11 +341,13 @@
      this.localCodeClassifyOid = data.codeClassifyOid;
      this.cloNamesList = data.cloNamesList;
      this.templateOid = data.oid;
      this.tab1Loading = true
      getResembleTable({
        codeClassifyOid:
          this.type === "batchApplyCode" ? data.codeRuleOid : this.templateOid,
        redisOid: this.redisOid + "-resemble",
      }).then((res) => {
        this.tab1Loading = false
        this.tab1Table = res.data.data.filter(
          (item) => !this.savedList.includes(item.oid)
        );
@@ -351,12 +356,14 @@
            this.tab1Table;
        }
      });
      this.tab2Loading = true
      // èŽ·å–æ­£ç¡®æ•°æ®
      getSuccessTable({
        codeClassifyOid:
          this.type === "batchApplyCode" ? data.codeRuleOid : this.templateOid,
        redisOid: this.redisOid + "-ok",
      }).then((res) => {
        this.tab2Loading = false
        this.tab2Table = res.data.data;
        if (this.tab2Table.length > 0 && this.type === "batchApplyCode") {
          this.batchApplyCodeTableData[data.codeRuleOid]["codeApply"] = {};
@@ -382,10 +389,12 @@
      if (!row || !row.oid) {
        return;
      }
      this.tab1BottomTableLoading = true
      getCurretnSelectedRowResemble({
        redisOid: this.redisOid + "-resemble-data",
        dataOid: row.oid,
      }).then((res) => {
        this.tab1BottomTableLoading = false
        this.currentSelectedResemble = res.data.data;
      });
    },
@@ -483,12 +492,12 @@
          },
        ];
      }
        this.submitLoading = true
      submitHistoryimport(params).then((res) => {
        console.log(res);
        this.submitLoading = false
                console.log(res);
        if (res.data.code === 200) {
          this.$message.success(res.data.msg);
        } else {
          this.$message.error(res.data.msg);
        }
      });
    },
@@ -572,6 +581,7 @@
    }
  }
  .right {
    transition: all 0.5s;
    margin-left: 20px;
    margin-top: 30px;
  }
Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue
@@ -309,6 +309,7 @@
        if (uniqueFlag === 'CODEEDIT') return this.editHandler()
        if (uniqueFlag === 'CODEBATCHADD') return this.openBatchImport('batchImportApply')
        if (uniqueFlag === 'CODEIMPORTHISTORY') return this.openBatchImport('historyImport')
        if (uniqueFlag === 'batchApplyCode') return this.openBatchImport('batchApplyCode')
        // æ‰¹é‡ç”³è¯·ç¼–码
        //  if(uniqueFlag === 'CODEEDIT') return this.openBatchImport('batchApplyCode')
        if (uniqueFlag === 'CODESTARTPROCESS') return this.setHandler()
@@ -441,10 +442,10 @@
      await TableData({
        templateOid: this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
        page: val.currentPage,
        limit: val.pageSize,
        page: this.page.currentPage,
        limit: this.page.pageSize,
      }).then((res) => {
        this.data = res.data.data;
        this.tableData = res.data.data;
      });
    },
    //多选
@@ -518,15 +519,19 @@
      console.log(val)
      addSaveCode(val).then(res=>{
        console.log(res)
        this.onLoad()
        this.$nextTick(() => {
          this.onLoad()
        })
      })
    },
    EditSumbit(val) {
      this.editvisible = false;
      console.log(val)
      editSaveCode(val).then(res=>{
        console.log(res)
        this.onLoad()
     editSaveCode(val).then(res=>{
       console.log(res)
       this.$nextTick(() => {
         this.onLoad()
       })
      })
    },
    openBatchImport(type) {
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -332,6 +332,20 @@
        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 = [];
@@ -373,11 +387,9 @@
            let resForm = {};
            const { defaultValue, formValue } =
              this.getDefaultValueAndFormValues(this.form);
            noData.forEach(item => {
              if (formValue[item]) {
                this.$delete(formValue, item)
              }
            })
            noData.forEach((item) => {
              this.$delete(formValue, item);
            });
            resForm.data = formValue;
            resForm = Object.assign({}, resForm, defaultValue);
            resForm.secDTOList = this.secVOList.map((item) => {
@@ -389,7 +401,6 @@
            resForm.codeClassifyOid = this.codeClassifyOid;
            resForm.codeRuleOid = this.codeRuleOid;
            resForm.templateOid = this.templateOid;
            console.log(resForm, 'ddd');
            this.$emit("submit", resForm);
          })
          .catch(() => {});
Source/UBCS-WEB/src/components/Tree/classifyTreeform.vue
@@ -122,6 +122,7 @@
      simOid:"",
      btmName:"",
      btmOid:"",
      btmId:"",
      masterInput:'',
      MasterSearchSelects:"",
      masterData:[],
@@ -237,7 +238,7 @@
          },
          {
            label:"编码规则",
            prop:"coderuleoidName",
            prop:"codeRuleOidName",
            labelWidth:128,
            disabled: true,
          },
@@ -307,7 +308,7 @@
            },
            {
              label:"编码规则",
              prop:"coderuleoidName",
              prop:"codeRuleOidName",
              labelWidth:128,
              focus:this.CodeFoucus,
              readonly: true,
@@ -333,36 +334,33 @@
    }
  },
  watch:{
    nodeClickList:{
      handler(newval,oldval){
        console.log('newVal',newval,oldval)
      },
      deep:true,
      immediate:true
    },
    TreeFlag:{
      handler(newval,oldval){
        console.log('树状态',newval,oldval)
      },
      deep:true,
      immediate:true
    }
  },
  created() {
  },
  methods: {
    submits(form,done){
      TreeEditSave(this.loneTreeNewForm).then(res=>{
        this.$message.success('修改成功');
        this.Editclose()
        this.$emit('referTreeForm');
        this.$emit('flushed');
        done()
      })
      if(this.TreeFlag){
        TreeEditSave(this.loneTreeNewForm).then(res=>{
          this.$message.success('修改成功');
          this.Editclose()
          this.$emit('referTreeForm');
          this.$emit('flushed');
          done()
        })
      }else {
        this.loneTreeNewForm.btmTypeName='';
        this.loneTreeNewForm.btmTypeId='';
        TreeEditSave(this.loneTreeNewForm).then(res=>{
          this.$message.success('修改成功');
          this.Editclose()
          this.$emit('referTreeForm');
          this.$emit('flushed');
          done()
        })
      }
    },
    error(err) {
      this.$message.success('请查看控制台');
      console.log(err)
      this.$message.success(err);
    },
    //编码规则查询
    SelectFindeHandler(){
@@ -396,10 +394,9 @@
      }else {
        this.MasterdialogVisible=false;
        this.masterSelectList=[]
        this.$set(this.loneTreeNewForm,'coderuleoidName',this.masterName)
        this.$set(this.loneTreeNewForm,'coderuleoid',this.masterOid)
        this.$set(this.loneTreeNewForm,'codeRuleOidName',this.masterName)
        this.$set(this.loneTreeNewForm,'codeRuleOid',this.masterOid)
        this.$emit('MasterHandler',this.loneTreeNewForm)
        // console.log(this.loneTreeNewForm)
      }
    },
    //编码多选
@@ -407,7 +404,6 @@
      this.masterSelectList=row;
      this.masterName=row[0].name;
      this.masterOid=row[0].oid;
      // console.log('oid',this.oid)
    },
    //编码接口
    MasterdefaultRend(masterParameter){
@@ -437,7 +433,6 @@
        this.$set(this.loneTreeNewForm,'codekeyattrrepeatoidName',this.KeyName)
        this.$set(this.loneTreeNewForm,'codekeyattrrepeatoid',this.KeyOid)
        this.$emit('MasterHandler',this.loneTreeNewForm)
        console.log(this.loneTreeNewForm)
      }
    },
    //关键属性查询
@@ -454,8 +449,8 @@
          'conditionMap[name]':this.SelectFInd
        }
        this.KeydefaultRend(masterParameter)
        this.SelectValue=""
        this.SelectFInd=""
        this.SelectValue="";
        this.SelectFInd="";
      }
    },
    //关键属性接口
@@ -516,7 +511,6 @@
      this.simSelectList=row;
      this.simName=row[0].name;
      this.simOid=row[0].oid;
      console.log('oid',this.oid)
    },
    //相似项项接口
    simdefaultRend(){
@@ -543,7 +537,7 @@
        this.BtmdialogVisible=false;
        this.btmSelectList=[]
        this.$set(this.loneTreeNewForm,'btmTypeName',this.btmName ||this.btmOid)
        this.$set(this.loneTreeNewForm,'btmTypeid',this.btmOid)
        this.$set(this.loneTreeNewForm,'btmTypeId',this.btmId)
        this.$emit('MasterHandler',this.loneTreeNewForm)
      }
    },
@@ -570,11 +564,11 @@
      this.btmSelectList=row;
      this.btmName=row[0].name;
      this.btmOid=row[0].oid;
      this.btmId=row[0].id;
    },
    //业务类型接口
    btmdefaultRend(masterParameter){
      referDataGrid({valueField:'id',isMuti:'false',...masterParameter}).then(res=>{
        // console.log(res)
        this.BtmData=res.data.data.records
      })
    }
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
@@ -749,7 +749,6 @@
        this.$set(this.TreeAddform,'codeRuleOidName',this.masterName)
        this.$set(this.TreeAddform,'codeRuleOid',this.masterOid)
        this.$emit('MasterHandler',this.loneTreeNewForm)
        console.log(this.loneTreeNewForm)
      }
    },
    //编码接口
@@ -777,7 +776,6 @@
        this.KeySelectLIst=[]
        this.$set(this.TreeAddform,'codeKeyAttrRepeatOidName',this.KeyName)
        this.$set(this.TreeAddform,'codeKeyAttrRepeatOid',this.KeyOid)
        console.log(this.TreeAddform)
      }
    },
    //关键属性查询
@@ -856,7 +854,6 @@
      this.simSelectList=row;
      this.simName=row[0].name;
      this.simOid=row[0].oid;
      console.log('oid',this.oid)
    },
    //相似项项接口
    simdefaultRend(){
@@ -973,7 +970,6 @@
      const data = this.TreeAddform;
      // data.btmtypename= this.TreeList.btmtypename
      this.$set(data, "parentCodeClassifyOid", this.nodeClickList.oid);
      console.log("data", data);
      TreeSave(data)
        .then(() => {
          this.$message({
@@ -1058,7 +1054,6 @@
        });
      } else {
        this.TreeEditFormVisible = true;
        console.log(this.TreeList)
      }
    },
    //树刷新
@@ -1149,7 +1144,6 @@
              this.codeClassifyOid = item.codeclassifyoid
              return item.codeclassifyoid == this.nodeClickList.oid
            }
            console.log('Formlist',this.Formlist)
          })
        }).catch(res => {
          this.$message.error(res)
@@ -1242,7 +1236,6 @@
          });
        })
      }
      console.log('123',this.codeClassifyOid)
    },
    //模板管理修改
    CrudRowUpdata(row,index,done) {
Source/UBCS-WEB/src/components/file/main.vue
@@ -384,7 +384,7 @@
        download(data)
      }else{
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");x
          this.$message.warning("请选择至少一条数据");
          return;
        }
        data.append('fileOids',this.oids)
Source/UBCS-WEB/src/components/flow-cycle/components/DetailPanel.vue
@@ -11,13 +11,14 @@
        <el-form-item label="名称" prop="name">
          <el-input v-model.trim="newRowData.name" :maxLength="20" clearable />
        </el-form-item>
        <el-form-item label="标签" prop="id">
        <el-form-item label="编号" prop="id">
          <el-input v-model.trim="newRowData.id" clearable />
        </el-form-item>
        <el-form-item label="起始状态" prop="startStatus">
          <el-select
            v-model="newRowData.startStatus"
            placeholder="请选择起始状态"
            :disabled="type === 'edit'"
            style="width: 100%"
          >
            <el-option
@@ -45,8 +46,27 @@
        <group-panel :status="status">
          <detail-form type="group" />
        </group-panel>
        <multi-panel :status="status" />
        <canvas-panel :status="status" />
        <node-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>
                </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" /> -->
      </template>
    </detail-panel>
  </div>
@@ -74,25 +94,31 @@
    DetailPanel,
    DetailForm,
  },
  props: ["rowData", "existNodes"],
  props: ["rowData", "existNodes", "type"],
  data() {
    return {
      newRowData: {
        startStatus: undefined,
        name: undefined,
        id: undefined,
        remark: undefined
        remark: undefined,
      },
      rules: {
        name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
        id: [
          { required: true, message: "标签不能为空", trigger: "blur" },
          { pattern: /^[A-z]+$/g, message: "标签只能输入英文", trigger: "blur" }
          {
            pattern: /^[A-z]+$/g,
            message: "标签只能输入英文",
            trigger: "blur",
          },
        ],
        startStatus: [
          { required: true, message: "起始状态不能为空", trigger: "change" },
        ],
      },
      eventList: [{evenName: '123123'}],
      currentActive: 0
    };
  },
  methods: {
@@ -107,6 +133,9 @@
        });
      });
    },
    editChange(row) {
      this.$set(row, 'isEdit', !row.isEdit)
    }
  },
  watch: {
    rowData: {
@@ -131,3 +160,20 @@
  },
};
</script>
<style lang="scss" scoped>
.event {
  margin-top: 20px;
  text-align: center;
}
.flex {
  margin-top: 10px;
  display: flex;
  justify-content: space-between;
}
.red {
  color: red;
}
.active {
  box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.4)
}
</style>
Source/UBCS-WEB/src/components/flow-cycle/flowchartEditor.vue
@@ -23,7 +23,7 @@
        </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"/>
            <editor-detail-panel :rowData="rowData" ref="EditorDetailPanel" :existNodes="existNodes" :type="type"/>
          </div>
        </div>
      </div>
@@ -83,7 +83,7 @@
      },
      tooltipShow: true,
      tooltipData: [],
      existNodes: []
      existNodes: this.chartData.nodes || []
    };
  },
@@ -207,6 +207,7 @@
      width: 300px;
      background-color: #fafafa;
      border-left: 1px solid #e6e9ed;
      overflow-y: scroll;
      .vfe-chart-panel-detail {
        box-sizing: border-box;
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
@@ -74,6 +74,7 @@
        border: true,
        index: true,
        selection: true,
        reserveSelection:true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        column: []
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -75,6 +75,7 @@
        border: true,
        index: true,
        selection: true,
        reserveSelection:true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        rowKey:'oid',
Source/UBCS-WEB/src/const/omd/enum.js
@@ -17,7 +17,7 @@
      prop: "name",
      search: true,
      slot: true,
      span: 24,
      span: 16,
      rules: [
        {
          required: true,
@@ -30,7 +30,8 @@
      label: "名称",
      prop: "label",
      search: true,
      align: "center",
      // align: "center",
      span: 16,
      rules: [
        {
          required: true,
@@ -82,8 +83,9 @@
    // },
    {
      label: "描述",
      width: 150,
      align: "center",
      span: 16,
      // width: 150,
      // align: "center",
      prop: "remark",
      // hide: true
    }
Source/UBCS-WEB/src/views/docking/data.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,183 @@
<template>
  <!--系统集成的系统信息页面-->
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               ref="crud"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
    </avue-crud>
  </basic-container>
</template>
<script>
import {getList} from "@/api/docking/data";
import {validatenull} from "@/util/validate";
import {mapGetters} from "vuex";
import website from "@/config/website";
export default {
name: "data",
  data(){
  return {
    loading: false,
    query: {},
    selectionList: [],
    page: {
      pageSize: 20,
      currentPage: 1,
      total: 0
    },
    data:[],
    option: {
      calcHeight: 30,
      tip: false,
      searchShow: false,
      searchMenuSpan: 6,
      border: true,
      index: true,
      viewBtn: true,
      selection: false,
      dialogClickModal: false,
      menu:false,
      column: [
        {
          label: "数据编码",
          prop: "id",
          search: true,
          sortable:true,
          width:150
        },
        {
          label: "图号",
          prop: "uniquecode",
          search: true,
          sortable:true
        },
        {
          label: '分类id',
          prop: 'classifyid',
          search: true,
          sortable:true,
          width: 250
        },
        {
          label: '分类名称',
          prop: 'classifyname',
          search: true,
          sortable:true
        },
        {
          label: '业务类型oid',
          prop: 'btmoid',
          sortable:true,
          width: 150
        },
        {
          label: '业务类型id',
          prop: 'btmid',
          sortable:true,
          width: 150
        },
        {
          label: '推送类型',
          prop: 'sendtype',
          search: true,
          sortable:true,
          width: 150
        },
        {
          label: '是否分解任务',
          prop: 'sendflag',
          search: true,
          sortable:true,
          width: 150,
          html:true,
          align:'center',
          type:'select',
          dicData: [{key:'true',value:'是'},{key:'false',value:'否'}],
          props: {
            label: "value",
            value: "key"
          },
          formatter : function (row, column) {
            return row.sendflag == 'true' || row.sendflag == '1' ? '<i class="el-icon-check"></i>' : '<i class="el-icon-close"></i>'
          }
        }
      ]
    }
  }
  },
  computed:{
    ...mapGetters([ "permission"]),
    permissionList() {
      return {
        addBtn: false,
        viewBtn: false,
        delBtn: false,
        editBtn: false
      };
    }
  },
  methods: {
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page);
      done();
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.crud.toggleSelection();
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
    refreshChange() {
      this.onLoad(this.page);
    },
    onLoad(page, params={}) {
      this.loading = true;
      var query={}
      if (this.query) {
        for (var key in this.query) {
          query['conditionMap["' + key + '"]'] = this.query[key];
        }
      }
      getList(page.currentPage, page.pageSize, Object.assign(params,this.params, query,this.query)).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      }).catch(error=>{
        this.$message.error(error);
        this.loading = false;
      });
    }
  }
}
</script>
<style scoped>
</style>
Source/UBCS-WEB/src/views/docking/loge.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
<template>
  <!--系统集成的系统日志页面-->
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               ref="crud"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
    </avue-crud>
  </basic-container>
</template>
<script>
import {getList} from "@/api/docking/loge";
import {validatenull} from "@/util/validate";
import {mapGetters} from "vuex";
export default {
  name: "loge",
  data(){
    return {
      loading: false,
      query: {},
      selectionList: [],
      page: {
        pageSize: 20,
        currentPage: 1,
        total: 0
      },
      data:[],
      option: {
        calcHeight: 30,
        tip: false,
        searchShow: false,
        searchMenuSpan: 6,
        border: true,
        index: true,
        viewBtn: true,
        selection: false,
        dialogClickModal: false,
        menu:false,
        column: [
          {
            label: "数据编码",
            prop: "id",
            search: true,
            sortable:true,
            width:150
          },
          {
            label: "图号",
            prop: "uniquecode",
            search: true,
            sortable:true,
            width:150
          },
          {
            label: '分类id',
            prop: 'classifyid',
            search: true,
            sortable:true,
            width: 250
          },
          {
            label: '分类名称',
            prop: 'classifyname',
            search: true,
            sortable:true,
            overHidden: true
          },
          {
            label: '系统编号',
            prop: 'systemcode',
            search: true,
            sortable:true,
            width: 150
          },
          {
            label: '系统名称',
            prop: 'systemname',
            search: true,
            sortable:true,
            width: 150
          },
          {
            label: '是否推送成功',
            prop: 'interfacestatus',
            search: true,
            sortable:true,
            width: 120,
            html:true,
            align:'center',
            type:'select',
            dicData: [{key:'true',value:'是'},{key:'false',value:'否'}],
            props: {
              label: "value",
              value: "key"
            },
            formatter : function (row, column) {
              return row.interfacestatus == 'true' || row.interfacestatus == '1' ? '<i class="el-icon-check"></i>' : '<i class="el-icon-close"></i>'
            }
          },
          {
            label: '返回msg',
            prop: 'msg',
            overHidden: true
          },
          {
            label: '记录时间',
            prop: 'createTime',
            sortable:true,
            width: 160
          }
        ]
      }
    }
  },
  computed:{
    ...mapGetters([ "permission"]),
    permissionList() {
      return {
        addBtn: false,
        viewBtn: false,
        delBtn: false,
        editBtn: false
      };
    }
  },
  methods: {
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page);
      done();
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.crud.toggleSelection();
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
    refreshChange() {
      this.onLoad(this.page);
    },
    onLoad(page, params={}) {
      this.loading = true;
      var query={}
      if (this.query) {
        for (var key in this.query) {
          query['conditionMap["' + key + '"]'] = this.query[key];
        }
      }
      getList(page.currentPage, page.pageSize, Object.assign(params,this.params, query,this.query)).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      }).catch(error=>{
        this.$message.error(error);
        this.loading = false;
      });
    }
  }
}
</script>
<style scoped>
</style>
Source/UBCS-WEB/src/views/docking/task.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,237 @@
<template>
  <!--系统集成的系统任务页面-->
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               ref="crud"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="primary"
                   size="small"
                   plain
                   icon="el-icon-refresh-right"
                   @click="handleSend">手动推送
        </el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
import {getList,sendData} from "@/api/docking/task";
import {validatenull} from "@/util/validate";
import {mapGetters} from "vuex";
import {remove} from "@/api/code/codeSynonym";
export default {
  name: "task",
  data(){
    return {
      loading: false,
      query: {},
      selectionList: [],
      page: {
        pageSize: 20,
        currentPage: 1,
        total: 0
      },
      data:[],
      option: {
        calcHeight: 30,
        tip: false,
        searchShow: false,
        searchMenuSpan: 6,
        border: true,
        index: true,
        viewBtn: true,
        selection: true,
        dialogClickModal: false,
        menu:false,
        column: [
          {
            label: "数据编码",
            prop: "id",
            search: true,
            sortable:true,
            width:150
          },
          {
            label: "图号",
            prop: "uniquecode",
            search: true,
            sortable:true,
            width:150
          },
          {
            label: '分类id',
            prop: 'classifyid',
            search: true,
            sortable:true,
            width: 250
          },
          {
            label: '分类名称',
            prop: 'classifyname',
            search: true,
            sortable:true
          },
          {
            label: '系统编号',
            prop: 'systemcode',
            search: true,
            sortable:true,
            width: 150
          },
          {
            label: '系统名称',
            prop: 'systemname',
            search: true,
            sortable:true,
            width: 150
          },
          {
            label: '数据情况',
            prop: 'sendtype',
            sortable:true,
            width: 100
          },
          {
            label: '是否推送成功',
            prop: 'sendflag',
            search: true,
            sortable:true,
            width: 120,
            html:true,
            align:'center',
            type:'select',
            dicData: [{key:'true',value:'是'},{key:'false',value:'否'}],
            props: {
              label: "value",
              value: "key"
            },
            formatter : function (row, column) {
              return row.sendflag == 'true' || row.sendflag == '1' ? '<i class="el-icon-check"></i>' : '<i class="el-icon-close"></i>'
            }
          },
          {
            label: '任务创建时间',
            prop: 'createTime',
            sortable:true,
            width: 150
          },
          {
            label: '最后推送时间',
            prop: 'lastModifyTime',
            sortable:true,
            width: 150
          }
        ]
      }
    }
  },
  computed:{
    ...mapGetters([ "permission"]),
    permissionList() {
      return {
        addBtn: false,
        viewBtn: false,
        delBtn: false,
        editBtn: false
      };
    },
    oids() {
      let oids = [];
      this.selectionList.forEach(ele => {
        oids.push(ele.oid);
      });
      return oids.join(",");
    }
  },
  methods: {
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page);
      done();
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.crud.toggleSelection();
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
    refreshChange() {
      this.onLoad(this.page);
    },
    onLoad(page, params = {}) {
      this.loading = true;
      var query = {}
      if (this.query) {
        for (var key in this.query) {
          query['conditionMap["' + key + '"]'] = this.query[key];
        }
      }
      getList(page.currentPage, page.pageSize, Object.assign(params, this.params, query, this.query)).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      }).catch(error => {
        this.$message.error(error);
        this.loading = false;
      });
    },
    handleSend() {
      let data = new FormData();
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      data.append('oid', this.oids)
      this.$confirm("是否推送数据?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return sendData(data)
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
        }).catch(error => {
        this.$message.error(error);
      });
    }
  }
}
</script>
<style scoped>
</style>
Source/UBCS-WEB/src/views/modeling/Business.vue
@@ -15,7 +15,7 @@
          <avue-tree id="basic" :data="treeData" :option="treeOption" @node-click="nodeClick" class="businessTree">
            <span class="el-tree-node__label" slot-scope="{ node, data }">
              <span>
                <i class="el-icon-star-on"></i>
                <i :class="(node || {}).level === 2 ? 'el-icon-star-off' : 'el-icon-folder-opened'"></i>
                {{ (node || {}).label }}
              </span>
            </span>
@@ -82,7 +82,7 @@
                  <i :class="icons.revisionRule"></i>
                  ç‰ˆæœ¬è§„则
                </template>
                {{ obj.revisionRuleName }}
                {{ obj.revisionRuleName ? obj.revisionRuleName+ '(' + obj.revisionRuleId + ')' : ''}}
              </el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                :contentStyle="descriptionOption.contentStyle">
@@ -90,7 +90,7 @@
                  <i :class="icons.lifeCycle"></i>
                  ç”Ÿå‘½å‘¨æœŸ
                </template>
                {{ obj.lifeCycleId }}
                {{ obj.lifeCycleName ? obj.lifeCycleName + '(' + obj.lifeCycleId + ')' : ''}}
              </el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                :contentStyle="descriptionOption.contentStyle">
@@ -176,6 +176,7 @@
        defaultExpandAll: true,
        title: '业务类型树',
        addBtn: false,
        menu:false,
        props: {
          labelText: '',
          label: 'label',
@@ -237,7 +238,8 @@
        revisionRule: 'el-icon-s-check',
        lifeCycle: 'el-icon-refresh-right',
        view: 'el-icon-view',
        desc: 'el-icon-chat-line-square'
        desc: 'el-icon-chat-line-square',
        referType: 'el-icon-search'
      },
      ref: {
        // ä»Žè¡¨ä¸­é€‰æ‹©dialog状态
@@ -278,7 +280,7 @@
    this.initDomainOption();
  },
  methods: {
    nodeClick(data) {
    nodeClick(data,node,leaf) {
      if (data.oid) {
        getDetail(data.oid).then(res => {
          this.obj = res.data.data;
@@ -347,6 +349,7 @@
    },
    businessAdd() {
      this.$refs.btmAdd.showSubmitDialog = true;
      this.$refs.btmAdd.btmType = {};
      this.ifRefreshBtmAddRefresh();
    },
    businessEdit() {
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
@@ -19,21 +19,32 @@
        <el-input v-model="btmType.tableName" :prefix-icon="icons.tableName"></el-input>
      </el-form-item>
      <el-form-item label="所属领域" label-width="100px" prop="domain" class="domainSelect">
        <el-select v-model="btmType.bizDomain" :prefix-icon="icons.domain">
        <el-select  placeholder="请选择领域" v-model="btmType.bizDomain" :prefix-icon="icons.domain">
          <el-option v-for="item in domainOption"
                     :label="item.label" :value="item.value" :key="item.value">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="版本规则" label-width="100px">
        <el-input v-model="btmType.revisionRuleName" :prefix-icon="icons.revisionRule" class="revisionRule"
                  @focus="openRevision" clearable @clear="clearRevision">
          <i slot="suffix" class="el-input__icon el-icon-search"></i>
        <el-input v-model="btmType.revisionRuleName"
                  :prefix-icon="icons.revisionRule"
                  class="revisionRule"
                  @focus="openRevision"
                  clearable
                  @clear="clearRevision"
                  :suffix-icon="icons.referType"
                  placeholder="请选择,留空则不进行管理">
        </el-input>
      </el-form-item>
      <el-form-item label="生命周期" label-width="100px">
        <el-input v-model="btmType.lifeCycleId" :prefix-icon="icons.lifeCycle">
          <i slot="suffix" class="el-input__icon el-icon-search"></i>
        <el-input v-model="btmType.lifeCycleName"
                  :prefix-icon="icons.lifeCycle"
                  class="lifeCycle"
                  @focus="openLifeCycle"
                  clearable
                  @clear="clearLifeCycle"
                  :suffix-icon="icons.referType"
                  placeholder="请选择,留空则不进行管理">
        </el-input>
      </el-form-item>
      <div>
@@ -118,7 +129,10 @@
                 :data="revisionRef.data"
                 :page.sync="revisionRef.page"
                 ref="revisionRef"
                 @row-click="revisionClick">
                 @row-click="revisionClick"
                 v-loading="revisionRef.loading"
                @search-change="searchRevisionRule"
                 @search-reset="clearSearchRevisionRule">
        <template slot="radio"
                  slot-scope="{row}">
          <el-radio v-model="revisionRef.selectRow"
@@ -131,7 +145,37 @@
        <el-button @click="cancelRevision">取消</el-button>
      </div>
    </el-dialog>
    <!-- ç”Ÿå‘½å‘¨æœŸçš„参照 -->
    <el-dialog title="请选择生命周期"
               :visible.sync="lifeCycleRef.visible"
               append-to-body
               width="80%">
      <avue-crud class="lifeCycleRef"
                 :option="lifeCycleRef.option"
                 :data="lifeCycleRef.data"
                 :page.sync="lifeCycleRef.page"
                 ref="lifeCycleRef"
                 @row-click="lifeCycleClick"
                 v-loading="lifeCycleRef.loading"
                @search-change="searchLifeCycle"
                 @search-reset="clearSearchLifeCycle">
        <template slot="radio"
                  slot-scope="{row}">
          <el-radio v-model="lifeCycleRef.selectRow"
                    :label="row.$index">&nbsp;
          </el-radio>
        </template>
      </avue-crud>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="confirmLifeCycle">确定</el-button>
        <el-button @click="cancelLifeCycle">取消</el-button>
      </div>
    </el-dialog>
  </el-dialog>
</template>
@@ -140,6 +184,7 @@
import {add, update} from '@/api/omd/btmType';
import {queryPage} from '@/api/omd/OmdAttribute';
import {getPage} from '@/api/omd/revisionRule';
import {getList} from '@/api/modeling/cycle';
export default {
  name: 'BusinessAdd',
@@ -287,6 +332,71 @@
          currentPage: 1,
          pageSize: 10
        },
        loading: false,
        selectRow: '',
        searchKey: null,
        option: {
          height: 360,
          addBtn: false,
          refreshBtn: false,
          columnBtn: false,
          menu: false,
          border: true,
          reserveSelection: true,
          searchMenuSpan: 8,
          searchShowBtn: false,
          highlightCurrentRow: true,
          column: [{
            label: '选择',
            prop: 'radio',
            width: 60,
            hide: false
          },
            {
              label: '英文名称',
              prop: 'id',
              search: true
            },
            {
              label: "中文名称",
              prop: "name",
              search: true,
            },
            {
              label: "跳跃字符",
              prop: "skipCode"
            },
            {
              label: "初始值",
              prop: "startCode"
            },
            {
              label: "步长",
              prop: "serialStep"
            },
            {
              label: "前缀",
              prop: "prefixCode"
            },
            {
              label: "后缀",
              prop: "suffixCode"
            },
            {
              label: "描述",
              prop: "description",
              type: "textarea"
            }
          ]
        },
      },
      lifeCycleRef: {
        visible: false,
        page: {
          currentPage: 1,
          pageSize: 10
        },
        loading: false,
        selectRow: '',
        searchKey: null,
        option: {
@@ -506,22 +616,48 @@
      row.$cellEdit = false;
    },
    // æ‰“开版本规则参照
    async openRevision() {
      await getPage().then(res => {
     openRevision() {
      this.revisionRef.visible = true;
      this.revisionRuleOnLoad();
    },
    // ç‰ˆæœ¬å‚照列表的默认查询方法
    revisionRuleOnLoad(){
      this.revisionRef.loading = true;
      getPage().then(res => {
        this.revisionRef.data = res.data.data.records;
      });
      this.revisionRef.visible = true;
      setTimeout(() => {
        this.revisionRef.loading = false;
      }, 600)
      this.$nextTick(() => {
        this.$refs.revisionRef.refreshTable();
      });
    },
    // æ‰“开版本规则参照
    openLifeCycle() {
      this.lifeCycleRef.visible = true;
      this.lifeCycleOnLoad();
    },
    // ç”Ÿå‘½å‘¨æœŸåˆ—表的默认查询方法
    lifeCycleOnLoad(){
      this.lifeCycleRef.loading = true;
      getList().then(res => {
        this.lifeCycleRef.data = res.data.data.records;
      });
      setTimeout(() => {
        this.lifeCycleRef.loading = false;
      }, 600)
      this.$nextTick(() => {
        this.$refs.lifeCycleRef.refreshTable();
      });
    },
    // å…³é—­ç‰ˆæœ¬è§„则参照弹窗
    closeRevisionDialog() {
      this.revisionRef.visible = false;
    },
    // ç‰ˆæœ¬è§„则参照列表检索
    revisionRefSearch() {
    },
    // ç‰ˆæœ¬è§„则选中事件
    revisionChange() {
    // å…³é—­ç”Ÿå‘½å‘¨æœŸå‚照弹窗
    closeLifeCycleDialog() {
      this.lifeCycleRef.visible = false;
    },
    // ç¡®è®¤é€‰ä¸­ç‰ˆæœ¬è§„则
    confirmRevision() {
@@ -531,11 +667,24 @@
      this.btmType.inputRevisionFlag = false;
      this.cancelRevision();
    },
    // ç¡®è®¤é€‰ä¸­ç”Ÿå‘½å‘¨æœŸ
    confirmLifeCycle() {
      this.btmType.lifeCycleFlag = true;
      this.btmType.lifeCycleId = this.lifeCycleRef.selectData.id;
      this.btmType.lifeCycleName = this.lifeCycleRef.selectData.name;
      this.cancelLifeCycle();
    },
    // å–消选中版本规则
    cancelRevision() {
      this.revisionRef.selectRow = '';
      this.revisionRef.selectData = {};
      this.closeRevisionDialog();
    },
    // å–消选中生命周期
    cancelLifeCycle() {
      this.lifeCycleRef.selectRow = '';
      this.lifeCycleRef.selectData = {};
      this.closeLifeCycleDialog();
    },
    // ç‰ˆæœ¬è§„则单选
    revisionClick(row) {
@@ -545,15 +694,90 @@
        name: row.name,
      };
    },
    // ç”Ÿå‘½å‘¨æœŸå•选
    lifeCycleClick(row) {
      this.lifeCycleRef.selectRow = row.$index;
      this.lifeCycleRef.selectData = {
        id: row.id,
        name: row.name,
      };
    },
    // å–消版本规则
    clearRevision() {
      this.$delete(this.btmType, 'revisionFlag');
      this.$delete(this.btmType, 'revisionRuleId');
      this.$delete(this.btmType, 'revisionRuleName');
      this.$delete(this.btmType, 'inputRevisionFlag');
    },
    // å–消生命周期
    clearLifeCycle() {
      this.$delete(this.btmType, 'lifeCycleFlag');
      this.$delete(this.btmType, 'lifeCycleId');
      this.$delete(this.btmType, 'lifeCycleName');
    },
    // è¡¨å•重置
    resetForm() {
      this.btmType = {};
      this.$refs.form.resetFields();
    },
    /**
     * æœç´¢ç‰ˆæœ¬è§„则
     * @param params æœç´¢æ¡†è¾“入值  {id: '',name: ''} ç›´æŽ¥èŽ·å–å°±è¡Œ
     * @param done æ‰§è¡Œå®ŒæˆåŽçš„回调
     */
    searchRevisionRule(params,done){
      let condition = {};
      if (params.id){
          condition['id_like'] = params.id;
      }
      if (params.name){
          condition['name_like'] = params.name;
      }
      this.revisionRef.loading = true;
      getPage(this.revisionRef.page.currentPage,this.revisionRef.page.pageSize,condition).then(res => {
        this.revisionRef.data = res.data.data.records;
      });
      setTimeout(() => {
        done();
        this.revisionRef.loading = false;
      }, 600);
      this.$nextTick(() => {
        this.$refs.revisionRef.refreshTable();
      });
    },
    /**
     * æœç´¢ç”Ÿå‘½å‘¨æœŸ
     * @param params æœç´¢æ¡†è¾“入值
     * @param done æ‰§è¡Œå®ŒæˆåŽçš„回调
     */
    searchLifeCycle(params,done){
      let condition = {};
      if (params.id){
        condition['id_like'] = params.id;
      }
      if (params.name){
        condition['name_like'] = params.name;
      }
      this.lifeCycleRef.loading = true;
      getList(this.lifeCycleRef.page.currentPage,this.lifeCycleRef.page.pageSize,condition).then(res => {
        this.lifeCycleRef.data = res.data.data.records;
      });
      setTimeout(() => {
        done();
        this.lifeCycleRef.loading = false;
      }, 600);
      this.$nextTick(() => {
        this.$refs.lifeCycleRef.refreshTable();
      });
    },
    // å–消版本规则搜索
    clearSearchRevisionRule(item){
      this.revisionRuleOnLoad();
    },
    // å–消生命周期搜索
    clearSearchLifeCycle(item){
      this.lifeCycleOnLoad();
      console.log(item);
    }
  }
}
@@ -569,27 +793,27 @@
  display: none !important;
}
.lifeCycleRef > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu {
  display: none !important;
}
.btmTypeForm > .el-form-item > .el-form-item__content > .el-input > .el-input__inner {
  width: 200px;
  width: 260px;
}
.domainSelect > .el-form-item__content > .el-select > .el-input > .el-input__inner {
  width: 200px;
  width: 260px;
}
.viewFlag {
  width: 305px;
  width: 360px;
}
.viewInput > .el-form-item__content > .el-input > .el-input__inner {
  width: 200px;
  width: 630px;
}
.descClass > .el-input__inner {
  width: 57vw
}
#descId {
  width: 57vw;
  width: 1000px;
}
</style>
Source/UBCS-WEB/src/views/modeling/cycle.vue
@@ -5,9 +5,13 @@
      :option="option"
      :page="page"
      :table-loading="loading"
      selection
      @size-change="search('size', ...arguments)"
      @current-change="search('current', ...arguments)"
      @refresh-change="search"
      @search-change="search('search', ...arguments)"
      @search-reset="search('reset', ...arguments)"
      @selection-change="selectionChange"
    >
      <template slot-scope="scope" slot="menuLeft">
        <el-button
@@ -17,12 +21,22 @@
          @click="openDialog('add', {})"
          >新增</el-button
        >
        <el-button
          type="danger"
          icon="el-icon-delete"
          size="small"
          @click="batchDel()"
          v-if="selectedData.length > 0"
          :loading="delLoading"
          >删除</el-button
        >
      </template>
      <template slot-scope="{ row, index }" slot="menu">
        <el-button
          type="text"
          icon="el-icon-edit"
          size="mini"
          :loading="row.editLoading"
          @click="openDialog('edit', row)"
          >编辑</el-button
        >
@@ -30,8 +44,18 @@
          type="text"
          icon="el-icon-view"
          size="mini"
          :loading="row.detailLoading"
          @click="openDialog('detail', row)"
          >预览</el-button
        >
        <el-button
          class="btn_link_del"
          type="text"
          icon="el-icon-delete"
          size="mini"
          :loading="row.delLoading"
          @click="rowDel(row)"
          >删除</el-button
        >
      </template></avue-crud
    >
@@ -58,7 +82,13 @@
        @save-data="save"
      />
      <template #footer v-if="type !== 'detail'">
        <el-button type="primary" size="mini" @click="submit">保存</el-button>
        <el-button
          type="primary"
          size="mini"
          @click="submit"
          :loading="submitLoading"
          >保存</el-button
        >
        <el-button type="" size="mini" @click="visible = false">取消</el-button>
      </template>
    </el-dialog>
@@ -73,7 +103,12 @@
  components: { CycleFlow },
  data() {
    return {
      form: {},
      form: {
        // 'contionMap[id]': 'qwe'
        // contionMap: [
        //   {id: 'qwe'}
        // ]
      },
      page: {
        pageSize: 10,
        total: 0,
@@ -81,7 +116,8 @@
        layout: "total, sizes, prev, pager, next, jumper",
      },
      option: {
        searchMenuSpan: 12,
        selection: true,
        searchMenuSpan: 6,
        searchMenuPosition: "right",
        border: true,
        align: "center",
@@ -94,6 +130,7 @@
          {
            label: "编号",
            prop: "id",
            search: true,
          },
          {
            label: "名称",
@@ -102,7 +139,7 @@
          },
          {
            label: "起始状态",
            prop: "startStatusName",
            prop: "startStatus",
            search: true,
          },
          {
@@ -120,6 +157,9 @@
      dialogWidth: "50%",
      type: "detail",
      loading: false,
      delLoading: false,
      submitLoading: false,
      selectedData: [],
    };
  },
  created() {
@@ -135,10 +175,18 @@
          total: 0,
          currentPage: 1,
        };
      } else if (type === "size") {
        this.page.pageSize = params;
      } else if (type === "current") {
        this.page.currentPage = params;
      }
      this.loading = true;
      const { limit, page } = this.page;
      API.getList(Object.assign({}, params, { limit, page })).then((res) => {
      API.getList(
        Object.assign({}, params, {
          size: this.page.pageSize,
          current: this.page.currentPage,
        })
      ).then((res) => {
        this.loading = false;
        this.data = res.data.data.records;
        this.page.total = res.data.data.total;
@@ -162,52 +210,126 @@
          this.$set(row, "detailLoading", false);
          this.$set(row, "editLoading", false);
          this.rowData = row;
          this.nodesEdgesData = {nodes: res.nodes, edges: res.edges}
          const nodes = res.data.data.nodes.map((item) => {
            item.label = item.id;
            item.index = item.indexNum;
            return item;
          });
          const edges = res.data.data.edges.map((item) => {
            item.label = item.name;
            item.width = 80;
            item.height = 48;
            item.index = 1;
            item.index = item.indexNum;
            return item;
          });
          this.nodesEdgesData = { nodes, edges };
          this.visible = true;
        });
      } else {
        this.nodesEdgesData = {};
        this.rowData = {};
        this.title = "新增生命周期流程图";
        this.dialogWidth = "95%";
        this.visible = true;
      }
    },
    // é€‰ä¸­æ•°æ®
    selectionChange(selectedData) {
      this.selectedData = selectedData;
    },
    // åˆ é™¤
    rowDel(row) {
      this.$confirm("确认删除该条数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        this.$set(row, "delLoading", true);
        API.del({ oid: row.oid, id: row.id })
          .then((res) => {
            this.$set(row, "delLoading", false);
            if (res.data.code === 200) {
              this.$message.success("删除成功!");
              this.search();
            }
          })
          .catch(() => {
            this.$set(row, "delLoading", false);
          });
      });
    },
    batchDel() {
      this.$confirm("确认删除所选数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        const data = this.selectedData.map((item) => {
          return {
            id: item.id,
            oid: item.oid,
          };
        });
        this.delLoading = true;
        API.del(data, true)
          .then((res) => {
            this.delLoading = false;
            if (res.data.code === 200) {
              this.$message.success("删除成功!");
              this.search();
            }
          })
          .catch(() => {
            this.delLoading = false;
          });
      });
    },
    async submit() {
      const newRowData = await this.$refs.vueFlowchartEditor.getNewRowData();
      console.log(newRowData, "newRowDatanewRowData");
      if (!newRowData) {
        return;
      }
      const flowData = this.$refs.vueFlowchartEditor.getFlowData();
      const flowData = await this.$refs.vueFlowchartEditor.getFlowData();
      if (Array.isArray(flowData.nodes)) {
        flowData.nodes = flowData.nodes.map((item) => {
          item.name = item.id;
          item.indexNum = item.index;
          return item;
        });
      }
      if (Array.isArray(flowData.edges)) {
        flowData.edges = flowData.edges.map((item) => {
          item.name = item.label;
          item.indexNum = item.index;
          return item;
        });
      }
      let params = {
        ...flowData,
        ...newRowData,
        ...flowData,
      };
      console.log(flowData, newRowData);
      API.add(params).then((res) => {
        console.log(res, "res");
      });
    },
  },
  watch: {
    page: {
      deep: true,
      immediate: true,
      handler(newV) {
        this.page.page = newV.currentPage;
        this.page.limit = newV.pageSize;
      },
      this.submitLoading = true;
      let APIFun = API.add;
      if (this.type === "edit") {
        APIFun = API.edit;
        this.$delete(params, "id");
      }
      APIFun(params)
        .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;
        });
    },
  },
};
@@ -224,4 +346,7 @@
  margin: 0;
  padding: 0;
}
.btn_link_del {
  color: red;
}
</style>
Source/UBCS-WEB/vue.config.js
@@ -26,9 +26,9 @@
    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://192.168.1.46:37000',
        // target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        // target: 'http://192.168.1.104:37000',
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeClassifyDTO.java
@@ -1,44 +1,44 @@
package com.vci.ubcs.code.dto.datapush.classify;
//import com.thoughtworks.xstream.annotations.XStreamAlias;
//import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
//@XStreamAlias("classify")
@XStreamAlias("classify")
public class NodeClassifyDTO {
        /**
         * åˆ†ç±»id
         */
        //@XStreamAsAttribute
        @XStreamAsAttribute
        private String id;
        /***
         * åˆ†ç±»åç§°
         */
        //@XStreamAsAttribute
        @XStreamAsAttribute
        private String name;
        /***
         * çˆ¶èŠ‚ç‚¹id
         */
       // @XStreamAsAttribute
        @XStreamAsAttribute
        private String pid;
        /***
         * åˆ†ç±»ä»£å·
         */
        //@XStreamAsAttribute
       @XStreamAsAttribute
        private String classCode;
        /***
         * æè¿°
         */
        //@XStreamAsAttribute
        @XStreamAsAttribute
        private  String description;
        /***
         * åˆ†ç±»é“¾æŽ¥è·¯å¾„
         */
        //@XStreamAsAttribute
        @XStreamAsAttribute
        private  String fullPathName;
        /***
         * åˆ†ç±»çŠ¶æ€
         */
        //@XStreamAsAttribute
        @XStreamAsAttribute
        private String lcStatus;
        public String getId() {
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeDataDTO.java
@@ -1,8 +1,8 @@
package com.vci.ubcs.code.dto.datapush.classify;
//import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAlias;
//@XStreamAlias("data")
@XStreamAlias("data")
public class NodeDataDTO {
    private NodeLibraryDTO library;
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/classify/NodeLibraryDTO.java
@@ -1,14 +1,20 @@
package com.vci.ubcs.code.dto.datapush.classify;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;
//@XStreamAlias("library")
@XStreamAlias("library")
public class NodeLibraryDTO {
    //@XStreamAsAttribute
    @XStreamAsAttribute
    private String id;
    //@XStreamAsAttribute
    @XStreamAsAttribute
    private String name;
    //@XStreamImplicit
    @XStreamAsAttribute
    private String classCode;
   @XStreamImplicit
    private List<NodeClassifyDTO> classify;
    public String getId() {
@@ -35,12 +41,21 @@
        this.classify = classify;
    }
    @Override
    public String toString() {
        return "NodeLibraryDTO{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", classify=" + classify +
                '}';
    }
    public String getClassCode() {
        return classCode;
    }
    public void setClassCode(String classCode) {
        this.classCode = classCode;
    }
    @Override
    public String toString() {
        return "NodeLibraryDTO{" +
            "id='" + id + '\'' +
            ", name='" + name + '\'' +
            ", classCode='" + classCode + '\'' +
            ", classify=" + classify +
            '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeJosnDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.vci.ubcs.code.dto.datapush.data;
public class NodeJosnDTO {
    private NodedataDTO data;
    public NodedataDTO getData() {
        return data;
    }
    public void setData(NodedataDTO data) {
        this.data = data;
    }
    @Override
    public String toString() {
        return "NodeJosnDTO{" +
                "data=" + data +
                '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeObjectDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.vci.ubcs.code.dto.datapush.data;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;
@XStreamAlias("object")
public class NodeObjectDTO {
    @XStreamAsAttribute
   private String  code="" ;
    @XStreamAsAttribute
    private String status="" ;
    @XStreamAsAttribute
    private String library="";
    @XStreamAsAttribute
    private String classCode="";
    @XStreamImplicit
    private List<NodeProDTO> pro;
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getLibrary() {
        return library;
    }
    public void setLibrary(String library) {
        this.library = library;
    }
    public String getClassCode() {
        return classCode;
    }
    public void setClassCode(String classCode) {
        this.classCode = classCode;
    }
    public List<NodeProDTO> getPro() {
        return pro;
    }
    public void setPro(List<NodeProDTO> pro) {
        this.pro = pro;
    }
    @Override
    public String toString() {
        return "NodeObjectDTO{" +
                "code='" + code + '\'' +
                ", status='" + status + '\'' +
                ", library='" + library + '\'' +
                ", classCode='" + classCode + '\'' +
                ", pro=" + pro +
                '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodeProDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.vci.ubcs.code.dto.datapush.data;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("pro")
public class NodeProDTO {
    @XStreamAsAttribute
    private String filedName;
    @XStreamAsAttribute
    private String outname;
    @XStreamAsAttribute
    private String filedValue;
    public String getFiledName() {
        return filedName;
    }
    public void setFiledName(String filedName) {
        this.filedName = filedName;
    }
    public String getOutname() {
        return outname;
    }
    public void setOutname(String outname) {
        this.outname = outname;
    }
    public String getFiledValue() {
        return filedValue;
    }
    public void setFiledValue(String filedValue) {
        this.filedValue = filedValue;
    }
    @Override
    public String toString() {
        return "NodeProDTO{" +
                "filedName='" + filedName + '\'' +
                ", outname='" + outname + '\'' +
                ", filedValue='" + filedValue + '\'' +
                '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/NodedataDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.vci.ubcs.code.dto.datapush.data;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;
@XStreamAlias("data")
public class NodedataDTO {
    @XStreamImplicit
    private List<NodeObjectDTO> object;
    public List<NodeObjectDTO> getObject() {
        return object;
    }
    public void setObject(List<NodeObjectDTO> object) {
        this.object = object;
    }
    @Override
    public String toString() {
        return "NodedataDTO{" +
                "object=" + object +
                '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/data.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
{
  "data": {
    "object": {
      "code": "0201040133",
      "status": "Released",
      "library": "wupin",
      "classCode": "020104",
      "pro": [
        {
          "filedName": "xbj",
          "outname": "标记"
        },
        {
          "filedName": "xinghaoguige",
          "outname": "规格",
          "filedValue": "M4"
        },
        {
          "filedName": "lastmodifier",
          "outname": "最后修改人",
          "filedValue": "weidy(魏大勇)"
        },
        {
          "filedName": "cpxs",
          "outname": "产品型式"
        },
        {
          "filedName": "secondfl",
          "outname": "二级管理分类",
          "filedValue": "紧固件"
        },
        {
          "filedName": "clph",
          "outname": "材料牌号",
          "filedValue": "HB1-24321"
        },
        {
          "filedName": "thrifl",
          "outname": "三级管理分类",
          "filedValue": "螺钉"
        },
        {
          "filedName": "xbzjbmc",
          "outname": "标准级别名称"
        },
        {
          "filedName": "firstfl",
          "outname": "一级管理分类",
          "filedValue": "标准件"
        },
        {
          "filedName": "xgzccdgcd",
          "outname": "关注尺寸的公差带"
        },
        {
          "filedName": "zjxh",
          "outname": "子件序号"
        },
        {
          "filedName": "bmcl",
          "outname": "表面处理",
          "filedValue": "电镀"
        },
        {
          "filedName": "id",
          "outname": "物料编码",
          "filedValue": "0201040133"
        },
        {
          "filedName": "createtime",
          "outname": "创建时间",
          "filedValue": "2022-12-23 17:12:50.635"
        },
        {
          "filedName": "creator",
          "outname": "创建人",
          "filedValue": "weidy(魏大勇)"
        },
        {
          "filedName": "xwlwwmc",
          "outname": "物品外文名称"
        },
        {
          "filedName": "xxndj",
          "outname": "性能等级"
        },
        {
          "filedName": "xzjmc",
          "outname": "子件名称"
        },
        {
          "filedName": "beizhushuoming",
          "outname": "备注说明"
        },
        {
          "filedName": "revisionvalue",
          "outname": "版本",
          "filedValue": "1"
        },
        {
          "filedName": "name",
          "outname": "物品中文名称",
          "filedValue": "半圆头螺钉1"
        },
        {
          "filedName": "xfjjstj",
          "outname": "附加技术条件"
        },
        {
          "filedName": "xbxkxs",
          "outname": "保险孔型式",
          "filedValue": "无"
        },
        {
          "filedName": "lastmodifytime",
          "outname": "最后修改时间",
          "filedValue": "2022-12-23 17:12:50.635"
        },
        {
          "filedName": "zhiliangbz",
          "outname": "标准号",
          "filedValue": "HB1-2431-M4*512"
        },
        {
          "filedName": "materialclassify",
          "outname": "所属分类代号",
          "filedValue": "020104"
        },
        {
          "filedName": "lcstatus",
          "outname": "状态",
          "filedValue": "Released"
        }
      ]
    }
  }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/data/result.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
{
  "data": {
    "object": {
      "code": "0201040133",
      "oid": "0000001",
      "erroid": "0",
      "msg": "测试成功"
    }
  }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeDataDTO.java
@@ -1,14 +1,14 @@
package com.vci.ubcs.code.dto.datapush.result;
//import com.thoughtworks.xstream.annotations.XStreamAlias;
//import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;
//@XStreamAlias("data")
@XStreamAlias("data")
public class ResultNodeDataDTO {
    //@XStreamImplicit
    @XStreamImplicit
    private List<ResultNodeObjectDTO> object;
    public List<ResultNodeObjectDTO> getObject() {
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/datapush/result/ResultNodeObjectDTO.java
@@ -1,29 +1,29 @@
package com.vci.ubcs.code.dto.datapush.result;
//import com.thoughtworks.xstream.annotations.XStreamAlias;
//import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
//@XStreamAlias("object")
@XStreamAlias("object")
public class ResultNodeObjectDTO {
    /***
     * æ•°æ®ç¼–码
     */
    //@XStreamAsAttribute
    @XStreamAsAttribute
    private  String code;
    /***
     * æ•°æ®oid
     */
    //@XStreamAsAttribute
    @XStreamAsAttribute
    private  String oid;
    /***
     * é”™è¯¯æ ‡è¯†
     */
    //@XStreamAsAttribute
   @XStreamAsAttribute
    private String erroid;
    /***
     * é”™è¯¯ä¿¡æ¯
     */
    //@XStreamAsAttribute
    @XStreamAsAttribute
    private String msg;
    public String getCode() {
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/DockingSystemConfig.java
@@ -286,7 +286,7 @@
    /***
     *  æŽ¨é€ç±»åž‹ 1:数据推送,2分类推送,默认数据推送,3:编码申请,4:编码更改(更改、状态,回收),5:分类查询,6:含规则信息的分类查询,7:数据查询
     */
    @ApiModelProperty(value = "推送类型 1:数据推送,2分类推送,默认数据推送,3:编码申请,4:编码更改(更改、状态,回收),5:分类查询,6:含规则信息的分类查询,7:数据查询")
    @ApiModelProperty(value = "推送类型 1:数据推送,2分类推送,3:编码申请,4:编码更改(状态,回收),5:分类查询,6:含规则信息的分类查询,7:数据查询")
    private String pushType;
    /***
     * æŽ¨é€ç±»åž‹æ˜¾ç¤ºå€¼
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java
@@ -29,5 +29,7 @@
    private String type;
    private Integer level;
    private List<BtmTreeVO> childList;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/enumpack/sysIntegrationPushTypeEnum.java
@@ -8,13 +8,37 @@
@VciEnum(name = MdmEnumIdConstant.SYS_INTEGRATION_PUSH_TYPE,text = "系统接口推送方式",description = "")
public enum sysIntegrationPushTypeEnum implements BaseEnum {
    /**
     * åˆ†ç±»æŽ¨é€æ–¹å¼
     * æ•°æ®æŽ¨é€
     */
    JSON("1","数据推送"),
    PUSHTYPE_DATA("1","数据推送"),
    /**
     * Xml格式
     * åˆ†ç±»æŽ¨é€
     */
    XML("2","分类推送");
    PUSHTYPE_CLASSIFY("2","分类推送"),
    /***
     * ç¼–码申请
     */
    ACCPET_APPCODE("3","编码申请"),
    /***
     * ç¼–码维护
     */
    ACCPET_EDITCODE("4","编码维护"),
    /***
     * åˆ†ç±»æŸ¥è¯¢
     */
    ACCPET_QUERYCLAFILY("5","分类查询"),
    /***
     * å«ç¼–码规则的分类查询
     */
    ACCPET_QUERYCLAFILYRULE("6","含编码规则的分类查询"),
    /***
     * æ•°æ®æŸ¥è¯¢
     */
    ACCPET_QUERYDATA("7","数据查询");
    /**
     * æžšä¸¾çš„值
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -2,19 +2,44 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.datapush.classify.JsonRootDataDTO;
import com.vci.ubcs.code.dto.datapush.classify.NodeClassifyDTO;
import com.vci.ubcs.code.dto.datapush.classify.NodeDataDTO;
import com.vci.ubcs.code.dto.datapush.classify.NodeLibraryDTO;
import com.vci.ubcs.code.dto.datapush.data.NodeJosnDTO;
import com.vci.ubcs.code.dto.datapush.data.NodeObjectDTO;
import com.vci.ubcs.code.dto.datapush.data.NodeProDTO;
import com.vci.ubcs.code.dto.datapush.data.NodedataDTO;
import com.vci.ubcs.code.dto.datapush.result.ResultJsonDTO;
import com.vci.ubcs.code.dto.datapush.result.ResultNodeDataDTO;
import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
import com.vci.ubcs.code.util.HttpUtils;
import com.vci.ubcs.code.util.WsErpClientUtil;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.starter.web.enumpck.UserSecretEnum;
import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciQueryWrapperForDO;
import com.vci.ubcs.starter.web.util.WebUtil;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import javax.annotation.Resource;
import java.util.*;
@@ -32,10 +57,15 @@
@Service
@Slf4j
public class CodeDuckingSyncServiceImpl implements ICodeDuckingSyncService {
    @Value("${dataSyncPush.dataParamName:xmlData}")
    public String DATA_PARAM_NAME;
    @Resource
    private  IDockingSystemService dockingSystemService;
    private  MdmEngineService  mdmEngineServiceI;
    @Resource
    private IDockingLogeService dockingLogeService;
    @Resource
    private IDockingDataService dockingDataService;
    @Resource
@@ -44,26 +74,78 @@
    private IDockingSystemConfigService dockingSystemConfigService;
    @Resource
    private ICodeClassifyService codeClassifyService;
    /***
     * resdis缓存服务
     */
    @Resource
    private BladeRedis bladeRedis;
    @Resource
    private IDockingSysIntParamService dockingSysIntParamService;
    @Resource
    private IDockingSysIntHeaderService dockingSysIntHeaderService;
    @Override
    public void DockingDataSyncScheduing() {
// insertCache2();
        // insertCache2();
        initPushDataTaks(1);
        //sendpushDataForService();
        sendpushDataForService();
    }
    /***
     *
     */
    @Override
    public void DockingClassSyncScheduing() {
        initPushDataTaks(2);//分类推送
        sendpushClsfForService();
    }
    /***
     * æ‰‹åŠ¨åŒæ­¥
     * @param oids
     * @return
     */
    @Transactional(rollbackFor = Throwable.class)
    @Override
    public R sendData(String oids) {
        return null;
        VciBaseUtil.alertNotNull(oids,"系统集成基础信息数据对象",oids,"系统集成基础信息的主键");
        List<String> dockingTaskOidList=new ArrayList<>();
        dockingTaskOidList= VciBaseUtil.str2List(oids);
        List<DockingTask> newDockingTasks= this.dockingTaskService.listByIds(dockingTaskOidList);
        Map<String,List<DockingTask>> typeDockingTaskMap=new HashMap<>();
        newDockingTasks.stream().forEach(newDockingTaskDO->{
            String btmId=newDockingTaskDO.getBtmId();
            if(btmId.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
                List<DockingTask> dockingTaskList= typeDockingTaskMap.get(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
                if(CollectionUtils.isEmpty(dockingTaskList)){
                    dockingTaskList=new ArrayList<>();
                }
                dockingTaskList.add(newDockingTaskDO);
                typeDockingTaskMap.put(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT),dockingTaskList);
            }else{
                List<DockingTask> dockingTaskDOList= typeDockingTaskMap.get("data");
                if(CollectionUtils.isEmpty(dockingTaskDOList)){
                    dockingTaskDOList=new ArrayList<>();
                }
                dockingTaskDOList.add(newDockingTaskDO);
                typeDockingTaskMap.put("data",dockingTaskDOList);
            }
        });
        typeDockingTaskMap.keySet().forEach(type->{
            List<DockingTask> DockingTaskList=typeDockingTaskMap.get(type);
            if(!CollectionUtils.isEmpty(DockingTaskList)){
                if(type.equalsIgnoreCase(DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT))){
                    this.sendpushClsfForService(DockingTaskList);
                }else{
                    this.sendpushDataForService(DockingTaskList);
                }
            }
        });
        return  R.success("手动推送完成,请核对是否推送成功");
    }
@@ -72,7 +154,7 @@
     * @param type
     */
    private void initPushDataTaks(int type){
        //initSysadmin();
        initSysadmin();
        List<DockingSystemConfig> dockingSystemConfigList = dockingSystemConfigService.list(
            Wrappers.<DockingSystemConfig>query().lambda().eq(DockingSystemConfig::getUsedFlag,"true")
@@ -172,6 +254,337 @@
        }
    }
    /***
     * å‘送分类数据
     */
    private void sendpushClsfForService(List<DockingTask> dockingTaskList){
        //每个task依次执行推送
        for (DockingTask dockingTask:dockingTaskList){
            //每个task一个事务,开启
            String paramString="";
            String sendString="";
            String backString="";
            //查询系统接口信息,ip method,dataType
            String systeminfooid = dockingTask.getSysInfoOid();//sysininfo çš„oid
            try {
                //查询要推送的数据
                String btmoid = dockingTask.getBtmOid();//数据btmid
                JsonRootDataDTO jsonRootDataDTO=new JsonRootDataDTO();
                CodeClassify codeClassify=codeClassifyService.getById(btmoid);
                List<NodeClassifyDTO>nodeClassifyDTOList=new ArrayList<>();
                NodeClassifyDTO nodeClassifyDTO=new NodeClassifyDTO();
                nodeClassifyDTO.setClassCode(codeClassify.getId());//分类代号
                nodeClassifyDTO.setDescription(codeClassify.getDescription());//分类描述
                nodeClassifyDTO.setFullPathName(codeClassify.getPath());//全路径
                nodeClassifyDTO.setLcStatus(codeClassify.getLcStatus());//状态
                //  CodeClassifyDO parentClassDo=codeClassifyDaoI.selectByPrimaryKey(codeClassifyDO.getParentCodeClassifyOid());
                nodeClassifyDTO.setPid(codeClassify.getParentCodeClassifyOid());//父id节点
                nodeClassifyDTO.setId(codeClassify.getOid());//分类oid
                nodeClassifyDTO.setName(codeClassify.getName());//分类名称
                nodeClassifyDTOList.add(nodeClassifyDTO);
                NodeLibraryDTO nodeLibraryDTO=new NodeLibraryDTO();
                CodeClassifyVO rootClassify=codeClassifyService.getTopClassifyVO(btmoid);
                nodeLibraryDTO.setClassify(nodeClassifyDTOList);
                nodeLibraryDTO.setId(rootClassify.getOid());
                nodeLibraryDTO.setName(rootClassify.getName());
                nodeLibraryDTO.setClassCode(rootClassify.getId());
                NodeDataDTO nodeDataDTO=new NodeDataDTO();
                nodeDataDTO.setLibrary(nodeLibraryDTO);
                jsonRootDataDTO.setData(nodeDataDTO);
                //查询推送接口参数
                DockingSystemConfig dockingSystemConfig = dockingSystemConfigService.getById(systeminfooid);
                String paramType = dockingSystemConfig.getParamType();//xml/json
                if(paramType.equals(DATATYPE_JSON)){
                    Object object = JSONObject.toJSON(jsonRootDataDTO);
                    sendString = object.toString();
                }else{
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
                    xStream.processAnnotations(NodeDataDTO.class);
                    xStream.autodetectAnnotations(true);
                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                }
                //调用接口
                callInterface(sendString,dockingSystemConfig,dockingTask);
            }catch (Throwable e){
                e.printStackTrace();
            }finally {
                //每一个task一个事物
            }
        }
    }
    /***
     * å‘送编码主数据
     */
    private void sendpushDataForService (List<DockingTask> dockingTaskS){
        //每个task依次执行推送
        for (DockingTask dockingTask:dockingTaskS){
            //每个task一个事务,开启
            String paramString="";
            String sendString="";
            String backString="";
            try {
                //查询系统接口信息,ip method,dataType
                String systeminfooid = dockingTask.getSysInfoOid();//sysininfo çš„oid
                String classifyoid = dockingTask.getClassifyOid();
                //查询要推送的数据
                String btmoid = dockingTask.getBtmOid();//数据btmid
                //表示是主数据
                CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
                R<List<Map<String, String>>> r = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
                List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
                Map<String/**英文名称**/, String/**中文名称**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
                Map<String, String> data = new HashMap<>();
                if (r == null) {
                    JSONObject josni = bladeRedis.get(DOCKING_CACHE2_DELETE + btmoid);
                    data = (Map) josni;
                } else {
                    data = r.getData().get(0);
                }
                List<NodeProDTO> nodeProDTOS = new ArrayList<>();
                Map<String, String> finalData = data;
                attrIdNameMap.keySet().forEach(field -> {
                    String outName = attrIdNameMap.get(field);
                    if (finalData.containsKey(field)) {
                        String Value = finalData.get(field);
                        NodeProDTO nodeProDTO = new NodeProDTO();
                        nodeProDTO.setFiledName(field);
                        nodeProDTO.setOutname(outName);
                        nodeProDTO.setFiledValue(Value);
                        nodeProDTOS.add(nodeProDTO);
                    }
                });
                String[] classCodeLeves = dockingTask.getClassifyId().split(",");
                NodeJosnDTO nodeJosnDTO = new NodeJosnDTO();
                NodedataDTO nodeDataDTO = new NodedataDTO();
                NodeObjectDTO nodeObjectDTO = new NodeObjectDTO();
                nodeObjectDTO.setCode(dockingTask.getId());//设置编码
                nodeObjectDTO.setClassCode(classCodeLeves[0]);
                nodeObjectDTO.setStatus(data.get("lcstatus"));
                nodeObjectDTO.setLibrary(classCodeLeves[classCodeLeves.length - 1]);
                nodeObjectDTO.setPro(nodeProDTOS);
                List<NodeObjectDTO> nodeObjectDTOS = new ArrayList<>();
                nodeObjectDTOS.add(nodeObjectDTO);
                nodeDataDTO.setObject(nodeObjectDTOS);
                nodeJosnDTO.setData(nodeDataDTO);
                //查询推送接口参数
                DockingSystemConfig dockingSystemConfig = dockingSystemConfigService.getById(systeminfooid);
                String paramType = dockingSystemConfig.getParamType();//xml/json
                if (paramType.equals(DATATYPE_JSON)) {
                    Object object = JSONObject.toJSON(nodeJosnDTO);
                    sendString = object.toString();
                } else {
                    //组织返回接口信息
                    XStream xStream = new XStream(new DomDriver());
                    xStream.processAnnotations(NodedataDTO.class);
                    xStream.autodetectAnnotations(true);
                    sendString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xStream.toXML(nodeDataDTO);
                }
                //调用接口
                callInterface(sendString,dockingSystemConfig, dockingTask);
            }catch (Throwable e){
                e.printStackTrace();
            }finally {
            }
        }
    }
    /***
     * è°ƒç”¨æŽ¥å£
     * @param sendString
     * @param dockingSystemConfig
     * @param dockingTask
     * @throws Throwable
     */
    private void callInterface(String  sendString , DockingSystemConfig dockingSystemConfig,DockingTask dockingTask) throws  Throwable{
        String paramString = "";
        String backString = "";
        String msg="";
        String url = dockingSystemConfig.getRequestUrl();//url
        List<ResultNodeObjectDTO> resultNodeObjectDTOS =new ArrayList<>();
        try {
            boolean usedFlag= dockingSystemConfig.getUsedFlag().equals("true")?true:false;
            if(!usedFlag){
                throw  new Throwable("接口已经停用!");
            }
            String type = dockingSystemConfig.getInterfaceType().toLowerCase(Locale.ROOT);//get/post/webserver/corba
            String paramType = dockingSystemConfig.getParamType();//xml/json
            String returnType = dockingSystemConfig.getReturnType();//xml/json
            String requestmethod= dockingSystemConfig.getRequestMethod();
            String interfaceFunction = dockingSystemConfig.getInterfaceFunction();//主要是webservice的方法名
            String namespace = dockingSystemConfig.getNamespace();//namespace
            String soapaction = dockingSystemConfig.getSoapAction();//soapaction
            String targName = dockingSystemConfig.getTargetName();//targName
            String cxfaxis = dockingSystemConfig.getCxfAxis();//webservice是cxf/axis
            //查询param
            List<DockingSysIntParam> dockingSysIntParamList = dockingSysIntParamService.list(Wrappers.<DockingSysIntParam>query().lambda().eq(DockingSysIntParam::getInfoOid,dockingSystemConfig.getOid()));
            //查询header
            List<DockingSysIntHeader> dockingSysIntHeaderList = dockingSysIntHeaderService.list(Wrappers.<DockingSysIntHeader>query().lambda().eq(DockingSysIntHeader::getInfoOid,dockingSystemConfig.getOid()));
            if(type.equals(URLTYPE_HTTP)) {
                if (requestmethod.equals(URLTYPE_GET)) {//GET请求
                    String sendurl = url + "?" + DATA_PARAM_NAME + "=" + sendString;
                    //拼接param
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        sendurl = sendurl + "&" + dockingSysIntParam.getParamKey() + "=" + dockingSysIntParam.getParamValue();
                    }
                    paramString = sendurl;
                    backString = HttpUtils.get(sendurl);
                } else if (requestmethod.equals(URLTYPE_POST)) {//POST请求
                    MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
                    for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                        params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                    }
                    params.add(DATA_PARAM_NAME,sendString);
                    paramString = params.toString();
                    MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                    for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                        headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                    }
                    backString = HttpUtils.post(url, params, headers);
                }
                if(backString.startsWith("\"")){
                    backString=backString.substring(backString.indexOf("\"")+1);
                }
                if(backString.endsWith("\"")){
                    backString=backString.substring(0,backString.lastIndexOf("\""));
                }
                if(backString.contains("\n")){
                    String res="\n";
                    backString=  backString.replaceAll(res,"");
                }
                if(backString.contains("\\")){
                    String res="\\\\\"";
                    backString=  backString.replaceAll(res,"\"").trim();
                }
            }else if (type.equals(URLTYPE_WEBSERVICE)) {//webserver请求
                MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
                for (DockingSysIntParam dockingSysIntParam : dockingSysIntParamList) {
                    params.add(dockingSysIntParam.getParamKey(), dockingSysIntParam.getParamValue());
                }
                paramString = sendString;
                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                for (DockingSysIntHeader dockingSysIntHeader : dockingSysIntHeaderList) {
                    headers.add(dockingSysIntHeader.getHeaderKey(), dockingSysIntHeader.getHeaderValue());
                }
                backString = WsErpClientUtil.sendMsg(url, namespace, soapaction, interfaceFunction, targName, sendString, 10000);
            } else {//corba接口
                //paramString=sendString;
                //  backString = jacorbClient.getBOFactoryService().sendCode(sendString);
            }
            ResultJsonDTO resultJsonDTO = new ResultJsonDTO();
            if(returnType.equals(DATATYPE_JSON)){
                resultJsonDTO =JSONObject.toJavaObject(JSONObject.parseObject(backString), ResultJsonDTO.class);
            }else {
                //组织返回接口信息
                XStream xStream = new XStream(new DomDriver());
                xStream.processAnnotations(ResultNodeDataDTO.class);
                xStream.autodetectAnnotations(true);
                ResultNodeDataDTO resultNodeDataDTO = (ResultNodeDataDTO) xStream.fromXML(backString);
                resultJsonDTO.setData(resultNodeDataDTO);
            }
            ResultNodeDataDTO resultNodeDataDTO=resultJsonDTO.getData();
            resultNodeObjectDTOS=resultNodeDataDTO.getObject();
        }catch (Throwable e){
            msg="调用接口失败:"+e.getMessage();
            e.printStackTrace();
            log.error("调用接口失败:"+e);
            //   throw  new Throwable("调用接口失败:"+e);
            ResultNodeObjectDTO   resultNodeObjectDTO=new ResultNodeObjectDTO();
            resultNodeObjectDTO.setErroid("1");
            resultNodeObjectDTO.setMsg(msg);
            resultNodeObjectDTO.setCode(dockingSystemConfig.getPushType().equalsIgnoreCase("2")?dockingTask.getClassifyId():dockingTask.getId());
            resultNodeObjectDTO.setOid(dockingTask.getBtmOid());
            resultNodeObjectDTOS.add(resultNodeObjectDTO);
        }finally {
            boolean isSend = false;
            for (ResultNodeObjectDTO resultNodeObjectDTO:resultNodeObjectDTOS){
                String erroid = resultNodeObjectDTO.getErroid();
                msg = resultNodeObjectDTO.getMsg();
                if("0".equals(erroid)){
                    isSend = true;
                }else if("1".equals(erroid)){
                    isSend=false;
                }else{
                    isSend=false;
                }
                DockingLog dockingLogeDO = new DockingLog();
                String oid=VciBaseUtil.getPk();
                dockingLogeDO.setOid(oid);
                dockingLogeDO.setSystemCode(dockingTask.getSystemCode());
                dockingLogeDO.setSystemName(dockingTask.getSystemName());
                dockingLogeDO.setSystemOid(dockingTask.getSystemOid());
                dockingLogeDO.setClassifyOid(dockingTask.getClassifyOid());
                dockingLogeDO.setClassifyId(dockingTask.getClassifyId());
                dockingLogeDO.setClassifyName(dockingTask.getClassifyName());
                dockingLogeDO.setId(dockingTask.getId());
                dockingLogeDO.setUniqueCode(dockingTask.getUniqueCode());
                dockingLogeDO.setParamString(paramString);
                dockingLogeDO.setReturnString(backString);
                dockingLogeDO.setInterfaceStatus(isSend?"true":"false");
                dockingLogeDO.setType(DATA_LOGE_OUT);
                dockingLogeDO.setMsg(msg);
                log.error("集成推送数据,systemcode:"+dockingTask.getSystemCode()+",systemname:"+dockingTask.getSystemName()+",url:"+url+",param:"+paramString+",e:"+msg);
                dockingLogeService.save(dockingLogeDO);
            }
            //全都接收成功的情况下,修改dockingtask sendflag为已发送
            if(isSend) {
                dockingTask.setSendFlag(MdmDuckingConstant.SEND_FLAG_TRUE);
                dockingTaskService.updateById(dockingTask);
            }
        }
    }
    /***
     * æŸ¥è¯¢éœ€è¦é›†æˆçš„业务数据任务
     */
    private void sendpushDataForService (){
        initSysadmin();
        //查询哪些任务还没有执行完成
        //VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
        //queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
    //    queryWrapper.addQueryMap("btmId", QueryOptionConstant.NOTIN + "(" + VciBaseUtil.toInSql(DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT)) + ")");
        //根据类型去查询需要集成的分类或者数据
        LambdaQueryWrapper<DockingTask> queryWrapper = Wrappers.<DockingTask>lambdaQuery();
        queryWrapper.eq(DockingTask::getSendFlag,MdmDuckingConstant.SEND_FLAG_FALSE);
        queryWrapper.notIn(DockingTask::getBtmId,DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
        List<DockingTask> dockingTaskDOS = dockingTaskService.list(queryWrapper);
        sendpushDataForService(dockingTaskDOS);
    }
    /***
     * æŸ¥è¯¢éœ€è¦é›†æˆçš„父分类任务
     */
    private void sendpushClsfForService(){
        initSysadmin();
    /*    //查询哪些任务还没有执行完成
        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
        queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
        queryWrapper.addQueryMap("btmId",DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
        List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);*/
        //根据类型去查询需要集成的分类或者数据
        LambdaQueryWrapper<DockingTask> queryWrapper = Wrappers.<DockingTask>lambdaQuery();
        queryWrapper.eq(DockingTask::getSendFlag,MdmDuckingConstant.SEND_FLAG_FALSE);
        queryWrapper.eq(DockingTask::getBtmId,DOCKING_DEFAULT_CLASSIFY.toLowerCase(Locale.ROOT));
        List<DockingTask> dockingTaskDOS = dockingTaskService.list(queryWrapper);
        sendpushClsfForService(dockingTaskDOS);
    }
    public void initSysadmin(){
        SessionInfo sessionInfo = new SessionInfo();
        sessionInfo.setUserId("sysAdmin");
        sessionInfo.setUserName("系统管理员");
        sessionInfo.setIp(WebUtil.getLocalIp());
        sessionInfo.setUserOid("193C026F-7DB8-27B4-F383-4E8BE083FB07");
        sessionInfo.setUserSecret(UserSecretEnum.PRIVACY.getValue()+"");
        WebUtil.setSessionInfo(sessionInfo);
    }
    /**
     * dockingdata根据oid修改sendflag
     * @param oid
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -2,15 +2,19 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.CodeDefaultLC;
import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
import com.vci.ubcs.code.enumpack.SysIntegrationDataFlowTypeEnum;
import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.util.ClientBusinessObject;
@@ -52,6 +56,7 @@
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY;
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;
@@ -101,6 +106,9 @@
    @Resource
    private MdmIOService mdmIOService;
    @Resource
    private IDockingSystemConfigService dockingSystemConfigService;
    @Autowired
    private ICodeClassifyValueService codeClassifyValueService;
@@ -156,6 +164,12 @@
            }
            ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
            systemId = interParameterVO.getData().getSystemId();
            //校验是否配置
            boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
            if(!checkPass){
                errorid="101";
                throw new Throwable("系统标识为【"+systemId+"】,"+sysIntegrationPushTypeEnum.ACCPET_APPCODE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            }
            UserVO userVo = interParameterVO.getData().getUser();
            List<ClassfyVO> classVOList = classfysVO.getClassify();
            InterParameterVO finalInterParameterVO = interParameterVO;
@@ -323,6 +337,15 @@
            }
            ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
            systemId = interParameterVO.getData().getSystemId();
            //校验是否配置
            boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue());
            if(!checkPass){
                errorid="101";
                throw new Throwable("系统标识为【"+systemId+"】,"+sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            }
            UserVO userVo = interParameterVO.getData().getUser();
            List<ClassfyVO> classVOList = classfysVO.getClassify();
            InterParameterVO finalInterParameterVO = interParameterVO;
@@ -474,6 +497,14 @@
            String libId= libraryVO.getId();
            List<String> classifyIdList=  libraryVO.getClassifyid();
            List<CodeClassifyVO> codeClassifyVOS =new ArrayList<>();
            //校验是否配置
            boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILY.getValue());
            if(!checkPass){
                errorid="101";
                throw new Throwable("系统标识为【"+systemId+"】,"+sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILY.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            }
            //这是账号信息
            //这是账号信息
            if(userVo!=null) {
@@ -635,7 +666,12 @@
                msg = "接口参数:library ä¸ºnull";
                throw new Throwable(msg);
            }
            //校验是否配置
            boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYDATA.getValue());
            if(!checkPass){
                errorid="101";
                throw new Throwable("系统标识为【"+systemId+"】,"+sysIntegrationPushTypeEnum.ACCPET_QUERYDATA.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            }
            //先简称是否有关联模板,有模板要先删除
            List<CodeClassify> libIdDos =classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().eq(CodeClassify::getId,library));
@@ -820,6 +856,13 @@
            String libId= libraryVO.getId();
            List<String> classifyIdList=  libraryVO.getClassifyid();
            List<CodeClassifyVO> codeClassifyVOS =new ArrayList<>();
            //校验是否配置
            boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILYRULE.getValue());
            if(!checkPass){
                errorid="101";
                throw new Throwable("系统标识为【"+systemId+"】,"+sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILYRULE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            }
            //这是账号信息
            //这是账号信息
            if(userVo!=null) {
@@ -1303,5 +1346,20 @@
        return resultStr;
    }
    /***
     * æ ¡éªŒæ˜¯å¦åšäº†é…ç½®
     * @param systemId,系统标识
     * @param type:接口类型
     * @param operationType:接口操作类型
     * @return
     */
    private boolean checkIspass(String systemId,String type,String operationType){
        //根据类型去查询需要集成的分类或者数据
        LambdaQueryWrapper<DockingSystemConfig> queryWrapper = Wrappers.<DockingSystemConfig>lambdaQuery();
        queryWrapper.eq(DockingSystemConfig::getUsedFlag, MdmDuckingConstant.SEND_FLAG_TRUE);
        queryWrapper.eq(DockingSystemConfig::getSysBaseId,systemId);
        queryWrapper.eq(DockingSystemConfig::getDataFlowType,type);
        queryWrapper.eq(DockingSystemConfig::getPushType,operationType);
        return dockingSystemConfigService.count(queryWrapper)>0?true:false;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -10,7 +10,7 @@
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.entity.*;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.*;
import com.vci.ubcs.omd.vo.*;
@@ -19,9 +19,6 @@
import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.mapper.BtmTypeMapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
@@ -85,6 +82,12 @@
     */
    @Autowired
    private IAttributeService attributeService;
    /**
     * ç”Ÿå‘½å‘¨æœŸçš„æœåŠ¡
     */
    @Autowired
    private ILifeCycleService lifeCycleService;
    /**
     * è¡¨åå‰ç¼€
@@ -617,13 +620,14 @@
        if (btmTypeDTO.isLifeCycleFlag()){
            // éœ€è¦æŽ§åˆ¶ç”Ÿå‘½å‘¨æœŸ
            //检查使用的生命周期是否存在
//                if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
//                    && !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
//                    if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
//                        throw new VciBaseException("生命周期{0}[{1}]在系统中不存在,请先查证",
//                            new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
//                    }
//                }
                if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
//                    && !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())
                ) {
                    if (lifeCycleService.getOne(Wrappers.<LifeCycleRule>query().lambda().eq(LifeCycleRule::getId,btmTypeDTO.getLifeCycleId())) == null) {
                        throw new VciBaseException("生命周期{0}[{1}]在系统中不存在,请先查证",
                            new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
                    }
                }
//                if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
//                    if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
//                        throw new VciBaseException("备用生命周期{0}[{1}]中其中有某些在系统中不存在,请先查证",
@@ -655,7 +659,10 @@
        try {
            Map<String, String> domain = Optional.ofNullable(DomainRepeater.getDomain()).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(DomainVO::getValue, DomainVO::getLabel));
            List<BtmTypeVO> vos = BtmTypeWrapper.build().listEntityVO(baseMapper.selectAll());
            Map<String, List<BtmTypeVO>> domainMap = vos.stream().sorted(Comparator.comparing(BtmTypeVO::getId)).collect(Collectors.groupingBy(BtmTypeVO::getBizDomain));
            if (CollectionUtils.isEmpty(vos)){
                return new ArrayList<>();
            }
            Map<String, List<BtmTypeVO>> domainMap = Optional.ofNullable(vos).orElseGet(ArrayList::new).stream().sorted(Comparator.comparing(BtmTypeVO::getId)).collect(Collectors.groupingBy(BtmTypeVO::getBizDomain));
            List<BtmTreeVO> treeList = new ArrayList<>();
            domainMap.forEach((k,v)-> {
                if (domain.containsKey(k)){
@@ -664,11 +671,13 @@
                    parent.setName(label);
                    parent.setLabel(label);
                    parent.setId(k);
                    parent.setLevel(1);
                    parent.setChildList(v.stream().map(s -> {
                        BtmTreeVO child = new BtmTreeVO();
                        child.setOid(s.getOid());
                        child.setName(s.getName());
                        child.setId(s.getId());
                        child.setLevel(2);
                        child.setLabel(s.getId() +  (s.getName() == null ? "" : "(" + s.getName() + ")"));
                        return child;
                    }).collect(Collectors.toList()));
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
@@ -877,7 +877,10 @@
        try {
            Map<String, String> domain = Optional.ofNullable(DomainRepeater.getDomain()).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(DomainVO::getValue, DomainVO::getLabel));
            List<LinkTypeVO> vos = LinkTypeWrapper.build().listEntityVO(baseMapper.selectAll(), null);
            Map<String, List<LinkTypeVO>> domainMap = vos.stream().collect(Collectors.groupingBy(LinkTypeVO::getBizDomain));
            if (CollectionUtils.isEmpty(vos)){
                return new ArrayList<>();
            }
            Map<String, List<LinkTypeVO>> domainMap = Optional.ofNullable(vos).orElseGet(ArrayList::new).stream().collect(Collectors.groupingBy(LinkTypeVO::getBizDomain));
            List<BtmTreeVO> treeList = new ArrayList<>();
            domainMap.forEach((k,v)-> {
                if (domain.containsKey(k)){
@@ -885,6 +888,7 @@
                    BtmTreeVO parent = new BtmTreeVO();
                    parent.setName(label);
                    parent.setId(k);
                    parent.setLevel(1);
                    parent.setLabel(label);
                    parent.setChildList(v.stream().map(s -> {
                        BtmTreeVO child = new BtmTreeVO();
@@ -892,6 +896,7 @@
                        child.setLabel(s.getId() + (s.getName() == null ? "" : "(" + s.getName() + ")"));
                        child.setId(s.getId());
                        child.setName(s.getName());
                        child.setLevel(2);
                        return child;
                    }).collect(Collectors.toList()));
                    treeList.add(parent);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
@@ -49,7 +49,7 @@
        });
        vo.setFromBtmTypes(fromBtm);
        vo.setToBtmTypes(toBtm);
        vo.setTableName(vo.getTableName().toUpperCase(Locale.ROOT));
        vo.setTableName(Optional.ofNullable(vo.getTableName()).orElseGet(String::new).toUpperCase(Locale.ROOT));
        // æžšä¸¾å¤„理
        vo.setDomainText(NewAppConstantEnum.getTextByName(vo.getBizDomain()));
        return vo;
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeMapper.xml
@@ -19,13 +19,13 @@
        <result column="last_modifier" jdbcType="VARCHAR" property="lastModifier" />
        <result column="last_modify_time" jdbcType="TIMESTAMP" property="lastModifyTime" />
        <result column="ts" jdbcType="TIMESTAMP" property="ts" />
        <result column="biz-domain" jdbcType="VARCHAR" property="bizDomain" />
        <result column="biz_domain" jdbcType="VARCHAR" property="bizDomain" />
    </resultMap>
    <sql id="base_query_column">
        oid, id, name, description, shape, impl_class, from_btm_type, from_btm_type_name,
            to_btm_type, to_btm_type_name, btm_name, owner, creator, create_time, last_modifier, last_modify_time,
            ts, biz-domain
            ts, biz_domain
    </sql>
    <sql id="tableName">