ludc
2024-01-24 795b4cacb10ec7f89154b9ce9e19bf7878051d8d
Merge remote-tracking branch 'origin/master'
已修改14个文件
已添加5个文件
1261 ■■■■■ 文件已修改
Source/UBCS-WEB/src/api/integration/integration.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue 178 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTreeform.vue 286 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeTemplatePro.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | 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 194 ●●●●● 补丁 | 查看 | 原始文档 | 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 146 ●●●● 补丁 | 查看 | 原始文档 | 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 133 ●●●●● 补丁 | 查看 | 原始文档 | 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,10 +58,9 @@
}
//  åŒæ­¥é›†å›¢å±žæ€§æ¨¡åž‹è§†å›¾
export const syncClassifyModel = (params) => {
  console.log(params)
  return request({
    url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/syncClassifyModel',
    method: 'post',
    params: params
  })
}
}
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>
      <!--      ç»„合规则-->
@@ -321,82 +321,83 @@
    </div>
      <el-table v-if="this.crudArrayFlag"
                ref="referAttrCrud"
                v-loading="loading"
                :data="ProData"
                :height="this.tableHeight"
                :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
                border
                style="width: 100%"
                @select="selectHandle"
                @cell-click="handleCellClicks"
                @selection-change="selectionChange"
                @row-click="rowClick"
    <el-table v-if="this.crudArrayFlag"
              ref="referAttrCrud"
              v-loading="loading"
              :data="ProData"
              :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
              :height="this.tableHeight"
              border
              style="width: 100%"
              @select="selectHandle"
              @cell-click="handleCellClicks"
              @selection-change="selectionChange"
              @row-click="rowClick"
    >
      <el-table-column
        :fixed="!editStyleFlag ? 'left' : undefined"
        type="selection" width="55">
      </el-table-column>
      <!--<el-table-column fixed label="序号" type="index" width="55"></el-table-column>-->
      <el-table-column v-for="(item,index) in this.option.column" v-if="item.edit !='referName'"
                       :key="item.id"
                       :fixed="!editStyleFlag ? item.fixed : undefined"
                       :formatter="formAttr"
                       :label="item.label"
                       :prop="item.prop"
                       :show-overflow-tooltip="true"
                       :sortable="item.sortable"
                       :width="item.width||(item.label.length >=4 ?'160':item.label.length==3 ?'130':'100')"
                       align="center"
      >
        <el-table-column
          :fixed="!editStyleFlag ? 'left' : undefined"
          type="selection" width="55">
        </el-table-column>
        <!--<el-table-column fixed label="序号" type="index" width="55"></el-table-column>-->
        <el-table-column v-for="(item,index) in this.option.column" v-if="item.edit !='referName'"
                         :key="item.id"
                         :fixed="!editStyleFlag ? item.fixed : undefined"
                         :formatter="formAttr"
                         :label="item.label"
                         :prop="item.prop"
                         :show-overflow-tooltip="true"
                         :sortable="item.sortable"
                         :width="item.width||(item.label.length >=4 ?'160':item.label.length==3 ?'130':'100')"
                         align="center"
        >
          <template slot-scope="{ row }">
            <el-input
              v-if="editingRows === row && editShows== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text'  ||item.edit == 'refer' )"
              v-show="!AddCellFlag"
              :ref="'input' + row.oid"
              v-model="row[item.prop]"
              @blur="saveRows(row)"
            ></el-input>
            <el-input-number v-if="editingRows === row && editShows== item.prop && item.edit == 'number'"
                             v-show="!AddCellFlag"
                             v-model="row[item.prop]"
                             :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"
                       @blur="selectChangeHandler(item.editConfig,index)">
              <el-option
                v-for="optionItem in item.data"
                :key="optionItem.dictValue"
                :label="optionItem.dictValue"
                :value="optionItem.dictValue">
              </el-option>
            </el-select>
            <el-switch
              v-if="item.edit === 'switch'" v-model="row[item.prop]" :disabled="!editOpenFlag" active-value="true"
              inactive-value="false">
            </el-switch>
            <span v-else>{{ row[item.prop] }}</span>
          </template>
        </el-table-column>
        <el-table-column
          fixed="right"
          label="操作"
          width="70">
          <template slot-scope="scope">
            <el-button
              size="small"
              type="text"
              @click.native.prevent="CrudRowDel(scope.$index)">
              ç§»é™¤
            </el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
        <template slot-scope="{ row }">
          <el-input
            v-if="editingRows === row && editShows== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text'  ||item.edit == 'refer' )"
            v-show="!AddCellFlag"
            :ref="'input' + row.oid"
            v-model="row[item.prop]"
            @blur="saveRows(row)"
          ></el-input>
          <el-input-number v-if="editingRows === row && editShows== item.prop && item.edit == 'number'"
                           v-show="!AddCellFlag"
                           v-model="row[item.prop]"
                           :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' " 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"
              :key="optionItem.dictValue"
              :label="optionItem.dictValue"
              :value="optionItem.dictValue">
            </el-option>
          </el-select>
          <el-switch
            v-if="item.edit === 'switch'" v-model="row[item.prop]" :disabled="!editOpenFlag" active-value="true"
            inactive-value="false">
          </el-switch>
          <span v-else>{{ row[item.prop] }}</span>
        </template>
      </el-table-column>
      <el-table-column
        fixed="right"
        label="操作"
        width="70">
        <template slot-scope="scope">
          <el-button
            size="small"
            type="text"
            @click.native.prevent="CrudRowDel(scope.$index)">
            ç§»é™¤
          </el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
