xiejun
2023-08-24 bd8e5225fc4a0e5068b40003321044493b7b4f77
Merge remote-tracking branch 'origin/master'
已修改18个文件
已添加2个文件
1266 ■■■■ 文件已修改
Source/UBCS-WEB/src/App.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/GetItem.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/docking/info.js 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/code-dialog-page/maxSerialnumDialog.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/info.vue 213 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/docking/infoForm.vue 627 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/system/menu.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/App.vue
@@ -28,4 +28,7 @@
.avue--detail .el-col{
  margin-bottom: 0;
}
.avue-dialog .el-dialog__body {
  margin-bottom: 10px
}
</style>
Source/UBCS-WEB/src/api/GetItem.js
@@ -90,3 +90,13 @@
    data:data
  })
}
// ç”³è¯·é›†å›¢ç å€¼æ•°æ®
export function applyGroupCode(params) {
  return request({
    url: 'api/ubcs-applyjtcodeservice/DockingPreApplyCode/applyGroupCode',
    method: 'post',
    params: {
      ...params
    }
  })
}
Source/UBCS-WEB/src/api/docking/info.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
import request from '@/router/axios';
export const getList = (page, size, params) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/gridDockingSystem',
    method: 'get',
    params: {
      ...params,
      page,
      size
    }
  })
}
// æ–°å¢ž
export const add = (data) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/addSaveSystemConfig',
    method: 'post',
    data
  })
}
// ä¿®æ”¹
export const edit = (data) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/editSystemConfig',
    method: 'post',
    data
  })
}
// åˆ é™¤
export const del = (data) => {
  let url = '/api/ubcs-code/dockingManagement/deleteSystemConfigsById'
  return request({
    url,
    method: 'delete',
    data
  })
}
// åŒæ­¥
export const push = (data) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/pushData',
    method: 'post',
    data
  })
}
// åœç”¨å¯ç”¨
export const updateStatus = (data) => {
  return request({
    url: '/api/ubcs-code/dockingManagement/updateStatus',
    method: 'post',
    data
  })
}
Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
@@ -170,6 +170,12 @@
          message = "请输入";
          trigger = "blur";
        }
        let fieldMapKey=''
        if( formItem.type == "refer"){
          if(!formItem.fieldMap){
            fieldMapKey=formItem.field+'Id'
          }
        }
        let columnItem = {
          label: formItem.text,
          labelslot: true,
@@ -200,8 +206,9 @@
                  title: formItem.text,
                  showField: formItem.showField || formItem.field,
                  field: formItem.field,
                  fieldMap:formItem.fieldMap || {fieldMapKey:'id'},
                  placeholder: formItem.inputTip,
                  options: formItem.referConfig,
                  options: formItem.referConfig
                }
              : {},
          span: formItem.span
@@ -356,6 +363,42 @@
      if (data.field) {
        this.form[data.field] = data.value || "";
        this.form[data.showField] = data.text || "";
        if (data.fieldMap) {
          //说明需要映射
          for (let key in data.fieldMap) {
            let mapFields = data.fieldMap[key].split(",");
            let value = [];
            data.rawData.forEach(_item => {
              var temp;
              if (!_item.attributes) {
                _item.attributes = _item;
              }
              if (mapFields.length == 1) {
                var mapField = mapFields[0];
                if (mapField.indexOf("attribute.") > -1) {
                  temp = _item['attributes'][mapField.subString("attribute.".length)];
                } else {
                  temp = _item['attributes'][mapField] || _item[mapField];
                }
              } else {
                //有多个
                var mutiTemp = [];
                layui.each(mapFields, function (_indexField, _itemField) {
                  if (_itemField.indexOf("attribute.") > -1) {
                    mutiTemp.push(_item['attributes'][_itemField.subString("attribute.".length)]);
                  } else {
                    mutiTemp.push(_item['attributes'][_itemField] || _item[_itemField]);
                  }
                });
                temp = mutiTemp.join(' ');
              }
              if (temp != null && temp != '') {
                value.push(temp);
              }
            })
            this.form[key] = value.join(',');
          }
        }
        this.$emit("getFormData", this.form);
        this.$emit("referConfigDataUpdate", data);
      }
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -134,12 +134,12 @@
      showCodeApply: false,
      showResembleQuery: false,
      selfColumnType: {
        codefixedsec: "combox",
        codeclassifysec: "refer",
        codevariablesec: "text",
        codefixedsec: "combox",//固定码段
        codeclassifysec: "refer",//分类码段
        codevariablesec: "text",//可变码段
        coderefersec: "refer",//引用码段
        codeattrsec: "text",
        codelevelsec: "text",
        coderefersec: "refer",
        codedatesec: "date"
      },
      selfColumnConfig: {
@@ -301,6 +301,8 @@
        if (item.parentClassifySecOid === field) {
          this.$refs.CodeApply.form[item.oid] = undefined;
          this.$refs.CodeApply.form[item.name] = undefined;
          item.readOnly=false;
          item.referConfig.extraParams.parentClassifyValueOid=data.value;
        }
        return item;
      });
@@ -414,6 +416,7 @@
    getReferConfig(item) {
      let params = {};
      if (item.secType == "codeclassifysec") {
        //分类码段
        params = {
          isMuti: false,
          type: "grid",
@@ -458,6 +461,7 @@
          },
        };
      } else if (item.secType == "coderefersec") {
        //引用码段
        params = JSON.parse(item.referValueInfo);
      }
      return params;
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -116,7 +116,7 @@
  </basic-container>
</template>
<script>
import {MasterTable, TableData, FindData, addSaveCode, editSaveCode, deleteCode, upSaveCode} from "@/api/GetItem";
import {MasterTable, TableData, FindData, addSaveCode, editSaveCode, deleteCode, upSaveCode,applyGroupCode} from "@/api/GetItem";
import {processTS, changeStatus} from "@/api/template/setPersonnel"
import {listCodeAttributeByClassId} from "@/api/integration/integration.js";
import integrationTransfer from "@/views/integration/integrationTransfer";
@@ -412,10 +412,28 @@
        if (uniqueFlag === 'CODERECYCLE') return this.Recovery()
        //删除
        if (uniqueFlag === 'CODEDELETE') return this.enumDeleteRow()
        //申请集团码数据
        if (uniqueFlag === 'applyGroupCode') return this.applyGroupCode()
        //更新集团码数据
        // if (uniqueFlag === 'applyGroupCode') return this.applyGroupCode()
        //  ç›¸ä¼¼é¡¹æŸ¥è¯¢
        //  if(uniqueFlag === 'CODEEDIT') return this.similarHandler()
      });
    },
    //申请集团码数据
    applyGroupCode(){
      if(this.selectRow.length <= 0){
        this.$message.warning('请选择一条数据模板!')
      }else {
        // const requestData = this.selectRow.forEach(item => {
        //   return { oids: item.oid, btmName: item.btmname };
        // });
        const oids = this.selectRow.map(item => item.oid).join(',');
        applyGroupCode({ oids, btmName: this.selectRow[0].btmname }).then(res => {
          console.log(res);
        });
      }
    },
    openD() {
      this.getListCodeByClassId();
    },
