yuxc
2023-12-04 d74e1672af99afd7e6a24327deb22b308dd5fc88
Merge remote-tracking branch 'origin/master'
已修改25个文件
已重命名3个文件
已添加6个文件
1750 ■■■■■ 文件已修改
Source/UBCS-WEB/src/api/code/codeCharcter.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/monitor/log/operateLog.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/ruleBasic/delimiterConfig.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/ruleBasic/paddingCharacter.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/ruleBasic/prefixConfig.vue 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/ruleBasic/usableCharacter.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeAndGroupCodeAttrMappingDTO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeAndGroupCodeAttrRnageDTO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/ExecGroupCodePortDataDTO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleCharacterVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/标准修订(跨年).json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/标准系列修订(跨年).json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/标准系列申请.json 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/SpecialCharacterConverter.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/service/IDockingPreAttrMappingService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/service/impl/DockingPreAttrMappingServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleCharacterController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleCharacterService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleCharacterServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/code/codeCharcter.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
import request from '@/router/axios';
export const getList = (params) => {
  return request({
    url: '/api/ubcs-code/codeRuleCharacterController/list',
    method: 'get',
    params: {
      ...params,
    }
  })
}
export const gridCodeRule = (params) => {
  return request({
    url: '/api/ubcs-code/mdmRule/gridCodeRule',
    method: 'get',
    params: {
      ...params,
    },
  })
}
export const addSave = (codeRuleCharacterVO) => {
  return request({
    url: '/api/ubcs-code/codeRuleCharacterController/addSave',
    method: 'post',
    data:codeRuleCharacterVO
  })
}
export const editSave = (codeRuleCharacterVO) => {
  return request({
    url: '/api/ubcs-code/codeRuleCharacterController/editSave',
    method: 'post',
    data:codeRuleCharacterVO
  })
}
export const deleteSave = (codeRuleCharacterVO) => {
  return request({
    url: '/api/ubcs-code/codeRuleCharacterController/delete',
    method: 'post',
    data:codeRuleCharacterVO
  })
}
Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
@@ -317,9 +317,10 @@
          valueFormat: formItem.dateFormate || "yyyy-MM-dd HH:mm:ss",
          format: formItem.dateFormate,
          keyAttr: formItem.keyAttr,
          value: (formItem.dicData && formItem.dicData.length > 0 && formItem.secType == "codefixedsec" ? formItem.dicData[0].id : null) ||
          value:formItem.defaultValue || (formItem.dicData && formItem.dicData.length > 0 && formItem.secType == "codefixedsec" ? formItem.dicData[0].id : null) ||
            (formItem.secType == "codedatesec" ? formItem.codeDateValue : null) || (TreeValue && formItem.secType == "codelevelsec" ? TreeValue : null) ||
            (formItem.secType == "codeattrsec" ? this.add : null) || (this.status === "apply" && formItem.field === "codeStandardEditType" ? "1" : null),
            (formItem.secType == "codeattrsec" ? this.add : null) || (this.status === "apply" && formItem.field === "codeStandardEditType" ? "1" : null) ||
            (this.status === "amend" && formItem.field === "codeStandardEditType" ? "2" : null),
          placeholder: formItem.inputTip,
          comboxKey: formItem.comboxKey,
          tip: formItem.tooltips,
