ludc
2024-01-24 795b4cacb10ec7f89154b9ce9e19bf7878051d8d
Merge remote-tracking branch 'origin/master'
已修改14个文件
已添加5个文件
701 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/integration/integration.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTreeform.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeTemplatePro.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/info.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/loge.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/integration/integrationIndex.vue 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/vo/DockingMainData.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/MdmSearchItemCodeProvider.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SearchItemDataVO.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SearchItemParam.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SearchItemVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/service/impl/GroupMdmInterServiceImpl.java 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/SearchDataSyncForERPScheduling.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeDuckingSyncService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/integration/integration.js
@@ -50,7 +50,6 @@
}
// å±žæ€§æ˜ å°„保存方法
export const batchAddSave = (params) => {
  console.log(params)
  return request({
    url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/batchAddSave',
    method: 'post',
@@ -59,7 +58,6 @@
}
//  åŒæ­¥é›†å›¢å±žæ€§æ¨¡åž‹è§†å›¾
export const syncClassifyModel = (params) => {
  console.log(params)
  return request({
    url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/syncClassifyModel',
    method: 'post',
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue
@@ -276,8 +276,8 @@
      </el-dialog>
      <!--        å…¨å±ç¼–辑-->
      <el-dialog :before-close="escEdit" :visible.sync="attrEditVisible" append-to-body fullscreen="true">
        <attrCrud :ProData="this.ProData" :attrFlagChiledren="this.attrFlag" :crudArrayFlag="this.crudArrayFlag"
                  :editOpenFlag="editOpenFlag" :editStyleFlag="editStyleFlag" :btnAuthList="btnAuthList"
        <attrCrud :ProData="this.ProData" :attrFlagChiledren="this.attrFlag" :btnAuthList="btnAuthList"
                  :crudArrayFlag="this.crudArrayFlag" :editOpenFlag="editOpenFlag" :editStyleFlag="editStyleFlag"
                  @editCloseChildren="editClose"></attrCrud>
      </el-dialog>
      <!--      ç»„合规则-->
@@ -325,8 +325,8 @@
                ref="referAttrCrud"
                v-loading="loading"
                :data="ProData"
                :height="this.tableHeight"
                :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
              :height="this.tableHeight"
                border
                style="width: 100%"
                @select="selectHandle"
@@ -364,9 +364,10 @@
                             :style="{width:(item.width-10)+'px'}"
                             controls-position="right"
                             size="small" @blur="saveRows"></el-input-number>
            <el-select v-if="editingRows === row && editShows== item.prop && item.edit == 'select' " slot="prepend" :clearable="true"
                       v-model="row[item.prop]" allow-create default-first-option
                       filterable v-show="!AddCellFlag"
          <el-select v-if="editingRows === row && editShows== item.prop && item.edit == 'select' " v-show="!AddCellFlag"
                     slot="prepend"
                     v-model="row[item.prop]" :clearable="true" allow-create
                     default-first-option filterable
                       @blur="selectChangeHandler(item.editConfig,index)">
              <el-option
                v-for="optionItem in item.data"
@@ -1597,7 +1598,7 @@
      if (this.editStyleFlag) {
        return '800px'
      } else {
        return 'calc(100vh - 595px)'
        return 'calc(100vh - 565px)'
      }
    }
  },
@@ -2084,7 +2085,8 @@
      }
      if (this.attrSelectList.length < 1) {
        this.$message.warning('请选择一条模板数据')
        return;;
        return;
        ;
      }
      if (this.attrSelectList.length === 1) {
        this.injectVisible = true;
@@ -2244,7 +2246,7 @@
<style lang="scss" scoped>
//固定列高度
/deep/ .el-table__fixed {
  height: calc(100vh - 612px) !important;
  height: calc(100vh - 584px) !important;
}
///deep/ .el-table__fixed[v-if='editStyleFlag'] {
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTreeform.vue
@@ -1,20 +1,20 @@
<template>
  <div>
    <avue-form v-model="loneTreeNewForm" :option="renonlyOption" v-if="flag == 'renonly'">
    <avue-form v-if="flag == 'renonly'" v-model="loneTreeNewForm" :option="renonlyOption">
    </avue-form>
      <avue-form v-model="loneTreeNewForm" :option="this.editOption" @submit="submits" v-else-if="flag == 'edit'">
    <avue-form v-else-if="flag == 'edit'" v-model="loneTreeNewForm" :option="this.editOption" @submit="submits">
    </avue-form>
    <div>
<!--     ç¼–码规则-->
      <ThemeChildren
        ref="ThemeMasterChildren"
        dialogTitle="编码规则"
        codeName="codeRuleOidName"
        codeType="coderule"
        code-lcstatus="Released"
        :visible.sync="MasterdialogVisible"
        :SelectOption="SelectOption"
        :TreeAddform="loneTreeNewForm"
        :visible.sync="MasterdialogVisible"
        code-lcstatus="Released"
        codeName="codeRuleOidName"
        codeType="coderule"
        dialogTitle="编码规则"
        @defineHandler="handlerDefine"
      ></ThemeChildren>
<!--      å…³é”®å±žæ€§æŸ¥è¯¢è§„则-->
@@ -60,6 +60,7 @@
import {defaultReferDataGrid,referDataGrid} from '@/api/MasterData/master'
import {TreeEditSave} from '@/api/template/templateAttr'
import ThemeChildren from '@/components/FormTemplate/ThemeChildren'
export default {
  components: {ThemeChildren},
  name: "classifyTreeform.vue",
@@ -220,7 +221,6 @@
              prop: 'btmTypeName',
              labelWidth:128,
              focus:this.btmFoucus,
                // readonly: true,
              display:this.TreeFlag,
              rules: [{
                required: true,
@@ -240,14 +240,22 @@
              prop:"codeKeyAttrRepeatOidName",
              labelWidth:128,
              focus:this.Keyfouce,
              readonly: true,
            change: (data) => {
              if (data.value === "") {
                this.loneTreeNewForm.codeKeyAttrRepeatOid = ""
              }
            }
            },
            {
              label:"相似查询规则",
              prop:"codeResembleRuleOidName",
              labelWidth:128,
              focus: this.simFouce,
              readonly: true,
            change: (data) => {
              if (data.value === "") {
                this.loneTreeNewForm.codeResembleRuleOid = ""
              }
            }
            },
            {
              label: '是否参与关键属性校验',
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
@@ -122,9 +122,9 @@
        ></classify-auth-dialog>
        <!-- æ•°æ®æŽˆæƒå¯¹è¯æ¡† -->
        <data-auth-dialog
          :TreeNode="TreeEditObj"
          :classifyData="classifyData"
          :visible.sync="dataAuthVisible"
          :TreeNode="TreeEditObj"
        ></data-auth-dialog>
      </basic-container>
    </el-aside>
@@ -708,7 +708,8 @@
        index: true,
        border: true,
        columnBtn: false,
        height: 180,
        height: 150,
        refreshBtn: false,
        addBtn: this.Formlist.length <= 0 && this.nodeClickList != "",
        editBtn: false,
        delBtn: false,
Source/UBCS-WEB/src/components/Theme/ThemeTemplatePro.vue
@@ -2,13 +2,16 @@
  <basic-container>
    <avue-tabs :option="Taboption" @change="handleChange"></avue-tabs>
    <span v-if="type.prop==='tab1'">
      <attrCrud :ProData="ProData" :btnAuthList="btnAuthList" :crudOid="crudOid" :checkStatus="checkStatus"  :crudLCStatus="crudLCStatus" :crudArray="crudArray" :Formlist="Formlist" :codeClassifyOid="codeClassifyOid"></attrCrud>
      <attrCrud :Formlist="Formlist" :ProData="ProData" :btnAuthList="btnAuthList" :checkStatus="checkStatus"
                :codeClassifyOid="codeClassifyOid" :crudArray="crudArray" :crudLCStatus="crudLCStatus"
                :crudOid="crudOid"></attrCrud>
    </span>
    <span v-else-if="type.prop==='tab2'">
       <FlowPath ref="FlowPath" :code="this.crudOid"  :checkStatus="checkStatus" :crudLCStatus="crudLCStatus" :Formlist="Formlist"></FlowPath>
       <FlowPath ref="FlowPath" :Formlist="Formlist" :checkStatus="checkStatus" :code="this.crudOid"
                 :crudLCStatus="crudLCStatus"></FlowPath>
    </span>
    <span v-else-if="type.prop==='tab3'">
          <stage ref="stage"  :code="this.crudOid" :Formlist="Formlist"></stage>
          <stage ref="stage" :Formlist="Formlist" :code="this.crudOid"></stage>
    </span>
  </basic-container>
@@ -42,8 +45,7 @@
    this.type = this.Taboption.column[0];
    this.type.prop = "tab1";
  },
  watch:{
  },
  watch: {},
  methods: {
    // Tab栏切换
    handleChange(column) {
Source/UBCS-WEB/src/const/code/codeKeyAttrRepeat.js
@@ -329,14 +329,5 @@
        trigger: "blur"
      }],
    },
    {
      required: true,
      label: '混淆字符转换',
      prop:'confound',
      labelWidth : 110,
      search: false,
      formslot:true,
      display:true
    }
  ]
}
Source/UBCS-WEB/src/views/docking/info.vue
@@ -121,6 +121,7 @@
        indexFixed: false,
        selectionFixed:false,
        searchShow: false,
        refreshBtn:false,
        searchMenuSpan: 6,
        rowKey: "id",
        tabs: true,
Source/UBCS-WEB/src/views/docking/loge.vue
@@ -127,6 +127,7 @@
      option: {
        height:'auto',
        calcHeight: 20,
        menuWidth:120,
        tip: false,
        searchShow: false,
        border: true,
@@ -134,9 +135,10 @@
        indexFixed:false,
        selection: false,
        dialogClickModal: false,
        menuFixed:false,
        menuFixed:'right',
        dialogType: 'drawer',
        viewBtn: true,
        stripe: true,
        addBtn:false,
        editBtn:false,
        delBtn:false,
@@ -227,6 +229,7 @@
          {
            label: '返回msg',
            prop: 'msg',
            width: 150,
            overHidden: true
          },
          {
Source/UBCS-WEB/src/views/integration/integrationIndex.vue
@@ -28,9 +28,16 @@
            <el-form-item label="集团分类" label-width="80px" size="small">
              <el-select ref="selectTree" v-model="groupVal" clearable placeholder="请选择"
                         popper-class="popperTreeSelect">
                <el-option :label="groupVal" :value="groupVal">
                  <el-tree ref="groupTree" :data="groupTreeData" :props="defaultProps" empty-text="暂无数据"
                           @node-click="handleNodeClick">
                <el-option :disabled="true" :label="groupVal" :value="groupVal">
                  <el-tree ref="groupTree"
                           :data="groupTreeData"
                           :default-checked-keys="defaultCheckedKeys"
                           :default-expanded-keys="defaultCheckedKeys"
                           :props="defaultProps"
                           empty-text="暂无数据"
                           node-key="oid"
                           show-checkbox
                           @check="handleCheck">
                  </el-tree>
                </el-option>
              </el-select>
@@ -40,7 +47,8 @@
          <el-card  style="height:38vh">
            <avue-crud ref="crudMapping" :data="mappingData" :option="optionMapping" :table-loading="loading"
                       @select="setCurrentRow" @row-update="handleMapingUpdate"
                       @row-click="handleMapingClick" @row-dblclick="handleMapingRowClick" @selection-change="selectionChange"
                       @row-click="handleMapingClick" @row-dblclick="handleMapingRowClick"
                       @selection-change="selectionChange"
                       @select-all="handleSelectAll">
              <template slot="menuLeft">
                <el-button :disabled="disabledPush" icon="el-icon-plus" size="small" type="primary"
@@ -105,6 +113,8 @@
      highlightCurrentRow: true,
    }
    return {
      defaultCheckedKeys: [],
      isNodeDisabled: true,
      // è¡¨å•值
      form: {
        // é›†å›¢æ ‘显示值
@@ -156,6 +166,7 @@
        header: true,
        rowKey: 'oid',
        selection: false,
        refreshBtn: false,
        column: [
          {label: '集团分类', prop: 'sourceClassifyName', minWidth: 80},
          {label: '所属视图', prop: 'viewName', minWidth: 80},
@@ -180,12 +191,15 @@
      treeData: [],
      // é›†å›¢åˆ†ç±»æ ‘
      groupTreeData: [],
      // æ ‘popos替换值
      // æ ‘prpos替换值
      defaultProps: {
        children: 'children',
        label: 'name',
        id: 'oid',
        isLeaf: ''
        isLeaf: '',
        // disabled:()=>{
        //   return true
        // }
      },
      transferProps: {
        key: 'oid',
@@ -201,6 +215,7 @@
      mappingForm: {},
      // å®šæ—¶å™¨
      times: null,
      TreeSelectOid: ""
    }
  },
@@ -277,25 +292,80 @@
      }
    },
    // æŽ¥å£èŽ·å–é›†å›¢åˆ†ç±»æ ‘
    async referTree(oid, checked) {
      this.groupTreeData = []
      const response = await referTree({'conditionMap[codeclsfid]': oid, parentOid:'0'})
    async referTree(oid) {
      this.groupTreeData = [];
      const response = await referTree({'conditionMap[codeclsfid]': oid, parentOid: '0'});
      if (response.status === 200) {
        if (checked) {
          let items = response.data.map(item => {
            let obj = {}
            if (item.checked) obj = {...item}
            else obj = null
            return obj
          })
          var r = items.filter(s => {
            return s && s.trim()
        this.groupTreeData = response.data;  // å°†èŽ·å–åˆ°çš„æ•°æ®èµ‹å€¼ç»™é›†å›¢åˆ†ç±»æ ‘æ•°æ®
        await this.filterCheckedNodes(this.groupTreeData, this.defaultCheckedKeys);
        await this.$nextTick(() => {
          this.$refs.groupTree.setCheckedKeys(this.defaultCheckedKeys);
          });
          this.groupTreeData = r
        } else {
          this.groupTreeData = response.data
        this.handlerTreeData(this.groupTreeData);
        this.defaultCheckedKeys = [];
      }
    },
    // è¿‡æ»¤å‡ºæ¥checked为true的节点
    filterCheckedNodes(data, checkedNodes) {
      data.forEach(node => {
        if (node.checked) {
          checkedNodes.push(node.oid);
          this.getGridAttrMapping(node.oid);
          this.form.groupValue = node.oid;
          this.groupVal = node.name;
        }
        if (node.children && node.children.length > 0) {
          this.filterCheckedNodes(node.children, checkedNodes);
        }
      });
    },
    // è¿‡æ»¤å¤„理每个节点
    handlerTreeNode(node) {
      // æ ¹æ®èŠ‚ç‚¹ç¦ç”¨çŠ¶æ€è®¾ç½®èŠ‚ç‚¹æ˜¯å¦ç¦ç”¨
      this.$set(node, 'disabled', !node.checked);
      if (node.children && node.children.length > 0) {
        // é€’归循环处理所有子节点
        node.children.forEach(child => this.handlerTreeNode(child));
      }
    },
    // æ£€æŸ¥æ‰€æœ‰èŠ‚ç‚¹æ˜¯å¦éƒ½æ˜¯æœªç¦ç”¨çŠ¶æ€
    allNodeChecked(data) {
      for (const node of data) {
        // å¦‚果存在禁用节点返回false
        if (node.checked) {
          return false;
        }
        // å¦‚果存在子节点且子节点存在禁用节点,则返回false
        if (node.children && !this.allNodeChecked(node.children)) {
          return false;
        }
      }
      // æ²¡æœ‰ç¦ç”¨èŠ‚ç‚¹è¿”å›žtrue
      return true;
    },
    // é›†å›¢åˆ†ç±»æ ‘禁用数据处理整合方法
    handlerTreeData(data) {
      if (this.allNodeChecked(data)) {
        // å¦‚果所有节点都未禁用将所有节点设置为false
        data.forEach(node => {
          this.$set(node, 'disabled', false); // Vue 3 ä¸­å¯èƒ½ä¸éœ€è¦è¿™æ ·åš
        });
        return;
      }
      // æŸ¥æ‰¾ç¦ç”¨èŠ‚ç‚¹
      let checkedNode = data.find(node => node.checked);
      data.forEach(node => {
        // å¦‚果节点不是禁用节点设置为true
        this.$set(node, 'disabled', node !== checkedNode);
        if (node.children && node.children.length > 0) {
          // è°ƒç”¨å¾ªçŽ¯èŠ‚ç‚¹
          this.handlerTreeNode(node);
        }
      });
    },
    // å·¦ä¾§æ ‘过滤搜索
    filterNode(value, data) {
@@ -324,9 +394,13 @@
          message: "请选择一条集团分类"
        });
      } else {
        const response = await syncClassifyModel(param)
        try {
          const response = await syncClassifyModel(param);
        if (response.status === 200) {
          console.log(response)
            this.$message.success(response.data.msg)
          }
        } catch (error) {
          console.error(error);
        }
      }
    },
@@ -350,17 +424,16 @@
    },
    // å·¦ä¾§æ ‘点击
    handelTreeCell(event) {
      if (event.leaf) {
        this.treeParam.codeClassifyId = event.oid
        this.form.groupValue = ''
        this.groupVal = ''
        this.tableData = []
        this.referTree(event.oid, event.checked)
      this.mappingData = []
      this.referTree(event.oid)
        this.getListCodeByClassId(event.oid)
      }
    },
    // é›†å›¢åˆ†ç±»æ ‘点击
    handleNodeClick(data) {
    // é›†å›¢åˆ†ç±»æ ‘选择
    handleCheck(data) {
      this.form.groupValue = data.oid
      this.groupVal = data.name
      this.$refs.selectTree.blur()
@@ -451,12 +524,15 @@
      width: 100%;
      height: 370px;
    }
    .el-transfer-panel__body {
      height: 370px;
    }
    .el-input {
      width: auto;
    }
    .el-transfer-panel {
      width: 270px;
    }
Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/vo/DockingMainData.java
@@ -28,6 +28,10 @@
     */
    private String  className;
    /***
     * é›†å›¢ç 
     */
    private String customCoding;
    /***
     * æ¨¡åž‹è§†å›¾ä¿¡æ¯
     */
    private List<DockingViewVO> viewInfos;
@@ -41,6 +45,7 @@
            ", createBy='" + createBy + '\'' +
            ", className='" + className + '\'' +
            ", viewInfos=" + viewInfos +
            ", customCoding=" + customCoding +
            '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/feign/MdmSearchItemCodeProvider.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.vci.ubcs.code.feign;
import com.vci.ubcs.code.vo.pagemodel.SearchItemParam;
import com.vci.ubcs.code.vo.pagemodel.SearchItemVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.constraints.NotNull;
/****
 * ä»Žå¤–部获取型号代号,或者项目代号
 * @author xiejun
 * @date 2023-05-26
 */
@FeignClient(name = "erpIntegration",
    url = "${erp.item.url:http://127.0.0.1:8080}",
    path = "")
public interface MdmSearchItemCodeProvider {
    /***
     * æŸ¥è¯¢é¡¹ç›®ä»£å·æˆ–者型号代号
     * @param searchItemParam
     * @return æ‰§è¡Œç»“æžœ
     */
    @PostMapping("/api/pp/pp/ext/extend/v1.0/getppModelByElem")
    SearchItemVO getppModelByElem(@NotNull @RequestBody SearchItemParam searchItemParam);
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SearchItemDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.vci.ubcs.code.vo.pagemodel;
import lombok.Data;
import java.util.Date;
@Data
public class SearchItemDataVO {
    /***
     * æ•°æ®çŠ¶æ€ å­—符型,枚举值;制单:0;审批中:1;通过:2;驳回:3;
     */
    private String status;
    /**
     * åˆ¶é€ åž‹å·ä»£å·
     */
    private String mmodelcode;
    /**
     * é¡¹ç›®ä»£å·
     */
    private String projectitem;
    /***
     * é¡¹ç›®ç¼–码
     */
    private String projectcode;
    /***
     * äº§å“ç¼–码
     */
    private String materialcode;
    /***
     * åˆ›å»ºè€…
     */
    private String creatby;
    /***
     * åˆ›å»ºæ—¥æœŸ æ—¥æœŸåž‹ï¼Œå¦‚:2023-09-08 19:24:11
     */
    private Date createdon;
    /***
     * æ›´æ”¹è€…
     */
    private String lastchangedby;
    /***
     * æ›´æ”¹æ—¶é—´ æ—¥æœŸåž‹ï¼Œå¦‚:2023-09-08 19:24:11
     */
    private Date lastchangedon;
    /***
     * å­—符型,枚举值;停用:0;启用:1;
     */
    private String isenabled;
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SearchItemParam.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.vci.ubcs.code.vo.pagemodel;
import lombok.Data;
import java.util.Date;
@Data
public class SearchItemParam {
    /***
     * è°ƒç”¨ç³»ç»Ÿæ ‡è¯†
     */
    private String systag;
    /**
     * æ•°æ®çŠ¶æ€
     */
    private String status;
    /**
     * æ˜¯å¦åœç”¨
     */
    private String isenabled;
    /**
     * æœ€åŽä¿®æ”¹æ—¥æœŸ
     */
    private Date lastchangedon;
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/SearchItemVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.vci.ubcs.code.vo.pagemodel;
import lombok.Data;
import java.util.List;
@Data
public class SearchItemVO {
    /***
     * è¿”回标识
     */
    private String code;
    /***
     * æ¶ˆæ¯ä¿¡æ¯
     */
    private String msg;
    private List<SearchItemDataVO> data;
}
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/service/impl/GroupMdmInterServiceImpl.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.code.applyjtcodeservice.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,6 +11,8 @@
import com.vci.ubcs.code.applyjtcodeservice.service.IGroupMdmInterService;
import com.vci.ubcs.code.applyjtcodeservice.vo.*;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
import com.vci.ubcs.code.vo.webserviceModel.apply.ApplyDataVO;
import com.vci.ubcs.code.vo.webserviceModel.apply.InterParameterVO;
import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultDataObjectDetailDO;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.code.applyjtcodeservice.feign.MdmApplyGroupCodeProvider;
@@ -19,8 +22,10 @@
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -43,11 +48,11 @@
    private String code="";
    private String msg="";
    @Value("${docking.apply.partCoe:10}")
    @Value("${docking.apply.partCode:101}")
    public String partCoe;
    @Value("${docking.apply.userFlag:false}")
    @Value("${docking.apply.usedFlag:false}")
    public boolean usedFlag;
    @Value("${docking.apply.unitCode:41000}")
    @Value("${docking.apply.unitCode:4100}")
    public String dockingApplyUnitCode;
    @Value("${docking.apply.sysName:410-MDM}")
@@ -119,18 +124,33 @@
                    Map<String, DockingPreApplyForm> addDockingPreApplyFormMap = new HashMap<String, DockingPreApplyForm>();
                    Map<String, DockingPreApplyForm> editDockingPreApplyFormMap = new HashMap<String, DockingPreApplyForm>();
                    Map<String, BaseModel> baseModelMap = new HashMap<String, BaseModel>();
                    //数据库不存在的
                    /*List<BaseModel> newDdataModelList = dataModelList.stream().filter(cbo -> {
                        String groupcode =cbo.getData().getOrDefault("GROUPCODE","");
                        return StringUtils.isBlank(groupcode);
                    }).collect(Collectors.toList());
                    if(newDdataModelList.size()==0)
                        return R.fail("申请接口调用成功,所有数据已经存在集团码");*/
                    //组织数据
                    dockingGroupDataVO = queryApplycodeDataObjects(1, dataModelList, addDockingPreApplyFormMap, editDockingPreApplyFormMap, baseModelMap);
                    DockingResultVO resultDataObject = mdmApplyGroupCodeProvider.receiveAddApply(dockingGroupDataVO);
                    Object object = JSONObject.toJSON(dockingGroupDataVO);
                    String resultStr = object.toString();
                    log.info("申请集团码数据格式:->"+resultStr);
                    DockingResultVO resultDataObject =new DockingResultVO();
                    resultDataObject=    mdmApplyGroupCodeProvider.receiveAddApply(dockingGroupDataVO);
                    code = resultDataObject.getCode();
                    msg = resultDataObject.getMsg();
                    boolean res=false;
                    if ("1".equals(resultDataObject.getCode())) {//结果正确的情况
                        List<DockingDataVO> dataObjectVOList = resultDataObject.getData();
                        res=true;
                        dataObjectVOList.stream().forEach(dataObject -> {
                            boolean isEditDatas = false;
                            String code2 = dataObject.getCode();
                            DockingMainDataVO data2 = dataObject.getData();
                            String applyId = data2.getApplyId();//申请单id
                            BaseModel baseModel = baseModelMap.get(applyId);
                            String customCoding = StringUtils.isBlank(data2.getCustomCoding()) ? "" : data2.getCustomCoding();//集团码段
                            msg = dataObject.getMsg();
                            if (code2.equals("1")) {//结果正确的情况
@@ -142,8 +162,16 @@
                            if (editDockingPreApplyFormMap.containsKey(applyId)) {
                                DockingPreApplyForm dockingPreApplyForm = editDockingPreApplyFormMap.get(applyId);
                                dockingPreApplyForm.setCode(code2);
                                //dockingPreApplyForm.setDescription(baseModel.getId());
                                dockingPreApplyForm.setMsg("申请:" + msg);
                                if(StringUtils.isBlank(dockingPreApplyForm.getGroupCode())) {
                                dockingPreApplyForm.setGroupCode(customCoding);
                                }else{
                                    isEditDatas = true;
                                    if (StringUtils.isBlank(customCoding)) {
                                        customCoding=dockingPreApplyForm.getGroupCode();
                                    }
                                }
                                ObjectMapper mp = new ObjectMapper();
                                String writeValueAsString = null;
                                try {
@@ -151,11 +179,13 @@
                                    dockingPreApplyForm.setContent(writeValueAsString);
                                } catch (JsonProcessingException e) {
                                }
                                DefaultAttrAssimtUtil.updateDefaultAttrAssimt(dockingPreApplyForm);
                            }
                            //新增的申请单数据
                            if (addDockingPreApplyFormMap.containsKey(applyId)) {
                                DockingPreApplyForm dockingPreApplyForm = addDockingPreApplyFormMap.get(applyId);
                                dockingPreApplyForm.setCode(code2);
                                dockingPreApplyForm.setDescription(baseModel.getId());
                                dockingPreApplyForm.setMsg("申请:" + msg);
                                dockingPreApplyForm.setGroupCode(customCoding);
                                ObjectMapper mp = new ObjectMapper();
@@ -165,25 +195,28 @@
                                    dockingPreApplyForm.setContent(writeValueAsString);
                                } catch (JsonProcessingException e) {
                                }
                                DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingPreApplyForm, MdmBtmTypeConstant.DOCKING_PRE_JAPPLYFORM);
                            }
                            //如果有集团码则更新数据
                            if (isEditDatas) {
                                if (baseModelMap.containsKey(applyId)) {
                                    BaseModel baseModel = baseModelMap.get(applyId);
                                    String classOid=baseModel.getData().getOrDefault("CODECLSFID","");
                                    baseModel = baseModelMap.get(applyId);
                                    Map<String,String> dataValueMap=new CaseInsensitiveMap<>(baseModel.getData());
                                    String classOid=dataValueMap.getOrDefault("CODECLSFID","");
                                    if(partCoe.equals(classOid)){
                                        baseModel.setId(10+customCoding);
                                        customCoding=10+customCoding;
                                    }
                                    BeanUtilForVCI.copyDeclaredIgnoreCase(baseModel, baseModel);
                                    DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel);
                                    DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel);
                                    baseModel.getData().getOrDefault("groupCode", customCoding);
                                //    DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel);
                                    baseModel.getData().put("GROUPCODE",customCoding);
                                    updateCbos.add(baseModel);//更新数据集团code
                                }
                            }
                        });
                    } else {
                        res=false;
                        editDockingPreApplyFormMap.forEach((key, dockingPreApplyForm) -> {
                            dockingPreApplyForm.setCode("2");
                            dockingPreApplyForm.setMsg("申请:" + msg);
@@ -208,6 +241,9 @@
                    //保存表单数据
                    dockingPreApplyFormService.saveOrUpdateBatch(dockingPreAttrMappings);
                    mdmEngineClient.updateBatchBtypeDatas(btmName, updateCbos);//保存数据
                    if(!res){
                        throw new VciBaseException(msg);
                    }
                }
                return R.success("申请接口调用成功");
            } catch (VciBaseException e) {
@@ -227,7 +263,7 @@
    @Transactional(rollbackFor = VciBaseException.class)
    @Override
    public R receiveEditApply(String oids, String btmName) throws VciBaseException {
        if(usedFlag) {
        if(!usedFlag) {
            log.info("更新接口功能已关闭!->"+usedFlag);
            R.success("更新接口功能已关闭!");
        }
@@ -273,7 +309,9 @@
                            DockingPreApplyForm dockingPreApplyForm = editDockingPreApplyFormMap.get(applyId);
                            dockingPreApplyForm.setCode(code2);
                            dockingPreApplyForm.setMsg("修改:" + msg);
                            if(StringUtils.isBlank(dockingPreApplyForm.getGroupCode())) {
                            dockingPreApplyForm.setGroupCode(customCoding);
                            }
                            ObjectMapper mp = new ObjectMapper();
                            String writeValueAsString = null;
                            try {
@@ -281,13 +319,16 @@
                                dockingPreApplyForm.setContent(writeValueAsString);
                            } catch (JsonProcessingException e) {
                            }
                            DefaultAttrAssimtUtil.updateDefaultAttrAssimt(dockingPreApplyForm);
                        }
                        //新增的申请单数据
                        if (addDockingPreApplyFormMap.containsKey(applyId)) {
                            DockingPreApplyForm dockingPreApplyForm = addDockingPreApplyFormMap.get(applyId);
                            dockingPreApplyForm.setCode(code2);
                            dockingPreApplyForm.setMsg("修改:" + msg);
                            if(StringUtils.isBlank(dockingPreApplyForm.getGroupCode())) {
                            dockingPreApplyForm.setGroupCode(customCoding);
                            }
                            ObjectMapper mp = new ObjectMapper();
                            String writeValueAsString = null;
                            try {
@@ -295,6 +336,7 @@
                                dockingPreApplyForm.setContent(writeValueAsString);
                            } catch (JsonProcessingException e) {
                            }
                            DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingPreApplyForm, MdmBtmTypeConstant.DOCKING_PRE_JAPPLYFORM);
                        }
                        //如果有集团码则更新数据
                        if (isEditDatas) {
@@ -307,7 +349,7 @@
                                }
                                DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel);
                                //    baseModel.setId(customCoding);
                                baseModel.getData().put("groupCode", customCoding);
                                baseModel.getData().put("GROUPCODE", customCoding);
                                updateCbos.add(baseModel);//更新数据集团code
                            }
                        }
@@ -354,7 +396,7 @@
    public R queryClassModel(String groupClassifyId) throws Throwable {
        log.info("获取集团模型详细信息执行保存start");
        String message="执行成功!";
        if(usedFlag){
        if(!usedFlag){
            log.info("获取集团模型详细信息执行保存功能已关闭!->"+usedFlag);
            return R.fail("获取集团模型详细信息接口已关闭!");
        }
@@ -406,7 +448,7 @@
    public R queryMdmModel() throws Throwable {
        String message="执行成功!";
        log.info("从集团获取主模型信息执行保存接口statr");
        if(usedFlag){
        if(!usedFlag){
            log.info("从集团获取主模型信息执行保存接口功能已关闭!->"+usedFlag);
            return R.fail("查询模型视图接口已关闭!");
        }
@@ -493,7 +535,7 @@
     */
    @Override
    public R queryApplyState(String dataOids) throws VciBaseException {
        if(usedFlag){
        if(!usedFlag){
            log.info("查询申请单状态接口开关已关闭");
            return R.fail("查询申请单状态接口开关已关闭");
        }
@@ -518,8 +560,9 @@
            int code=dockingApplyFormQueryStatusVO.getCode();
            String mesg=dockingApplyFormQueryStatusVO.getMsg();
            if(code==1){
                message=mesg;
                List<DockingApplyFormStatusVO> dockingApplyFormStatusVOList=dockingApplyFormQueryStatusVO.getData();
                if(CollectionUtils.isEmpty(dockingApplyFormStatusVOList)){
                if(!CollectionUtils.isEmpty(dockingApplyFormStatusVOList)){
                    for (DockingApplyFormStatusVO applyFormDataState : dockingApplyFormStatusVOList) {
                        String applyId=applyFormDataState.getApplyNum();
                        String state= applyFormDataState.getFormState();
@@ -531,20 +574,23 @@
                        }
                    }
                    boolean res=this.dockingPreApplyFormService.saveOrUpdateBatch(dockingPreApplyFormList);
                    if(res){
                        R.success("申请集团码状态查询成功:"+mesg);
                    }
                }else{
                    throw new Throwable("没有获取到相关数据信息");
                }
            }else{
                throw new    Throwable(mesg);
                message=mesg;
                dockingPreApplyFormList.stream().forEach(dockingPreApplyForm -> {
                    dockingPreApplyForm.setMsg("申请单查看失败:"+mesg);
                });
                this.dockingPreApplyFormService.saveOrUpdateBatch(dockingPreApplyFormList);
                throw new Throwable(message);
            }
        }catch (Throwable e){
            e.printStackTrace();
            //message=""+e;
            log.error("获取申请单状态失败"+e);
            throw  new VciBaseException(message);
            throw  new VciBaseException(e.getMessage());
        }
        log.info("查询申请单状态接口end");
        return R.success(message);
@@ -559,7 +605,7 @@
     */
    @Override
    public R syncClassifyModel(String classifyId, String operationType) throws VciBaseException {
        if(usedFlag){
        if(!usedFlag){
            log.info("同步集团模型信息开关已关闭");
            return R.fail("同步集团模型信息开关已关闭");
        }
@@ -608,6 +654,7 @@
                log.info("classify:-------------->链接名称:"+nodeLinkName);
                if (dockingPreClassify == null || StringUtils.isBlank(dockingPreClassify.getOid())) {
                    dockingPreClassify=new DockingPreClassify();
                    DefaultAttrAssimtUtil.addDefaultAttrAssimt(dockingPreClassify,MdmBtmTypeConstant.DOCKING_PRE_JCLASSIFY);
                } else {
                    DefaultAttrAssimtUtil.updateDefaultAttrAssimt(dockingPreClassify);
@@ -703,7 +750,7 @@
                .eq(DockingPreMetaAttr::getSourceClassifyId,jclassId).eq(DockingPreMetaAttr::getViewModelId,jviewModelObject.getOid())
                .eq(DockingPreMetaAttr:: getPid,pid));
            Map<String,DockingPreMetaAttr> jmetaattrMap = dockingPreMetaAttrList.stream().filter(
                s -> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(s.getEnglishName())).collect(Collectors.toMap(s -> s.getEnglishName().toLowerCase(Locale.ROOT), t -> t));
                s -> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(s.getEnglishName())).collect(Collectors.toMap(s -> s.getEnglishName(), t -> t));
            for (DockingClassifyMetaAttrVO dockingClassifyMetaAttrVO : metaList) {
                String chineseName = com.alibaba.cloud.commons.lang.StringUtils.isBlank(dockingClassifyMetaAttrVO.getChineseName())?"":dockingClassifyMetaAttrVO.getChineseName();// å±žæ€§åç§°
@@ -772,6 +819,7 @@
     */
    private void getRange(DockingPreMetaAttr metaAttrObject,Map<String, String> range) throws Throwable {
        String metaAttrOid = com.alibaba.cloud.commons.lang.StringUtils.isBlank(metaAttrObject.getOid())?"":metaAttrObject.getOid();// å±žæ€§çš„oid
        String jchinesename = com.alibaba.cloud.commons.lang.StringUtils.isBlank(metaAttrObject.getChineseName())?"":metaAttrObject.getChineseName();
        Map<String, DockingPreAttrRange> rangeMap = new HashMap<>();
        try {
@@ -779,7 +827,9 @@
            condtionMa.put("jmetalistid", metaAttrOid);
            List<DockingPreAttrRange> jmetaattrList = dockingPreAttrRangeService.selectByWrapper(Wrappers.<DockingPreAttrRange>query().lambda()
                .eq(DockingPreAttrRange::getMetaListId,metaAttrOid));// æ ¹æ®åˆ†ç±»æŸ¥è¯¢æ¨¡åž‹è§†å›¾å¯¹è±¡
            rangeMap= jmetaattrList.stream().collect(Collectors.toMap(s -> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(s.getNumText().toLowerCase(Locale.ROOT))?"":s.getNumText().toLowerCase(Locale.ROOT), t -> t));
            log.info("获取属性美剧 å±žæ€§id------->"+metaAttrOid);
            //rangeMap= jmetaattrList.stream().collect(Collectors.toMap(s ->StringUtils.isNotBlank(s.getNumText())?"":s.getNumText(), t -> t));
            rangeMap=jmetaattrList.stream().filter(data -> data != null && StringUtils.isNotBlank(data.getNumText())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getNumText(), t -> t));
            for (String rangeKey : range.keySet()) {
                DockingPreAttrRange rangeObject = new DockingPreAttrRange();
@@ -809,43 +859,42 @@
        }
    }
    /**
     * ç»„织数据
     * */
    private DockingGroupDataVO queryApplycodeDataObjects(int optationtype,List<BaseModel>  codeWupins,Map<String,DockingPreApplyForm>   addDockingPreApplyFormMap,Map<String,DockingPreApplyForm>  editDockingPreApplyFormMap,Map<String,BaseModel>  codeWupinMap) throws VciBaseException{
        try {
            String curUserName = AuthUtil.getUser().getUserName();
            String curUserName ="28201728"; //AuthUtil.getUser().getUserName();
            //申请的数据
            List<DockingMainData> mainDataList=new ArrayList<DockingMainData>();
            for (BaseModel dataBusinessObject : codeWupins) {
                String format = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
                String codeclsfid = dataBusinessObject.getData().getOrDefault("codeclsfid","");
                //String codeclsfid = dataBusinessObject.getData().getOrDefault("codeclsfid".toUpperCase(Locale.ROOT),"");
                 Map<String,String> dataMap=new CaseInsensitiveMap<>(dataBusinessObject.getData());
                String codeclsfid=dataMap.getOrDefault("codeclsfid","");
                String btmName = dataBusinessObject.getBtmname();
                String oid = dataBusinessObject.getOid();
                DockingPreApplyForm dockingPreApplyForm = new DockingPreApplyForm();
                String dataOid = dataBusinessObject.getOid();
                Map<String, String> conditionsMap = new HashMap<String, String>();
                List<DockingPreApplyForm> applyFormObjects = dockingPreApplyFormService.list(Wrappers.<DockingPreApplyForm>query().lambda().eq(DockingPreApplyForm::getDataOid, dataOid).eq(DockingPreApplyForm::getOperationType, optationtype));
                //List<DockingPreApplyForm> applyFormObjects = dockingPreApplyFormService.list(Wrappers.<DockingPreApplyForm>query().lambda().eq(DockingPreApplyForm::getDataOid, dataOid).eq(DockingPreApplyForm::getOperationType, optationtype));
            //    DockingPreApplyForm dockingPreApplyForm=new DockingPreApplyForm();
                String apllyCode = "";
                if (!CollectionUtils.isEmpty(applyFormObjects)) {
                /*if (!CollectionUtils.isEmpty(applyFormObjects)) {
                    dockingPreApplyForm = applyFormObjects.get(0);
                    apllyCode = dockingPreApplyForm.getId();
                    editDockingPreApplyFormMap.put(apllyCode, dockingPreApplyForm);//申请单和申请单对象关系
                } else {
                } else {*/
                    apllyCode = dockingApplyUnitCode + "-" + format;
                    dockingPreApplyForm.setId(apllyCode);
                    dockingPreApplyForm.setName("");
                    dockingPreApplyForm.setOperationType(optationtype+"");
                    dockingPreApplyForm.setDescription(dataBusinessObject.getDescription());//获取数据描述信息
                    dockingPreApplyForm.setDescription(dataBusinessObject.getId());//获取数据描述信息
                    dockingPreApplyForm.setDataOid(oid);
                    dockingPreApplyForm.setDataBtmName(btmName);
                    addDockingPreApplyFormMap.put(apllyCode, dockingPreApplyForm);//申请单和申请单对象关系
                }
            //    }
                codeWupinMap.put(apllyCode, dataBusinessObject);//申请单和对应数据关系
                conditionsMap = new HashMap<String, String>();
@@ -863,6 +912,11 @@
                mainData.setApplyId(apllyCode);//申请单号
                mainData.setClassName(dockingPreClassify.getNodeLinkName());//分类名称
                mainData.setCreateBy(curUserName);//
                if(optationtype==2) {
                    String groucode=dataBusinessObject.getData().getOrDefault("GROUPCODE","");
                    dockingPreApplyForm.setGroupCode(groucode);
                    mainData.setCustomCoding(groucode);
                }
                mainData.setSecretLevel("内部");//密级,默认为内部
                mainData.setViewInfos(getviewInfos(optationtype,dockingPreClassify, dataBusinessObject));//获取视图模型
                mainDataList.add(mainData);
@@ -917,7 +971,7 @@
        //构造模型视图数据
        List<Map<String, Object>> viewValueList=new ArrayList<Map<String,Object>>();
        String oid = dockingPreViewModel.getOid();
        Map<String,String> dataValueMap=dataBusinessObject.getData();
        Map<String,String> dataValueMap=new CaseInsensitiveMap<>(dataBusinessObject.getData());
        String codeClassifyId=dataValueMap.get("codeclsfid");
        Map<String,String>conditionsMap=new HashMap<String, String>();
        List<DockingPreAttrMapping> dockingPreAttrMappingList = dockingPreAttrMappingMapper.selectList(Wrappers.<DockingPreAttrMapping>query().lambda()
@@ -944,7 +998,16 @@
                Object newVaue=null;
                if(StringUtils.isNotBlank(jtargetattrkey)){
                    getAttrRange(dockingPreMetaAttr);//获取字段取值范围
                    String value=dataValueMap.get(jtargetattrkey)==null?"":dataValueMap.getOrDefault(jtargetattrkey,"");
                    String value="";
                    if(jtargetattrkey.toLowerCase(Locale.ROOT).equals("name")){
                        value=dataBusinessObject.getName();
                    }else if(jtargetattrkey.toLowerCase(Locale.ROOT).equals("id")){
                        value=dataBusinessObject.getId();
                    }else if(jtargetattrkey.toLowerCase(Locale.ROOT).equals("description")){
                        value=dataBusinessObject.getDescription();
                    }else{
                        value=dataValueMap.get(jtargetattrkey)==null?"":dataValueMap.getOrDefault(jtargetattrkey,"");
                    }
                    newVaue = getVaue(dockingPreMetaAttr, value);
                }else{
                    newVaue = getVaue(dockingPreMetaAttr, "");
@@ -952,6 +1015,7 @@
                if(newVaue==null||"".equals(newVaue)){
                    newVaue= dockingPreMetaAttr.getDefaultValue();
                }
                //newVaue= Func.isNotEmpty(newVaue)?newVaue:"";
                viewValueMap.put(jenglishname, newVaue);
            }
        }
@@ -1017,7 +1081,7 @@
                return null;
            }else {
                try {
                    return simpleDateFormat.parse(value);
                    return simpleDateFormat.format(simpleDateFormat.parse(value));
                } catch (ParseException e) {
                    throw new VciBaseException("date", new String[]{"日期格式转换错误"});
                }
@@ -1028,7 +1092,7 @@
                return null;
            }else{
                try {
                    return simpleDateFormat.parse(value);
                    return simpleDateFormat.format(simpleDateFormat.parse(value));
                } catch (ParseException e) {
                    throw new VciBaseException("date", new String[]{"日期格式转换错误"});
                }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/Scheduling/SearchDataSyncForERPScheduling.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.vci.ubcs.code.Scheduling;
import com.vci.ubcs.code.service.ICodeDuckingSyncService;
import com.vci.ubcs.code.service.UniversalInterfaceI;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
/***
 *  é›†æˆä»»åŠ¡å®šæ—¶å™¨
 * ä»ŽERP查询型号代号,项目代号
 * @author xj
 * @date 2024-01-19
 */
@Component
@Slf4j
public class SearchDataSyncForERPScheduling {
    @Resource
    private ICodeDuckingSyncService codeDuckingSyncServiceI;
    @Value("${erp.item.isStart:false}")
    public boolean ERP_ITEM_ISSTARE;
    @Value("${erp.item.btmName:XHDH}")
    public String ERP_ITEM_BTMNAME;
    /**
     * æ˜¯å¦åˆå§‹åŒ–完成了
     */
    public static volatile String FINISH_INIT = "false";
    /**
     * åœ¨åˆå§‹åŒ–完成后执行
     */
    @PostConstruct()
    public void onInit(){
        FINISH_INIT = "true";
    }
    //默认每十分钟执行方法
    @Scheduled(cron = "${dataSyncPush.cronTime:0 0/10 * * * ?}")
    public void scheduled() {
        log.info("执行从ERP项目代号/型号代号数据 start:");
        log.info("执行主数据集成数据推送 end: "+ "开关是否开启:" +ERP_ITEM_ISSTARE);
        if(ERP_ITEM_ISSTARE && BooleanEnum.TRUE.getValue().equalsIgnoreCase(FINISH_INIT)) {
            SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.");
            String time = formatter.format(new Date());
            codeDuckingSyncServiceI.saveItemDataSyncScheduing(ERP_ITEM_BTMNAME);
            String outInfo = "============ æ‰§è¡Œäº†ä»ŽERP项目代号/型号代号数据 end;";
            log.info(outInfo+time);
        }
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeDuckingSyncService.java
@@ -47,5 +47,7 @@
     * @return
     */
    R sendData(String oids);
    void saveItemDataSyncScheduing(String btmName);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.applyjtcodeservice.feign.MdmApplyGroupCodeProvider;
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;
@@ -21,19 +22,23 @@
import com.vci.ubcs.code.dto.datapush.result.ResultNodeObjectDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.SysIntegrationDataFlowTypeEnum;
import com.vci.ubcs.code.feign.MdmSearchItemCodeProvider;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.vo.pagemodel.*;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.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.WebUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -62,6 +67,20 @@
    public String DATA_PARAM_NAME;
    @Value("${dataSyncPush.dataId:itemid}")
    private String itemId;
    @Value("${erp.item.attrKey:xhdh}")
    public String attrKey;
    /**
     * ä¸šåŠ¡ç±»åž‹çš„æœåŠ¡
     */
    @Autowired
    private IBtmTypeClient btmTypeClient;
    /**
     * é€šç”¨æŸ¥è¯¢
     */
    @Resource
    private CommonsMapper commonsMapper;
    @Resource
    private  MdmEngineService  mdmEngineServiceI;
@@ -84,7 +103,8 @@
    private IDockingSysIntParamService dockingSysIntParamService;
    @Resource
    private IDockingSysIntHeaderService dockingSysIntHeaderService;
    @Autowired(required = false)
    private MdmSearchItemCodeProvider mdmSearchItemCodeProvider;
    @Override
@@ -149,6 +169,74 @@
        return  R.success("手动推送完成,请核对是否推送成功");
    }
    /***
     * åŒæ­¥åž‹å·ä»£å·
     */
    @Override
    public void saveItemDataSyncScheduing(String btmName) {
        SearchItemParam searchItemParam=new SearchItemParam();
        searchItemParam.setSystag("CODE"); //调用系统标识
        searchItemParam.setLastchangedon(new Date());
        searchItemParam.setStatus("1");//
        SearchItemVO searchItemVO= mdmSearchItemCodeProvider.getppModelByElem(searchItemParam);
        if(searchItemVO!=null) {
            searchItemVO.getCode();
            searchItemVO.getMsg();
            List<CodeClassify> codeClassifyList = codeClassifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().in(CodeClassify::getId, btmName));
            try {
                if (CollectionUtils.isEmpty(codeClassifyList)) {
                    throw new Throwable("分类未查询到");
                }
                CodeClassify codeClassify= codeClassifyList.get(0);
                List<SearchItemDataVO> dataList = searchItemVO.getData();
                Map<String, SearchItemDataVO> dataVOMap = new HashMap<>();
                List<String> itemCodeList = new ArrayList<>();
                if (!CollectionUtils.isEmpty(dataList)) {
                    dataList.stream().forEach(searchItemDataVO -> {
                        String itemCode = StringUtils.isNotBlank(searchItemDataVO.getProjectitem()) ? searchItemDataVO.getProjectitem() : searchItemDataVO.getMmodelcode();//项目代号
                        dataVOMap.put(itemCode, searchItemDataVO);
                        itemCodeList.add(itemCode);
                    });
                    String tableName = "";
                    R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(btmName);
                    if (!r.isSuccess()) {
                        throw new Throwable(r.getMsg());
                    }
                    BtmTypeVO btmTypeVO = r.getData();
                    if (btmTypeVO == null) {
                        throw new Throwable("根据业务类型未查询到业务类型对象!");
                    }
                    tableName = btmTypeVO.getTableName();
                    if (com.alibaba.nacos.common.utils.StringUtils.isBlank(tableName)) {
                        throw new Throwable("根据业务类型未查询到业务类型相关联的表");
                    }
                    StringBuffer sb = new StringBuffer();
                    sb.append(" select * from  ");
                    sb.append(tableName);
                    sb.append(" where 1=1");
                    sb.append(" and lastr=1 and lastv=1");
                    sb.append(" and codeclsfid = '" + codeClassify.getOid() + "'");
                    List<Map<String, String>> newDataList = commonsMapper.queryByOnlySqlForMap(sb.toString());
                    newDataList.stream().forEach(dataMap->{
                        String value= dataMap.getOrDefault(attrKey,"");
                        if(dataVOMap.containsKey(attrKey)){
                            SearchItemDataVO searchItemDataVO=dataVOMap.get(attrKey);
                        }else{
                        }
                    });
                }
            }
            catch (Throwable e){
                log.error("查询失败--->"+e);
            }
        }
    }
    /***
     * æŸ¥è¯¢redis中数据,对比后插入dockingtask
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -2431,41 +2431,58 @@
        return codeOrderSecDTOList;
    }
    /***
     * è¯»å–属性映射配置信息
     * @param systemId
     * @param libray
     * @param applyDatasVO
     * @param codeClassifyTemplateAttrVOList
     * @param dataObjectVO
     * @throws Throwable
     */
    public void getConfigDatas(String systemId,String libray, ApplyBZDatasVO applyDatasVO,List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList,DataObjectVO dataObjectVO) throws Throwable {
        LinkedHashMap<String,LinkedHashMap<String,String>> dataKeyValueMap=new LinkedHashMap<>();
        //如果将数据转换成所需要的数据对象
        Map<String, String> attrMapConfigMap=new HashMap<>();
        Map<String, String> propMaps=new HashMap<>();
        try {
            log.info("开始读取系统配置文件 start");
            Map<String, String> stringStringMap=attributeMapConfig.getSystem_attrmap();
            log.info("集成系统属性映射配置文件条目数-》"+stringStringMap.size());
            //stringStringMap.put("RLM","D:\\RLM.xml");
            if(!CollectionUtils.isEmpty(stringStringMap)) {
            List<LibraryClsfDO> libraryClsfDOList=new ArrayList<>();
            try {
                log.info("info:需要读取配置文件");
                LibraryDO libraryDO = gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId, stringStringMap);
                List<LibraryClsfDO> libraryClsfDOList = libraryDO.getClsf();
                libraryClsfDOList = libraryDO.getClsf();
            } catch (Throwable e) {
                objerrorCode = "1";
                e.printStackTrace();
                throw new Throwable("集成系统标识为:【" + systemId + "】,分类库为:【" + libray + "】的集成属性配置文件读取失败");
            }
            String path = stringStringMap.get(systemId);
                if(!CollectionUtils.isEmpty(libraryClsfDOList)) {
                    Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2));
                    log.info("根据参数:libray:-》" + libray + "从配置文件中找对应属性映射配置");
                    String path=stringStringMap.get(systemId);
                    if (libPropMaps.containsKey(libray.toUpperCase(Locale.ROOT))) {
                        log.info("根据参数:libray:-》" + libray + "匹配到相应的属性映射信息");
                        List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray.toUpperCase(Locale.ROOT));
                        propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2));
                        log.info("根据参数:libray:-》" + libray + "匹配到相应的属性映射信息,属性映射条目数+" + clsfAttrMappingDOList.size());
                    }else{
                    objerrorCode = "1";
                        throw new Throwable("根据系统标识【"+systemId+"】找到对应的配置文件:【"+path+"】,但未获取到对应的库【"+libray+"】属性映射信息配置");
                    }
            }else{
                objerrorCode = "1";
                throw new Throwable("根据系统标识【" + systemId + "】找到对应的配置文件:【" + path + "】,但未获取到对应的库【" + libray + "】属性映射信息配置");
                }
        }else{
            objerrorCode = "1";
            throw new Throwable("未获取到集成属性映射系统配置信息");
            }
            log.info("根据参数:libray:-》"+libray+"从配置文件中找对应属性映射配置 end ");
        }catch (Throwable e){
            objerrorCode="1";
            e.printStackTrace();
            throw new Throwable("集成系统标识为:【"+systemId+"】,分类库为:【"+libray+"】的集成属性配置文件读取失败");
        }
        LinkedList<String> rowNameList=new LinkedList<>();
        LinkedHashMap<String,Integer> filedIndexMap=new LinkedHashMap<>();
        //根据分类模板组织数据
@@ -2540,7 +2557,13 @@
    }
    /***
     * æ ¹æ®å±žæ€§æ˜ å°„转换编码所需字段
     * è¯»å–属性映射配置信息
     * @param systemId
     * @param libray
     * @param applyDatasVO
     * @param codeClassifyTemplateAttrVOList
     * @param dataObjectVO
     * @throws Throwable
     */
    public void getConfigDatas(String systemId,String libray, ApplyDatasVO applyDatasVO,List<CodeClassifyTemplateAttrVO> codeClassifyTemplateAttrVOList,DataObjectVO dataObjectVO) throws Throwable {
@@ -2548,35 +2571,43 @@
        //如果将数据转换成所需要的数据对象
        Map<String, String> attrMapConfigMap=new HashMap<>();
        Map<String, String> propMaps=new HashMap<>();
        try {
            log.info("开始读取系统配置文件 start");
            Map<String, String> stringStringMap=attributeMapConfig.getSystem_attrmap();
            log.info("集成系统属性映射配置文件条目数-》"+stringStringMap.size());
            //stringStringMap.put("RLM","D:\\RLM.xml");
            if(!CollectionUtils.isEmpty(stringStringMap)) {
            List<LibraryClsfDO> libraryClsfDOList=new ArrayList<>();
            try {
                log.info("info:需要读取配置文件");
                LibraryDO libraryDO = gennerAttrMapUtil.getNewInstance().gennerAttrMapBySystem(systemId, stringStringMap);
                List<LibraryClsfDO> libraryClsfDOList = libraryDO.getClsf();
                libraryClsfDOList = libraryDO.getClsf();
            } catch (Throwable e) {
                objerrorCode = "1";
                e.printStackTrace();
                throw new Throwable("集成系统标识为:【" + systemId + "】,分类库为:【" + libray + "】的集成属性配置文件读取失败");
            }
            String path = stringStringMap.get(systemId);
                if(!CollectionUtils.isEmpty(libraryClsfDOList)) {
                    Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2));
                    log.info("根据参数:libray:-》" + libray + "从配置文件中找对应属性映射配置");
                    String path=stringStringMap.get(systemId);
                    if (libPropMaps.containsKey(libray.toUpperCase(Locale.ROOT))) {
                        log.info("根据参数:libray:-》" + libray + "匹配到相应的属性映射信息");
                        List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray.toUpperCase(Locale.ROOT));
                        propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2));
                        log.info("根据参数:libray:-》" + libray + "匹配到相应的属性映射信息,属性映射条目数+" + clsfAttrMappingDOList.size());
                    }else{
                    objerrorCode = "1";
                        throw new Throwable("根据系统标识【"+systemId+"】找到对应的配置文件:【"+path+"】,但未获取到对应的库【"+libray+"】属性映射信息配置");
                    }
            }else{
                objerrorCode = "1";
                throw new Throwable("根据系统标识【" + systemId + "】找到对应的配置文件:【" + path + "】,但未获取到对应的库【" + libray + "】属性映射信息配置");
                }
        }else{
            objerrorCode = "1";
            throw new Throwable("未获取到集成属性映射系统配置信息");
            }
            log.info("根据参数:libray:-》"+libray+"从配置文件中找对应属性映射配置 end ");
        }catch (Throwable e){
            objerrorCode="1";
            e.printStackTrace();
            throw new Throwable("集成系统标识为:【"+systemId+"】,分类库为:【"+libray+"】的集成属性配置文件读取失败");
        }
        LinkedList<String> rowNameList=new LinkedList<>();
        LinkedHashMap<String,Integer> filedIndexMap=new LinkedHashMap<>();
        //根据分类模板组织数据