@@ -452,7 +453,7 @@
      default: false
    },
    btnAuthList: {
      type:Array
      type: Array
    }
  },
  watch: {
@@ -1110,10 +1111,10 @@
        indexClassName: "序号",
        indexLabelClassName: '序号',
        index: true,
        indexFixed:false,
        selectionFixed:false,
        indexFixed: false,
        selectionFixed: false,
        columnBtn: false,
        refreshBtn:false,
        refreshBtn: false,
        border: true,
        addBtn: false,
        menu: false,
@@ -1563,7 +1564,7 @@
    ...mapGetters(["permission"]),
    permissionList() {
      return {
        busineStatus: this.vaildData(this.btnAuthList.attr_add, false) ,
        busineStatus: this.vaildData(this.btnAuthList.attr_add, false),
        fullscreenStatus: this.vaildData(this.btnAuthList.attr_view_edit, false),
        ruleStatus: this.vaildData(this.btnAuthList.attr_rule, false),
        attrStatus: this.vaildData(this.btnAuthList.attr_group, false),
@@ -1597,7 +1598,7 @@
      if (this.editStyleFlag) {
        return '800px'
      } else {
        return 'calc(100vh - 595px)'
        return 'calc(100vh - 565px)'
      }
    }
  },
@@ -1724,8 +1725,8 @@
            ts: ""
          })
          // å°†è‹±æ–‡ç¼–号转换为小写
          let { id, ...res } = this.busineAddList;
          this.busineAddList = { id: id.toLowerCase(), ...res };
          let {id, ...res} = this.busineAddList;
          this.busineAddList = {id: id.toLowerCase(), ...res};
          this.ProData.push(JSON.parse(JSON.stringify(this.busineAddList)));
        }
      })
@@ -2072,7 +2073,7 @@
      const regex = new RegExp(this.rulesData.ruleRowBds);
      if (regex.test(this.RulesForm.TestContent)) {
        this.$message.success('校验成功')
      }else {
      } else {
        this.$message.error('校验失败')
      }
    },
@@ -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,23 +1,23 @@
<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>
<!--      å…³é”®å±žæ€§æŸ¥è¯¢è§„则-->
      <!--      å…³é”®å±žæ€§æŸ¥è¯¢è§„则-->
      <ThemeChildren
        ref="ThemeKeyChildren"
        :SelectOption="SelectOption"
@@ -41,7 +41,7 @@
        dialogTitle="相似项查询规则"
        @defineHandler="handlerDefine"
      ></ThemeChildren>
<!--      å­˜å‚¨çš„业务类型-->
      <!--      å­˜å‚¨çš„业务类型-->
      <ThemeChildren
        ref="ThemeBtmChildren"
        :SelectOption="btmSelectOption"
