xiejun
2023-12-07 05d45bd440ffc92e14e6c8728ac8956a0488c0ab
Merge remote-tracking branch 'origin/master'
已修改18个文件
988 ■■■■ 文件已修改
Source/UBCS-WEB/src/components/BatchImport/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Master/MasterTransfer.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/codebasic.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/const/code/mdmrule.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/code/code.vue 495 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/integration/systemInfo.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/Business.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/LinkType.vue 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/ruleBasic/usableCharacter.vue 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/statistic/statisticPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/index.vue
@@ -61,7 +61,7 @@
      >
    </el-upload>
    <template #footer>
      <div style="display: inline-block">
      <div style="display: inline-block" v-if="type != 'groupCode'">
          <el-button
            v-if="type !== 'bulkEdit' "
            :loading="downloadLoading"
@@ -323,6 +323,7 @@
      }
    },
    onSuccess(res) {
      console.log(res)
      if (Object.keys(res.data).length === 0) {
        this.$message.success(this.title + "导入成功!");
        this.resetTable()
Source/UBCS-WEB/src/components/Master/MasterTransfer.vue
@@ -122,20 +122,22 @@
  },
  methods: {
    handlerFile(res) {
      let reader = new FileReader();
      reader.readAsText(res.data);
      reader.onload = (result) => {
        try {
          let resData = JSON.parse(result.target.result);  // 解析对象成功
          if (resData.code != 200) {
            this.$message.error(resData.msg);
          }
        } catch (err) {
          // console.log("err",err)// 解析成对象失败,说明是正常的文件流
          func.downloadFileByBlobHandler(res);
          this.$message.success('下载成功,请查看!');
        }
      };
      // let reader = new FileReader();
      // reader.readAsText(res.data);
      // reader.onload = (result) => {
      //   try {
      //     let resData = JSON.parse(result.target.result);  // 解析对象成功
      //     if (resData.code != 200) {
      //       this.$message.error(resData.msg);
      //     }
      //   } catch (err) {
      //   // 解析成对象失败,说明是正常的文件流
      //     func.downloadFileByBlobHandler(res);
      //     this.$message.success('下载成功,请查看!');
      //   }
      // };
      func.downloadFileByBlobHandler(res);
      this.$message.success('下载成功,请查看!');
    },
    escHandler() {
      this.$emit('update:visible', false);
@@ -257,7 +259,7 @@
            page: start,
            endPage: end
          }).then(res => {
            console.log('res', res)
            // console.log('res', res)
            this.handlerFile(res);
            this.escHandler();
          })
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -578,24 +578,27 @@
      exportGroupCodeExcel({
        codeClassifyOid: this.codeClassifyOid,
      }).then(res => {
        let reader = new FileReader();
        reader.readAsText(res.data)
        reader.onload = (result) => {
          try {
            let resData = JSON.parse(result.target.result);  // 解析对象成功
            if (!resData.success) {
              console.log("resData", resData)
              this.$message.error(resData.msg);
              this.isLoading = false;
            }
          } catch (err) {
            // console.log("err",err)// 解析成对象失败,说明是正常的文件流
            func.downloadFileByBlobHandler(res);
            this.$message.success('下载成功,请查看!');
            this.isLoading = false;
          }
        };
        // let reader = new FileReader();
        // reader.readAsText(res.data);
        // reader.onload = () => {
        //   try {
        //     let resData = JSON.parse(reader.result);  // 解析对象成功
        //     if (!resData.success) {
        //       this.$message.error(resData.msg);
        //       this.isLoading = false;
        //     }
        //   } catch (err) {
        //     // 解析成对象失败,说明是正常的文件流
        //     func.downloadFileByBlobHandler(res);
        //     this.$message.success('下载成功,请查看!');
        //     this.isLoading = false;
        //   }
        // };
        func.downloadFileByBlobHandler(res);
        this.$message.success('下载成功,请查看!');
        this.isLoading = false;
      }).catch(error=>{
        this.$message.error(error);
      });
    },
    //标准申请
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
@@ -43,7 +43,7 @@
                       :defaultExpandAll="false"
                       :option="Treeoption"
                       class="classifyTree"
                       style="height: calc(100vh - 280px)"
                       style="height: calc(100vh - 290px)"
                       @node-click="nodeClick"
            >
            </avue-tree>
@@ -53,7 +53,7 @@
          <el-dialog v-loading="AddLoading" :before-close="TreeEscHandler"
                     :title="this.TreeFlag ? '添加分类' :'添加主题库'" :visible.sync="TreeAddFormVisible" append-to-body
                     style="width: 1700px;margin: auto">
            <el-form ref="myForm" :model="TreeAddform" :rules="rules">
            <el-form ref="myForm" :model="TreeAddform" :rules=  "rules">
              <el-form-item :label="this.TreeFlag ? '分类编号:' :'主题库编号:'" label-width="150px" prop="id"
                            style="display: inline-block">
                <el-input v-model="TreeAddform.id" autocomplete="off" style="width: 170px"></el-input>
@@ -892,7 +892,6 @@
        this.$message.warning('请至少选择一条数据!')
        return;
      }
      console.log(this.nodeClickList.oid)
      flowingDependencyGen(this.nodeClickList.oid).then(res => {
        this.$message.success('操作成功')
      }).catch(res => {
@@ -902,7 +901,6 @@
    // switch
    switchChange() {
      this.TreeAddform.isParticipateCheck = this.TreeAddform.codeKeyAttrValue === true ? 1 : 0;
      // console.log(this.TreeAddform.isParticipateCheck)
    },
    //存储的业务类型关闭
    BtmEscHandler() {
@@ -1346,7 +1344,7 @@
          });
        }
      } catch (error) {
        console.error(error);
        // console.error(error);
      } finally {
        this.loading = false;
      }
@@ -1389,7 +1387,7 @@
          });
        }
      } catch (error) {
        console.error(error);
        // console.error(error);
      } finally {
        this.loading = false;
      }