@@ -427,7 +428,8 @@
          keyAttr: formItem.keyAttr,
          value: (formItem.dicData && formItem.dicData.length > 0 && formItem.secType == "codefixedsec" ? formItem.dicData[0].id : null) ||
            (formItem.secType == "codedatesec" ? formItem.codeDateValue : null) || (TreeValue && formItem.secType == "codelevelsec" ? TreeValue : null) ||
            (formItem.secType == "codeattrsec" ? this.add : null) || (this.status === "apply" && formItem.field === "codeStandardEditType" ? "1" : null),
            (formItem.secType == "codeattrsec" ? this.add : null) || (this.status === "apply" && formItem.field === "codeStandardEditType" ? "1" : null)  ||
            (this.status === "amend" && formItem.field === "codeStandardEditType" ? "2" : null),
          placeholder: formItem.inputTip,
          comboxKey: formItem.comboxKey,
          tip: formItem.tooltips,
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -444,7 +444,18 @@
        );
      }
      // æŽ’除一些字段
      const noData = [
      const noData = this.status ? [
        "jiliangdwname",
        "materialtypeText",
        "morengongysname",
        "$caigouwl",
        "$xiaoshouwl",
        "$shifoupihaoguanli",
        "lcstatus_text",
        "hesuanfenleiname",
        "$kucunwl",
        "lastmodifier"
      ] : [
        "jiliangdwname",
        "materialtypeText",
        "morengongysname",
@@ -457,6 +468,7 @@
        "oldcode",
        "lastmodifier"
      ];
      let resForm = {};
      const {defaultValue, formValue} = this.getDefaultValueAndFormValues(
        this.form
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -40,7 +40,7 @@
                        border class="cus-table"
                        @select="handleSelection" @cell-click="handleCellClick" @row-click="handleRowClick"
                        @select-all="handleSelectionAll" @selection-change="handleSelectionChange"
                        @sort-change="sortChange">
                        @sort-change="sortChange"  :header-cell-style="{background:'#FAFAFA',color:'#505050'}">
                <el-table-column v-if="tableData.length != 0" fixed type="selection" width="55"></el-table-column>
                <el-table-column v-if="tableData.length != 0" fixed label="序号" type="index" width="55">
                </el-table-column>
@@ -108,7 +108,7 @@
          </FormTemplateDialog>
          <!--          ä¿®æ”¹-->
          <FormTemplateDialog :codeClassifyOid="this.codeClassifyOid" :codeRuleOid="this.codeRuleOid"
                              :disabledProp="disabledProp" :rowOid="rowOid" :templateOid="templateOid" :title="'修改编码信息'"
                              :disabledProp="disabledProp" rowOid="rowOid" :templateOid="templateOid" :title="'修改编码信息'"
                              :visible.sync="editvisible"
                              type="edit" @submit="EditSumbit"></FormTemplateDialog>
          <!--          æ‰¹é‡ç¼–辑-->
@@ -584,12 +584,25 @@
    },
    //标准修订
    codeAMENDHandler() {
      let foundItem = false;
      this.tableHeadFindData.forEach(item => {
        if (item.field === "oldcode" && Object.keys(item.referConfig).length >= 1) {
          foundItem = true;
        }
      });
      if (foundItem) {
        this.amendvisible = true;
        this.rowOid = this.selectRow[0].oid ;
      } else {
      if (this.selectRow.length !== 1) {
        this.$message.warning("请选择一条数据");
      } else {
        this.amendvisible = true;
        this.rowOid = this.selectRow[0].oid;
      }
      }
    },
    //批量编辑
    bulkEditHandler(type) {
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue
@@ -326,6 +326,7 @@
                v-loading="loading"
                :data="ProData"
                :height="this.tableHeight"
                :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
                border
                style="width: 100%"
                @select="selectHandle"
Source/UBCS-WEB/src/views/code/code.vue
@@ -2784,7 +2784,6 @@
    },
    /** æ–°å¢žåŸºç¡€ç æ®µ*/
    async saveOrEditBasicCode() {
      this.isLoadingSecCodeAddBtn = true;
      if (
        this.selectionList[0].oid == null ||
        this.selectionList[0].oid == ""
@@ -2792,9 +2791,12 @@
        this.$message.warning("缺失必要参数,请重新选择编码规则后再试!");
        return;
      }
      if (!this.checkForm()) {
        return;
      }
      this.isLoadingSecCodeAddBtn = true;
      this.form.pkCodeRule = this.selectionList[0].oid;
      if (this.form.oid == "" || this.form.oid == null) {
        if (this.checkForm()) {
          await addSave(this.form).then(
            () => {
              this.$message({
@@ -2811,7 +2813,6 @@
              window.console.log(error);
            }
          );
        }
      } else {
        // å¯èƒ½å‚照引用的业务类型会发生改变所以这儿直接对referConfig的json进行改变
        if (
@@ -2825,7 +2826,7 @@
          // let referValueInfo = JSON.parse(this.form.referValueInfo);
          // referValueInfo.referType = this.form.referBtmId;
        }
        let oldBasicSec = this.selectionBasicList.at(-1);
        let oldBasicSec = this.selectionBasicList.slice(-1)[0];
        let secType = this.form.secType;
        Vue.set(this.form, 'isClearValue', false);
        if ((oldBasicSec.secType == "codefixedsec" || oldBasicSec.secType === "codeclassifysec") && oldBasicSec.secType != secType) {
@@ -3066,7 +3067,7 @@
      if (!this.tipsMessage(this.selectionBasicList)) {
        return;
      }
      if (this.selectionList.at(-1).lcStatus != "Editing") {
      if (this.selectionList.slice(-1)[0].lcStatus != "Editing") {
        this.$message.warning('编码规则状态不是"编辑中",不允许删除码段!');
        return;
      }
@@ -3212,7 +3213,7 @@
    },
    /** åŸºç¡€ç æ®µåˆ·æ–°æ—¶æŸ¥è¯¢*/
    refreshChangeBasicSec() {
      this.loadBasic(this.selectionList.at(-1));
      this.loadBasic(this.selectionList.slice(-1)[0]);
    },
    /** æ“ä½œåŸºç¡€ç æ®µä¸­æœç´¢æ¸…空等按钮的显示/隐藏*/
    hideBasicTable(hideBoolean) {
@@ -3288,7 +3289,7 @@
    },
    /** ç æ®µç±»åž‹æ”¹å˜æ—¶ï¼Œå¢žåŠ å¯¹åº”çš„form表单中的属性*/
    changeSectypeFormItems(row) {
      console.log(row)
      //console.log(row)
      if (
        func.isEmpty(this.enumParam.secTypeList) ||
        this.enumParam.secTypeList.length == 0
Source/UBCS-WEB/src/views/monitor/log/operateLog.vue
@@ -63,18 +63,18 @@
              label: "用户名",
              prop: "userName",
              search: true,
              width:'100'
              width:'120'
            },
            {
              label: "姓名",
              prop: "realName",
              search: true,
              width:'100'
              width:'120'
            },
            {
              label: "用户ip",
              prop: "ip",
              width:'100'
              width:'130'
            },
            {
              label: "模块",
@@ -89,7 +89,7 @@
            {
              label: "操作结果",
              prop: "operateResult",
              width:'100'
              width:'110'
            },
            {
              label: "描述",
Source/UBCS-WEB/src/views/ruleBasic/delimiterConfig.vue
@@ -1,13 +1,289 @@
<template>
  <basic-container>
    <el-header>
      <div style="margin-bottom: 15px">
        ç¼–码规则:
        <el-select v-model="select" :filter-method="filterValue" filterable placeholder="请选择" size="small"
                   @change="selectHandler">
          <el-option v-for="(item,index) in queryReleasedList"
                     :key="item.oid"
                     :label="item.name"
                     :value="item.oid"></el-option>
        </el-select>
      </div>
    </el-header>
    <el-main>
      <el-table
        v-loading="loading"
        :data="tableData"
        :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
        border
        style="width: 100%;height:  calc(100vh - 320px)"
        @cell-click="cellClickHandler">
        <el-table-column
          align="center"
          label="1"
          prop="1"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="2"
          prop="2"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="3"
          prop="3">
        </el-table-column>
        <el-table-column
          align="center"
          label="4"
          prop="4">
        </el-table-column>
        <el-table-column
          align="center"
          label="5"
          prop="5">
        </el-table-column>
        <el-table-column
          align="center"
          label="6"
          prop="6">
        </el-table-column>
        <el-table-column
          align="center"
          label="7"
          prop="7">
        </el-table-column>
        <el-table-column
          align="center"
          label="8"
          prop="8">
        </el-table-column>
        <el-table-column
          align="center"
          label="9"
          prop="9">
        </el-table-column>
        <el-table-column
          align="center"
          label="10"
          prop="10">
        </el-table-column>
        <el-table-column
          align="center"
          label="11"
          prop="11">
        </el-table-column>
        <el-table-column
          align="center"
          label="12"
          prop="12">
        </el-table-column>
        <el-table-column
          align="center"
          label="13"
          prop="13">
        </el-table-column>
        <el-table-column
          align="center"
          label="14"
          prop="14">
        </el-table-column>
        <el-table-column
          align="center"
          label="15"
          prop="15">
        </el-table-column>
      </el-table>
    </el-main>
    <el-footer>
      <div style="width: 260px; display: flex; align-items: center;margin-top: 5px">
        <p>值:</p>
        <el-input v-model="characterValue" size="small" style="flex: 1;"></el-input>
      </div>
    </el-footer>
    <div style="margin-bottom: 10px;text-align: center">
      <el-button icon="el-icon-plus" plain size="small" type="success" @click="addSaveHandler">添加</el-button>
      <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editSaveHandler">修改</el-button>
      <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delSaveHandler">删除</el-button>
    </div>
  </basic-container>
</template>
<script>
import {getList, addSave, editSave, deleteSave} from "@/api/code/codeCharcter"
import {gridCodeRule} from "@/api/code/codeCharcter"
export default {
  name: "delimiterConfig"
  name: "delimiterConfig",
  data() {
    return {
      loading: false,
      //下拉框数组
      queryReleasedList: [],
      //下拉框初始数据数组
      characterReleasedList: [],
      characterValue: "",
      characterEditOldValue: "",
      tableData: [],
      select: "",
      selectValue: ""
    }
  },
  watch: {
    select: {
      handler(newV) {
        // console.log(newV)
      }
    }
  },
  created() {
    this.getCodeRule();
  },
  methods: {
    cellClickHandler(row, column) {
      this.characterValue = row[column.property];
      this.characterEditOldValue = row[column.property]
    },
    async getCodeRule() {
      try {
        // ç¼–码规则已发布数据源
        const res = await gridCodeRule({["conditionMap" + "[lcStatus_like]"]: "Released"});
        this.characterReleasedList = res.data.data.records;
        this.queryReleasedList = this.characterReleasedList;
        this.select = this.characterReleasedList[0].oid;
        this.loading = true;
        const res2 = await getList({codeRuleId: this.select, chartType: "separator", chartValue: this.characterValue});
        this.tableData = res2.data.data;
        this.loading = false;
        // console.log("this.tableData", this.tableData);
      } catch (error) {
        this.$message.warning(error)
      }
    },
    //编码规则下拉框搜索
    filterValue(query) {
      console.log(query)
      if (query !== "") {
        this.queryReleasedList = this.characterReleasedList.filter(item => {
          return item.name.includes(query.toString());
        });
      } else {
        this.queryReleasedList = this.characterReleasedList;
      }
    },
    selectHandler(val) {
      this.selectValue = val;
      this.characterValue = ""
      this.getTableData()
    },
    getTableData() {
      this.loading = true;
      // const targetObject = this.characterReleasedList.find(obj => obj.oid === this.selectValue);
      // const chartValue = targetObject.name;
      getList({codeRuleId: this.select, chartType: "separator", chartValue: this.characterValue}).then(res => {
        console.log(res.data.data);
        this.tableData = res.data.data;
        this.loading = false;
      });
    },
    addSaveHandler() {
      if (!this.characterValue) {
        this.$message.warning('请填写要添加的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "separator",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      addSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('添加失败');
      });
    },
    editSaveHandler() {
      if (this.characterEditOldValue === "") {
        this.$message.warning('请选择修改的值!');
        return; // åˆ¤æ–­é€‰æ‹©å€¼
      }
      if (this.characterValue === "") {
        this.$message.warning('请填写要修改的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "separator",
        chartValue: this.characterValue,
        oldChartValue: this.characterEditOldValue,
        chartTypeText: targetObject.name
      };
      editSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('修改失败');
      });
    },
    delSaveHandler() {
      //判断选择数据characterEditOldValue
      if (this.characterEditOldValue === "" || this.characterValue === "") {
        this.$message.warning('请选择要删除的值');
        return;
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "separator",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      deleteSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('删除失败');
      });
    }
  }
}
</script>
<style scoped>
<style lang="scss" scoped>
.el-header {
  padding: 0;
}
</style>
Source/UBCS-WEB/src/views/ruleBasic/paddingCharacter.vue
@@ -1,13 +1,289 @@
<template>
  <basic-container>
    <el-header>
      <div style="margin-bottom: 15px">
        ç¼–码规则:
        <el-select v-model="select" :filter-method="filterValue" filterable placeholder="请选择" size="small"
                   @change="selectHandler">
          <el-option v-for="(item,index) in queryReleasedList"
                     :key="item.oid"
                     :label="item.name"
                     :value="item.oid"></el-option>
        </el-select>
      </div>
    </el-header>
    <el-main>
      <el-table
        v-loading="loading"
        :data="tableData"
        :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
        border
        style="width: 100%;height:  calc(100vh - 320px)"
        @cell-click="cellClickHandler">
        <el-table-column
          align="center"
          label="1"
          prop="1"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="2"
          prop="2"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="3"
          prop="3">
        </el-table-column>
        <el-table-column
          align="center"
          label="4"
          prop="4">
        </el-table-column>
        <el-table-column
          align="center"
          label="5"
          prop="5">
        </el-table-column>
        <el-table-column
          align="center"
          label="6"
          prop="6">
        </el-table-column>
        <el-table-column
          align="center"
          label="7"
          prop="7">
        </el-table-column>
        <el-table-column
          align="center"
          label="8"
          prop="8">
        </el-table-column>
        <el-table-column
          align="center"
          label="9"
          prop="9">
        </el-table-column>
        <el-table-column
          align="center"
          label="10"
          prop="10">
        </el-table-column>
        <el-table-column
          align="center"
          label="11"
          prop="11">
        </el-table-column>
        <el-table-column
          align="center"
          label="12"
          prop="12">
        </el-table-column>
        <el-table-column
          align="center"
          label="13"
          prop="13">
        </el-table-column>
        <el-table-column
          align="center"
          label="14"
          prop="14">
        </el-table-column>
        <el-table-column
          align="center"
          label="15"
          prop="15">
        </el-table-column>
      </el-table>
    </el-main>
    <el-footer>
      <div style="width: 260px; display: flex; align-items: center;margin-top: 5px">
        <p>值:</p>
        <el-input v-model="characterValue" size="small" style="flex: 1;"></el-input>
      </div>
    </el-footer>
    <div style="margin-bottom: 10px;text-align: center">
      <el-button icon="el-icon-plus" plain size="small" type="success" @click="addSaveHandler">添加</el-button>
      <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editSaveHandler">修改</el-button>
      <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delSaveHandler">删除</el-button>
    </div>
  </basic-container>
</template>
<script>
import {getList, addSave, editSave, deleteSave} from "@/api/code/codeCharcter"
import {gridCodeRule} from "@/api/code/codeCharcter"
export default {
  name: "paddingCharacter"
  name: "paddingCharacter",
  data() {
    return {
      loading: false,
      //下拉框数组
      queryReleasedList: [],
      //下拉框初始数据数组
      characterReleasedList: [],
      characterValue: "",
      characterEditOldValue: "",
      tableData: [],
      select: "",
      selectValue: ""
    }
  },
  watch: {
    select: {
      handler(newV) {
        // console.log(newV)
      }
    }
  },
  created() {
    this.getCodeRule();
  },
  methods: {
    cellClickHandler(row, column) {
      this.characterValue = row[column.property];
      this.characterEditOldValue = row[column.property]
    },
    async getCodeRule() {
      try {
        // ç¼–码规则已发布数据源
        const res = await gridCodeRule({["conditionMap" + "[lcStatus_like]"]: "Released"});
        this.characterReleasedList = res.data.data.records;
        this.queryReleasedList = this.characterReleasedList;
        this.select = this.characterReleasedList[0].oid;
        this.loading = true;
        const res2 = await getList({codeRuleId: this.select, chartType: "fillerChar", chartValue: this.characterValue});
        this.tableData = res2.data.data;
        this.loading = false;
        // console.log("this.tableData", this.tableData);
      } catch (error) {
        this.$message.warning(error)
      }
    },
    //编码规则下拉框搜索
    filterValue(query) {
      console.log(query)
      if (query !== "") {
        this.queryReleasedList = this.characterReleasedList.filter(item => {
          return item.name.includes(query.toString());
        });
      } else {
        this.queryReleasedList = this.characterReleasedList;
      }
    },
    selectHandler(val) {
      this.selectValue = val;
      this.characterValue = ""
      this.getTableData()
    },
    getTableData() {
      this.loading = true;
      // const targetObject = this.characterReleasedList.find(obj => obj.oid === this.selectValue);
      // const chartValue = targetObject.name;
      getList({codeRuleId: this.select, chartType: "fillerChar", chartValue: this.characterValue}).then(res => {
        console.log(res.data.data);
        this.tableData = res.data.data;
        this.loading = false;
      });
    },
    addSaveHandler() {
      if (!this.characterValue) {
        this.$message.warning('请填写要添加的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "fillerChar",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      addSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('添加失败');
      });
    },
    editSaveHandler() {
      if (this.characterEditOldValue === "") {
        this.$message.warning('请选择修改的值!');
        return; // åˆ¤æ–­é€‰æ‹©å€¼
      }
      if (this.characterValue === "") {
        this.$message.warning('请填写要修改的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "fillerChar",
        chartValue: this.characterValue,
        oldChartValue: this.characterEditOldValue,
        chartTypeText: targetObject.name
      };
      editSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('修改失败');
      });
    },
    delSaveHandler() {
      //判断选择数据characterEditOldValue
      if (this.characterEditOldValue === "" || this.characterValue === "") {
        this.$message.warning('请选择要删除的值');
        return;
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "fillerChar",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      deleteSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('删除失败');
      });
    }
  }
}
</script>
<style scoped>
<style lang="scss" scoped>
.el-header {
  padding: 0;
}
</style>
Source/UBCS-WEB/src/views/ruleBasic/prefixConfig.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,289 @@
<template>
  <basic-container>
    <el-header>
      <div style="margin-bottom: 15px">
        ç¼–码规则:
        <el-select v-model="select" :filter-method="filterValue" filterable placeholder="请选择" size="small"
                   @change="selectHandler">
          <el-option v-for="(item,index) in queryReleasedList"
                     :key="item.oid"
                     :label="item.name"
                     :value="item.oid"></el-option>
        </el-select>
      </div>
    </el-header>
    <el-main>
      <el-table
        v-loading="loading"
        :data="tableData"
        :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
        border
        style="width: 100%;height:  calc(100vh - 320px)"
        @cell-click="cellClickHandler">
        <el-table-column
          align="center"
          label="1"
          prop="1"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="2"
          prop="2"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="3"
          prop="3">
        </el-table-column>
        <el-table-column
          align="center"
          label="4"
          prop="4">
        </el-table-column>
        <el-table-column
          align="center"
          label="5"
          prop="5">
        </el-table-column>
        <el-table-column
          align="center"
          label="6"
          prop="6">
        </el-table-column>
        <el-table-column
          align="center"
          label="7"
          prop="7">
        </el-table-column>
        <el-table-column
          align="center"
          label="8"
          prop="8">
        </el-table-column>
        <el-table-column
          align="center"
          label="9"
          prop="9">
        </el-table-column>
        <el-table-column
          align="center"
          label="10"
          prop="10">
        </el-table-column>
        <el-table-column
          align="center"
          label="11"
          prop="11">
        </el-table-column>
        <el-table-column
          align="center"
          label="12"
          prop="12">
        </el-table-column>
        <el-table-column
          align="center"
          label="13"
          prop="13">
        </el-table-column>
        <el-table-column
          align="center"
          label="14"
          prop="14">
        </el-table-column>
        <el-table-column
          align="center"
          label="15"
          prop="15">
        </el-table-column>
      </el-table>
    </el-main>
    <el-footer>
      <div style="width: 260px; display: flex; align-items: center;margin-top: 5px">
        <p>值:</p>
        <el-input v-model="characterValue" size="small" style="flex: 1;"></el-input>
      </div>
    </el-footer>
    <div style="margin-bottom: 10px;text-align: center">
      <el-button icon="el-icon-plus" plain size="small" type="success" @click="addSaveHandler">添加</el-button>
      <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editSaveHandler">修改</el-button>
      <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delSaveHandler">删除</el-button>
    </div>
  </basic-container>
</template>
<script>
import {getList, addSave, editSave, deleteSave} from "@/api/code/codeCharcter"
import {gridCodeRule} from "@/api/code/codeCharcter"
export default {
  name: "prefixConfig",
  data() {
    return {
      loading: false,
      //下拉框数组
      queryReleasedList: [],
      //下拉框初始数据数组
      characterReleasedList: [],
      characterValue: "",
      characterEditOldValue: "",
      tableData: [],
      select: "",
      selectValue: ""
    }
  },
  watch: {
    select: {
      handler(newV) {
        // console.log(newV)
      }
    }
  },
  created() {
    this.getCodeRule();
  },
  methods: {
    cellClickHandler(row, column) {
      this.characterValue = row[column.property];
      this.characterEditOldValue = row[column.property]
    },
    async getCodeRule() {
      try {
        // ç¼–码规则已发布数据源
        const res = await gridCodeRule({["conditionMap" + "[lcStatus_like]"]: "Released"});
        this.characterReleasedList = res.data.data.records;
        this.queryReleasedList = this.characterReleasedList;
        this.select = this.characterReleasedList[0].oid;
        this.loading = true;
        const res2 = await getList({codeRuleId: this.select, chartType: "prefix", chartValue: this.characterValue});
        this.tableData = res2.data.data;
        this.loading = false;
        // console.log("this.tableData", this.tableData);
      } catch (error) {
        this.$message.warning(error)
      }
    },
    //编码规则下拉框搜索
    filterValue(query) {
      console.log(query)
      if (query !== "") {
        this.queryReleasedList = this.characterReleasedList.filter(item => {
          return item.name.includes(query.toString());
        });
      } else {
        this.queryReleasedList = this.characterReleasedList;
      }
    },
    selectHandler(val) {
      this.selectValue = val;
      this.characterValue = ""
      this.getTableData()
    },
    getTableData() {
      this.loading = true;
      // const targetObject = this.characterReleasedList.find(obj => obj.oid === this.selectValue);
      // const chartValue = targetObject.name;
      getList({codeRuleId: this.select, chartType: "prefix", chartValue: this.characterValue}).then(res => {
        console.log(res.data.data);
        this.tableData = res.data.data;
        this.loading = false;
      });
    },
    addSaveHandler() {
      if (!this.characterValue) {
        this.$message.warning('请填写要添加的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "prefix",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      addSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('添加失败');
      });
    },
    editSaveHandler() {
      if (this.characterEditOldValue === "") {
        this.$message.warning('请选择修改的值!');
        return; // åˆ¤æ–­é€‰æ‹©å€¼
      }
      if (this.characterValue === "") {
        this.$message.warning('请填写要修改的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "prefix",
        chartValue: this.characterValue,
        oldChartValue: this.characterEditOldValue,
        chartTypeText: targetObject.name
      };
      editSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('修改失败');
      });
    },
    delSaveHandler() {
      //判断选择数据characterEditOldValue
      if (this.characterEditOldValue === "" || this.characterValue === "") {
        this.$message.warning('请选择要删除的值');
        return;
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "prefix",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      deleteSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('删除失败');
      });
    }
  }
}
</script>
<style lang="scss" scoped>
.el-header {
  padding: 0;
}
</style>
Source/UBCS-WEB/src/views/ruleBasic/usableCharacter.vue
@@ -1,13 +1,289 @@
<template>
  <basic-container>
    <el-header>
      <div style="margin-bottom: 15px">
        ç¼–码规则:
        <el-select v-model="select" :filter-method="filterValue" filterable placeholder="请选择" size="small"
                   @change="selectHandler">
          <el-option v-for="(item,index) in queryReleasedList"
                     :key="item.oid"
                     :label="item.name"
                     :value="item.oid"></el-option>
        </el-select>
      </div>
    </el-header>
    <el-main>
      <el-table
        v-loading="loading"
        :data="tableData"
        :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
        border
        style="width: 100%;height:  calc(100vh - 320px)"
        @cell-click="cellClickHandler">
        <el-table-column
          align="center"
          label="1"
          prop="1"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="2"
          prop="2"
        >
        </el-table-column>
        <el-table-column
          align="center"
          label="3"
          prop="3">
        </el-table-column>
        <el-table-column
          align="center"
          label="4"
          prop="4">
        </el-table-column>
        <el-table-column
          align="center"
          label="5"
          prop="5">
        </el-table-column>
        <el-table-column
          align="center"
          label="6"
          prop="6">
        </el-table-column>
        <el-table-column
          align="center"
          label="7"
          prop="7">
        </el-table-column>
        <el-table-column
          align="center"
          label="8"
          prop="8">
        </el-table-column>
        <el-table-column
          align="center"
          label="9"
          prop="9">
        </el-table-column>
        <el-table-column
          align="center"
          label="10"
          prop="10">
        </el-table-column>
        <el-table-column
          align="center"
          label="11"
          prop="11">
        </el-table-column>
        <el-table-column
          align="center"
          label="12"
          prop="12">
        </el-table-column>
        <el-table-column
          align="center"
          label="13"
          prop="13">
        </el-table-column>
        <el-table-column
          align="center"
          label="14"
          prop="14">
        </el-table-column>
        <el-table-column
          align="center"
          label="15"
          prop="15">
        </el-table-column>
      </el-table>
    </el-main>
    <el-footer>
      <div style="width: 260px; display: flex; align-items: center;margin-top: 5px">
        <p>值:</p>
        <el-input v-model="characterValue" size="small" style="flex: 1;"></el-input>
      </div>
    </el-footer>
    <div style="margin-bottom: 10px;text-align: center">
      <el-button icon="el-icon-plus" plain size="small" type="success" @click="addSaveHandler">添加</el-button>
      <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editSaveHandler">修改</el-button>
      <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delSaveHandler">删除</el-button>
    </div>
  </basic-container>
</template>
<script>
import {getList, addSave, editSave, deleteSave} from "@/api/code/codeCharcter"
import {gridCodeRule} from "@/api/code/codeCharcter"
export default {
name: "usableCharacter"
  name: "usableCharacter",
  data() {
    return {
      loading: false,
      //下拉框数组
      queryReleasedList: [],
      //下拉框初始数据数组
      characterReleasedList: [],
      characterValue: "",
      characterEditOldValue: "",
      tableData: [],
      select: "",
      selectValue: ""
    }
  },
  watch: {
    select: {
      handler(newV) {
        // console.log(newV)
      }
    }
  },
  created() {
    this.getCodeRule();
  },
  methods: {
    cellClickHandler(row, column) {
      this.characterValue = row[column.property];
      this.characterEditOldValue = row[column.property]
    },
    async getCodeRule() {
      try {
        // ç¼–码规则已发布数据源
        const res = await gridCodeRule({["conditionMap" + "[lcStatus_like]"]: "Released"});
        this.characterReleasedList = res.data.data.records;
        this.queryReleasedList = this.characterReleasedList;
        this.select = this.characterReleasedList[0].oid;
        this.loading = true;
        const res2 = await getList({codeRuleId: this.select, chartType: "charset", chartValue: this.characterValue});
        this.tableData = res2.data.data;
        this.loading = false;
        // console.log("this.tableData", this.tableData);
      } catch (error) {
        this.$message.warning(error)
      }
    },
    //编码规则下拉框搜索
    filterValue(query) {
      console.log(query)
      if (query !== "") {
        this.queryReleasedList = this.characterReleasedList.filter(item => {
          return item.name.includes(query.toString());
        });
      } else {
        this.queryReleasedList = this.characterReleasedList;
      }
    },
    selectHandler(val) {
      this.selectValue = val;
      this.characterValue = ""
      this.getTableData()
    },
    getTableData() {
      this.loading = true;
      // const targetObject = this.characterReleasedList.find(obj => obj.oid === this.selectValue);
      // const chartValue = targetObject.name;
      getList({codeRuleId: this.select, chartType: "charset", chartValue: this.characterValue}).then(res => {
        console.log(res.data.data);
        this.tableData = res.data.data;
        this.loading = false;
      });
    },
    addSaveHandler() {
      if (!this.characterValue) {
        this.$message.warning('请填写要添加的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "charset",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      addSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('添加失败');
      });
    },
    editSaveHandler() {
      if (this.characterEditOldValue === "") {
        this.$message.warning('请选择修改的值!');
        return; // åˆ¤æ–­é€‰æ‹©å€¼
      }
      if (this.characterValue === "") {
        this.$message.warning('请填写要修改的值!');
        return; // åˆ¤æ–­è¾“入值
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "charset",
        chartValue: this.characterValue,
        oldChartValue: this.characterEditOldValue,
        chartTypeText: targetObject.name
      };
      editSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('修改失败');
      });
    },
    delSaveHandler() {
      //判断选择数据characterEditOldValue
      if (this.characterEditOldValue === "" || this.characterValue === "") {
        this.$message.warning('请选择要删除的值');
        return;
      }
      const targetObject = this.characterReleasedList.find(obj => obj.oid === this.select);
      if (!targetObject) {
        return; // æŸ¥æ‰¾å¯¹åº”typeText
      }
      const codeRuleCharacterVO = {
        codeRuleId: this.select,
        chartType: "charset",
        chartValue: this.characterValue,
        chartTypeText: targetObject.name
      };
      deleteSave(codeRuleCharacterVO)
        .then(res => {
          this.$message.success(res.data.msg);
          this.characterValue = "";
          this.getTableData();
        }).catch(error => {
        this.$message.error('删除失败');
      });
    }
  }
}
</script>
<style scoped>
<style lang="scss" scoped>
.el-header {
  padding: 0;
}
</style>
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/controller/FlowModelController.java
@@ -18,19 +18,15 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.flow.core.utils.TaskUtil;
import com.vci.ubcs.flow.engine.entity.FlowModel;
import com.vci.ubcs.flow.engine.service.FlowEngineService;
import com.vci.ubcs.flow.engine.service.FlowTaskUserService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import org.springblade.core.launch.constant.FlowConstant;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java
@@ -82,7 +82,7 @@
     * @param logParentPath
     * @return
     */
    //@Override
    @Override
    public List<LocalLogVO> getSystemLogList(String logParentPath) {
        List<LocalLogVO> localLogsVO = new ArrayList<>();
        // ä¸ä¸ºç©ºè¯´æ˜Žæ˜¯åŠ è½½å½“å‰è¿™ä¸ªæœåŠ¡è·¯å¾„ä¸‹çš„æ—¥å¿—æ–‡ä»¶
@@ -90,6 +90,7 @@
            File file = new File(logParentPath);
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                if(Func.isNotEmpty(files) && files.length>0){
                Arrays.stream(files).forEach(item->{
                    // ç»„建日志文件对象
                    LocalLogVO localLog = new LocalLogVO();
@@ -105,9 +106,11 @@
                    localLogsVO.add(localLog);
                });
            }
            }
        }else {
            File fileDir = new File(PARENTPATH);
            File[] childDir = fileDir.listFiles();
            if(Func.isNotEmpty(childDir) && childDir.length > 0){
            Arrays.stream(childDir).forEach(dir->{
                if(dir.getName().contains("ubcs_")){
                    String fullPath = dir.getPath() + LOGPATH;
@@ -129,6 +132,7 @@
                }
            });
        }
        }
        return localLogsVO;
    }
Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/IMdmInterJtClient.java
@@ -2,12 +2,15 @@
import com.vci.ubcs.code.applyjtcodeservice.vo.DockingClassifyModelAttrVO;
import com.vci.ubcs.code.applyjtcodeservice.vo.DockingPreAttrMappingVO;
import com.vci.ubcs.code.applyjtcodeservice.vo.DockingReturnStoreVO;
import org.springblade.core.tool.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/****
@@ -24,6 +27,7 @@
    String RETURNGROUPCODE = API_PREFIX + "/getApplyGroupCode";
    String PUBMDMMODEL = API_PREFIX + "/pubMdmModel";
    String RECEIVE_EDITAPPLY =API_PREFIX + "/receiveEditApply";
    String LIST_MAPPING=API_PREFIX + "/listMapping";
    /***
     * å°†é›†å›¢ç”³è¯·æˆåŠŸçš„ç¼–ç å­˜å…¥ç›¸å…³æ•°æ®ä¹‹ä¸­
@@ -34,6 +38,13 @@
    @GetMapping(APPLYGROUPCODE)
    public R applyGroupCode(@RequestParam("oids")String oids,@RequestParam("btmName")String btmName);
    /***
     *
     * @param codeClassifyOid
     * @return
     */
    @GetMapping(LIST_MAPPING)
    public R<List<DockingPreAttrMappingVO>> list_mapping(@RequestParam("codeClassifyOid")String codeClassifyOid);
    /***
     * é›†å›¢ç¼–码数据修改
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeAndGroupCodeAttrMappingDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.vci.ubcs.code.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/***
 * é›†å›¢åŸŸå±žæ€§æ˜ å°„关系
 */