@@ -57,19 +57,20 @@
</template>
<script>
import {defaultReferDataGrid,referDataGrid} from '@/api/MasterData/master'
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",
  props: ['loneTreeNewForm','flag','Editclose','TreeFlag','nodeClickList'],
  props: ['loneTreeNewForm', 'flag', 'Editclose', 'TreeFlag', 'nodeClickList'],
  data() {
    return {
      masterRow:null,
      masterInput:'',
      MasterSearchSelects:"",
      SelectOption:[
      masterRow: null,
      masterInput: '',
      MasterSearchSelects: "",
      SelectOption: [
        {
          value: 'name',
          label: '中文名称'
@@ -79,7 +80,7 @@
          label: '英文名称'
        }
      ],
      btmSelectOption:[
      btmSelectOption: [
        {
          value: 'id',
          label: '业务类型编号'
@@ -89,23 +90,23 @@
          label: '业务类型名称'
        },
      ],
      MasterdialogVisible:false,
      KeydialogVisible:false,
      SimidialogVisible:false,
      BtmdialogVisible:false,
      MasterdialogVisible: false,
      KeydialogVisible: false,
      SimidialogVisible: false,
      BtmdialogVisible: false,
      form: {
        name: "哈哈",
        sex: "男"
      },
      renonlyOption: {
        submitBtn:false,
        emptyBtn:false,
        columnBtn:false,
        submitBtn: false,
        emptyBtn: false,
        columnBtn: false,
        column: [
          {
            label: '主题库/分类编号',
            prop: 'id',
            labelWidth:135,
            labelWidth: 135,
            disabled: true,
            rules: [{
              required: true,
@@ -117,7 +118,7 @@
            label: '主题库/分类名称',
            prop: 'name',
            disabled: true,
            labelWidth:135,
            labelWidth: 135,
            rules: [{
              required: true,
              message: "主题库/分类名称",
@@ -125,15 +126,15 @@
            }]
          },
          {
            label:"描述",
            prop:"description",
            labelWidth:128,
            label: "描述",
            prop: "description",
            labelWidth: 128,
            disabled: true,
          },
          {
            label: '存储的业务类型',
            prop: 'btmTypeName',
            labelWidth:128,
            labelWidth: 128,
            disabled: true,
            rules: [{
              required: true,
@@ -142,21 +143,21 @@
            }]
          },
          {
            label:"编码规则",
            prop:"codeRuleOidName",
            labelWidth:128,
            label: "编码规则",
            prop: "codeRuleOidName",
            labelWidth: 128,
            disabled: true,
          },
          {
            label:"关键属性查询规则",
            prop:"codeKeyAttrRepeatOidName",
            labelWidth:128,
            label: "关键属性查询规则",
            prop: "codeKeyAttrRepeatOidName",
            labelWidth: 128,
            disabled: true,
          },
          {
            label:"相似查询规则",
            prop:"codeResembleRuleOidName",
            labelWidth:128,
            label: "相似查询规则",
            prop: "codeResembleRuleOidName",
            labelWidth: 128,
            disabled: true,
          },
          {
@@ -165,7 +166,7 @@
            type: 'switch',
            activeColor: "#13ce66",
            inactiveColor: "#ff4949",
            labelWidth:160,
            labelWidth: 160,
            disabled: true,
            dicData: [{
              label: '否',
@@ -180,99 +181,106 @@
      },
      FormList: {},
      masterSelectList:[],
      KeySelectLIst:[],
      simSelectList:[],
      btmSelectList:[]
      masterSelectList: [],
      KeySelectLIst: [],
      simSelectList: [],
      btmSelectList: []
    }
  },
  computed:{
    editOption(){
      return{
          column: [
            {
              label: '主题库/分类编号',
              prop: 'id',
              labelWidth:128,
              rules: [{
                required: true,
                message: "主题库/分类编号",
                trigger: "blur"
              }]
            },
            {
              label: '主题库/分类名称',
              prop: 'name',
              labelWidth:128,
              rules: [{
                required: true,
                message: "主题库/分类名称",
                trigger: "blur"
              }]
            },
            {
              label:"描述",
              prop:"description",
              labelWidth:128,
            },
            {
              label: '存储的业务类型',
              prop: 'btmTypeName',
              labelWidth:128,
              focus:this.btmFoucus,
                // readonly: true,
              display:this.TreeFlag,
              rules: [{
                required: true,
                message: "存储的业务类型",
                trigger: "blur"
              }]
            },
            {
              label:"编码规则",
              prop:"codeRuleOidName",
              labelWidth:128,
              focus:this.CodeFocus,
              readonly: true,
            },
            {
              label:"关键属性查询规则",
              prop:"codeKeyAttrRepeatOidName",
              labelWidth:128,
              focus:this.Keyfouce,
              readonly: true,
            },
            {
              label:"相似查询规则",
              prop:"codeResembleRuleOidName",
              labelWidth:128,
              focus: this.simFouce,
              readonly: true,
            },
            {
              label: '是否参与关键属性校验',
              prop: 'isParticipateCheck',
              type: 'switch',
              activeColor: "#13ce66",
              inactiveColor: "#ff4949",
              labelWidth:160,
              dicData: [{
                label: '否',
                value: 0
              }, {
                label: '是',
                value: 1
  computed: {
    editOption() {
      return {
        column: [
          {
            label: '主题库/分类编号',
            prop: 'id',
            labelWidth: 128,
            rules: [{
              required: true,
              message: "主题库/分类编号",
              trigger: "blur"
            }]
          },
          {
            label: '主题库/分类名称',
            prop: 'name',
            labelWidth: 128,
            rules: [{
              required: true,
              message: "主题库/分类名称",
              trigger: "blur"
            }]
          },
          {
            label: "描述",
            prop: "description",
            labelWidth: 128,
          },
          {
            label: '存储的业务类型',
            prop: 'btmTypeName',
            labelWidth: 128,
            focus: this.btmFoucus,
            display: this.TreeFlag,
            rules: [{
              required: true,
              message: "存储的业务类型",
              trigger: "blur"
            }]
          },
          {
            label: "编码规则",
            prop: "codeRuleOidName",
            labelWidth: 128,
            focus: this.CodeFocus,
            readonly: true,
          },
          {
            label: "关键属性查询规则",
            prop: "codeKeyAttrRepeatOidName",
            labelWidth: 128,
            focus: this.Keyfouce,
            change: (data) => {
              if (data.value === "") {
                this.loneTreeNewForm.codeKeyAttrRepeatOid = ""
              }
              ]
            }
          ]
          },
          {
            label: "相似查询规则",
            prop: "codeResembleRuleOidName",
            labelWidth: 128,
            focus: this.simFouce,
            change: (data) => {
              if (data.value === "") {
                this.loneTreeNewForm.codeResembleRuleOid = ""
              }
            }
          },
          {
            label: '是否参与关键属性校验',
            prop: 'isParticipateCheck',
            type: 'switch',
            activeColor: "#13ce66",
            inactiveColor: "#ff4949",
            labelWidth: 160,
            dicData: [{
              label: '否',
              value: 0
            }, {
              label: '是',
              value: 1
            }
            ]
          }
        ]
      }
    }
  },
  watch:{
    TreeFlag:{
      handler(newval,oldval){
  watch: {
    TreeFlag: {
      handler(newval, oldval) {
        // console.log(newval)
      }
    }
@@ -308,19 +316,19 @@
        this.$emit('MasterHandler', this.loneTreeNewForm);
      }
    },
    submits(form,done){
      if(this.TreeFlag){
        TreeEditSave(this.loneTreeNewForm).then(res=>{
    submits(form, 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=>{
      } else {
        this.loneTreeNewForm.btmTypeName = '';
        this.loneTreeNewForm.btmTypeId = '';
        TreeEditSave(this.loneTreeNewForm).then(res => {
          this.$message.success('修改成功');
          this.Editclose()
          this.$emit('referTreeForm');
@@ -333,23 +341,23 @@
      this.$message.success(err);
    },
    //编码规则失焦
    CodeFocus(){
      this.MasterdialogVisible=true;
    CodeFocus() {
      this.MasterdialogVisible = true;
      this.$refs.ThemeMasterChildren.defaultSearchRend()
    },
    //关键属性失焦
    Keyfouce(){
      this.KeydialogVisible=true;
    Keyfouce() {
      this.KeydialogVisible = true;
      this.$refs.ThemeKeyChildren.defaultSearchRend();
    },
    //相似项失焦
    simFouce(){
      this.SimidialogVisible=true;
    simFouce() {
      this.SimidialogVisible = true;
      this.$refs.ThemeSimChildren.defaultSearchRend();
    },
    //业务类型失焦
    btmFoucus(){
    btmFoucus() {
      this.BtmdialogVisible = true;
      this.$refs.ThemeBtmChildren.btmDefaultRend();
    },
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,
@@ -1142,7 +1143,7 @@
    },
    //树点击事件
    async nodeClick(data) {
      getAuthButtonList({classifyId: data.oid,code: "classifyTree",authType: "classify_auth"}).then(res => {
      getAuthButtonList({classifyId: data.oid, code: "classifyTree", authType: "classify_auth"}).then(res => {
        this.btnAuthList = res.data.data;
      }).catch(error => {
        console.log(error)
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>
@@ -18,7 +21,7 @@
<script>
export default {
  name: "TemplatePro.vue",
  props: ['ProData','crudOid','crudLCStatus','crudArray','Formlist','codeClassifyOid','rowIndex','crudArrayFlag','btnAuthList'],
  props: ['ProData', 'crudOid', 'crudLCStatus', 'crudArray', 'Formlist', 'codeClassifyOid', 'rowIndex', 'crudArrayFlag', 'btnAuthList'],
  data: function () {
    return {
      type: {},
@@ -34,7 +37,7 @@
          prop: 'tab3',
        }]
      },
      checkStatus:false,//是否需要验证模板状态,false为关闭权限
      checkStatus: false,//是否需要验证模板状态,false为关闭权限
    }
  },
  created() {
@@ -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
@@ -5,8 +5,8 @@
        <el-aside style="background-color: #fff;" width="210px">
          <el-input v-model="filterText" placeholder="输入关键字进行过滤">
          </el-input>
          <el-menu :default-openeds="['1', '3']" >
            <el-tree  ref="tree" :data="treeData" :filter-node-method="filterNode" :props="defaultProps"
          <el-menu :default-openeds="['1', '3']">
            <el-tree ref="tree" :data="treeData" :filter-node-method="filterNode" :props="defaultProps"
                     accordion class="filter-tree" empty-text="暂无数据" @node-click="handelTreeCell">
              <template slot-scope="{ node, data }" class="el-tree-node__label">
                <el-tooltip :content="$createElement('div', { domProps: { innerHTML: node.label } })" class="item"
@@ -22,25 +22,33 @@
          </el-menu>
        </el-aside>
      </el-card>
      <el-main >
      <el-main>
        <el-card style="height: calc(100vh - 128px)">
          <el-form :model="form">
            <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>
            </el-form-item>
          </el-form>
          <el-card  style="height:38vh">
          <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 = r
        } else {
          this.groupTreeData = response.data
        this.groupTreeData = response.data;  // å°†èŽ·å–åˆ°çš„æ•°æ®èµ‹å€¼ç»™é›†å›¢åˆ†ç±»æ ‘æ•°æ®
        await this.filterCheckedNodes(this.groupTreeData, this.defaultCheckedKeys);
        await this.$nextTick(() => {
          this.$refs.groupTree.setCheckedKeys(this.defaultCheckedKeys);
        });
        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)
        if (response.status === 200) {
          console.log(response)
        try {
          const response = await syncClassifyModel(param);
          if (response.status === 200) {
            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.getListCodeByClassId(event.oid)
      }
      this.treeParam.codeClassifyId = event.oid
      this.form.groupValue = ''
      this.groupVal = ''
      this.tableData = []
      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()
@@ -438,27 +511,30 @@
}
</script>
<style lang="scss" scoped>
  .setstyle {
    min-height: 200px;
    padding: 0 !important;
    margin: 0;
    overflow: auto;
    cursor: default !important;
.setstyle {
  min-height: 200px;
  padding: 0 !important;
  margin: 0;
  overflow: auto;
  cursor: default !important;
}
::v-deep {
  .el-transfer-panel__list {
    width: 100%;
    height: 370px;
  }
  ::v-deep{
    .el-transfer-panel__list {
      width: 100%;
      height: 370px;
    }
    .el-transfer-panel__body {
      height: 370px;
    }
    .el-input {
      width: auto;
    }
    .el-transfer-panel {
      width: 270px;
    }
  .el-transfer-panel__body {
    height: 370px;
  }
  .el-input {
    width: auto;
  }
  .el-transfer-panel {
    width: 270px;
  }
}
</style>
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);
                                dockingPreApplyForm.setGroupCode(customCoding);
                                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);
                            dockingPreApplyForm.setGroupCode(customCoding);
                            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);
                            dockingPreApplyForm.setGroupCode(customCoding);
                            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)) {
        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();
                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{
                        throw new Throwable("根据系统标识【"+systemId+"】找到对应的配置文件:【"+path+"】,但未获取到对应的库【"+libray+"】属性映射信息配置");
                    }
                }
                libraryClsfDOList = libraryDO.getClsf();
            } catch (Throwable e) {
                objerrorCode = "1";
                e.printStackTrace();
                throw new Throwable("集成系统标识为:【" + systemId + "】,分类库为:【" + libray + "】的集成属性配置文件读取失败");
            }
            log.info("根据参数:libray:-》"+libray+"从配置文件中找对应属性映射配置 end ");
        }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 + "从配置文件中找对应属性映射配置");
                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 ");
        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)) {
        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();
                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{
                        throw new Throwable("根据系统标识【"+systemId+"】找到对应的配置文件:【"+path+"】,但未获取到对应的库【"+libray+"】属性映射信息配置");
                    }
                }
                libraryClsfDOList = libraryDO.getClsf();
            } catch (Throwable e) {
                objerrorCode = "1";
                e.printStackTrace();
                throw new Throwable("集成系统标识为:【" + systemId + "】,分类库为:【" + libray + "】的集成属性配置文件读取失败");
            }
            log.info("根据参数:libray:-》"+libray+"从配置文件中找对应属性映射配置 end ");
        }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 + "从配置文件中找对应属性映射配置");
                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 ");
        LinkedList<String> rowNameList=new LinkedList<>();
        LinkedHashMap<String,Integer> filedIndexMap=new LinkedHashMap<>();
        //根据分类模板组织数据