@@ -1459,7 +1457,7 @@
      }
    },
    treeClick(e) {
      console.log(e);
      // console.log(e);
    },
    //基本信息表单刷新
    referTreeForm() {
Source/UBCS-WEB/src/const/code/codebasic.js
@@ -1,5 +1,5 @@
export default {
    height:'260',
    tip: false,
    editBtn: false,
    addBtn: false,
Source/UBCS-WEB/src/const/code/mdmrule.js
@@ -1,7 +1,5 @@
export default {
  height:"270",
  tip: false,
  editBtn:false,
  searchShow: true,
  searchMenuSpan: 6,
  border: true,
Source/UBCS-WEB/src/views/code/code.vue
@@ -2,144 +2,147 @@
  <basic-container class="code-total" style=" height: 100%">
    <!-- 编码规则信息展示区域 -->
    <basic-container class="code-rule-container">
      <p
        style="
      <div style="height: 40vh;overflow: auto;">
        <p
          style="
          margin-top: -5px;
          margin-bottom: 4px;
          font-weight: 570;
          font-size: 19px;
          color: #0e2d5f;
        "
      >
        编码规则
      </p>
      <avue-crud
        ref="crud"
        v-model="ruleForm"
        :before-open="beforeOpen"
        :data="data"
        :option="optionRule"
        :page.sync="page"
        :permission="permissionList"
        :table-loading="loading"
        class="code-rule-crud"
        @row-click="codeRuleRowClick"
        @row-update="rowUpdate"
        @row-save="rowSave"
        @search-change="searchChange"
        @search-reset="searchReset"
        @selection-change="selectionChange"
        @current-change="currentChange"
        @size-change="sizeChange"
        @refresh-change="refreshChange"
        @on-load="onLoad"
      >
        <!-- 表格内操作按钮 -->
        <template slot="menu" slot-scope="scope">
          <el-button v-if="permissionList.editBtn && (scope.row.lcStatus == 'Editing' ? true : false)"
                     icon="el-icon-edit"
                     plain
                     size="small"
                     type="text"
                     @click="openEdit(scope.row)"
          >编 辑
          </el-button>
          <el-button v-if="permissionList.releaseBtn && (scope.row.lcStatus == 'Editing' ? true : false)"
                     :loading="releadDisabled"
                     icon="el-icon-position"
                     plain
                     size="small"
                     type="text"
                     @click="enableOrDeactivatse(scope.row.oid, 'release')"
          >发 布
          </el-button>
          <el-button v-if="permissionList.deactivateBtn && (scope.row.lcStatus == 'Released' ? true : false)"
                     icon="el-icon-video-pause"
                     plain
                     size="small"
                     type="text"
                     @click="enableOrDeactivatse(scope.row.oid, 'disable')"
          >停 用
          </el-button>
          <el-button v-if="permissionList.enableBtn && (scope.row.lcStatus == 'Disabled' ? true : false)"
                     icon="el-icon-video-play"
                     plain
                     size="small"
                     type="text"
                     @click="enableOrDeactivatse(scope.row.oid, 'enable')"
          >启 用
          </el-button>
        </template>
        <!-- 表格上方按钮区域 -->
        <template slot="menuLeft" slot-scope="scope">
          <el-button v-if="permissionList.rulDelBtn"
                     icon="el-icon-delete"
                     plain
                     size="small"
                     type="danger"
                     @click="handleDelete"
          >
            删 除
          </el-button>
          <el-button v-if="permissionList.advancedQueryBtn"
                     icon="el-icon-search"
                     plain
                     size="small"
                     type="primary"
                     @click="openAdvancedQuery('codeRule')">
            高级查询
          </el-button>
          <el-button v-if="permissionList.cloneBtn"
                     icon="icon-kelong"
                     plain
                     size="small"
                     @click="openCodeRuleDialog"
          >
            克 隆
          </el-button>
          <el-button v-if="permissionList.otherCloneBtn"
                     icon="icon-lianjiekelong"
                     plain
                     size="small"
                     style="font-size: 12px"
                     @click="openOtherCodeRuleDialog"
          >
            从其他规则中克隆码段
          </el-button>
          <el-button v-if="permissionList.usescopeBtn"
                     icon="el-icon-s-help"
                     plain
                     size="small"
                     @click="handleRange"
          >
            使用范围
          </el-button>
          <el-button v-if="permissionList.clearBtn"
                     icon="icon-qingkong"
                     plain
                     size="small"
                     @click="clearAllCodeSec"
          >
            清空码值
          </el-button>
          <el-button v-if="permissionList.escapeOwnerBtn"
                     icon="el-icon-guide"
                     plain
                     size="small"
                     @click="escapeOwner"
          >
            转移所有者
          </el-button>
          <el-button v-if="permissionList.maxSerialnumBtn"
                     icon="el-icon-data-analysis"
                     plain
                     size="small"
                     @click="maxSerialNum"
          >
            最大流水号
          </el-button>
        </template>
      </avue-crud>
        >
          编码规则
        </p>
        <avue-crud
          ref="crud"
          v-model="ruleForm"
          :before-open="beforeOpen"
          :data="data"
          :option="optionRule"
          :page.sync="page"
          :permission="permissionList"
          :table-loading="loading"
          class="code-rule-crud"
          @row-click="codeRuleRowClick"
          @row-update="rowUpdate"
          @row-save="rowSave"
          @search-change="searchChange"
          @search-reset="searchReset"
          @selection-change="selectionChange"
          @current-change="currentChange"
          @size-change="sizeChange"
          @refresh-change="refreshChange"
          @on-load="onLoad"
        >
          <!-- 表格内操作按钮 -->
          <template slot="menu" slot-scope="scope">
            <el-button v-if="permissionList.editBtn && (scope.row.lcStatus == 'Editing' ? true : false)"
                       icon="el-icon-edit"
                       plain
                       size="small"
                       type="text"
                       @click="openEdit(scope.row)"
            >编 辑
            </el-button>
            <el-button v-if="permissionList.releaseBtn && (scope.row.lcStatus == 'Editing' ? true : false)"
                       :loading="releadDisabled"
                       icon="el-icon-position"
                       plain
                       size="small"
                       type="text"
                       @click="enableOrDeactivatse(scope.row.oid, 'release')"
            >发 布
            </el-button>
            <el-button v-if="permissionList.deactivateBtn && (scope.row.lcStatus == 'Released' ? true : false)"
                       icon="el-icon-video-pause"
                       plain
                       size="small"
                       type="text"
                       @click="enableOrDeactivatse(scope.row.oid, 'disable')"
            >停 用
            </el-button>
            <el-button v-if="permissionList.enableBtn && (scope.row.lcStatus == 'Disabled' ? true : false)"
                       icon="el-icon-video-play"
                       plain
                       size="small"
                       type="text"
                       @click="enableOrDeactivatse(scope.row.oid, 'enable')"
            >启 用
            </el-button>
          </template>
          <!-- 表格上方按钮区域 -->
          <template slot="menuLeft" slot-scope="scope">
            <el-button v-if="permissionList.rulDelBtn"
                       icon="el-icon-delete"
                       plain
                       size="small"
                       type="danger"
                       @click="handleDelete"
            >
              删 除
            </el-button>
            <el-button v-if="permissionList.advancedQueryBtn"
                       icon="el-icon-search"
                       plain
                       size="small"
                       type="primary"
                       @click="openAdvancedQuery('codeRule')">
              高级查询
            </el-button>
            <el-button v-if="permissionList.cloneBtn"
                       icon="icon-kelong"
                       plain
                       size="small"
                       @click="openCodeRuleDialog"
            >
              克 隆
            </el-button>
            <el-button v-if="permissionList.otherCloneBtn"
                       icon="icon-lianjiekelong"
                       plain
                       size="small"
                       style="font-size: 12px"
                       @click="openOtherCodeRuleDialog"
            >
              从其他规则中克隆码段
            </el-button>
            <el-button v-if="permissionList.usescopeBtn"
                       icon="el-icon-s-help"
                       plain
                       size="small"
                       @click="handleRange"
            >
              使用范围
            </el-button>
            <el-button v-if="permissionList.clearBtn"
                       icon="icon-qingkong"
                       plain
                       size="small"
                       @click="clearAllCodeSec"
            >
              清空码值
            </el-button>
            <el-button v-if="permissionList.escapeOwnerBtn"
                       icon="el-icon-guide"
                       plain
                       size="small"
                       @click="escapeOwner"
            >
              转移所有者
            </el-button>
            <el-button v-if="permissionList.maxSerialnumBtn"
                       icon="el-icon-data-analysis"
                       plain
                       size="small"
                       @click="maxSerialNum"
            >
              最大流水号
            </el-button>
          </template>
        </avue-crud>
      </div>
    </basic-container>
    <!-- 高级查询对话框 -->
@@ -217,105 +220,107 @@
    <!-- 基础码段展示区域 -->
    <basic-container class="code-basicsec-container">
      <p
        style="margin-top: -5px;
      <div style="height: 38.5vh;overflow: auto">
        <p
          style="margin-top: -5px;
          margin-bottom: 4px;
          font-weight: 570;
          font-size: 19px;
          color: #0e2d5f;">
        码段管理
      </p>
      <avue-crud
        ref="crudBasic"
        :data="basicData"
        :option="optionBasic"
        :permission="basicPermissionList"
        :table-loading="loadingBasic"
        class="code-basic-crud"
        @row-click="codeBasicSecRowClick"
        @search-change="basicSearchChange"
        @search-reset="basicSearchReset"
        @selection-change="selectionBasicChange"
        @refresh-change="refreshChangeBasicSec"
      >
        <!-- 基础码段表格内操作按钮 -->
        <template slot="menu" slot-scope="scope">
          <el-button v-if="basicPermissionList.viewBtn && currentRuleLcStatus != 'Editing'"
                     icon="el-icon-view"
                     plain
                     size="small"
                     type="text"
                     @click="openBasicDialog('view', scope.row)"
          >查看
          </el-button>
          <el-button v-if="basicPermissionList.editBtn && currentRuleLcStatus === 'Editing'"
                     icon="el-icon-edit"
                     plain
                     size="small"
                     type="text"
                     @click="openBasicDialog('edit', scope.row)"
          >编辑
          </el-button>
          <el-button
            v-if="basicPermissionList.basicMgrBtn && (scope.row.secType === 'codeclassifysec' || scope.row.secType == 'codefixedsec')"
            icon="el-icon-setting"
            plain
            size="small"
            type="text"
            @click="openBasicSecCodeValueMgr(scope.row)"
          >码值管理
          </el-button>
          <el-button v-if="basicPermissionList.basicMoveupBtn && scope.row.orderNum > 1"
                     icon="el-icon-arrow-up"
                     plain
                     size="small"
                     type="text"
                     @click="upOrderNum(scope.row)"
          >上移
          </el-button>
          <el-button v-if="basicPermissionList.basicDownBtn"
                     icon="el-icon-arrow-down"
                     plain
                     size="small"
                     type="text"
                     @click="downOrderNum(scope.row)"
          >下移
          </el-button>
        </template>
          码段管理
        </p>
        <avue-crud
          ref="crudBasic"
          :data="basicData"
          :option="optionBasic"
          :permission="basicPermissionList"
          :table-loading="loadingBasic"
          class="code-basic-crud"
          @row-click="codeBasicSecRowClick"
          @search-change="basicSearchChange"
          @search-reset="basicSearchReset"
          @selection-change="selectionBasicChange"
          @refresh-change="refreshChangeBasicSec"
        >
          <!-- 基础码段表格内操作按钮 -->
          <template slot="menu" slot-scope="scope">
            <el-button v-if="basicPermissionList.viewBtn && currentRuleLcStatus != 'Editing'"
                       icon="el-icon-view"
                       plain
                       size="small"
                       type="text"
                       @click="openBasicDialog('view', scope.row)"
            >查看
            </el-button>
            <el-button v-if="basicPermissionList.editBtn && currentRuleLcStatus === 'Editing'"
                       icon="el-icon-edit"
                       plain
                       size="small"
                       type="text"
                       @click="openBasicDialog('edit', scope.row)"
            >编辑
            </el-button>
            <el-button
              v-if="basicPermissionList.basicMgrBtn && (scope.row.secType === 'codeclassifysec' || scope.row.secType == 'codefixedsec')"
              icon="el-icon-setting"
              plain
              size="small"
              type="text"
              @click="openBasicSecCodeValueMgr(scope.row)"
            >码值管理
            </el-button>
            <el-button v-if="basicPermissionList.basicMoveupBtn && scope.row.orderNum > 1"
                       icon="el-icon-arrow-up"
                       plain
                       size="small"
                       type="text"
                       @click="upOrderNum(scope.row)"
            >上移
            </el-button>
            <el-button v-if="basicPermissionList.basicDownBtn"
                       icon="el-icon-arrow-down"
                       plain
                       size="small"
                       type="text"
                       @click="downOrderNum(scope.row)"
            >下移
            </el-button>
          </template>
        <!-- 基础码段表格左上方按钮区域 -->
        <template slot="menuLeft" slot-scope="scope">
          <el-button v-if="basicPermissionList.addBtn"
                     :disabled="selectionList.length <= 0"
                     icon="el-icon-plus"
                     size="small"
                     type="primary"
                     @click="openAddBasicCodeSec"
          >
            新 增
          </el-button>
          <el-button v-if="basicPermissionList.basicDelBtn"
                     :disabled="selectionList.length <= 0"
                     icon="el-icon-delete"
                     plain
                     size="small"
                     type="danger"
                     @click="deleteBasicCode(scope.row)"
          >
            删 除
          </el-button>
          <el-button v-if="basicPermissionList.basicAdvancedQueryBtn"
                     :disabled="selectionList.length <= 0"
                     icon="el-icon-search"
                     plain
                     size="small"
                     type="primary"
                     @click="openAdvancedQuery('codeBasicSec')"
          >
            高级查询
          </el-button>
        </template>
      </avue-crud>
          <!-- 基础码段表格左上方按钮区域 -->
          <template slot="menuLeft" slot-scope="scope">
            <el-button v-if="basicPermissionList.addBtn"
                       :disabled="selectionList.length <= 0"
                       icon="el-icon-plus"
                       size="small"
                       type="primary"
                       @click="openAddBasicCodeSec"
            >
              新 增
            </el-button>
            <el-button v-if="basicPermissionList.basicDelBtn"
                       :disabled="selectionList.length <= 0"
                       icon="el-icon-delete"
                       plain
                       size="small"
                       type="danger"
                       @click="deleteBasicCode(scope.row)"
            >
              删 除
            </el-button>
            <el-button v-if="basicPermissionList.basicAdvancedQueryBtn"
                       :disabled="selectionList.length <= 0"
                       icon="el-icon-search"
                       plain
                       size="small"
                       type="primary"
                       @click="openAdvancedQuery('codeBasicSec')"
            >
              高级查询
            </el-button>
          </template>
        </avue-crud>
      </div>
    </basic-container>
    <!-- 码段码值管理对话框 -->
@@ -587,7 +592,7 @@
    >
      <!--  第一层对话框,添加码段信息对话框中的内容 -->
      <div class="add-basicsec-total">
        <el-form :model="form" class="add-basicsec-form" :rules="rules" >
        <el-form :model="form" :rules="rules" class="add-basicsec-form">
          <span class="left">
            <el-form-item
              :label-width="leftFormLabelWidth"
@@ -883,11 +888,11 @@
                  <template>
                      <vciWebRefer
                        ref="refer"
                        :referConfig="this.referConfig || {}"
                        :display="true"
                        :value="form.customCodeSerialClass"
                        :text="form.customCodeSerialClassText"
                        :referConfig="this.referConfig || {}"
                        :serialType="form.serialType"
                        :text="form.customCodeSerialClassText"
                        :value="form.customCodeSerialClass"
                        @setReferValue="setReferValue"
                      ></vciWebRefer>
                  </template>
@@ -1023,9 +1028,9 @@
            <!-- 日期码段 -->
            <div v-show="form.secType === 'codedatesec' ? true : false">
              <el-form-item
                prop="Dateformat"
                :label-width="rightFormLabelWidth"
                label="日期格式:"
                prop="Dateformat"
              >
                <el-input
                  ref="codeDateFormatStr"
@@ -1343,7 +1348,7 @@
import vciWebRefer from "../../components/refer/vciWebRefer";
export default {
  components: { vciWebRefer },
  components: {vciWebRefer},
  data() {
    return {
      rules: {
@@ -1352,7 +1357,7 @@
            required: true,
            trigger: 'blur',
            validator: (rule, value, callback) => {
              const Formats = ['yy', 'yyyy', 'yyyy-MM', 'yy-MM', 'yyyy-MM-dd','yy-MM-dd', 'yyyy-MM-dd HH:mm:ss', 'yy-MM-dd HH:mm:ss', 'HH:mm:ss'];
              const Formats = ['yy', 'yyyy', 'yyyy-MM', 'yy-MM', 'yyyy-MM-dd', 'yy-MM-dd', 'yyyy-MM-dd HH:mm:ss', 'yy-MM-dd HH:mm:ss', 'HH:mm:ss'];
              if (!Formats.includes(this.form.codeDateFormatStr)) {
                return callback(new Error('请输入正确日期格式,例如yyyy-MM-dd(并区分大小写)!'));
              }
@@ -1361,19 +1366,19 @@
          }
        ]
      },
      referConfig:{
      referConfig: {
        title: '自定义流水参照',
        showField: 'customCodeSerialClassText',
        field: 'customCodeSerialClass',
        fieldMap:  {
          serialType:"serialType"
        fieldMap: {
          serialType: "serialType"
        },
        placeholder:'请选择自定义流水',
        options:   {
        placeholder: '请选择自定义流水',
        options: {
          // 设置默认的属性
          url: 'api/ubcs-code/codeSerialAlgorithmController/gridCodeSerialAlgorithm',
          textField:'name',
          valueField:'classFullName',
          textField: 'name',
          valueField: 'classFullName',
          isMuti: false,
          type: "grid",
          method: 'get',
@@ -1715,8 +1720,8 @@
  },
  methods: {
    //自定义流水失焦
    setReferValue(data){
      if(data.field){
    setReferValue(data) {
      if (data.field) {
        this.form[data.field] = data.value || "";
        this.form[data.showField] = data.text || "";
        this.form.serialType = data.rawData[0].serialType || "";
@@ -2779,7 +2784,7 @@
      }
      //console.log(this.form);
      //为form绑定值
      this.changeSectypeFormItems(condition == "add" ? null:row);
      this.changeSectypeFormItems(condition == "add" ? null : row);
      this.addBasicCodeSettingBox = true;
    },
    /** 新增基础码段*/
@@ -3549,10 +3554,6 @@
  font-size: 12px !important;
}
.code-rule-crud > .avue-crud__search,
.code-basic-crud > .avue-crud__search {
  margin-bottom: -15px;
}
.clone-input-textarea > .el-form-item__content {
  width: 495px;
Source/UBCS-WEB/src/views/integration/systemInfo.vue
@@ -1,6 +1,7 @@
<template>
  <basic-container>
    <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :permission="permissionList" :search.sync="search"
    <avue-crud ref="crud" :data="data" :option="option" :page.sync="page" :permission="permissionList"
               :search.sync="search"
               :table-loading="loading"
               @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete" @row-update="handleEdit"
               @refresh-change="handleRefresh" @size-change="handleSizePage" @current-change="handleCurrentPage"
Source/UBCS-WEB/src/views/modeling/Business.vue
@@ -1,30 +1,30 @@
<template>
  <el-container>
    <el-header class="businessHeader" style="height: 40px;padding:0 8px">
      <div>
        <el-button v-if="permissionList.addBtn" icon="el-icon-plus" size="small" type="primary" @click="businessAdd" plain>
          新增
        </el-button>
        <el-button v-if="permissionList.editBtn" icon="el-icon-edit" size="small" type="primary" @click="businessEdit" plain>
          修改
        </el-button>
        <el-button v-if="permissionList.table" icon="el-icon-thumb" size="small" type="primary"
                   @click="selectFromTable" plain> 从已有中获取
        </el-button>
      </div>
    </el-header>
<!--    <el-header class="businessHeader" style="height: 40px;padding:0 8px">-->
<!--    </el-header>-->
    <el-container>
      <el-aside style="width:250px">
      <el-aside style="width: 20%">
        <basic-container class="businessTreeContainer">
          <div class="app">
            <p style="margin-top: 10px;font-weight: 570;font-size: 19px">{{ treeOption.title }}</p>
            <avue-tree id="basic" :data="treeData" :option="treeOption" class="businessTree" @node-click="nodeClick">
            <span slot-scope="{ node, data }" class="el-tree-node__label">
            <div style="display: flex;margin-bottom: 10px;justify-content: space-around;">
              <el-button v-if="permissionList.addBtn"  size="mini" type="primary" @click="businessAdd" plain style="width: 60px">
                新增
              </el-button>
              <el-button v-if="permissionList.editBtn"  size="mini" type="primary" @click="businessEdit" plain style="width: 60px">
                修改
              </el-button>
              <el-button v-if="permissionList.table"  size="mini" type="primary"
                         @click="selectFromTable" plain> 从已有中获取
              </el-button>
            </div>
            <avue-tree :data="treeData" :option="treeOption" class="businessTree" @node-click="nodeClick" style="width: fit-content;">
            <template slot-scope="{ node, data }" class="el-tree-node__label">
              <span>
                <i :class="(node || {}).level === 2 ? 'el-icon-star-off' : 'el-icon-folder-opened'"></i>
                {{ (node || {}).label }}
              </span>
            </span>
            </template>
            </avue-tree>
          </div>
@@ -171,7 +171,7 @@
      selectionList: [],
      treeData: [],
      treeOption: {
        defaultExpandAll: true,
        defaultExpandAll: false,
        title: '业务类型树',
        addBtn: false,
        menu: false,
@@ -186,8 +186,8 @@
        btmType: {},
      },
      loadOption: {
        height:'auto',
        border: true,
        height: 478,
        editBtn: false,
        addBtn: false,
        menu: false,
@@ -381,11 +381,7 @@
}
</script>
<style lang="scss">
#basic {
  height: 770px;
  border-radius: 10px;
}
<style lang="scss" scoped>
.businessCrud > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu {
  display: none !important;
@@ -395,6 +391,28 @@
  display: none !important;
}
.businessTreeContainer > .el-card > .el-card__body {
  height: 775px;
}</style>
.app {
  overflow: auto;
  height: 84.3vh;
}
.app::-webkit-scrollbar {
  height: 15px; // 纵向滚动条 必写
  background: white;
  border: white;
  width: 10px;
}
// 滚动条的滑块
.app::-webkit-scrollbar-thumb {
  width: 10px;
  height: 10px;
  background-color: #ececec;
  border-radius: 20px;
  border: #ececec;
}
</style>
Source/UBCS-WEB/src/views/modeling/LinkType.vue
@@ -1,30 +1,30 @@
<template>
    <el-container>
        <!-- 顶端按钮 -->
        <el-header class="businessHeader" style="height: 40px;">
          <div>
            <el-button type="primary" @click="linkTypeAdd" size="small" icon="el-icon-plus" v-if="permissionList.addBtn" plain>
              新增
            </el-button>
            <el-button type="primary" @click="linkTypeEdit" size="small" icon="el-icon-edit" v-if="permissionList.editBtn" plain>
              修改
            </el-button>
          </div>
            </el-header>
        <!-- 侧边栏树 -->
        <el-container>
            <el-aside width="240px">
            <el-aside style="width: 20%;">
                <basic-container class="businessTreeContainer">
                    <p style="margin-top: 10px;font-weight: 570;font-size: 19px">{{ treeOption.title }}</p>
                    <avue-tree id="basic" :data="treeData" :option="treeOption" @node-click="nodeClick"
                        class="businessTree">
                        <span class="el-tree-node__label" slot-scope="{ node, data }">
                  <div class="app">
                    <div style="display: flex;margin-bottom: 10px;">
                      <el-button type="primary" @click="linkTypeAdd" size="mini"  v-if="permissionList.addBtn" plain>
                        新增
                      </el-button>
                      <el-button type="primary" @click="linkTypeEdit" size="mini" v-if="permissionList.editBtn" plain>
                        修改
                      </el-button>
                    </div>
                    <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick"
                               class="businessTree">
                      <template class="el-tree-node__label" slot-scope="{ node, data }">
                            <span>
                                <i class="el-icon-star-on"></i>
                                {{ (node || {}).label }}
                            </span>
                        </span>
                      </template>
                    </avue-tree>
                  </div>
                </basic-container>
            </el-aside>
            <el-container>
@@ -178,7 +178,7 @@
            },
            loadOption: {
                border: true,
                height: 395,
                height: 'auto',
                editBtn: false,
                addBtn: false,
                menu: false,
@@ -215,6 +215,7 @@
            },
            obj: {},
            treeOption: {
                height:'auto',
                defaultExpandAll: true,
                title: '链接类型树',
                addBtn: false,
@@ -285,8 +286,31 @@
}
</script>
<style lang="scss">
<style lang="scss" scoped>
.attributeCrud>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
    display: none !important;
}
.app {
  overflow: auto;
  height: 84.3vh;
}
.app::-webkit-scrollbar {
  height: 15px; // 纵向滚动条 必写
  background: white;
  border: white;
  width: 10px;
}
// 滚动条的滑块
.app::-webkit-scrollbar-thumb {
  width: 10px;
  height: 10px;
  background-color: #ececec;
  border-radius: 20px;
  border: #ececec;
}
</style>
Source/UBCS-WEB/src/views/ruleBasic/usableCharacter.vue
@@ -21,83 +21,21 @@
        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-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>
@@ -230,7 +168,7 @@
      // 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);
        // console.log(res.data.data);
        this.tableData = res.data.data;
        this.loading = false;
      });
Source/UBCS-WEB/src/views/statistic/statisticPage.vue
@@ -48,7 +48,7 @@
  </span>
    </el-dialog>
    <!--    echarts组件-->
    <div style="margin-top: 15px">
    <div style="margin-top: 15px;padding-bottom: 35px">
      <lineChart v-for="(item,index) in lineList" :key="index" :chartName="item.menuName"
                 :lineData="item.menuData"></lineChart>
      <pieChart v-for="(item,index) in pieList" :key="index" :chartName="item.menuName"
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/constant/MdmEngineConstant.java
@@ -177,7 +177,7 @@
    public static final List DEFAULT_SYNC_ATTR_LIST = new ArrayList(){{
        add(CODE_FIELD);
        add(CODE_STATUS_FILED);
        add(CODE_GROUP_FIELD);
        //add(CODE_GROUP_FIELD);
        add(CODE_CLASSIFY_OID_FIELD);
        add(CODE_TEMPLATE_OID_FIELD);
        add(CODE_FULL_PATH_FILED);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -106,7 +106,6 @@
        }
    }
    /**
     * 导入批量编辑数据
     * @param codeClassifyOid 分类的主键
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmProductCodeService.java
@@ -2,6 +2,7 @@
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.vo.pagemodel.CodeBasicSecVO;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
@@ -41,4 +42,13 @@
     */
    List<String> productCodeAndSaveDataBZ(CodeClassifyFullInfoBO classifyFullInfoBO, CodeClassifyTemplateVO templateVO,
                                        CodeRuleVO ruleVO, List<CodeOrderSecDTO> secDTOList, List<BaseModel> dataCBOList) throws Exception;
    /**
     * 码段前后缀拼接
     * @param secVO
     * @param secValue
     * @return
     */
    String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -13,9 +13,7 @@
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
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;
import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
@@ -383,7 +381,7 @@
        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
        //获取码段宽度
        //String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
        String secWidth = getCodeSegmentWidth(codeClassifyVO.getOid());
        if(isHistory){
            templateVOList= templateService.childTemplates(codeClassifyOid);
@@ -434,6 +432,8 @@
                excelDataList.add(new WriteExcelData(0,0,"分类路径",""));
                excelDataList.add(new WriteExcelData(0,1,"码段宽度",""));
                excelDataList.add(new WriteExcelData(0,2,!CollectionUtils.isEmpty(idAttrVOList)?idAttrVOList.get(0).getName():"企业编码",idAttrVOList.get(0).getId()));
                // 填充码段
                excelDataList.add(new WriteExcelData(1,1,secWidth));
            }
            for (int i = 0; i < templateAttrVOS.size(); i++) {
                CodeClassifyTemplateAttrVO attrVO = templateAttrVOS.get(i);
@@ -620,22 +620,121 @@
     * @return
     */
    private String getCodeSegmentWidth(String codeClassifyOid){
        CodeClassifyVO codeClassifyVO = classifyService.getObjectByOid(codeClassifyOid);
        CodeClassifyFullInfoBO classifyFullInfoBO = classifyService.getClassifyFullInfo(codeClassifyOid);
        // 要获取码段宽度,先要获取规则,当前没有往上找
        CodeRuleVO codeRuleByClassifyFullInfo = mdmEngineService.getCodeRuleByClassifyFullInfo(classifyService.getClassifyFullInfo(codeClassifyOid));
        List<CodeBasicSecVO> secVOList = codeRuleByClassifyFullInfo.getSecVOList();
        if(secVOList.isEmpty()){
            return "";
        }
        StringBuffer secWidth = new StringBuffer("");
        for (int j = 0; j < secVOList.size(); j++) {
            CodeBasicSecVO secVO = secVOList.get(j);
            int width = VciBaseUtil.getInt(secVO.getCodeSecLength()) + ((secVO.getPrefixCode() + secVO.getSuffixCode()).length());
            secWidth.append(width).append("#");
        }
        secVOList.stream().forEach(item->{
            switch (item.getSecType().toLowerCase(Locale.ROOT)){
                case "codeclassifysec":
                case "codevariablesec":
                case "coderefersec":
                case "codefixedsec":
                case "codeattrsec":
                case "codeserialsec":
                    countSecWith(item,secWidth);
                    break;
                case "codelevelsec":
                    //层级码段,需要从分类上获取相应的信息
                    String secValue = "";
                    if (CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(item.getCodeLevelType())) {
                        //最小层,因为我们只能在叶子节点上申请编码,所以这个就是当前分类的
                        if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType()) || CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) {
                            //就是当前分类的
                            secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
                        } else {
                            //我们需要从顶层开始找到当前分类为止
                            secValue = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId();
                        }
                    } else {
                        //指定层,我们需要通过上级的来获取
                        if (CollectionUtils.isEmpty(classifyFullInfoBO.getParentClassifyVOs())) {
                            //说明当前已经是最高的了
                            secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
                        } else {
                            //这个我们需要看看,层级是不是大于了最大层级的数
                            List<CodeClassifyVO> parentClassifyVOList = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
                            if (item.getCodeLevelValue() > (parentClassifyVOList.size() + 1)) {
                                //指定的层级比当前的层级还大了,所以只能获取当前层级了
                                if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) {
                                    secValue = classifyFullInfoBO.getCurrentClassifyVO().getId();
                                } else {
                                    secValue = parentClassifyVOList.stream().map(CodeClassifyVO::getId).collect(Collectors.joining()) + classifyFullInfoBO.getCurrentClassifyVO().getId();
                                }
                            } else {
                                //我们获取其中指定层的内容
                                if (CodeGetValueTypeEnum.CURRENT.getValue().equalsIgnoreCase(item.getCodeGetValueType())) {
                                    CodeClassifyVO classifyVO = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() == item.getCodeLevelValue().intValue()).findFirst().orElseGet(() -> null);
                                    if (classifyVO != null) {
                                        secValue = classifyVO.getId();
                                    }
                                } else {
                                    //小于等于的全部拿出来
                                    secValue = parentClassifyVOList.stream().filter(s -> s.getDataLevel().intValue() <= item.getCodeLevelValue().intValue()).sorted(((o1, o2) -> -o1.getDataLevel().compareTo(o2.getDataLevel()))).map(CodeClassifyVO::getId).collect(Collectors.joining());
                                }
                            }
                        }
                    }
                    //看看长度是否需要截断
                    if (!CodeCutTypeEnum.NONE.getValue().equalsIgnoreCase(item.getValueCutType()) &&
                        item.getValueCutLength() != null && item.getValueCutLength() > 0 && secValue.length() > item.getValueCutLength()) {
                        if (CodeCutTypeEnum.RIGHT.getValue().equalsIgnoreCase(item.getValueCutType())) {
                            //左截取是从左边剪掉,右截取是从右边剪掉--保留左边
                            secValue = secValue.substring(0, item.getValueCutLength());
                        } else {
                            secValue = secValue.substring(secValue.length() - item.getValueCutLength());
                        }
                    }
                    secValue = productCodeService.joinPreffixAndSuffix(item,secValue);
                    secWidth.append(secValue.length()).append("#");
                    break;
                case "codedatesec":
                    String dateFormatStr = item.getCodeDateFormatStr();
                    if(Func.isNotEmpty(dateFormatStr)) {
                        // 获取当前时间
                        Date currentDate = new Date();
                        // 指定日期格式
                        SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatStr);
                        // 将当前时间转换为指定日期格式
                        // 使用正则表达式去掉除数字以外的所有字符串
                        String cleanedDate = dateFormat.format(currentDate).replaceAll("[^0-9]", "");
                        int width = cleanedDate.length();
                        if (Func.isNotEmpty(item.getPrefixCode())) {
                            width += item.getPrefixCode().length();
                        }
                        if (Func.isNotEmpty(item.getSuffixCode())) {
                            width += item.getSuffixCode().length();
                        }
                        secWidth.append(width).append("#");
                    }
                    break;
            }
        });
        return secWidth.toString().substring(0, secWidth.length() - 1);
    }
    /**
     * 计算码段长度加前后缀的长度
     * @param codeBasicSecVO
     * @param secWidth
     */
    private void countSecWith(CodeBasicSecVO codeBasicSecVO,StringBuffer secWidth){
        if(Func.isNotEmpty(codeBasicSecVO.getCodeSecLength())){
            int width = VciBaseUtil.getInt(codeBasicSecVO.getCodeSecLength());
            if(Func.isNotEmpty(codeBasicSecVO.getPrefixCode())){
                width += codeBasicSecVO.getPrefixCode().length();
            }
            if(Func.isNotEmpty(codeBasicSecVO.getSuffixCode())){
                width += codeBasicSecVO.getSuffixCode().length();
            }
            secWidth.append(width).append("#");
        }else {
            secWidth.append(0).append("#");
        }
    }
    /**
@@ -775,7 +874,7 @@
            //除去默认的属性.还有只有表单显示的字段才导入
            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->
                !DEFAULT_ATTR_LIST.contains(s.getId()) &&
                    (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            Map<String/**模板属性字段oid**/, String /**模板属性外部名称**/> fieldNameMap =attrVOS.stream().collect(Collectors.toMap(CodeClassifyTemplateAttrVO::getId,s->s.getName()));
@@ -1588,7 +1687,7 @@
            //除去默认的属性.还有只有表单显示的字段才导入
            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->
                !DEFAULT_ATTR_LIST.contains(s.getId()) &&
                    (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap = new HashMap<>();
            List<String> titleRowData = dataSet.getColName();
@@ -1837,7 +1936,6 @@
            " and lastr = '1'" +
            " and lastv='1'" +
            " and codeclsfpath like '%" + exportAttrDTO.getCodeClassifyOid() + "%'";
        //先查询总数
        int total = 0;
        if(exportAttrDTO.getEndPage()!=null && exportAttrDTO.getEndPage()>0
@@ -2053,7 +2151,7 @@
            //除去默认的属性.还有只有表单显示的字段才导入
            List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes().stream().filter(s ->
                !DEFAULT_ATTR_LIST.contains(s.getId()) &&
                    (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            String fullPath = getFullPath(classifyFullInfo);
            excelToCbo(classifyFullInfo,fieldIndexMap,rowDataList, codeClassifyTemplateVO,cboList,fullPath,!isImprot);
@@ -2261,7 +2359,7 @@
        //除去默认的属性.还有只有具有分类注入的才过滤出来
        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(
            s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
        ).collect(Collectors.toList());
        Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap = new HashMap<>();
        List<String> titleRowData = dataObjectVO.getColName();
@@ -2632,7 +2730,7 @@
        //checkTemplateSync(sheetDataSetList,templateVO);
        //除去默认的属性.还有只有表单显示的字段才导入
        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
            (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
            ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
        ).collect(Collectors.toList());
        Map<Integer/**列号**/, String/**字段的名称**/> fieldIndexMap = new HashMap<>();
        List<String> titleRowData = dataObjectVO.getColName();
@@ -4631,7 +4729,7 @@
        //除去默认的属性.还有只有表单显示的字段才导入
        List<CodeClassifyTemplateAttrVO> attrVOS = newTemplateVO.getAttributes().stream().filter(s ->
            !DEFAULT_ATTR_LIST.contains(s.getId()) &&
                (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
        ).collect(Collectors.toList());
        Map<String/**中文名称**/, String/**英文名称**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId()));
        List<String> fields=new ArrayList<>();
@@ -5113,7 +5211,7 @@
        //获取最新的模板
        CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyOid);        //除去默认的属性.还有只有表单显示的字段才导入
        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
            (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
            ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
        ).collect(Collectors.toList());
        ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO();
        createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//组织数据
@@ -5324,7 +5422,7 @@
                }
                //除去默认的属性.还有只有表单显示的字段才导入
                List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!fieldIndexMap.containsValue(s.getId()) &&
                    (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
                ).collect(Collectors.toList());
                attrVOS.stream().forEach(codeClassifyTemplateAttrVO -> {//将不需要更改的默认字段或者不更改的属性复制到新的版本上
                    String arrtibuteKey=codeClassifyTemplateAttrVO.getId();
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmProductCodeServiceImpl.java
@@ -928,7 +928,7 @@
     * @param secValue 码值
     * @return
     */
    private String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
    public String joinPreffixAndSuffix(CodeBasicSecVO secVO, String secValue){
        StringBuilder joinSecValue = new StringBuilder();
        // 拼接前缀
        if (Func.isNotEmpty(secVO.getPrefixCode()) && Func.isNotEmpty(secValue)) {
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -327,7 +327,7 @@
                    ApplyDatasVO applyDatasVO = classVO.getObjects();
                    DataObjectVO dataObjectVO = new DataObjectVO();
                    List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                        (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                        ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
                    ).collect(Collectors.toList());
                    this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO);
                    log.info("end:数据组织完毕");
@@ -484,7 +484,7 @@
                }
                List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                    (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
                ).collect(Collectors.toList());
                List<PersonMasterData> personMasterDataList= personData.getMasterData();
@@ -762,7 +762,7 @@
                }
                List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                    (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
                ).collect(Collectors.toList());
                List<Map> dataList=new ArrayList<>();
                List<String> codeList=new ArrayList<>();
@@ -1078,7 +1078,7 @@
                    DataObjectVO dataObjectVO = new DataObjectVO();
                    //将默认的属性全部替换掉
                    List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                        (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                        ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
                    ).collect(Collectors.toList());
                    this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO);
                    log.info("end:数据构建完毕");
@@ -2083,7 +2083,7 @@
            ApplyBZDatasVO applyBZDatasVO = classfyBZVO.getObjects();
                DataObjectVO dataObjectVO = new DataObjectVO();
            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                (Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag())
                ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            List<ApplyBZDataVO> applyBZDataVOList=    applyBZDatasVO.getObject();
            if(applyBZDataVOList.size()>1){
@@ -2538,6 +2538,11 @@
        //根据分类模板组织数据
        final int[] index = {0};
        try {
            //除去默认的属性.还有只有具有分类注入的才过滤出来
            codeClassifyTemplateAttrVOList = codeClassifyTemplateAttrVOList.stream().filter(
                s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) &&
                    ((Func.isNotEmpty(s.getClassifyInvokeAttr()) || Func.isNotEmpty(s.getClassifyInvokeAttrName())) || VciBaseUtil.getBoolean(s.getFormDisplayFlag()))
            ).collect(Collectors.toList());
            codeClassifyTemplateAttrVOList.stream().forEach(codeClassifyTemplateAttrVO -> {
                String attrName = codeClassifyTemplateAttrVO.getName();
                String field = codeClassifyTemplateAttrVO.getId();