@Data
public class CodeAndGroupCodeAttrMappingDTO {
    /***
     * é»˜è®¤å€¼
     */
    private String defaultValue;
    /***
     *属性id
     */
    private String metaListId;
    /***
     * æºå±žæ€§å†…部名称
     */
    private String sourceAttrKey;
    /***
     * æºå±žæ€§åç§°
     */
    private String sourceAttrName;
    /**
     * ç›®æ ‡å±žæ€§oid
     */
    private String targetAttrId;
    /***
     * ç›®æ ‡å±žæ€§å†…部名称
     */
    private String targetAttrKey;
    /***
     * ç›®æ ‡å±žæ€§åç§°
     */
    private String targetAttrName;
    List<CodeAndGroupCodeAttrRnageDTO> codeAndGroupCodeAttrRnageDTOList;
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeAndGroupCodeAttrRnageDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.vci.ubcs.code.dto;
import lombok.Data;
@Data
public class CodeAndGroupCodeAttrRnageDTO {
    /***
     *属性id
     */
    private String metaListId;
    /**
     * å±žæ€§æžšä¸¾æ˜¾ç¤ºåç§°
     */
    private  String numText;
    /**
     * å±žæ€§æžšä¸¾å†…部名称
     */
    private String numTextValue;
    /**
     * æºå±žæ€§æžšä¸¾æ˜¾ç¤ºåç§°
     */
    private  String targetNumText;
    /**
     * æºå±žæ€§æžšä¸¾å†…部名称
     */
    private String targetNumTextValue;
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/ExecGroupCodePortDataDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.vci.ubcs.code.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@Data
public class ExecGroupCodePortDataDTO {
    /***
     * sheet名称
     */
    private String sheetName;
    /***
     * åŽŸå§‹å­—æ®µ
     */
    private LinkedList<String> fieldList=new LinkedList<>();
    /**
     * æ•°æ®é›†æˆ
     */
    private List<Map<String,String>> dataList=new ArrayList<>();
    /***
     * åˆ—名
     */
    private LinkedList<String> colName=new LinkedList<>();
    /***
     * é›†å›¢å±žæ€§ä¸Žç¼–码属性映射关系
     */
    private List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=new ArrayList<>();
}
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeRuleCharacterVO.java
@@ -23,6 +23,10 @@
     * å­—符集
     */
    private String chartValue;
    /**
     * éœ€æ›¿æ¢çš„字符
     */
    private String oldChartValue;
    /***
     * å­—符类型
     */
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/±ê×¼ÐÞ¶©(¿çÄê).json
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/±ê׼ϵÁÐÐÞ¶©£¨¿çÄ꣩.json
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/webserviceModel/attrmap/±ê׼ϵÁÐÉêÇë.json
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/SpecialCharacterConverter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.vci.ubcs.starter.util;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringEscapeUtils;
/**
 *
 * @author ludc
 * @date 2023/12/1 9:16
 */
public class SpecialCharacterConverter {
    /**
     * ç‰¹æ®Šå­—符转义
     * @param input
     * @return
     */
    public static String escapeSpecialCharacters(String input) {
        input = input.replace("'", "''"); // è½¬ä¹‰å•引号
        input = input.replace("\"", "\\\""); // è½¬ä¹‰åŒå¼•号
        input = input.replace("%", "\\%"); // è½¬ä¹‰ç™¾åˆ†å·
        input = input.replace("_", "\\_"); // è½¬ä¹‰ä¸‹åˆ’线
        input = input.replace("\\", "\\\\"); // è½¬ä¹‰åæ–œæ 
        return input;
    }
    public static String unescapeSpecialCharacters(String input) {
        input = input.replace("''", "'"); // åè½¬ä¹‰å•引号
        input = input.replace("\\\"", "\""); // åè½¬ä¹‰åŒå¼•号
        input = input.replace("\\%", "%"); // åè½¬ä¹‰ç™¾åˆ†å·
        input = input.replace("\\_", "_"); // åè½¬ä¹‰ä¸‹åˆ’线
        input = input.replace("\\\\", "\\"); // åè½¬ä¹‰åæ–œæ 
        return input;
    }
}
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feigh/MdmInterJtClient.java
@@ -56,8 +56,10 @@
     * é›†å›¢åˆ†ç±»ç”³è¯·å•服务
     */
    private final IDockingPreClassifyService dockingPreClassifyService;
    /***
     * å±žæ€§æ˜ å°„服务
     */
    private final IDockingPreAttrMappingService dockingPreAttrMappingService;
    /**
     * é›†å›¢å–值范围申请单服务
     */
@@ -81,6 +83,22 @@
            return R.fail("集团码申请失败:"+e.getMessage());
        }
    }
    /***
     * æŸ¥è¯¢é›†å›¢å±žæ€§æ˜ å°„
     * @param codeClassifyOid:编码分类oid
     * @return
     */
    @Override
    public R<List<DockingPreAttrMappingVO>> list_mapping(String codeClassifyOid) {
        List<DockingPreAttrMapping> dockingPreAttrMappings=    dockingPreAttrMappingService.selectByWrapper(Wrappers.<DockingPreAttrMapping>query().lambda().eq(DockingPreAttrMapping::getTargetClassifyId,codeClassifyOid));
        List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList=new ArrayList<>();
        if(!CollectionUtils.isEmpty(dockingPreAttrMappings)){
            dockingPreAttrMappingVOList=dockingPreAttrMappingService.dockingPreAttrMappingDO2VOS(dockingPreAttrMappings,true);
        }
        return R.data(dockingPreAttrMappingVOList);
    }
    /***
     * ç”³è¯·é›†å›¢ç¼–码数据维护
     * @return
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/service/IDockingPreAttrMappingService.java
@@ -8,6 +8,7 @@
import com.vci.ubcs.starter.exception.VciBaseException;
import org.springblade.core.tool.api.R;
import java.util.Collection;
import java.util.List;
/**
@@ -51,4 +52,12 @@
     * @return
     */
    public R search(DokingAttributeSerchVO dokingAttributeSerchVO);
    /***
     * è½¬æ¢é›†å›¢å±žæ€§æ˜ å°„配置
     * @param dockingPreAttrMappings
     * @param contain æ˜¯å¦æŸ¥åŽ†å²æ•°æ®
     * @return
     */
    List<DockingPreAttrMappingVO> dockingPreAttrMappingDO2VOS(Collection<DockingPreAttrMapping> dockingPreAttrMappings, boolean contain);
}
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/service/impl/DockingPreAttrMappingServiceImpl.java
@@ -242,7 +242,8 @@
     * @param dockingPreAttrMappings
     * @return
     */
    private List<DockingPreAttrMappingVO> dockingPreAttrMappingDO2VOS(Collection<DockingPreAttrMapping> dockingPreAttrMappings,boolean contain) {
    @Override
    public List<DockingPreAttrMappingVO> dockingPreAttrMappingDO2VOS(Collection<DockingPreAttrMapping> dockingPreAttrMappings,boolean contain) {
        List<DockingPreAttrMappingVO> dockingPreAttrMappingVOList=new ArrayList<>();
            dockingPreAttrMappingVOList=DockingPreAttrMappingWrapper.build().entityVOs(dockingPreAttrMappings);
            if(CollectionUtils.isEmpty(dockingPreAttrMappingVOList)){
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeFixedValueController.java
@@ -132,7 +132,7 @@
            dtoList.add(codeFixedValueDTO);
        }
        String codefixedsecoid = (String) param.get("codeFixedSecOid");
        VciBaseUtil.alertNotNull(dtoList,"码值对象集合",codefixedsecoid,"固定码段的主键");
        VciBaseUtil.alertNotNull(codefixedsecoid,"固定码段的主键");
        if (CollectionUtils.isEmpty(dtoList)){
            return R.status(codeFixedValueService.batchDeleteBySecOid(codefixedsecoid));
        }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleCharacterController.java
@@ -35,7 +35,7 @@
     */
    @PostMapping("/addSave")
    public R addSave(@RequestBody CodeRuleCharacterVO codeRuleCharacterVO){
        return iCodeRuleCharacterService.saveOrUpdate(codeRuleCharacterVO);
        return iCodeRuleCharacterService.saveOrUpdate(codeRuleCharacterVO,1);
    }
    /**
     * ä¿®æ”¹è§„则对象
@@ -44,7 +44,7 @@
     */
    @PostMapping("/editSave")
    public R editSave(@RequestBody CodeRuleCharacterVO codeRuleCharacterVO){
        return iCodeRuleCharacterService.saveOrUpdate(codeRuleCharacterVO);
        return iCodeRuleCharacterService.saveOrUpdate(codeRuleCharacterVO,2);
    }
    /**
@@ -54,6 +54,6 @@
     */
    @PostMapping("/delete")
    public R delete(@RequestBody CodeRuleCharacterVO codeRuleCharacterVO){
        return iCodeRuleCharacterService.saveOrUpdate(codeRuleCharacterVO);
        return iCodeRuleCharacterService.saveOrUpdate(codeRuleCharacterVO,3);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -312,7 +312,7 @@
            s = engineService.addSaveCode(orderDTO);
            saveLogUtil.operateLog("编码申请",false,orderDTO.toString());
        }catch (Exception e){
            saveLogUtil.operateLog("编码申请",true,e.getMessage());
            saveLogUtil.operateLog("编码申请",true,e.toString());
            throw e;
        }
        return R.success(s);
@@ -769,4 +769,26 @@
    public R addSaveBZ (@RequestBody CodeBZApplyDTO codeBZApplyDTO) throws Exception {
        return R.success(engineService.addSaveBZ(codeBZApplyDTO));
    }
    /**
     * ä¸‹è½½æ‰¹é‡ç”³è¯·çš„导入模板
     * @param codeClassifyOid åˆ†ç±»çš„主键
     * @param response å“åº”对象
     * @throws IOException æŠ›å‡ºå¼‚常
     */
    @GetMapping("/exportGroupCodeExcel")
    @VciBusinessLog(operateName = "导出集团码")
    public void exportGroupCodeExcel(String codeClassifyOid, HttpServletResponse response) throws IOException{
        try {
            String excelName = mdmIOService.exportGroupCodeExcel(codeClassifyOid);
        } catch (Throwable e) {
            //如果出错,把错误信息写到text
            String msg = LangBaseUtil.getErrorMsg(e);
            if(StringUtils.isBlank(msg)){
                msg = "未知错误";
            }
            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
        }
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleCharacterService.java
@@ -32,8 +32,9 @@
    /***
     * ä¿å­˜ç¼–码规则字符集
     * @param codeRuleCharacterVO
     * @param operationType
     * @return
     */
    R saveOrUpdate(CodeRuleCharacterVO codeRuleCharacterVO)throws VciBaseException;
    R saveOrUpdate(CodeRuleCharacterVO codeRuleCharacterVO,int operationType)throws VciBaseException;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmIOService.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.code.service;
import com.google.protobuf.ServiceException;
import com.vci.ubcs.code.dto.CodeExportAttrDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
@@ -119,4 +120,11 @@
     * @param operationType
     */
    void sendApplyGroupcode(List<String> idList,String btmName,String operationType);
    /***
     * å¯¼å‡ºé›†å›¢ç æ¨¡æ¿
     * @param classOid
     * @return
     */
    String exportGroupCodeExcel(String classOid) throws ServiceException;
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleCharacterServiceImpl.java
@@ -10,6 +10,7 @@
import com.vci.ubcs.code.service.ICodeRuleCharacterService;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleCharacterVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.poi.bo.SheetRowData;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.tool.api.R;
@@ -41,6 +42,7 @@
    public List<Map<String, String>> getDataByRuleId(String codeRuleId,String chartType) throws VciBaseException {
        List<Map<String,String>> charValueList=new ArrayList<>();
        CodeRuleCharacter codeRuleCharacter=codeRuleCharacterMapper.selectOne(Wrappers.<CodeRuleCharacter>query().lambda().eq(CodeRuleCharacter::getCodeRuleId,codeRuleId).eq(CodeRuleCharacter::getChartType,chartType));
        if(codeRuleCharacter!=null&&StringUtils.isNotBlank(codeRuleCharacter.getOid())){
        List<Character> characterList=codeRuleCharacter.getChartValue().chars().mapToObj(c -> (char) c).collect(Collectors.toList());
        for (int i = 0; i < characterList.size(); i += 15) {
            final int startIndex = i;
@@ -54,6 +56,8 @@
            }
            charValueList.add(chartMap);
        }
        }
        return charValueList;
    }
    /***
@@ -63,12 +67,13 @@
     * @throws VciBaseException
     */
    @Override
    public R saveOrUpdate(CodeRuleCharacterVO codeRuleCharacterVO) throws VciBaseException {
    public R saveOrUpdate(CodeRuleCharacterVO codeRuleCharacterVO,int operation) throws VciBaseException {
        VciBaseUtil.alertNotNull(codeRuleCharacterVO.getCodeRuleId(),"编码规则id",codeRuleCharacterVO.getChartType(),"字符集类型");
        CodeRuleCharacter codeRuleCharacter=codeRuleCharacterMapper.selectOne(Wrappers.<CodeRuleCharacter>query().lambda().eq(CodeRuleCharacter::getCodeRuleId,codeRuleCharacterVO.getCodeRuleId()).eq(CodeRuleCharacter::getChartType,codeRuleCharacterVO.getChartType()));
        if(codeRuleCharacter!=null&& StringUtils.isNotBlank(codeRuleCharacter.getOid())) {
            List<Character> oldCharacterList =  StringUtils.isBlank(codeRuleCharacter.getChartValue())?new ArrayList<>():codeRuleCharacter.getChartValue().chars().mapToObj(c -> (char) c).collect(Collectors.toList());
            List<Character> newCharacterList = StringUtils.isBlank(codeRuleCharacterVO.getChartValue())?new ArrayList<>():codeRuleCharacterVO.getChartValue().chars().mapToObj(c -> (char) c).collect(Collectors.toList());
            if(operation==1) {//新增时候
            List<Character> intersectList = intersect(oldCharacterList, newCharacterList);
            if (intersectList.size() > 0) {
                String ss = Joiner.on(",").join(intersectList);
@@ -77,6 +82,33 @@
            List<Character> allCharacterList = union(oldCharacterList, newCharacterList);
            String str = allCharacterList.stream().map(integer -> Func.isNotEmpty(integer)?integer.toString():"").collect(Collectors.joining());
            codeRuleCharacter.setChartValue(str);
            }else if(operation==2){//修改
                String oldChartValue= codeRuleCharacterVO.getOldChartValue();
                String chartValue= codeRuleCharacterVO.getChartValue();
                Map<String,String> oldChartNewChartMap=new HashMap<>();
                List<Character> chartValueList = StringUtils.isBlank(chartValue)?new ArrayList<>():chartValue.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
                List<Character> oldChartValueList = StringUtils.isBlank(oldChartValue)?new ArrayList<>():oldChartValue.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
                if(chartValueList.size()!=oldChartValueList.size()){
                    throw new VciBaseException("替换的值个数与选中值的个数不相等");
                }
                /***
                 * id
                 */
                for (int i=0;i<oldChartValueList.size();i++){
                    Character oldValue=oldChartValueList.get(i);
                    if(oldCharacterList.contains(oldValue)){
                        int index =oldCharacterList.indexOf(oldValue);
                        oldCharacterList.set(index,chartValueList.get(i));
                    }
                }
                String str = oldCharacterList.stream().map(integer -> Func.isNotEmpty(integer) ? integer.toString() : "").collect(Collectors.joining());
                codeRuleCharacter.setChartValue(str);
            }else{//删除
                oldCharacterList.removeAll(newCharacterList);
                String str = oldCharacterList.stream().map(integer -> Func.isNotEmpty(integer) ? integer.toString() : "").collect(Collectors.joining());
                codeRuleCharacter.setChartValue(str);
            }
            codeRuleCharacterMapper.updateById(codeRuleCharacter);
        }else{
            codeRuleCharacter=new CodeRuleCharacter();
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -44,6 +44,7 @@
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.starter.util.SaveLogUtil;
import com.vci.ubcs.starter.util.SpecialCharacterConverter;
import com.vci.ubcs.starter.util.UBCSSqlKeyword;
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
import com.vci.ubcs.starter.web.constant.RegExpConstant;
@@ -464,7 +465,7 @@
            );
        }catch (Exception e){
            // æ’入更改日志记录
            saveLogUtil.operateLog(CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),true,e.getMessage());
            saveLogUtil.operateLog(CodeDefaultLC.getTextByValue(baseModelDTO.getLcStatus()),true,e.toString());
            throw e;
        }
    }
@@ -791,6 +792,7 @@
                sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
            }
            sql[0] += " and lastR = '1' and lastV = '1' ";
            // èŽ·å–ä¸å‚ä¸Žæ ¡éªŒçš„åˆ†ç±»oid
            String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
            if(Func.isNotEmpty(isParticipateCheckOids)){
                sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")";
@@ -1193,12 +1195,12 @@
                    temp = "%s";
                }
                queryKey = String.format(temp, "nvl("+ "t." + attrId +",'/')");
                queryValue = String.format(temp, "'" + (trim ? value.trim() : value) + "'");
                queryValue = String.format(temp, "'" + (trim ? SpecialCharacterConverter.escapeSpecialCharacters(value.trim()):SpecialCharacterConverter.escapeSpecialCharacters(value)) + "'");
                conditionMap.put(queryKey, queryValue);
            } else {
                if(StringUtils.isNotBlank(value)) {
                    //为空的时候不代表不校验,只是不去除相关的信息
                    conditionMap.put("nvl("+ "t." + attrId+",'/')", "'" + value + "'");
                    conditionMap.put("nvl("+ "t." + attrId+",'/')", "'" + SpecialCharacterConverter.escapeSpecialCharacters(value) + "'");
                }else{
                    conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL);
                }