Source/UBCS-WEB/src/components/code-dialog-page/maxSerialnumDialog.vue
@@ -161,7 +161,8 @@
            console.log(objcodekey)
            const filteredObj = objcodekey.reduce((acc, key) => {
                const pattern = /[\u4e00-\u9fa5]/; // åŒ¹é…ä¸­æ–‡å­—符的正则表达式
                if (!pattern.test(key)) {
                const patterns = /\$/;
                if (!pattern.test(key)&&!patterns.test(key)) {
                    acc[key] = this.codeApplyForm[key];
                }
                return acc;
@@ -230,6 +231,7 @@
            if (item.secType == "codeclassifysec") {
                params = {
                    isMuti: false,
                    valueField: 'id',
                    type: "grid",
                    tableConfig: {
                        limit: -1,
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -48,6 +48,8 @@
      deep: true,
      immediate: true,
      handler(newV) {
        this.text=newV.text;
        this.value=newV.value;
        this.$emit("setReferValue", newV);
      }
    }
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
@@ -178,11 +178,15 @@
      } else {
        this.option.column = this.options.tableConfig.cols.map(item => {
          if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
            let formatter=item.template || item.templet;
            if(typeof formatter == "string" && formatter !=''){
              formatter=eval("(" + formatter + ")")
            }
            return {
              ...item,
              label: item.title,
              prop: item.field,
              formatter:item.template,
              formatter:formatter,
              search:this.options.tableConfig.queryColumns.some(qItem=>{
                return qItem.field==item.field
              })
@@ -236,7 +240,7 @@
      this.value=value.join(',');
      this.text=text.join(',')
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList});
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList,fieldMap:this.referConfig.fieldMap});
      this.visible=false;
    },
    searchReset() {
@@ -284,8 +288,8 @@
          }
        }
        getList(Object.assign(params,this.params,this.query, query),page.currentPage, page.pageSize, this.url, this.method).then(res => {
          this.data = res.data.records;
          this.page.total=res.data.total
          this.data = res.data.records || res.data.data.records;
          this.page.total=res.data.total || res.data.data.total;
          this.loading = false;
          this.selectionClear();
        }).catch(error=>{
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -242,11 +242,15 @@
          //说明传递了的
          this.option.column= this.options.tableConfig.cols.map(item => {
            if (item.field != 'LAY_TABLE_INDEX' && item.field != 'LAY_CHECKED') {
              let formatter=item.template || item.templet;
              if(typeof formatter == "string" && formatter !=''){
                formatter=eval("(" + formatter + ")")
              }
              return {
                ...item,
                label: item.title,
                prop: item.field,
                formatter:item.template,
                formatter:formatter,
                search: this.options.tableConfig.queryColumns.some(qItem=>{
                  return qItem.field==item.field
                })
@@ -295,7 +299,7 @@
      this.value=value.join(',');
      this.text=text.join(',')
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList});
      this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList,fieldMap:this.referConfig.fieldMap});
      this.visible=false;
    },
    searchReset() {
@@ -343,8 +347,8 @@
          }
        }
        getList(Object.assign(params,this.params,this.query, query),page.currentPage, page.pageSize, this.url).then(res => {
          this.data = res.data.records;
          this.page.total=res.data.total
          this.data = res.data.records || res.data.data.records;
          this.page.total=res.data.total || res.data.data.total;
          this.loading = false;
          this.selectionClear();
        }).catch(error=>{
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -183,7 +183,8 @@
        value: this.value,
        text: this.text || '',
        isTreeMuti:this.isMuti,
        rawData: checkedData.checkedNodes
        rawData: checkedData.checkedNodes,
        fieldMap:this.referConfig.fieldMap
      });
    }
  },
Source/UBCS-WEB/src/views/docking/info.vue
@@ -26,7 +26,7 @@
        </avue-crud>
      </basic-container>
    </el-main>
    <originalAdd ref="originalAdd" @refreshTable="refreshChange" :attribute="editAttribute"></originalAdd>
    <infoForm ref="infoForm" @refreshTable="refreshChange" :formData="editAttribute"></infoForm>
    <!-- é«˜çº§æŸ¥è¯¢å¯¹è¯æ¡† -->
    <advanced-query
      :ref="advancedQueryParam.ref"