@@ -2472,7 +2474,6 @@
                return getSqlByValue(key, value, attrVOMap,btmType);
            }
        }*/
    }
    /**
@@ -3112,7 +3113,7 @@
            saveLogUtil.operateLog("数据更改",false, StringUtil.format("{}\n修改为:\n{}",JSON.toJSONString(Collections.singletonList(oldCbo)),JSON.toJSONString(Collections.singletonList(cbo))));
        } catch (Exception vciError) {
            // è®°å½•数据更改报错时的日志
            saveLogUtil.operateLog("数据更改",true,vciError.getMessage());
            saveLogUtil.operateLog("数据更改",true,vciError.toString());
            throw new VciBaseException("数据更改保存出错了", new String[0], vciError);
        }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -5,12 +5,14 @@
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.protobuf.ServiceException;
import com.vci.ubcs.code.applyjtcodeservice.entity.DockingPreAttrMapping;
import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient;
import com.vci.ubcs.code.applyjtcodeservice.vo.DockingPreAttrMappingVO;
import com.vci.ubcs.code.bo.AttributeValue;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.dto.CodeExportAttrDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.constant.MdmEngineConstant;
import com.vci.ubcs.code.dto.*;
import com.vci.ubcs.code.entity.CodeAllCode;
import com.vci.ubcs.code.enumpack.CodeDefaultLC;
import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
@@ -843,7 +845,7 @@
                }
                // å•次导入数量限制
                if(sheetDataSetList.get(i).getRowData().size() > IMPORT_DATA_LIMIT){
                    throw new ServiceException("为了保证系统的稳定性,请一次不要导入超过"+IMPORT_DATA_LIMIT+"条的数据");
                    throw new ServiceException(StringUtil.format("为了保证系统的稳定性,请一次不要导入超过{}条的数据",IMPORT_DATA_LIMIT));
                }
                //历史导入的时候不处理编码
                //----逻辑内容----
@@ -1141,7 +1143,7 @@
            }
            return codeImProtRusultVO;
        }catch (Exception e){
            saveLogUtil.operateLog("历史数据导入",true,e.getMessage());
            saveLogUtil.operateLog("历史数据导入",true,e.toString());
            throw e;
        }
    }
@@ -1456,7 +1458,7 @@
            }
            saveLogUtil.operateLog("批量申请编码",false, StringUtil.format("批量导入申请成功共{}条数据,生成的码值如下【{}】",codeList.size(),codeList));
        }catch (Exception e){
            saveLogUtil.operateLog("批量申请编码",true,e.getMessage());
            saveLogUtil.operateLog("批量申请编码",true,e.toString());
            throw e;
        }
        return uuid;
@@ -3824,7 +3826,7 @@
    private void batchSwitchClassifyAttrOnOrder(Collection<CodeClassifyTemplateAttrVO> attrVOS,List<ClientBusinessObject> dataList,
                                                CodeClassifyFullInfoBO classifyFullInfo,boolean isImPort) {
        Map<String, CodeClassifyTemplateAttrVO> dateAttrVOMap = attrVOS.stream().filter(
            s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr()) && StringUtils.isNotBlank(s.getClassifyInvokeAttr())
            s -> StringUtils.isNotBlank(s.getClassifyInvokeAttr())
        ).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        Map<String,CodeClassifyFullInfoBO> classifyFullInfoMap=new HashMap<>();
        classifyFullInfoMap.put(classifyFullInfo.getCurrentClassifyVO().getOid(),classifyFullInfo);
@@ -3861,6 +3863,7 @@
                        } else {
                            Map<String, String> classifyDataMap = VciBaseUtil.objectToMapString(classifyVO);
                            String value = classifyDataMap.getOrDefault(attrVO.getClassifyInvokeAttr(), "");
                            log.error("================================当前分类注入的value值为:==========================",value);
                            cbo.setAttributeValue(attrId, value);
                        }
                    } catch (Throwable e) {
@@ -4605,4 +4608,196 @@
        }
    }
    /***
     * @param codeClassifyOid
     * @return
     */
    @Override
    public String exportGroupCodeExcel(String codeClassifyOid) throws ServiceException {
        VciBaseUtil.alertNotNull(codeClassifyOid,"主题库分类的主键");
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
        CodeClassifyVO codeClassifyVO= classifyFullInfo.getCurrentClassifyVO();
        //获取最新的模板
        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);
        LinkedList<String> colName=new LinkedList<>();//列头
        LinkedList<String> fieldList=new LinkedList<>();//列字段
        ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO();
        createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//组织数据
        if(!CollectionUtils.isEmpty(execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS())){
            throw new ServiceException("集团属性映射未配置");
        }
        fieldList=execGroupCodePortDataDTO.getFieldList();
        List<Map<String,String>>dataList=new ArrayList<>();
        getDatas(classifyFullInfo,templateVO,fieldList,dataList);
        execGroupCodePortDataDTO.setDataList(dataList);//放数据
        execGroupCodePortDataDTO.setSheetName(codeClassifyVO.getName()+"集团码导入模板");
        String tempFolder = LocalFileUtil.getDefaultTempFolder();
        String excelName = tempFolder + File.separator +
            classifyFullInfo.getCurrentClassifyVO().getId() + "_" + classifyFullInfo.getCurrentClassifyVO().getName() + "_集团码导出模板.xls";
        try {
            new File(excelName).createNewFile();
        } catch (Throwable e) {
            throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelName}, e);
        }
        LinkedList<String> finalFieldList = fieldList;
        Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().filter(s-> finalFieldList.contains(s.getId().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
        List<WriteExcelData> excelDataList = new ArrayList<>();
        Workbook workbook = new HSSFWorkbook();
        List<CodeAndGroupCodeAttrMappingDTO>  codeAndGroupCodeAttrMappingDTOList=    execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS();
        Map<String, CodeAndGroupCodeAttrMappingDTO> jAttrVOMap = codeAndGroupCodeAttrMappingDTOList.stream().filter(s-> finalFieldList.contains(s.getTargetAttrKey().toLowerCase(Locale.ROOT))).collect(Collectors.toMap(s -> s.getTargetAttrKey().toLowerCase(Locale.ROOT), t -> t));
        WriteExcelData codeExcelData = new WriteExcelData(0, 0, "企业编码");
        WriteExcelData groupExcelData = new WriteExcelData(0, 1, "集团码");
        excelDataList.add(codeExcelData);
        excelDataList.add(groupExcelData);
        for (int i = 0; i < fieldList.size(); i++) {
            String attrId=fieldList.get(i);
            if(attrId.equals(CODE_FIELD)||attrId.equals(CODE_GROUP_FIELD)){
                continue;
            }
            if (attrVOMap.containsKey(attrId)) {
                CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId);
                //Object text = attrVO.getName();
                CodeAndGroupCodeAttrMappingDTO codeAttrMappingDTO = jAttrVOMap.get(attrId);
                Object text = codeAttrMappingDTO.getSourceAttrName();
                text = exportKeyAndRequired(workbook, attrVO, text);
                WriteExcelData excelData = new WriteExcelData(0, i, text);
                if (text instanceof RichTextString) {
                    excelData.setFontColor(String.valueOf(HSSFColor.HSSFColorPredefined.RED.getIndex()));
                }
                excelDataList.add(excelData);
            }
        }
        final Integer[] rowIndex = {0};
        dataList.stream().forEach(data -> {
            rowIndex[0]++;
            String id=data.getOrDefault("id", "");
            excelDataList.add(new WriteExcelData(rowIndex[0], 0, id));
            String groupCode=data.getOrDefault("groupcode", "");
            excelDataList.add(new WriteExcelData(rowIndex[0], 1, groupCode));
            List<String> newFieldList = finalFieldList.stream().filter(e -> !e.equals("id") &&!e.equals("groupcode")).collect(Collectors.toList());
            for (int i = 0; i < newFieldList.size(); i++) {
                String attrId = newFieldList.get(i).toLowerCase(Locale.ROOT);
                if(attrId.equals("id")){
                }else if(attrId.equals("groupcode")){
                }else{
                    if (attrVOMap.containsKey(attrId)) {
                        CodeClassifyTemplateAttrVO attrVO = attrVOMap.get(attrId);
                        if (StringUtils.isNotBlank(attrVO.getEnumId()) || StringUtils.isNotBlank(attrVO.getEnumString())) {
                            attrId = attrId + "Text";
                        }
                        if (StringUtils.isNotBlank(attrVO.getReferBtmId()) || StringUtils.isNotBlank(attrVO.getReferConfig())) {
                            attrId = attrId + "name";
                        }
                        if (VciQueryWrapperForDO.LC_STATUS_FIELD.equalsIgnoreCase(attrId)) {
                            attrId = VciQueryWrapperForDO.LC_STATUS_FIELD_TEXT.toLowerCase(Locale.ROOT);
                        }
                        excelDataList.add(new WriteExcelData(rowIndex[0], i+2, data.getOrDefault(attrId, "")));
                    }
                }
            }
        });
        WriteExcelOption excelOption = new WriteExcelOption();
        excelOption.addSheetDataList(execGroupCodePortDataDTO.getSheetName(),excelDataList);
        //增加模板的信息导入
        LinkedList<WriteExcelData> tempEDList = new LinkedList<>();
        tempEDList.add(new WriteExcelData(0,0,"模板主键"));
        tempEDList.add(new WriteExcelData(0,1,"模板代号"));
        tempEDList.add(new WriteExcelData(0,2,"模板名称"));
        tempEDList.add(new WriteExcelData(1,0,templateVO.getOid()));
        tempEDList.add(new WriteExcelData(1,1,templateVO.getId()));
        tempEDList.add(new WriteExcelData(1,2,templateVO.getName()));
        excelOption.addSheetDataList("模板信息【请勿删除或移动】",tempEDList);
        ExcelUtil.writeDataToFile(excelName, excelOption);
        log.info("文件路径"+excelName);
        return excelName;
    }
    /***
     * é›†å›¢å¯¼å‡ºæ¨¡æ¿å±žæ€§æ˜ å°„信息获取
     * @param templateVO
     * @param execGroupCodePortDataDTO
     */
    private void createExportGroupCodeMapConfig(CodeClassifyTemplateVO templateVO,ExecGroupCodePortDataDTO execGroupCodePortDataDTO){
        String classOid=templateVO.getCodeclassifyoid();
        String templateOid=templateVO.getOid();
        R r=mdmInterJtClient.list_mapping(classOid);
        if(r.isSuccess()){
            List<DockingPreAttrMappingVO>dockingPreAttrMappingVOList= (List<DockingPreAttrMappingVO>) r.getData();
            List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=new ArrayList<>();
            LinkedList<String> fieldList=new LinkedList<>();
            LinkedList<String> colNameList=new LinkedList<>();
            dockingPreAttrMappingVOList.stream().forEach(dockingPreAttrMappingVO -> {
                CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO=new CodeAndGroupCodeAttrMappingDTO();
                if(StringUtils.isNotBlank(dockingPreAttrMappingVO.getTargetAttrId())){
                    codeAndGroupCodeAttrMappingDTO.setDefaultValue(dockingPreAttrMappingVO.getDefaultValue());
                    codeAndGroupCodeAttrMappingDTO.setMetaListId(dockingPreAttrMappingVO.getMetaListId());
                    codeAndGroupCodeAttrMappingDTO.setSourceAttrKey(dockingPreAttrMappingVO.getSourceAttrKey());
                    codeAndGroupCodeAttrMappingDTO.setSourceAttrName(dockingPreAttrMappingVO.getSourceAttrName());
                    codeAndGroupCodeAttrMappingDTO.setTargetAttrId(dockingPreAttrMappingVO.getTargetAttrId());
                    codeAndGroupCodeAttrMappingDTO.setTargetAttrKey(dockingPreAttrMappingVO.getTargetAttrKey());
                    codeAndGroupCodeAttrMappingDTO.setTargetAttrName(dockingPreAttrMappingVO.getTargetAttrName());
                    fieldList.add(dockingPreAttrMappingVO.getTargetAttrKey());
                    colNameList.add(dockingPreAttrMappingVO.getSourceAttrName());
                }
                codeAttrMapGroupAttrDTOS.add(codeAndGroupCodeAttrMappingDTO);
            });
            execGroupCodePortDataDTO.setCodeAttrMapGroupAttrDTOS(codeAttrMapGroupAttrDTOS);
            execGroupCodePortDataDTO.setFieldList(fieldList);
            execGroupCodePortDataDTO.setColName(colNameList);
        }
    }
    /***
     * æŸ¥è¯¢æœªæœ‰é›†å›¢ç çš„æ•°æ®
     * @param classifyFullInfo
     * @param templateVO
     * @param selectFieldList
     * @param dataList
     */
    private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList){
        //先查询数据
        String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId();
        String codeClassifyOid=classifyFullInfo.getCurrentClassifyVO().getOid();
        Map<String, String> conditionMap = new HashMap<>();
        if(conditionMap == null){
            conditionMap = new HashMap<>();
        }
        if(conditionMap.containsKey(VciQueryWrapperForDO.OID_FIELD)){
            conditionMap.put(VciQueryWrapperForDO.OID_FIELD,QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(conditionMap.get(VciQueryWrapperForDO.OID_FIELD)) + ")");
        }
        conditionMap.put("codeclsfpath","*" + codeClassifyOid + "*");
        conditionMap.put("groupcode_null", "null");
        conditionMap.put("lastr", "1");
        conditionMap.put("lastv", "1");
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Arrays.asList(btmTypeId));
        String tableName = "";
        if(listR.isSuccess() && !listR.getData().isEmpty()){
            tableName = Func.isNotBlank(listR.getData().get(0).getTableName()) ? listR.getData().get(0).getTableName():VciBaseUtil.getTableName(btmTypeId);
        }else{
            tableName = VciBaseUtil.getTableName(btmTypeId);
        }
        PageHelper pageHelper = new PageHelper();
        pageHelper.setLimit(1000000);
        pageHelper.setPage(1);
        pageHelper.addDefaultDesc("createTime");
        DataGrid<Map<String, String>> dataGrid = engineService.queryGrid(btmTypeId, templateVO, conditionMap, pageHelper);
        //转换数据
        if(!CollectionUtils.isEmpty(dataGrid.getData())){
            dataList.addAll(dataGrid.getData());
        }
        //封装查询出来的数据
        engineService.wrapperData(dataList, templateVO, selectFieldList,false);
        //modify by weidy@2022-09-27
        //因为在列表和表单的显示的时候,我们的开关类型页面会处理,但是在导出的时候,我们需要将true和false都替换成中文
        engineService.wrapperBoolean(dataList,templateVO);
        log.info("导出模板的数据条目数:"+dataList.size());
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeCLassifyMapper.xml
@@ -559,12 +559,6 @@
            connect by prior codeclassify0.PARENTCODECLASSIFYOID = codeclassify0.oid
    </select>
    <select id="selectStartWithCurrentOid" resultMap="plCodeClassifyResultMap">
        select * from <include refid="tableName"/>
                          start with oid = #{oid}
        connect by prior oid = parentcodeclassifyoid;
    </select>
    <update id="batchUpdateLcStatus" parameterType="java.util.List">
        BEGIN
        <foreach collection="records" item="item" index="index" separator=";">