@@ -39,31 +39,53 @@
<script>
import {
  getList,
  remove,
  add,
  update, getPage, getApplyRange
} from "@/api/omd/OmdAttribute";
  getList,add,edit,del,push,updateStatus
} from "@/api/docking/info";
import {getDictionary} from "@/api/omd/enum";
import {mapGetters} from "vuex";
import infoForm from "./infoForm.vue";
export default {
  name: "info",
  components:{infoForm},
  data() {
    return {
      //接口类型下拉
      interfaceTypeList: [{
        label: 'webService', value: 'webService'
      }, {
        label: '类路径', value: 'classPath'
      }, {
        label: 'Http', value: 'http'
      }],
      //参数类型下拉
      paramTypeList: [{
        label: 'xml', value: 'xml'
      }, {
        label: 'Json', value: 'json'
      }],
      //返回值类型下拉
      returnTypeList: [{
        label: 'xml', value: 'xml'
      }, {
        label: 'Json', value: 'json'
      }],
      //推送类型
      pushTypeList: [{value: '1', label: '数据推送'},
        {value: '2', label: '分类推送'},
        {value: '3', label: '编码申请'},
        {value: '4', label: '编码更改(状态、回收)'},
        {value: '5', label: '分类查询'},
        {value: '6', label: '含规则信息的分类查询'},
        {value: '7', label: '数据查询'}],
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 100
      },
      selectRow: "",
      selectRow: {},
      data: [],
      form: {},
      attribute: {
        nullable: true
      },
      editAttribute: {},
      applyRangeData: [],
      selectionList: [],
      option: {
        height: "auto",
@@ -87,26 +109,21 @@
        columnBtn: false,
        column: [{
          label: '推送类型',
          field: 'pushTypeText',
          prop: 'pushType',
          sortable: true,
          width: 150,
          type: 'select',
          dicData: this.pushType,
          props: {
            label: "value",
            value: "key"
          },
          formatter:function (d){
            return this.pushTypeList[d.pushType]
          }
        }, {
          label: '系统名称',
          prop: 'sysbasename',
          prop: 'sysBaseName',
          sortable: true,
          search: true,
          width: 150
        }, {
          label: '系统编号',
          prop: 'sysbaseid',
          prop: 'sysBaseId',
          sortable: true,
          search: true,
          width: 150
        }, {
          label: '接口函数',
@@ -115,12 +132,12 @@
          width: 150
        }, {
          label: '命名空间',
          prop: 'namespace',
          prop: 'nameSpace',
          sortable: true,
          width: 150
        }, {
          label: 'soapAction',
          prop: 'soapaction',
          prop: 'soapAction',
          sortable: true,
          width: 150
        }, {
@@ -135,35 +152,27 @@
          width: 150
        }, {
          label: '请求地址',
          prop: 'requesturl',
          prop: 'requestUrl',
          sortable: true,
          width: 150
        }, {
          label: '参数类型',
          prop: 'paramtype',
          prop: 'paramType',
          sortable: true,
          width: 150
          width: 150,
          formatter:function (d){
            return this.paramTypeList[d.paramType]
          }
        }, {
          label: '返回值类型',
          prop: 'returntype',
          prop: 'returnType',
          sortable: true,
          width: 150
          width: 150,
          formatter:function (d){
            return this.returnTypeList[d.returnType]
          }
        }]
      },
      itemForm: {
        itemData: {},
        activeName: "referTab",
        enumInitFlag: false,
        referInitFlag: false,
        form: {}
      },
      pushType: [{key: '1', value: '数据推送'},
        {key: '2', value: '分类推送'},
        {key: '3', value: '编码申请'},
        {key: '4', value: '编码更改(状态、回收)'},
        {key: '5', value: '分类查询'},
        {key: '6', value: '含规则信息的分类查询'},
        {key: '7', value: '数据查询'}],
      // é«˜çº§æŸ¥è¯¢å¯¹è¯æ¡†ç›¸å…³å‚æ•°
      advancedQueryParam: {
        ref: 'advancedQuery',
@@ -199,14 +208,10 @@
    selectionChange(list) {
      this.selectionList = list;
      if(this.selectionList.length <= 0){
        this.itemForm.itemData = null
        this.selectRow = null
        this.attribute = null
      }
      if (this.selectionList.length > 0) {
        this.itemForm.itemData = this.selectionList[list.length-1];
        this.selectRow = this.selectionList[list.length-1].$index;
        this.attribute = this.selectionList[list.length-1];
      }
    },
    selectionClear() {
@@ -223,26 +228,24 @@
      this.onLoad(this.page, this.query);
    },
    addSave() {
      this.$refs.originalAdd.showSubmitDialog = true;
      const newAttr = {};
      newAttr.nullable = true;
      this.$refs.originalAdd.attribute = newAttr;
      this.$refs.infoForm.showSubmitDialog = true;
      this.$refs.infoForm.formData = {
        dataFlowType:'push',
        pushType:'1',
        sysIntParamVOs:[],
        sysIntHeaderVOs:[]
      };
    },
    updateSave(row,index) {
      this.selectRow = index;
      var json = JSON.stringify(row);
      this.editAttribute = JSON.parse(json);
      this.editAttribute.nullable = row.nullable == 'true' ? true : false;
      this.$refs.originalAdd.attribute = this.editAttribute;
      this.$refs.originalAdd.showSubmitDialog = true;
      this.checkUsingReferDict(row);
      this.$refs.originalAdd.activeName = this.itemForm.activeName;
      this.$refs.originalAdd.enumInitFlag = this.itemForm.enumInitFlag;
      this.$refs.originalAdd.referInitFlag = this.itemForm.referInitFlag;
      // this.refreshChange()
      this.selectRow = row;
      this.editAttribute = row;
      this.editAttribute.sysIntParamVOs = row.sysIntParamVOs||[];
      this.editAttribute.sysIntHeaderVOs = row.sysIntHeaderVOs||[];
      this.$refs.infoForm.formData = this.editAttribute;
      this.$refs.infoForm.showSubmitDialog = true;
    },
    deleteSave(row,index) {
      this.$confirm("删除元数据将无法被恢复, æ˜¯å¦ç»§ç»­?", "提示", {
      this.$confirm("删除数据将无法被恢复, æ˜¯å¦ç»§ç»­?", "提示", {
        iconClass: 'el-icon-question',
        confirmButtonText: "确定",
        cancelButtonText: "取消",
@@ -255,9 +258,41 @@
        });
      });
    },
    ENABLE(row,index){
      //启用
      this.updateStatus("enable");
    },
    DISABLE(row,index){
      //停用
      this.updateStatus("disable");
    },
    updateStatus(able){
      var that = this;
      var paramTemp = {
        update:able,
        oid:this.selectRow.oid,
        ts:this.selectRow.ts
      };
      this.$confirm("是否要"+(able == "enbale" ? "启用" : (able == "disable" ? "停用": "发布")) +"这条数据?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return updateStatus(paramTemp);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message:(able == "enbale" ? "启用成功" : (able == "disable" ? "停用成功": "发布成功"))
          });
          this.$refs.crud.toggleSelection();
        });
    },
    PUSH(){
      if (this.selectionList.length != 1) {
        this.$message.error('请选择一条数据')
        this.$message.error('请选择数据')
        return false;
      }
      this.$confirm("是否要"+ (this.selectionList[0].pushType == "1" ? "推送数据" : "推送分类"), {
@@ -279,62 +314,18 @@
    },
    onLoad(page, params = {}) {
      this.loading = true;
      getPage(this.page.currentPage, this.page.pageSize, Object.assign(params, this.query)).then(res => {
      getList(this.page.currentPage, this.page.pageSize, Object.assign(params, this.query)).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.data = res.data.data.records;
        this.itemData = this.data[0];
      });
    },
    rowClick(row) {
      this.itemForm.itemData = row;
      this.selectRow = row.$index;
      this.attribute = row;
      this.selectRow = row;
      this.$refs.crud.toggleSelection();
      this.$refs.crud.toggleRowSelection(row); //选中当前行
      //this.checkUsingReferDict(row);
    },
    checkUsingReferDict(row){
      if (row.referToId !== null && row.referToId !== ""){
        this.itemForm.activeName = 'referTab';
        this.itemForm.referInitFlag = true;
        this.itemForm.enumInitFlag = false;
      }else if (row.usingDict === 'true'){
        this.itemForm.activeName = 'enumTab';
        this.itemForm.referInitFlag = false;
        this.itemForm.enumInitFlag = true;
        getDictionary({code: row.dictCode}).then(res => {
          this.editAttribute.dictValue = res.data.data[0].label;
          this.itemForm.itemData.dictValue = this.editAttribute.dictValue;
          this.$refs.originalAdd.dictEnums = res.data.data;
        })
      }else {
        this.itemForm.activeName = 'referTab';
        this.itemForm.referInitFlag = true;
        this.itemForm.enumInitFlag = false;
      }
    },
    selectBtmType() {
      this.referType.display = true;
      this.referType.title = "请选择" + this.referType.value;
    },
    applyRangeOpen() {
      if (!this.selectRow && this.selectRow != 0) {
        this.$message({
          type: "warning",
          message: "请先选择属性"
        });
      }
      var oid = this.data[this.selectRow].oid;
      getApplyRange(oid).then(res => {
        this.applyRangeData = res.data.data;
        this.$refs.applyRange.rangeData = this.applyRangeData;
        this.$refs.applyRange.showDialog = true;
      });
    },
    /** é«˜çº§æŸ¥è¯¢å¯¹è¯æ¡†ç»„ä»¶,组件返回的值是condtionMap[field]形式的查询条件,保留了和之前一样的方式 */
    echoSeniorContionMap(conditionMaps){
Source/UBCS-WEB/src/views/docking/infoForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,627 @@
<template>
  <el-container>
    <el-dialog title="系统集成基础信息" v-dialogDrag :visible.sync="showSubmitDialog" class="avue-dialog avue-dialog--top" append-to-body @close="closeSubmitDialog" width="1000px"
               style="height: 110vh;" top="-5%">
      <el-form ref="form" :model="formData" show-message="true" inline size="medium" label-suffix=":"
               class="dockingForm" :rules="rules" status-icon="true">
        <el-form-item label="dataFlowType" prop="dataFlowType">
          <el-select v-model="formData.dataFlowType" placeholder="请选择" @change="dataFlowTypeChange">
            <el-option v-for="item in dataFlowTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="formData.dataFlowType=='push'?'推送类型':'接受类型'" prop="pushType">
          <el-select v-model="formData.pushType" placeholder="请选择" @change="pushTypeChange">
            <el-option v-for="item in pushTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="参数类型" prop="paramType">
          <el-select v-model="formData.paramType" placeholder="请选择">
            <el-option v-for="item in paramTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="返回值类型" prop="returnType">
          <el-select v-model="formData.returnType" placeholder="请选择">
            <el-option v-for="item in returnTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="分类选择" prop="classifyName">
          <vciWebRefer
            :referConfig="{
                  title: '分类选择',
                  showField: 'classifyName',
                  field: 'classifyOid',
                  fieldMap:{'classifyId':'id'},
                  placeholder: '请选择分类选择',
                  options: {isMuti: false, type: 'tree', url: 'api/ubcs-code/codeClassify/treeCodeClassify'},
                }"
            :value="formData.classifyOid"
            :text="formData.classifyName"
            :disabled="false"
            :display="true"
            @setReferValue="setReferValue"
          ></vciWebRefer>
        </el-form-item>
        <el-form-item v-if="formData.dataFlowType=='push'" label="集成系统" prop="targetSystemName">
          <vciWebRefer
            :referConfig="{
                  title: '集成系统',
                  showField: 'targetSystemName',
                  field: 'targetSystemOid',
                  fieldMap:{'targetSystemId':'id'},
                  placeholder: '请选择',
                  options: {isMuti: false, type: 'default', url: 'api/ubcs-code/codeBasicSecController/gridCodeBasicSec'},
                }"
            :value="formData.targetSystemOid"
            :text="formData.targetSystemName"
            :disabled="false"
            :display="true"
            @setReferValue="setReferValue"
          ></vciWebRefer>
        </el-form-item>
        <el-form-item v-if="formData.dataFlowType=='push'" label="编码系统" prop="sourceSystemName">
          <vciWebRefer
            :referConfig="{
                  title: '编码系统',
                  showField: 'sourceSystemName',
                  field: 'sourceSystemOid',
                  fieldMap:{'sourceSystemId':'id'},
                  placeholder: '请选择',
                  options: {isMuti: false, type: 'default', url: 'api/ubcs-code/codeBasicSecController/gridCodeBasicSec'},
                }"
            :value="formData.sourceSystemOid"
            :text="formData.sourceSystemName"
            :disabled="false"
            :display="true"
            @setReferValue="setReferValue"
          ></vciWebRefer>
        </el-form-item>
        <el-form-item v-if="formData.dataFlowType=='accept'" label="编码系统" prop="targetSystemName">
          <vciWebRefer
            :referConfig="{
                  title: '编码系统',
                  showField: 'targetSystemName',
                  field: 'targetSystemOid',
                  fieldMap:{'targetSystemId':'id'},
                  placeholder: '请选择',
                  options: {isMuti: false, type: 'default', url: 'api/ubcs-code/codeBasicSecController/gridCodeBasicSec'},
                }"
            :value="formData.targetSystemOid"
            :text="formData.targetSystemName"
            :disabled="false"
            :display="true"
            @setReferValue="setReferValue"
          ></vciWebRefer>
        </el-form-item>
        <el-form-item v-if="formData.dataFlowType=='accept'" label="集成系统" prop="sourceSystemName">
          <vciWebRefer
            :referConfig="{
                  title: '集成系统',
                  showField: 'sourceSystemName',
                  field: 'sourceSystemOid',
                  fieldMap:{'sourceSystemId':'id'},
                  placeholder: '请选择',
                  options: {isMuti: false, type: 'default', url: 'api/ubcs-code/codeBasicSecController/gridCodeBasicSec'},
                }"
            :value="formData.sourceSystemOid"
            :text="formData.sourceSystemName"
            :disabled="false"
            :display="true"
            @setReferValue="setReferValue"
          ></vciWebRefer>
        </el-form-item>
        <el-form-item v-if="formData.pushType=='1'" label="是否推送集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item v-if="formData.pushType=='3'" label="是否申请集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item  v-if="formData.pushType=='4'" label="是否维护集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item  v-if="formData.pushType=='7'" label="是否查询集团码" prop="isGroupCodeFlag">
          <el-switch v-model="formData.isGroupCodeFlag" ></el-switch>
        </el-form-item>
        <el-form-item label="系统描述"  style="width: 850px;">
          <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 5}" v-model="formData.description" style="width: 740px;"></el-input>
        </el-form-item>
        <el-form-item label="接口类型" prop="interfaceType">
          <el-select v-model="formData.interfaceType" clearable placeholder="请选择">
            <el-option v-for="item in interfaceTypeList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='http'" label="请求方式" prop="requestMethod">
          <el-select v-model="formData.requestMethod" placeholder="请选择">
            <el-option v-for="item in requestMethodList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService' || formData.interfaceType=='http'" label="请求地址" prop="requestUrl">
          <el-input v-model="formData.requestUrl" type="text"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="接口函数" prop="interfaceFunction">
          <el-input v-model="formData.interfaceFunction"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="命名空间" prop="nameSpace">
          <el-input v-model="formData.nameSpace"></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="soapAction" prop="soapAction">
          <el-input v-model="formData.soapAction" ></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="参数名称" prop="targName">
          <el-input v-model="formData.targName" ></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='webService'" label="cxfaxis" prop="cxfaxis">
          <el-input v-model="formData.cxfaxis" ></el-input>
        </el-form-item>
        <el-form-item v-if="formData.interfaceType=='classPath'" label="类路径" prop="classPath">
          <el-input v-model="formData.classPath" ></el-input>
        </el-form-item>
        <el-tabs v-model="activeName" @tab-click="tabClick">
          <el-tab-pane label="参数对象" name="paramTab">
            <avue-crud :option="param.option"
                       :data="formData.sysIntParamVOs"
                       v-model="formData.sysIntParamVOs"
                       ref="paramcrud">
              <template slot="menuLeft">
                <el-button type="primary"
                           size="small"
                           plain
                           icon="el-icon-plus"
                           @click="handleParamAdd">添加行
                </el-button>
              </template>
              <template slot="menu" slot-scope="{row,index}">
                <el-button icon="el-icon-edit" size="small" type="text" v-if="!row.$cellEdit" @click="handleParamEditClick(row,index)">编辑
                </el-button>
                <el-button icon="el-icon-delete" size="small" type="text" v-if="!row.$cellEdit" @click="handleParamDel(row,index)">移除
                </el-button>
                <el-button icon="el-icon-check" size="small" type="text" v-if="row.$cellEdit" @click="handleParamEditSave(row,index)">
                  ä¿å­˜
                </el-button>
              </template>
            </avue-crud>
          </el-tab-pane>
          <el-tab-pane label="header对象" name="headerTab">
            <avue-crud :option="header.option"
                       :data="formData.sysIntHeaderVOs"
                       v-model="formData.sysIntHeaderVOs"
                       ref="headercrud">
              <template slot="menuLeft">
                <el-button type="primary"
                           size="small"
                           plain
                           icon="el-icon-plus"
                           @click="handleHeaderAdd">添加行
                </el-button>
              </template>
              <template slot="menu" slot-scope="{row,index}">
                <el-button icon="el-icon-edit" size="small" type="text" v-if="!row.$cellEdit" @click="handleHeaderEditClick(row,index)">编辑
                </el-button>
                <el-button icon="el-icon-delete" size="small" type="text" v-if="!row.$cellEdit"  @click="handleHeaderDel(row,index)">移除
                </el-button>
                <el-button icon="el-icon-check" size="small" type="text" v-if="row.$cellEdit" @click="handleHeaderEditSave(row,index)">
                  ä¿å­˜
                </el-button>
              </template>
            </avue-crud>
          </el-tab-pane>
        </el-tabs>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitAttribute">确定</el-button>
        <el-button @click="cancelSubmit">取消</el-button>
      </div>
    </el-dialog>
  </el-container>
</template>
<script>
import { validatenull } from "@/util/validate";
import { getDictionary, getParentList } from '@/api/omd/enum'
import {add,edit} from "@/api/docking/info"
import vciWebRefer from "@/components/refer/vciWebRefer.vue";
export default {
  name: 'infoForm',
  props: {
    formData: {
      type: Object,
      default:{
        sysIntParamVOs:[],
        sysIntHeaderVOs:[]
      }
    },
  },
  components: { vciWebRefer },
  data() {
    return {
      showSubmitDialog: false,
      //接口类型下拉
      interfaceTypeList: [{
        label: 'webService', value: 'webService'
      }, {
        label: '类路径', value: 'classPath'
      }, {
        label: 'Http', value: 'http'
      }],
      //参数类型下拉
      paramTypeList: [{
        label: 'xml', value: 'xml'
      }, {
        label: 'Json', value: 'json'
      }],
      //返回值类型下拉
      returnTypeList: [{
        label: 'xml', value: 'xml'
      }, {
        label: 'Json', value: 'json'
      }],
      dataFlowTypeList: [{
        label: 'push', value: 'push'
      }, {
        label: 'accept', value: 'accept'
      }],
      //推送类型
      pushTypeList: [{value: '1', label: '数据推送'},
        {value: '2', label: '分类推送'}],
      //请求方式
      requestMethodList: [{key: 'post', value: 'post'},
        {key: 'get', value: 'get'},
        {key: 'delete', value: 'delete'},
        {key: 'put', value: 'put'}],
      // é»˜è®¤çš„页签
      activeName: 'paramTab',
      // è¡¨å•校验规则
      rules: {
        paramType: [
          {required: true, message: '请选择参数类型', trigger: 'blur'}
        ],
        returnType: [
          {required: true, message: '请选择返回值类型', trigger: 'blur'}
        ],
        dataFlowType: [
          {required: true, message: '请选择', trigger: 'change'}
        ],
        pushType: [
          {required: true, message: '请选择推送类型', trigger: 'blur'}
        ],
        classifyName: [
          {required: true, message: '请选择', trigger: 'sbumit'}
        ],
        sourceSystemName: [
          {required: true, message: '请选择', trigger: 'sbumit'}
        ],
        targetSystemName: [
          {required: true, message: '请选择', trigger: 'sbumit'}
        ],
        classPath: [
          {required: true, message: '请输入类路径', trigger: 'blur'}
        ],
        requestMethod: [
          {required: true, message: '请选择请求方式', trigger: 'blur'}
        ],
        requestUrl: [
          {required: true, message: '请输入请求地址', trigger: 'blur'}
        ],
        interfaceFunction: [
          {required: true, message: '请输入接口函数', trigger: 'blur'}
        ],
        nameSpace: [
          {required: true, message: '请输入命名空间', trigger: 'blur'}
        ],
        soapAction: [
          {required: true, message: '请输入soapAction', trigger: 'blur'}
        ],
        targName: [
          {required: true, message: '请输入参数名称', trigger: 'blur'}
        ],
        cxfaxis: [
          {required: true, message: '请输入cxfaxis', trigger: 'blur'}
        ]
      },
      // è¡¨æ ¼é…ç½®
      param: {
        option: {
          height: 200,
          index: true,
          addBtn: false,
          viewBtn: false,
          delBtn: false,
          editBtn: false,
          refreshBtn: false,
          columnBtn: false,
          border: true,
          menuWidth: 150,
          searchShowBtn: false,
          align: 'center',
          column: [{
            label: '参数名',
            prop: 'paramKey',
            cell: true
          }, {
            label: '参数值',
            prop: 'paramValue',
            cell: true
          }, {
            label: '是否使用',
            prop: 'usedFlag',
            formatter: function (row, column) {
              return row.usedFlag == 'true' || row.usedFlag == '1' ? '是' : '否'
            },
            width: 150,
            type: 'switch',
            cell: true
          }]
        },
        selectRow: {}
      },
      // æžšä¸¾å‚照表格配置
      header: {
        option: {
          height: 200,
          index: true,
          addBtn: false,
          viewBtn: false,
          delBtn: false,
          editBtn: false,
          refreshBtn: false,
          columnBtn: false,
          border: true,
          menuWidth: 150,
          searchShowBtn: false,
          align: 'center',
          column: [{
            label: '头参数名称',
            prop: 'headerKey',
            cell: true
          }, {
            label: '头参数值',
            prop: 'headerValue',
            cell: true
          }, {
            label: '是否使用',
            prop: 'usedFlag',
            formatter: function (row, column) {
              return row.usedFlag == 'true' || row.usedFlag == '1' ? '是' : '否'
            },
            width: 150,
            type: 'switch',
            cell: true
          }],
          // é€‰å®šè¡Œ
          selectRow: ''
        },
        dictEnums: []
      }
    }
  },
  created() {
    //this.geDictData('interfaceType', this.interfaceTypeList)
  },
  mounted(){
    if (!this.formData.sysIntParamVOs) {
      this.formData.sysIntParamVOs = [];
    }
    if (!this.formData.sysIntHeaderVOs) {
      this.formData.sysIntHeaderVOs = [];
    }
    if(this.formData.dataFlowType=='accept'){
      this.pushTypeList=[
        {value: '3', label: '编码申请'},
        {value: '4', label: '编码更改(状态、回收)'},
        {value: '5', label: '分类查询'},
        {value: '6', label: '含规则信息的分类查询'},
        {value: '7', label: '数据查询'}]
      this.formData.pushType=''
    }else {
      this.pushTypeList=[{value: '1', label: '数据推送'},
        {value: '2', label: '分类推送'}]
      this.formData.pushType='1'
    }
  },
  methods: {
    closeSubmitDialog() {
      this.resetForm();
      this.showSubmitDialog = false;
    },
    resetForm() {
      this.formData = {
        sysIntParamVOs: [],
        sysIntHeaderVOs: []
      };
      this.$refs.form.resetFields();
    },
    setReferValue(data) {
      if (data.field) {
        this.formData[data.field] = data.value || "";
        this.formData[data.showField] = data.text || "";
      }
      if (data.fieldMap) {
        //说明需要映射
        for (let key in data.fieldMap) {
          let mapFields = data.fieldMap[key].split(",");
          let value = [];
          data.rawData.forEach(_item => {
            var temp;
            if (!_item.attributes) {
              _item.attributes = _item;
            }
            if (mapFields.length == 1) {
              var mapField = mapFields[0];
              if (mapField.indexOf("attribute.") > -1) {
                temp = _item['attributes'][mapField.subString("attribute.".length)];
              } else {
                temp = _item['attributes'][mapField] || _item[mapField];
              }
            } else {
              //有多个
              var mutiTemp = [];
              layui.each(mapFields, function (_indexField, _itemField) {
                if (_itemField.indexOf("attribute.") > -1) {
                  mutiTemp.push(_item['attributes'][_itemField.subString("attribute.".length)]);
                } else {
                  mutiTemp.push(_item['attributes'][_itemField] || _item[_itemField]);
                }
              });
              temp = mutiTemp.join(' ');
            }
            if (temp != null && temp != '') {
              value.push(temp);
            }
          })
          this.formData[key] = value.join(',');
        }
      }
    },
    submitAttribute() {
      const that = this;
      let pass=true
      if(validatenull(this.formData.classifyName)||validatenull(this.formData.sourceSystemName)||validatenull(this.formData.targetSystemName)){
        that.$message.error('必填项不能为空');
        pass=false
        return;
      }
      this.$refs.form.validateField(['paramType','returnType','dataFlowType','pushType','classPath','requestMethod','requestUrl',
        'interfaceFunction','nameSpace','soapAction','targName','cxfaxis'],function (errormsg, field) {
        if (errormsg) {
          pass=false
        }
      })
      this.$nextTick(function (){
        if(pass){
          that.formData.sysIntParamDTOs=this.formData.sysIntParamVOs.map(item=>{
            return {
              ...item,
              ordernNo:item.$index
            }
          })
          that.formData.sysIntHeaderDTOS=this.formData.sysIntHeaderVOs.map(item=>{
            return {
              ...item,
              ordernNo:item.$index
            }
          })
          add(that.formData).then(res => {
            that.$message.success("保存成功");
            that.showSubmitDialog = false;
            this.formData = {
              sysIntParamVOs: [],
              sysIntHeaderVOs: []
            };
            that.$emit('refreshTable');
          });
        }
      })
    },
    cancelSubmit() {
      this.closeSubmitDialog();
    },
    // å¼‚步获取字典数据
    geDictData(dictKey, list) {
      getDictionary({code: dictKey}).then((res) => {
        if (res.data && res.data.code === 200) {
          let dictData = (res.data.data || []).map((itm) => {
            itm.value = itm.dictValue;
            itm.key = itm.dictKey;
            return itm;
          });
          list = dictData;
        }
      });
    },
    dataFlowTypeChange(value){
      if(value=='push'){
        this.pushTypeList=[{value: '1', label: '数据推送'},
          {value: '2', label: '分类推送'}]
        this.formData.pushType='数据推送'
      }else if(value=='accept'){
        this.pushTypeList=[
          {value: '3', label: '编码申请'},
          {value: '4', label: '编码更改(状态、回收)'},
          {value: '5', label: '分类查询'},
          {value: '6', label: '含规则信息的分类查询'},
          {value: '7', label: '数据查询'}]
        this.formData.pushType=''
      }else{
        this.pushTypeList=[];
      }
      this.$refs.form.clearValidate()
    },
    pushTypeChange(value){
      this.$refs.form.clearValidate()
    },
    tabClick(tab) {
      if (tab.name === 'paramTab') {
        this.$nextTick(function (){
          this.$refs.paramcrud.doLayout()
        })
      } else {
        this.$nextTick(function (){
          this.$refs.headercrud.doLayout()
        })
      }
    },
    handleParamAdd() {
      this.formData.sysIntParamVOs.push({
        usedFlag: true,
        $cellEdit:true
      })
      this.$nextTick(function (){
        this.$refs.paramcrud.doLayout()
      })
    },
    handleParamEditClick(row){
      row.$cellEdit = true;
    },
    handleParamDel(row,index){
      this.formData.sysIntParamVOs.splice(index, 1);
    },
    // åˆ—表编辑保存
    handleParamEditSave(row,index) {
      row.$cellEdit = false;
    },
    handleHeaderAdd() {
      this.formData.sysIntHeaderVOs.push({
        usedFlag: true,
        $cellEdit:true
      })
      this.$nextTick(function (){
        this.$refs.headercrud.doLayout()
      })
    },
    handleHeaderEditClick(row){
      row.$cellEdit = true;
    },
    handleHeaderDel(row,index){
      this.formData.sysIntHeaderVOs.splice(index, 1);
    },
    // åˆ—表编辑保存
    handleHeaderEditSave(row,index) {
      row.$cellEdit = false;
    }
  }
}
</script>
<style>
.btmTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
  display: none !important;
}
.enumTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
  display: none !important;
}
.dockingForm .el-form-item__label{width: 130px;}
.dockingForm .el-form-item__content,.dockingForm .el-form-item__content .el-input>.el-input__inner,.dockingForm .el-input-number--medium {
  width: 300px !important;
}
.dockingForm .cell .el-form-item__content,.dockingForm .cell .el-form-item__content .el-input>.el-input__inner{
  width :100% !important;
}
</style>
Source/UBCS-WEB/src/views/system/menu.vue
@@ -586,9 +586,10 @@
        update(row).then(() => {
          this.$message({
            type: "success",
            message: "操作成功!"
            message: "操作成功1!"
          });
          // æ•°æ®å›žè°ƒè¿›è¡Œåˆ·æ–°
          this.onLoad()
          done(row);
        }, error => {
          window.console.log(error);
Source/UBCS-WEB/vue.config.js
@@ -29,8 +29,9 @@
        // target: 'http://127.0.0.1',
        // target: 'http://192.168.1.51:37000',
        // target: 'http://dev.vci-tech.com:37000',
        target: 'http://192.168.1.16:37000',
        // target: 'http://192.168.1.16:37000',
        // target: 'http://192.168.0.105:37000',
        target: 'http://192.168.43.251:37000',
        // target: 'http://192.168.0.103:37000',
        // target: 'http://192.168.1.63:37000',
        // target: 'http://192.168.3.7:37000',
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeOrderDTO.java
@@ -40,6 +40,12 @@
     */
    private List<CodeOrderSecDTO> secDTOList;
    /**
     * æœ€å¤§æµæ°´å·
     */
    private int maxSecNum;
    public String getCodeClassifyOid() {
        return codeClassifyOid;
    }
@@ -80,14 +86,23 @@
        this.editInProcess = editInProcess;
    }
    @Override
    public String toString() {
        return "CodeOrderDTO{" +
                "codeClassifyOid='" + codeClassifyOid + '\'' +
                ", templateOid='" + templateOid + '\'' +
                ", codeRuleOid='" + codeRuleOid + '\'' +
                ", editInProcess=" + editInProcess +
                ", secDTOList=" + secDTOList +
                "} " + super.toString();
    }
    public int getMaxSecNum() {
        return maxSecNum;
    }
    public void setMaxSecNum(int maxSecNum) {
        this.maxSecNum = maxSecNum;
    }
    @Override
    public String toString() {
        return "CodeOrderDTO{" +
            "codeClassifyOid='" + codeClassifyOid + '\'' +
            ", templateOid='" + templateOid + '\'' +
            ", codeRuleOid='" + codeRuleOid + '\'' +
            ", editInProcess=" + editInProcess +
            ", secDTOList=" + secDTOList +
            ", maxSecNum=" + maxSecNum +
            '}';
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -3,9 +3,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.code.dto.CodeBasicSecDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeRuleDTO;
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.service.ICodeBasicSecService;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.BladeQueryObject;
@@ -205,4 +208,28 @@
        return R.status(codeBasicSecService.downOrderNum(oid));
    }
    /**
     * æŸ¥è¯¢ç¼–码规则的所有流水依赖的码段
     * @param ruleOid ç¼–码规则主键
     * @return
     */
    @GetMapping("/getCodeRuleAndBasicSecByRuleOid")
    @ApiOperationSupport(order = 13)
    @ApiOperation(value = "查询编码规则的所有流水依赖的码段", notes = "传入oid")
    public R<CodeRuleVO> getCodeRuleAndBasicSecByRuleOid(String ruleOid){
        return R.data(codeBasicSecService.getSerialNumberDepend(ruleOid));
    }
    /**
     * è®¾ç½®æœ€å¤§æµæ°´å·
     * @param codeOrderDTO ç¼–码申请传输对象
     * @return
     */
    @PostMapping("/setMaxSerialNumberForCodeRule")
    @ApiOperationSupport(order = 14)
    @ApiOperation(value = "设置最大流水号", notes = "codeOrderDTO")
    public R setMaxSerialNumberForCodeRule(@RequestBody CodeOrderDTO codeOrderDTO){
        return R.success(codeBasicSecService.setMaxSerialNumberForCodeRule(codeOrderDTO));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
@@ -4,9 +4,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.code.dto.CodeBasicSecDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeRuleDTO;
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.vo.CodeReferConfigVO;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.*;
import org.springblade.core.mp.support.Query;
@@ -179,4 +182,20 @@
     * @throws VciBaseException æ‹·è´å±žæ€§å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    CodeBasicSecVO codeBasicSecDO2VO(CodeBasicSec codeBasicSecDO) throws VciBaseException;
    /**
     * æ ¹æ®ç¼–码规则主键获取编码下的流水依赖码段
     * @param oid ç¼–码规则主键
     * @return
     * @throws VciBaseException
     */
    CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException;
    /**
     * è®¾ç½®æœ€å¤§æµæ°´å·
     * @param codeOrderDTO ç¼–码申请传输对象
     * @return
     * @throws VciBaseException
     */
    String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -3,18 +3,22 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.code.dto.CodeBasicSecDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.lifecycle.CodeRuleLC;
import com.vci.ubcs.code.mapper.CodeBasicSecMapper;
import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
import com.vci.ubcs.code.mapper.CodeFixedValueMapper;
import com.vci.ubcs.code.mapper.CodeSerialValueMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.vo.CodeReferConfigVO;
import com.vci.ubcs.code.vo.pagemodel.*;
@@ -23,6 +27,7 @@
import com.vci.ubcs.omd.enums.EnumEnum;
import com.vci.ubcs.starter.enumpack.CodeTableNameEnum;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
@@ -32,6 +37,7 @@
import com.vci.ubcs.starter.web.pagemodel.*;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciDateUtil;
import com.vci.ubcs.starter.web.util.WebUtil;
import com.vci.ubcs.system.entity.DictBiz;
import com.vci.ubcs.system.feign.IDictBizClient;
@@ -50,6 +56,8 @@
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
import static com.vci.ubcs.code.constant.MdmEngineConstant.EMPTY_SERIAL_UNIT;
import static com.vci.ubcs.code.constant.MdmEngineConstant.SERIAL_UNIT_SPACE;
/**
 * ç æ®µåŸºç¡€ä¿¡æ¯æœåŠ¡æŽ¥å£
@@ -96,6 +104,12 @@
     */
    @Resource
    private ICodeFixedValueService fixedValueService;
    /**
     * æµæ°´å·çš„相关的信息
     */
    @Resource
    private CodeSerialValueMapper serialValueMapper;
    /**
     * ä¸Šå±‚分类码段的属性名称
@@ -351,6 +365,7 @@
        DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeBasicSecDO);
        boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
        boolean resBoolean;
        CodeReferConfigVO codeReferConfigVO = null;
        if (!status){
            //返回错误信息
            throw new VciBaseException("编码规则不允许编辑或删除!");
@@ -361,7 +376,6 @@
                && StringUtils.isBlank(codeBasicSecDO.getCodeFillSeparator())){
                throw new VciBaseException("当补位方式为左补位或者右补位的时候,补位字符不能为空");
            }
            CodeReferConfigVO codeReferConfigVO = null;
            //引用码段的时候,需要判断参照的信息是否正确
            if(CodeSecTypeEnum.CODE_REFER_SEC.getValue().equalsIgnoreCase(codeBasicSecDO.getSecType())){
                if(StringUtils.isBlank(codeBasicSecDO.getReferConfig())){
@@ -379,7 +393,16 @@
                    codeReferConfigService.insert(codeReferConfigVO);
                }
            }
            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);
//            revisionModelUtil.copyFromDTOIgnore(codeBasicSecDTO, codeBasicSecDO);//此处的拷贝会把referValueInfo的值给覆盖掉,需要重新赋值
            BaseModel tempModel = new BaseModel();
            BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDO, tempModel);
            BeanUtil.copyProperties(codeBasicSecDTO, codeBasicSecDO,"referValueInfo");
            BeanUtilForVCI.copyPropertiesIgnoreCase(tempModel, codeBasicSecDO);
            codeBasicSecDO.setId(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("id", codeBasicSecDTO)));
            codeBasicSecDO.setName(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("name", codeBasicSecDTO)));
            codeBasicSecDO.setDescription(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("description", codeBasicSecDTO)));
            resBoolean = codeBasicSecMapper.updateById(codeBasicSecDO)>0;
            //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
            if(StringUtils.isNotBlank(codeBasicSecDO.getCodeFillSeparator())){
@@ -869,4 +892,129 @@
        return codeBasicSecVO;
    }
    /**
     * æ ¹æ®ç¼–码规则主键获取编码下的流水依赖码段
     *
     * @param oid ç¼–码规则主键
     * @return
     * @throws VciBaseException
     */
    @Override
    public CodeRuleVO getSerialNumberDepend(String oid) throws VciBaseException {
        VciBaseUtil.alertNotNull(oid,"编码规则主键");
        CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(oid);
        if (codeRuleVO != null) {
            //如果有lcstatus的类的话
            codeRuleVO.setLcStatusText(CodeRuleLC.getTextByValue(codeRuleVO.getLcStatus()));
            LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
                .eq(CodeBasicSec::getPkCodeRule, codeRuleVO.getOid())
                .eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue());
            CodeBasicSec codeBasicSec = this.getOne(wrapper);
            if(codeBasicSec != null && VciBaseUtil.isNotNull(codeBasicSec.getOid())){
                wrapper = Wrappers.<CodeBasicSec>query().lambda()
                    .eq(CodeBasicSec::getPkCodeRule,codeRuleVO.getOid())
                    .eq(CodeBasicSec::getSerialDependFlag,"true")
                    .orderByAsc(CodeBasicSec::getSerialDependOrder);
                List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
                if(!CollectionUtils.isEmpty(codeBasicSecList)){
                    List<CodeBasicSecVO> codeBasicSecVOS = codeBasicSecDO2VOs(codeBasicSecList);
                    //查询固定码的码值
                    Map<String, List<CodeFixedValueVO>> secValueMap = fixedValueService.listCodeFixedValueBySecOids(codeBasicSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toList()));
                    codeBasicSecVOS.stream().forEach(vo->{
                        vo.setFixedValueVOList(secValueMap.getOrDefault(vo.getOid(),null));
                    });
                    codeRuleVO.setSecVOList(codeBasicSecVOS);
                }
            }else{
                throw new VciBaseException(codeRuleVO.getName()+"编码规则下无流水码段,无法设置最大流水号!");
            }
        }
        return codeRuleVO;
    }
    /**
     * è®¾ç½®æœ€å¤§æµæ°´å·
     *
     * @param codeOrderDTO ç¼–码申请传输对象
     * @return
     * @throws VciBaseException
     */
    @Override
    public String setMaxSerialNumberForCodeRule(CodeOrderDTO codeOrderDTO) throws VciBaseException {
        VciBaseUtil.alertNotNull(codeOrderDTO.getCodeRuleOid(),"编码规则主键",codeOrderDTO.getMaxSecNum(),"最大流水号");
        List<CodeOrderSecDTO> codeOrderSecDTOList = codeOrderDTO.getSecDTOList();
        if(CollectionUtils.isEmpty(codeOrderSecDTOList)){
            throw new VciBaseException("最大流水号的流水依赖不能为空!");
        }
        String codeRuleOid = codeOrderDTO.getCodeRuleOid();
        int maxSecNum = codeOrderDTO.getMaxSecNum();
        Map<String/**码段主键*/,CodeOrderSecDTO/**码段相关信息*/> codeOrderSecDTOMap = codeOrderSecDTOList.stream().collect(Collectors.toMap(s -> s.getSecOid(), t -> t));
        List<String> codeBasicSecOidList = codeOrderSecDTOList.stream().map(s->s.getSecOid()).collect(Collectors.toList());//流水依赖码段的主键集合
        //获取流水依赖码段
        LambdaQueryWrapper<CodeBasicSec> wrapper = Wrappers.<CodeBasicSec>query().lambda()
            .eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
            .in(CodeBasicSec::getOid,codeBasicSecOidList)
            .eq(CodeBasicSec::getSerialDependFlag,"true")
            .orderByAsc(CodeBasicSec::getSerialDependOrder);
        List<CodeBasicSec> codeBasicSecList = this.list(wrapper);
        //按流水依赖顺序,处理流水依赖码段的值
        List<String> serialDependValueList = new ArrayList<>();
        codeBasicSecList.stream().forEach(s->{
            CodeOrderSecDTO codeOrderSecDTO = codeOrderSecDTOMap.get(s.getOid());
            String serialDependValue = codeOrderSecDTO.getSecValue();
            if(s.getSecType().equals(CodeSecTypeEnum.CODE_DATE_SEC.getValue())){
                try {
                    Date date = VciDateUtil.str2Date(codeOrderSecDTO.getSecValue(),s.getCodeDateFormatStr());
                    serialDependValue = VciDateUtil.date2Str(date,s.getCodeDateFormatStr());
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            serialDependValueList.add(serialDependValue);
        });
        //获取流水码段
        wrapper = Wrappers.<CodeBasicSec>query().lambda()
            .eq(CodeBasicSec::getPkCodeRule,codeRuleOid)
            .eq(CodeBasicSec::getSecType,CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())
            .orderByAsc(CodeBasicSec::getSerialDependOrder);
        CodeBasicSec codeBasicSec = this.getOne(wrapper);
        //根据编码规则和流水依赖,获取最大流水号
        String serialUnitString = serialDependValueList.size() == 0 ? EMPTY_SERIAL_UNIT : serialDependValueList.stream().collect(Collectors.joining(SERIAL_UNIT_SPACE));
        LambdaQueryWrapper<CodeSerialValue> codeSerialWrapper = new LambdaQueryWrapper<>();
        codeSerialWrapper.eq(CodeSerialValue::getCodeRuleOid, codeRuleOid);
        codeSerialWrapper.eq(CodeSerialValue::getSerialUnit, serialUnitString);
        codeSerialWrapper.eq(CodeSerialValue::getCodeSecOid,codeBasicSec.getOid());
        codeSerialWrapper.orderByDesc(CodeSerialValue::getCreateTime);
        List<CodeSerialValue> codeSerialValueList = serialValueMapper.selectList(codeSerialWrapper);
        //如果最大流水号不为空,说明已有最好流水号,更新最大流水号
        if(!CollectionUtils.isEmpty(codeSerialValueList)){
            CodeSerialValue codeSerialValue = codeSerialValueList.get(0);
            int maxSerial = Double.valueOf(codeSerialValue.getMaxSerial()).intValue();
            //已有的最大流水号,小于设置的最大流水号,更新最大流水号
            if(maxSerial < maxSecNum){
                codeSerialValue.setMaxSerial(String.valueOf(maxSecNum));
                serialValueMapper.updateById(codeSerialValue);
            }else{
                maxSecNum = maxSerial;
            }
        }else{
            //如果最大流水号不为空,说明无最好流水号,新增最大流水号
            CodeSerialValue codeSerialValue = new CodeSerialValue();
            DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeSerialValue, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
            codeSerialValue.setCodeRuleOid(codeRuleOid);
            codeSerialValue.setSerialUnit(serialUnitString);
            codeSerialValue.setCodeSecOid(codeBasicSec.getOid());
            codeSerialValue.setMaxSerial(String.valueOf(maxSecNum));
            serialValueMapper.insert(codeSerialValue);
        }
        return String.valueOf(maxSecNum);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -179,11 +179,13 @@
                        CodeSerialValue serialValueDO = serialValueDOS.get(0);
                        if(VciBaseUtil.getDouble(serialValueDO.getMaxSerial())<maxSerial){
                            serialValueDO.setMaxSerial(String.valueOf(maxSerial));
                            DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO);
                            editSerialValueList.add(serialValueDO);
                        }
                    }else{
                        //没有
                        CodeSerialValue serialValueDO = new CodeSerialValue();
                        DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
                        serialValueDO.setCodeRuleOid(ruleVO.getOid());
                        serialValueDO.setSerialUnit(serialUnit);
                        serialValueDO.setCodeSecOid(secOid);
@@ -627,6 +629,7 @@
                                BaseModel cbo, CodeClassifyTemplateVO templateVO,
                                List<CodeAllCode> allCodeDOList, String serialUnitString, String serialValueString){
        CodeAllCode allCodeDO = new CodeAllCode();
        DefaultAttrAssimtUtil.addDefaultAttrAssimt(allCodeDO, MdmBtmTypeConstant.CODE_ALL_CODE);
        allCodeDO.setCodeClassifyOid(classifyFullInfoBO.getCurrentClassifyVO().getOid());
        allCodeDO.setCodeRuleOid(ruleVO.getOid());
        allCodeDO.setId(cbo.getId());
@@ -661,9 +664,11 @@
                    //说明有
                    serialValueDO = maxSerialValueMap.get(secOid).get(unit);
                    serialValueDO.setMaxSerial(maxSerial.toString());
                    DefaultAttrAssimtUtil.updateDefaultAttrAssimt(serialValueDO);
                    editSerialValueDOList.add(serialValueDO);
                }else{
                    serialValueDO = new CodeSerialValue();
                    DefaultAttrAssimtUtil.addDefaultAttrAssimt(serialValueDO, MdmBtmTypeConstant.CODE_SERIAL_VALUE);
                    serialValueDO.setCodeRuleOid(ruleVO.getOid());
                    serialValueDO.setSerialUnit(unit);
                    serialValueDO.setCodeSecOid(secOid);