ludc
2023-06-16 948917aab4194a93e9ade2dc26b0639e6d93a6c4
Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs
已修改23个文件
已添加7个文件
1797 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/GetItem.js 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/batchImport/index.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/resource/file.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/template/setPersonnel.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/index.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Crud/Crud.vue 423 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Divider/index.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Master/MasterTree.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/TemplatePro.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/file/inDialog.vue 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/file/inHtml.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/file/main.vue 325 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/flow-cycle/flowchartEditor.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/template/SetPersonnel.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/MasterData/items.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/flow/flowPath.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 382 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/GetItem.js
@@ -1,5 +1,5 @@
import request from "@/router/axios";
//表头
export const MasterTable =(params)=>{
  return request({
    url: 'api/ubcs-code/mdmEngineController/getUIInfoByClassifyOid',
@@ -9,7 +9,7 @@
    }
  })
}
//表格
export const TableData =(params)=>{
  return request({
    url: 'api/ubcs-code/mdmEngineController/gridTableDataByClassifyOid',
@@ -19,4 +19,13 @@
    }
  })
}
//高级查询
export const FindData =(params)=>{
  return request({
    url: 'api/ubcs-code/mdmEngineController/gridTableDataByClassifyOid',
    method: 'get',
    params:{
      ...params
    }
  })
}
Source/UBCS-WEB/src/api/batchImport/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
import request from '@/router/axios';
export const downloadTemplate = (params) => {
  return request({
    url: '/api/ubcs-code/mdmEngineController/downloadTopImportExcel ',
    method: 'get',
    params
  })
}
Source/UBCS-WEB/src/api/resource/file.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
import request from '@/router/axios';
export const getList = (page, limit, params) => {
  return request({
    url: '/api/ubcs-resource/fileController/listFiles',
    method: 'get',
    params: {
      ...params,
      page,
      limit
    }
  })
}
export const remove = (oids) => {
  return request({
    url: '/api/ubcs-resource/fileController/deleteFile',
    method: 'post',
    params: {
      oids
    }
  })
}
export const upload = (row) => {
  return request({
    url: '/api/ubcs-resource/fileController/uploadFile',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/ubcs-resource/fileController/uploadFile',
    method: 'post',
    data: row
  })
}
export const download = (oids) => {
  return request({
    url: '/api/ubcs-resource/fileController/downloadFilesByOids',
    method: 'get',
    params: {
      oids
    }
  })
}
/**
 * ä½¿ç”¨æ–‡ä»¶ä¸»é”®èŽ·å–å¯¹è±¡
 * @param oid ä¸»é”®
 * @return æ–‡ä»¶æ˜¾ç¤ºå¯¹è±¡
 */
export const getFile = (oid) => {
  return request({
    url: '/api/ubcs-resource/fileController/get',
    method: 'get',
    params: {
      oid
    }
  })
}
export const listFilesByOids = (oids) => {
  return request({
    url: '/api/ubcs-resource/fileController/listFilesByOids',
    method: 'get',
    params: {
      oids
    }
  })
}
Source/UBCS-WEB/src/api/template/setPersonnel.js
@@ -28,8 +28,8 @@
export const personnelSave = (params) => {
  return request({
    url: '/api/ubcs-flow/vciflow/start',
    method: 'get',
    params: params
    method: 'post',
    data: params
  })
}
// äººå‘˜è®¾ç½®ä¿å­˜
Source/UBCS-WEB/src/components/BatchImport/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
<template>
  <el-dialog :title="title" :visible="visible" append-to-body>
    <Divider text="导入提示" left="30px"></Divider>
    <ul>
      <li v-for="(item, index) in tipInfo" :key="index">
        {{ item }}
      </li>
    </ul>
    <div class="radio_box">
      <span>分类的路径使用的属性:</span>
      <el-radio-group v-model="classifyAttr">
        <el-radio label="id">分类编号</el-radio>
        <el-radio label="name">分类名称</el-radio>
      </el-radio-group>
    </div>
    <Divider text="excel文件,选择文件后会自动上传" left="30px"></Divider>
    <el-upload
      class="upload"
      :accept="accept"
      :action="action"
      :before-upload="beforeUpload"
      :on-exceed="handleExceed"
    >
      <el-button size="small" type="primary"><i class="el-icon-upload"></i> ç‚¹å‡»ä¸Šä¼ </el-button>
    </el-upload>
    <template #footer>
      <el-button type="primary" size="small" @click="downloadTemplateFun">下载导入模板</el-button>
      <el-button size="small">关闭</el-button>
    </template>
  </el-dialog>
</template>
<script>
import { downloadTemplate } from '../../api/batchImport/index'
export default {
  name: "",
  props: {
    title: {
      type: String,
      default: "批量申请编码",
    },
    tipInfo: {
      type: Array,
      default: () => [],
    },
    visible: {
      type: Boolean,
      default: false,
    },
    accept: {
      type: String,
      default: '.xlsx, .xls'
    },
    codeClassifyOid: {
      type: String,
      default: ''
    },
    downloadTemplateFun: {
      type: Function
    }
  },
  data() {
    return {
      classType: "classCode",
    };
  },
  computed: {
    action() {
      console.log(process, 'process');
      return '/api/ubcs-code/mdmEngineController/mdmEngineController/batchTopImportCode'
    }
  },
  methods: {
    beforeUpload(file) {
      const fileType = file.name.split('.').pop()
      if (fileType !== 'xlsx' && fileType !== 'xls') {
        // ä¸Šä¼ æ ¼å¼ä¸ç¬¦åˆè¦æ±‚,提示错误信息并取消上传
        this.$message.error('只允许上传xlsx、xls格式的文件');
        return false;
      }
      return true;
    },
  },
};
</script>
<style lang="scss" scoped>
ul {
  color: rgb(188, 188, 188);
  margin: 20px 0 0 0;
  padding: 0;
  padding-left: 30px;
  list-style: none;
  li {
    margin-bottom: 5px;
    font-size: 12px;
  }
}
.radio_box {
  padding-left: 30px;
  margin: 20px 0 25px 0;
  display: flex;
  align-items: center;
  span {
    margin-right: 20px;
  }
}
.upload {
  padding-left: 30px;
  margin-top: 30px;
}
</style>
Source/UBCS-WEB/src/components/Crud/Crud.vue
@@ -2,156 +2,185 @@
  <basic-container>
    <div class="testbox">
      <div style="margin-top: 10px;display: flex;flex-wrap: wrap;width: 100%;">
        <el-button size="small" type="primary" plain @click="addvisible=true">增加
          <FormTemplateDialog
            :visible.sync="addvisible"
            :type="add"
            :templateOid="templateOid"
            :codeClassifyOid="this.codeClassifyOid"
            :codeRuleOid="this.codeRuleOid"
            :disabledProp="disabledProp"
          >
          </FormTemplateDialog></el-button>
        <el-button size="small" type="primary" plain @click="editvisible=true">编辑
          <FormTemplateDialog
            :visible.sync="editvisible"
            :type="edit"
            :templateOid="templateOid"
            :codeClassifyOid="this.codeClassifyOid"
            :codeRuleOid="this.codeRuleOid"
            :disabledProp="disabledProp"
            :rowOid="rowOid"
          ></FormTemplateDialog></el-button>
        <el-button size="small" type="primary" plain>批量导入申请</el-button>
        <el-button size="small" type="primary" plain>历史数据导入</el-button>
        <el-button size="small" type="primary" plain>批量申请编码</el-button>
        <el-button size="small" type="primary" plain>批量发布</el-button>
        <el-button size="small" type="primary" plain>查看流程历史</el-button>
        <el-button size="small" type="primary" plain>删除</el-button>
        <el-button size="small" type="primary" plain>发布</el-button>
        <el-button size="small" type="primary" plain>数据更改</el-button>
        <el-button size="small" type="primary" plain @click="huishouHandler">回收</el-button>
        <el-button size="small" type="primary" plain @click="openD">导出
          <integration-transfer :visible.sync="dialogPush" :data="transferData"
                                :props="transferProps" @save="handelTransferSave"></integration-transfer>
        <el-button plain size="small" type="primary" @click="addvisible=true">增加
        </el-button>
        <el-button size="small" type="primary" plain @click="findvisible=true">查询
<<<<<<< HEAD
        <advanced-query  :visible.sync="findvisible" :options="options"></advanced-query>
=======
        <advanced-query  :visible.sync="findvisible" :options="this.options"></advanced-query>
>>>>>>> 859a64b36d107b147f44eccd0c0a76471c5e49ea
        <FormTemplateDialog
          :codeClassifyOid="this.codeClassifyOid"
          :codeRuleOid="this.codeRuleOid"
          :disabledProp="disabledProp"
          :templateOid="templateOid"
          :type="add"
          :visible.sync="addvisible"
        >
        </FormTemplateDialog>
        <el-button plain size="small" type="primary" @click="editHandler">编辑
        </el-button>
        <el-button size="small" type="primary" plain>相似项查询</el-button>
        <el-button size="small" type="primary" plain style="margin-left: 1px;margin-top:10px">刷新</el-button>
        <el-input placeholder="请输入关键字按回车查询" style="width: 180px;margin-left: 5px;margin-top:10px" size="small"></el-input>
        <FormTemplateDialog
          :codeClassifyOid="this.codeClassifyOid"
          :codeRuleOid="this.codeRuleOid"
          :disabledProp="disabledProp"
          :rowOid="rowOid"
          :templateOid="templateOid"
          :type="edit"
          :title="'修改编码信息'"
          :visible.sync="editvisible"
        ></FormTemplateDialog>
        <el-button plain size="small" type="primary">批量导入申请</el-button>
        <el-button plain size="small" type="primary">历史数据导入</el-button>
        <el-button plain size="small" type="primary">批量申请编码</el-button>
        <el-button plain size="small" type="primary">批量发布</el-button>
        <el-button plain size="small" type="primary">查看流程历史</el-button>
        <el-button plain size="small" type="primary">删除</el-button>
        <el-button plain size="small" type="primary" @click="setHandler">发布</el-button>
        <set-personnel :visible.sync="visibleFlow"  :parameter="parameter"
                       type="PUBLIC"></set-personnel>
        <el-button plain size="small" type="primary" @click="DataChange">数据更改</el-button>
        <FormTemplateDialog
          :codeClassifyOid="this.codeClassifyOid"
          :codeRuleOid="this.codeRuleOid"
          :disabledProp="disabledProp"
          :rowOid="rowOid"
          :templateOid="templateOid"
          :type="edit"
          :title="'已发布数据更改'"
          :visible.sync="DataVisible"
        ></FormTemplateDialog>
        <el-button plain size="small" type="primary" @click="huishouHandler">回收</el-button>
        <el-button plain size="small" type="primary" @click="openD">导出
          <integration-transfer :data="transferData" :props="transferProps"
                                :visible.sync="dialogPush" @save="handelTransferSave"></integration-transfer>
        </el-button>
        <el-button plain size="small" type="primary" @click="findHandler">查询
          <advanced-query :options="this.options" :visible.sync="findvisible"
                          @echoContion="echoContion"></advanced-query>
        </el-button>
        <el-button plain size="small" type="primary">相似项查询</el-button>
        <el-button plain size="small" style="margin-left: 1px;margin-top:10px" type="primary">刷新</el-button>
        <el-input placeholder="请输入关键字按回车查询" size="small"
                  style="width: 180px;margin-left: 5px;margin-top:10px"></el-input>
      </div>
      <el-row style="height: 700px;width: 100%">
        <el-table :data="tableData" style="" @cell-click="handleCellClick" max-height="700"  v-loading="isLoading"  @selection-change="handleSelectionChange"  @sort-change="sortChange">
        <el-table v-loading="isLoading" :data="tableData" max-height="700" style="" @cell-click="handleCellClick"
                  @selection-change="handleSelectionChange" @sort-change="sortChange">
          <el-table-column
            type="selection"
            fixed
            type="selection"
            width="55">
          </el-table-column>
          <el-table-column
            type="index"
            fixed
            label="序号"
            type="index"
            width="55">
          </el-table-column>
          <div v-for="(item,index) in this.tableHeadData" :key="index">
            <el-table-column :label="item.label" :prop="item.prop" :sortable="item.sortable" :width="item.width">
<!--          <div>-->
            <el-table-column  v-for="(item,index) in this.tableHeadFindData" :key="item.id" :label="item.label" :prop="item.prop" :sortable="item.sortable" >
              <!-- ç¼–辑和展示逻辑 -->
              <template slot-scope="{ row }">
                <el-input v-if="editingRow === row && editShow== item.prop" v-model="row[item.prop]" @blur="saveRow"></el-input>
                <span v-else>{{row[item.prop]}}</span>
                <el-switch
                  v-if="editShow === 'true'"
                  v-model="row[item.prop]"
                  active-color="#13ce66"
                  inactive-color="#ff4949">
                </el-switch>
              </template>
              <!--              <template slot-scope="{ row }">-->
              <!--                <el-input v-if="editingRow === row && editShow== item.prop" v-model="row[item.prop]" @blur="saveRow"></el-input>-->
              <!--                <span v-else>{{row[item.prop]}}</span>-->
              <!--                <el-switch-->
              <!--                  v-if="editShow === 'true'"-->
              <!--                  v-model="row[item.prop]"-->
              <!--                  active-color="#13ce66"-->
              <!--                  inactive-color="#ff4949">-->
              <!--                </el-switch>-->
              <!--              </template>-->
            </el-table-column>
          </div>
<!--          </div>-->
        </el-table>
      </el-row>
    </div>
    <div class="block" style="display: flex;justify-content: flex-end">
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="page.currentPage"
        :page-sizes="page.pageSizes"
        :page-size="page.pageSizes"
        :page-sizes="page.pageSizes"
        :total="page.total"
        layout="total, sizes, prev, pager, next, jumper"
        :total="page.total">
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange">
      </el-pagination>
    </div>
  </basic-container>
</template>
<script>
import {MasterTable, TableData} from "@/api/GetItem";
import {MasterTable, TableData,FindData} from "@/api/GetItem";
import {listCodeAttributeByClassId} from '@/api/integration/integration.js'
import integrationTransfer from '@/views/integration/integrationTransfer'
import pinyin from "js-pinyin";
import SetPersonnel from '@/components/template/SetPersonnel'
export default {
  components: {
    integrationTransfer
    integrationTransfer,
    SetPersonnel
  },
  name: "Crud.vue",
  props:{
    page:{
  props: {
    page: {
      type: Object,
      default: ()=>{
      default: () => {
        return {}
      }
    },
    codeClassifyOid:{
      type:String,
      default:""
    codeClassifyOid: {
      type: String,
      default: ""
    },
    coderuleoid:{
      type:String,
      default:""
    coderuleoid: {
      type: String,
      default: ""
    },
    tableDataArray:{
    tableDataArray: {
      type: Array,
    },
    total: {
      type: String,
      default: ""
    },
    templateOid: {
      type: String,
    },
    tableHeadDataFateher: {
      type: Array,
    },
    isLoading: {
      type: Boolean,
      default: false
    },
    tableHeadFindData:{
      type:Array,
    },
    total:{
      type:String,
      default:""
    },
    templateOid:{
      type:String,
    },
    tableHeadDataFateher:{
      type:Array,
    },
    isLoading:{
      type:Boolean,
      default:false
    }
  },
  data() {
    return {
      transferData:[],
      //发布
      parameter:{
        ids:['0000','22222222'],
        code:'8b5e2017-990f-454a-9c39-4c4eeeb57553',
        type:'PUBLIC',
        name:'模板name',
        template:'模板template'
      },
      visibleFlow: false,
      transferData: [],
      transferProps: {
        key: 'oid',
        label: 'name'
      },
      templateOid:"",
      addvisible:false,
      editvisible:false,
      findvisible:false,
      dialogPush:false,
      rowOid: '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9',
      tableHeadFindDatas:[],
      templateOid: "",
      addvisible: false,
      editvisible: false,
      findvisible: false,
      dialogPush: false,
      rowOid: '',
      disabledProp: ["id"],
      editingRow:null,
      editingRow: null,
      editShow: "",
      editAttr:"",
      editAttr: "",
      data: [],
      options:[],
      options: {},
      option: {
        column: []
      },
@@ -163,14 +192,15 @@
        number: "number",
        datetime: "datetime",
      },
      tableData:[],
      tableHeadData:[],
      items:{},
      seniorQueryColumns:[]
      tableData: [],
      DataVisible:false,
      tableHeadData: [],
      items: {},
      seniorQueryColumns: [],
      selectRow: []
    }
  },
  computed:{
  },
  computed: {},
  created() {
    // this.CrudHeaderRend();
    // this.tableHeadHandle()
@@ -181,79 +211,93 @@
  activated() {
    this.doLayout()
  },
  watch:{
    codeClassifyOid:{
      handler(newval,oldval){
        this.codeClassifyOid=newval;
  watch: {
    codeClassifyOid: {
      handler(newval, oldval) {
        this.codeClassifyOid = newval;
        this.CrudHeaderRend()
      },
      deep:true
      deep: true
    },
    tableDataArray:{
      handler(newval,oldval){
        this.tableData=newval;
      //
    tableDataArray: {
      handler(newval, oldval) {
        this.tableData = newval;
      }
    },
    total:{
      handler(newval,oldval){
        this.page.total=newval;
    tableHeadFindData:{
      handler(newval, oldval) {
        this.tableHeadFindDatas = newval;
      }
    },
    tableHeadDataFateher:{
      handler(newval,oldval){
        let List=newval.tableDefineVO.cols[0];
        List.forEach(item=>{
          let columnItem = {
            label: item.title,
            prop: item.field,
            type: this.columnType[item.type],
            sortable: item.sort,
            width: item.minWidth
          };
          this.option.column.push(columnItem);
          this.option.column=this.tableHeadData;
        })
    total: {
      handler(newval, oldval) {
        this.page.total = newval;
      }
    }
    },
    // tableHeadDataFateher: {
    //   handler(newval, oldval) {
    //     let List = newval.tableDefineVO.cols[0];
    //     List.forEach(item => {
    //       let columnItem = {
    //         label: item.title,
    //         prop: item.field,
    //         type: this.columnType[item.type],
    //         sortable: item.sort,
    //         width: item.minWidth
    //       };
    //       this.tableHeadData.push(columnItem);
    //       console.log('table',this.tableHeadData)
    //     })
    //   }
    // }
  },
  methods: {
    huishouHandler(){
      console.log('tem',this.templateOid)
      console.log('table',this.tableData)
      console.log('tabheadle',this.tableHeadData)
      console.log('tableFather',this.tableHeadDataFateher)
    setHandler() {
      this.visibleFlow = true
    },
    openD(){
      this.dialogPush=true;
    huishouHandler() {
      console.log('tem', this.templateOid)
      console.log('table', this.tableData)
      console.log('tabheadle', this.tableHeadData)
      console.log('tableFather', this.tableHeadDataFateher)
    },
    openD() {
      this.dialogPush = true;
      this.getListCodeByClassId()
    },
    async getListCodeByClassId() {
      this.transferData = []
      const response = await listCodeAttributeByClassId({ codeClassifyId: this.codeClassifyOid })
      const response = await listCodeAttributeByClassId({codeClassifyId: this.codeClassifyOid})
      if (response.status === 200) {
        const data = response.data.data
        this.transferData = data
      }
    },
    rend(){
      this.tableData=this.tableHeadData
    rend() {
      this.tableData = this.tableHeadData
    },
    handleSizeChange(val){
      this.page.pageSize=val
      this.$emit('pageSize',val)
      this.CrudRend()
    handleSizeChange(val) {
      this.isLoading = true;
      setTimeout(() => {
        this.page.pageSize = val
        this.$emit('pageSize', val)
        this.CrudRend()
      }, 3000);
    },
    handleCurrentChange(val){
      this.page.currentPage=val
      this.$emit('currentPage',val)
      this.CrudRend()
    handleCurrentChange(val) {
      this.isLoading = true;
      setTimeout(() => {
        this.page.currentPage = val
        this.$emit('currentPage', val)
        this.CrudRend()
      }, 3000);
    },
    // ç›‘听单元格点击事件并存储正在编辑的行
    handleCellClick(row, column) {
      this.editingRow = row;
      this.editShow = column.property;
      this.rowOid=row.oid
      this.rowOid = row.oid
    },
    //删除
    enumDeleteRow(row) {
@@ -268,8 +312,8 @@
        this.$refs.crud.doLayout();
      });
    },
    tableHeadHandle(){
      this.options=this.tableHeadDataFateher.tableDefineVO.seniorQueryColumns
    tableHeadHandle() {
      this.options = this.tableHeadDataFateher.tableDefineVO.seniorQueryColumns
      this.List = this.tableHeadDataFateher.tableDefineVO.cols[0];
      this.List.forEach(item => {
        let columnItem = {
@@ -280,17 +324,17 @@
          width: item.minWidth
        };
        this.option.column.push(columnItem);
        this.option.column=this.tableHeadData;
        this.option.column = this.tableHeadData;
      })
    },
    //表格头渲染
    CrudHeaderRend() {
      if(this.codeClassifyOid != ""){
      if (this.codeClassifyOid != "") {
        MasterTable({
          codeClassifyOid:this.codeClassifyOid,
          codeClassifyOid: this.codeClassifyOid,
          functionId: 5,
        }).then(res => {
          this.options=res.data.tableDefineVO.seniorQueryColumns
          this.options = res.data.tableDefineVO.seniorQueryColumns
          this.List = res.data.tableDefineVO.cols[0];
          this.List.forEach(item => {
            let columnItem = {
@@ -301,25 +345,25 @@
              width: item.minWidth
            };
            this.option.column.push(columnItem);
            this.option.column=this.tableHeadData;
            this.templateOid=res.data.tableDefineVO.oid
            this.$emit('templateOid',this.templateOid)
            this.option.column = this.tableHeadData;
            this.templateOid = res.data.tableDefineVO.oid
            this.$emit('templateOid', this.templateOid)
          })
        })
      }
    },
    //表格数据
    CrudRend() {
       TableData({
         templateOid: this.templateOid,
         codeClassifyOid: this.codeClassifyOid,
         page: this.page.currentPage,
         limit: this.page.pageSize,
       }).then(res => {
         this.page.total = res.data.total;
         this.data = res.data.data;
         this.tableData=res.data.data;
       })
      TableData({
        templateOid: this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
        page: this.page.currentPage,
        limit: this.page.pageSize,
      }).then(res => {
        this.page.total = res.data.total;
        this.data = res.data.data;
        this.tableData = res.data.data;
      })
    },
    // æŽ’序
    sortChange(val) {
@@ -346,6 +390,7 @@
    },
    //分页刷新
    async onLoad(val) {
      console.log('分页', this.templateOid)
      await TableData({
        templateOid: this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
@@ -358,6 +403,46 @@
    //多选
    handleSelectionChange(row) {
      console.log(row)
      this.rowOid = row.oid
      this.selectRow = row
    },
    //编辑
    editHandler() {
      if (this.selectRow.length <= 0) {
        this.$message.warning('请选择一条数据')
      } else if (this.selectRow.length > 1) {
        this.$message.warning('只能选择一条数据')
      } else if (this.selectRow[0].lcstatus != 'Editing') {
        this.$message.warning('编码状态不是“编辑中”,不可编辑')
      } else {
        this.editvisible = true
      }
    },
    //高级查询按钮
    findHandler(){
      this.findvisible=true
    },
    // é«˜çº§æŸ¥è¯¢
    echoContion(val) {
      console.log(val)
      FindData({templateOid:this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
        ...val
      }).then(res=>{
        console.log(res)
      })
    },
    //数据更改
    DataChange(){
      if (this.selectRow.length <= 0) {
        this.$message.warning('请选择一条数据')
      } else if (this.selectRow.length > 1) {
        this.$message.warning('只能选择一条数据')
      } else if (this.selectRow[0].lcstatus != 'Released') {
        this.$message.warning('只有状态为已发布的数据才能进行数据更改')
      } else {
        this.DataVisible = true
      }
    }
  }
}
Source/UBCS-WEB/src/components/Divider/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<!-- å‡½æ•°å¼ç»„件封装分割线 -->
<template functional>
  <div class="divider" :style="{backgroundColor: props.bgkColor, color: props.color}">
    <span :style="{left: props.left}">{{ props.text }}</span>{{ $props }}
  </div>
</template>
<style lang="scss" scoped>
.divider {
  margin: 10px 0;
  position: relative;
  width: 100%;
  height: 1px;
  background-color: rgb(196, 196, 196);
  color:  rgb(164, 164, 164);
  span {
    padding: 0 10px;
    position: absolute;
    top: 50%;
    left: 10%;
    transform: translateY(-50%);
    z-index: 999;
    background-color: #fff;
  }
}
</style>
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
@@ -29,6 +29,8 @@
          :referConfig="item.referConfig || {}"
          :value="form[item.referConfig.field] || item.value"
          :text="form[item.referConfig.showField]"
          :disabled="item.disabled"
          :display="item.display"
          @setReferValue="setReferValue"
        ></vciWebRefer>
      </template>
Source/UBCS-WEB/src/components/Master/MasterTree.vue
@@ -29,6 +29,7 @@
  },
  data(){
    return{
      tableHeadFindData:[],
      tableHeadDataFateher:[],
      templateOids:"",
      tableDataArray:[],
@@ -80,7 +81,6 @@
        this.ModifyProperties(this.Treedata, 'text', 'label');
        this.codeClassifyOid=res.data[0].oid;
        this.coderuleoid=res.data[0].attributes.coderuleoid;
        this.$emit("codeClassifyOid", this.codeClassifyOid )
        this.$emit("coderuleoid", this.coderuleoid )
      }).catch(res=>{
        console.log(res)
@@ -122,7 +122,19 @@
        }).then(res => {
          this.tableHeadDataFateher = res.data;
          this.templateOids = res.data.tableDefineVO.oid;
          let List = res.data.tableDefineVO.cols[0];
          List.forEach(item => {
            let columnItem = {
              label: item.title,
              prop: item.field,
              // type: this.columnType[item.type],
              sortable: item.sort,
              width: item.minWidth
            };
         this.tableHeadFindData.push(columnItem)
          })
          this.$emit('tableHeadDataFateher', this.tableHeadDataFateher);
          this.$emit('tableHeadFindData', this.tableHeadFindData);
          resolve();
        }).catch(err=>{
          reject(err)
@@ -136,7 +148,10 @@
        await this.TableHeadRend(); // å…ˆæ‰§è¡Œ TableHeadRend()
        this.TableRend(); // TableHeadRend() æ–¹æ³•完成后再执行 TableRend()
        this.$emit('nodeClick',this.templateOids)
        console.log(this.templateOids)
        this.$emit("codeClassifyOid", this.nodeClickList.oid )
        console.log('元数据',this.templateOids)
        console.log('元数据cod',this.codeClassifyOid)
        console.log('元数据nodeclick', this.nodeClickList.oid)
      } catch (error) {
        // å¤„理错误
        this.$message.error(error)
Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
@@ -5,11 +5,11 @@
      <attrCrud :ProData="ProData" :crudOid="crudOid" :crudArray="crudArray" :Formlist="Formlist" :codeClassifyOid="codeClassifyOid"></attrCrud>
    </span>
    <span v-else-if="type.prop==='tab2'">
       <FlowPath :code="this.codeClassifyOid"></FlowPath>
       <FlowPath :code="this.crudOid"></FlowPath>
    </span>
    <span v-else-if="type.prop==='tab3'">
          <stage  :code="this.codeClassifyOid"></stage>
          <stage  :code="this.crudOid"></stage>
    </span>
  </basic-container>
Source/UBCS-WEB/src/components/file/inDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
<template>
  <div>
  <el-dialog :title="options.title|| '附件管理'"
             :visible.sync="visible"
             append-to-body
             class="avue-dialog avue-dialog--top"
             @close="close"
             top="0"
             :width="options.width|| '80%'">
    <fileContent
      :options="options"
    ></fileContent>
  </el-dialog>
  </div>
</template>
<script>
import fileContent from './main.vue';
export default {
  name: "inDialog",
  components: { fileContent },
  props: ["options","visible"],
  data(){
    return{
    }
  },
  computed: {
  },
  methods:{
    close(){
      this.$emit("close", false);
    }
  }
}
</script>
<style scoped>
</style>
Source/UBCS-WEB/src/components/file/inHtml.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<template>
  <basic-container>
    <fileContent
      :options="options"
    ></fileContent>
  </basic-container>
</template>
<script>
import fileContent from './main.vue';
export default {
  name: "inHtml",
  components: { fileContent },
  props: ["options"],
  data(){
    return{
    }
  },
  computed: {
  }
}
</script>
<style scoped>
</style>
Source/UBCS-WEB/src/components/file/main.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,325 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="primary"
                   size="small"
                   plain
                   icon="el-icon-upload2"
                   @click="handleUpload">上 ä¼ 
        </el-button>
        <el-button type="primary"
                   size="small"
                   plain
                   icon="el-icon-edit"
                   @click="handleEdit">ä¿® æ”¹
        </el-button>
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   plain
                   @click="handleDelete">删 é™¤
        </el-button>
      </template>
      <template slot-scope="scope" slot="menu">
        <el-button type="text"
                   icon="el-icon-download"
                   size="small"
                   @click="handleDownload(scope.row)">下载
        </el-button>
      </template>
    </avue-crud>
    <el-dialog title="上传附件列表"
               append-to-body
               :visible.sync="attachBox"
               width="555px">
      <avue-form ref="form" :option="attachOption" v-model="attachForm" :upload-before="uploadBefore" :upload-after="uploadAfter" :upload-error="uploadError">
      </avue-form>
    </el-dialog>
  </basic-container>
</template>
<script>
import {getList, getFile,upload,update, remove,download} from "@/api/resource/file";
import {mapGetters} from "vuex";
import {dateFormat} from "@/util/date";
export default {
  props: ["options","visible"],
  data() {
    return {
      form: {},
      query: {},
      params:{},
      loading: false,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      attachBox: false,
      selectionList: [],
      option: {
        height: 'auto',
        calcHeight: 30,
        tip: false,
        searchShow: true,
        searchMenuSpan: 6,
        border: true,
        index: true,
        viewBtn: true,
        selection: true,
        dialogClickModal: false,
        column: [
          {
            label: "文件名称",
            prop: "name",
            search: true,
            /*formatter:function(d){
              if(this.options.hasDownloadRight != false){
                //说明有下载文件的权限,那么我们就添加一个超链接
                return ''//'<a name="filenamedownloadlink " class="layui-btn layui-btn-intable" lay-event="PREVIEW" fileoid="' + d.oid +'">' + (d.id?d.id:d.name) + '</a>';
              }else{
                return d.id || d.name;
              }
            }*/
          },
          {
            label: "文件大小",
            prop: "fileSize",
            formatter:function(d){
              if(!d.fileSize || d.fileSize == null || d.fileSize*1 == 0 || isNaN(d.fileSize*1) ){
                return "未知大小";
              }else{
                //原始大小是B
                var filesize = d.fileSize*1;
                if(filesize>1024*1024*1024*1024){
                  return parseInt(filesize/(1024*1024*1024*1024)) + "TB";
                }else if(filesize> 1024*1024*1024){
                  return parseInt(filesize/(1024*1024*1024)) + "GB";
                }else if(filesize> 1024*1024){
                  return parseInt(filesize/(1024*1024)) + "MB";
                }else if(filesize> 1024){
                  return parseInt(filesize/1024) + "KB";
                }else {
                  return filesize + "B";
                }
              }
            }
          },
          /*{
            label: "密级",
            prop: "secretGradeText"
          },
          {
            label: "文档类别",
            prop: "fileDocClassifyName"
          },*/
          {
            label: "创建者",
            prop: "creator"
          },
          {
            label: "创建时间",
            prop: "createTime"
          },
        ]
      },
      data: [{
        btmname: "fileobject",
        createTime: "2023-06-14 16:08:50.002",
        creator: "1",
        fileDocClassify: "undefined",
        fileDocClassifyName: null,
        fileExtension: "png",
        filePath: "VolumnFactoryService:/f87a4c92-ce6e-458b-aad0-0c76bd5eeb35\\54120082-76aa-4092-abbf-b13cb40606c5",
        fileSize: 858,
        id: "assignRole",
        name: "assignRole",
        nameOid: "9FF4C05D-4EFA-F00B-0080-5ABB50257D4E",
        oid: "54120082-76aa-4092-abbf-b13cb40606c5",
        ownBtmname: "wupin",
        ownbizOid: "6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9",
        owner: "1",
        secretGrade: null,
        secretGradeText: null
      }],
      attachForm: {},
      attachOption: {
        submitBtn: true,
        emptyBtn: true,
        column: [
          {
            label: '附件上传',
            prop: 'attachFile',
            type: 'upload',
            dragFile: true,
            loadText: '文件上传中,请稍等',
            span: 24,
            propsHttp: {
              res: 'data'
            },
            action: "/api/ubcs-resource/fileController/uploadFile"
          }
        ]
      }
    };
  },
  computed: {
    ...mapGetters(["permission"]),
    permissionList() {
      return {
        addBtn: false,
        editBtn: false,
        viewBtn: false,
        delBtn: this.vaildData(this.permission.attach_delete, false)
      };
    },
    ids() {
      let ids = [];
      this.selectionList.forEach(ele => {
        ids.push(ele.id);
      });
      return ids.join(",");
    }
  },
  methods: {
    setParams(){
      var params={
        ownbizOid:options.ownbizOid || '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9',
        ownbizBtm:options.ownbizBtm || 'wupin',
        fileDocClassify:options.fileDocClassify || '!=processAuditSuggest'
      }
      this.params=params;
    },
    handleUpload() {
      this.attachBox = true;
    },
    handleEdit() {
      this.attachBox = true;
    },
    uploadBefore(file, done, loading,column) {
      console.log(file,column)
      //如果你想修改file文件,由于上传的file是只读文件,必须复制新的file才可以修改名字,完后赋值到done函数里,如果不修改的话直接写done()即可
      var newFile = new File([file], '1234', { type: file.type });
      done(newFile)
      this.$message.success('上传前的方法')
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.attachBox = false;
      this.refreshChange();
      done();
    },
    uploadError(error, column) {
      this.$message.success('上传失败回调')
      console.log(error, column)
    },
    handleDownload(row) {
      window.open(`${row.link}`);
    },
    rowDel(row) {
      this.$confirm("确定将选择文件删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(row.id);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
        });
    },
    handleDelete() {
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据");
        return;
      }
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(this.ids);
        })
        .then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          this.$refs.crud.toggleSelection();
        });
    },
    beforeOpen(done, type) {
      if (["edit", "view"].includes(type)) {
        getDetail(this.form.id).then(res => {
          this.form = res.data.data;
        });
      }
      done();
    },
    searchReset() {
      this.query = {};
      this.onLoad(this.page);
    },
    searchChange(params, done) {
      this.query = params;
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    selectionClear() {
      this.selectionList = [];
      this.$refs.crud.toggleSelection();
    },
    currentChange(currentPage) {
      this.page.currentPage = currentPage;
    },
    sizeChange(pageSize) {
      this.page.pageSize = pageSize;
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
    },
    onLoad(page, params) {
      //this.loading = true;
      params=this.params || {}
      /*getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        this.loading = false;
        this.selectionClear();
      });*/
    }
  }
};
</script>
<style>
</style>
Source/UBCS-WEB/src/components/flow-cycle/flowchartEditor.vue
@@ -1,3 +1,5 @@
<!-- eslint-disable vue/valid-v-for -->
<!-- eslint-disable vue/require-v-for-key -->
<template>
  <vue-flowchart-editor class="vue-flowchart-editor" ref="flowChart">
    <div class="vfe-chart">
@@ -15,7 +17,7 @@
          <flow :data="flowChartData" :onAfterChange="onAfterChange" />
          <div class="tooltip">
            <template v-for="item in tooltipData">
              <p :key="item.name">{{ item.name }}: {{ item.value }}</p>
              <p>{{ item.name }}: {{ item.value }}</p>
            </template>
          </div>
        </div>
Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -1,7 +1,10 @@
<template>
  <vciWebReferTree v-if="refertype=='tree'" @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferTree>
  <vciWebReferTable v-else-if="refertype=='table'" @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferTable>
  <vciWebReferDefalut v-else  @setValue="setValue" :value="value" :text="text" :title="title" :referConfig="referConfig"></vciWebReferDefalut>
  <div v-if="display">
    <vciWebReferTree v-if="refertype=='tree'" @setValue="setValue" :value="value" :text="text" :title="title" :disabled="disabled" :referConfig="referConfig"></vciWebReferTree>
    <vciWebReferTable v-else-if="refertype=='table'" @setValue="setValue" :value="value" :text="text" :title="title" :disabled="disabled" :referConfig="referConfig"></vciWebReferTable>
    <vciWebReferDefalut v-else  @setValue="setValue" :value="value" :text="text" :title="title" :disabled="disabled" :referConfig="referConfig"></vciWebReferDefalut>
  </div>
</template>
<script>
@@ -10,7 +13,7 @@
import vciWebReferDefalut from "./vciWebReferDefalut.vue";
export default {
  name: "vciWebRefer",
  props: ["referConfig","value","text"],
  props: ["referConfig","value","text","disabled","display"],
  components: {vciWebReferTree, vciWebReferTable, vciWebReferDefalut},
  data() {
    return {
Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
@@ -27,7 +27,7 @@
      </div>
    </el-dialog>
    <avue-input v-model="text" :placeholder="title" @click="visible=true"></avue-input>
    <avue-input v-model="text" :disabled="disabled" :placeholder="title" @click="!disabled && (visible=true)"></avue-input>
    <!--<avue-input-table ref="referTable"  :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="title" ></avue-input-table>
  -->
  </div>
@@ -38,7 +38,7 @@
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferDefalut",
  props:["referConfig","value","text","title"],
  props:["referConfig","value","text","title","disabled"],
  data() {
    return {
      visible: false,
@@ -180,6 +180,7 @@
              ...item,
              label: item.title,
              prop: item.field,
              formatter:item.template,
              search: true
            }
          }
Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -30,7 +30,7 @@
      </div>
    </el-dialog>
    <avue-input v-model="text" :placeholder="title" @click="visible=true"></avue-input>
    <avue-input v-model="text" :disabled="disabled" :placeholder="title" @click="!disabled && (visible=true)"></avue-input>
    <!--<avue-input-table ref="referTable"  :props="props"  :column="column" :on-load="onLoad" v-model="value"  :placeholder="title" ></avue-input-table>
  -->
  </div>
@@ -41,7 +41,7 @@
import {getList,getLazyList,getTableDefinedUrl} from "@/api/refer/table";
export default {
  name: "vciWebReferTable",
  props:["referConfig","value","text","title"],
  props:["referConfig","value","text","title","disabled"],
  data() {
    return {
      visible: false,
Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -1,5 +1,5 @@
<template>
  <avue-input-tree ref="referTree" :props="props" :lazy="lazy" :tree-load="treeLoad" :node-click="nodeClick" :checked="checked" :leaf-only="referConfig.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="title" :dic="treeData"></avue-input-tree>
  <avue-input-tree ref="referTree" :props="props" :disabled="disabled" :lazy="lazy" :tree-load="treeLoad" :node-click="nodeClick" :checked="checked" :leaf-only="referConfig.onlyLeaf" :multiple="isMuti" v-model="value" :placeholder="title" :dic="treeData"></avue-input-tree>
</template>
<script>
@@ -8,7 +8,7 @@
export default {
  name: "vciWebReferTree",
  props:["referConfig","value","text","title"],
  props:["referConfig","value","text","title","disabled"],
  data() {
    return {
      options: this.referConfig.options,
Source/UBCS-WEB/src/components/template/SetPersonnel.vue
@@ -1,20 +1,30 @@
<template>
    <el-dialog :title="title" :visible.sync="dialogVisible" append-to-body="true">
        <div>
            <el-tag v-for="tag in tags" :key="tag" closable disable-transitions effect="dark" @click="handleClickTag(tag)"
                @close="handleCloseTag(tag)">
                <span> {{ tag.name }}</span>
            </el-tag>
        </div>
    <el-dialog :title="title" :visible.sync="dialogVisible" append-to-body="true" width="30%">
        <el-tag v-for="tag in tags" :key="tag" closable disable-transitions effect="Plain" size="medium"
            @click="handleClickTag(tag)" @close="handleCloseTag(tag)">
            <span> {{ tag.name }}</span>
        </el-tag>
        <el-divider v-if="tags.length !== 0"></el-divider>
        <el-form :model="saveParam" class="demo-form-inline" label-position="left" label-width="auto" :rules="rules">
            <el-form-item label="流程模板">
                <el-input placeholder="流程模板" v-model="saveParam.modelName" disabled  ></el-input>
            </el-form-item>
            <el-form-item label="流程名称" prop="processName">
                <el-input placeholder="流程名称" v-model="saveParam.processName"  >
                </el-input>
            </el-form-item>
            <el-form-item label="流程描述">
                <el-input placeholder="流程描述" type="textarea" :rows="4" v-model="saveParam.processDesc"  >
                </el-input>
            </el-form-item>
        </el-form>
        <el-divider></el-divider>
        <div class="btns-icon">
            <el-button type="primary" icon="el-icon-star-off" @click="handleCollect"></el-button>
            <!-- <el-button type="primary" icon="el-icon-refresh" ></el-button> -->
            <el-button icon="el-icon-star-off" circle @click="handleCollect"></el-button>
        </div>
        <el-form :model="saveParam" class="demo-form-inline" label-position="left">
        <el-form :model="collectParam" class="demo-form-inline" label-position="left" label-width="auto">
            <el-form-item :label="item.taskName" v-for="(item, index) in initFrom" :key="index">
                <el-select style="width: 50%;" v-model="saveParam.flowTaskUsers[index]['userId']"
                <el-select style="width: 80%;"  filterable v-model="collectParam.flowTaskUsers[index]['userId']"
                    :placeholder="item.taskName" @change="handleSelect($event, index)">
                    <el-option :label="key.userNames" :value="key.userId" v-for="(key, keyi) in typeName"
                        :key="keyi"></el-option>
@@ -40,18 +50,26 @@
        // æ ‡é¢˜
        title: {
            typeof: String,
            default: '人员设置'
            default: '流程审批'
        },
        // æ¨¡æ¿id
        code: {
            typeof: String,
            default: ''
        // å‚数:选择的id,多个以数组方式传递:['id','id'],模板id,模板用途,流程名字,流程模板
        parameter: {
            typeof: Object,
            default: () => { }
        },
        // æ¨¡æ¿ç”¨é€”
        type: {
            typeof: String,
            default: ''
        parameterKeys: {
            typeof: Object,
            default: () => {
                return {
                    ids: 'ids',
                    flowName: 'flowName',
                    flowTemplate: 'flowTemplate',
                    code: 'code',
                    type: 'type'
                }
            }
        }
    },
    watch: {
        visible(n) {
@@ -64,28 +82,45 @@
    data() {
        return {
            dialogVisible: this.visible,
            isCollent: false,
            initFrom: [],
            tags: [],
            typeName: [],
            saveParam: {},
            collectParam: {},
            saveParam: this.saveParam(),
            users: [],
            rules: {
                processName: [
                    { required: true, message: '模板名称不能为空', trigger: 'blur' },
                    { min: 1, max: 20, message: '长度在 3 åˆ° 20 ä¸ªå­—符', trigger: 'blur' }
                ]
            }
        }
    },
    mounted() {
        this.apiInit()
        this.apiDict()
    },
    methods: {
        saveParam() {
            return {
                modelName: this.parameter[this.parameterKeys.flowName],
                processName: this.parameter[this.parameterKeys.flowTemplate],
                topName: this.title,
                ids: this.parameter[this.parameterKeys.ids],
            }
        },
        async apiInit() {
            const response = await personnelInit({ type: this.type, templateId: this.code })
            const response = await personnelInit({ type: this.parameter[this.parameterKeys.type], templateId: this.parameter[this.parameterKeys.code] })
            if (response.status === 200) {
                console.log(response)
                this.initFrom = response.data.data.user
                this.tags = response.data.data.collect
                const { modelKey, templateId } = response.data.data.flow
                let flowTaskUsers = response.data.data.user
                this.saveParam = { modelKey, templateId, flowTaskUsers: flowTaskUsers }
                this.collectParam = { modelKey, templateId, flowTaskUsers: flowTaskUsers }
                this.saveParam = { ...this.saveParam, modelKey, templateId }
                this.handleClickTag(this.tags[0])
            }
        },
@@ -108,10 +143,10 @@
                cancelButtonText: '取消',
            }).then(async ({ value }) => {
                console.log(this.users)
                this.saveParam.flowTaskUsers = this.users
                this.saveParam = { ...this.saveParam, name: value }
                console.log(this.saveParam)
                const response = await personnelCollect(this.saveParam)
                this.collectParam.flowTaskUsers = this.users
                this.collectParam = { ...this.collectParam, name: value }
                console.log(this.collectParam)
                const response = await personnelCollect(this.collectParam)
                if (response.status === 200) {
                    this.$nextTick(() => {
                        this.apiInit()
@@ -127,6 +162,7 @@
            if (response.status === 200) {
                console.log(response)
                this.apiInit()
                this.isCollent = true
                this.$message({
                    type: 'success',
                    message: response.data.msg
@@ -135,14 +171,13 @@
        },
        async apiSave() {
            try {
                const { modelKey, templateId } = this.saveParam
                const response = await personnelSave({ modelKey, templateId })
                const response = await personnelSave(this.saveParam)
                if (response.status === 200) {
                    console.log(response)
                    this.$message({
                    type: 'success',
                    message: response.data.msg
                });
                        type: 'success',
                        message: response.data.msg
                    });
                    this.done()
                }
            } catch {
@@ -152,7 +187,7 @@
        handleClickTag(event) {
            console.log(event)
            const flowTaskUsers = event.flowTaskUsers
            this.saveParam.flowTaskUsers = flowTaskUsers.map(item => {
            this.collectParam.flowTaskUsers = flowTaskUsers.map(item => {
                const { taskId, taskName, userId, userName } = item
                return { taskId, taskName, userId, userName }
            })
@@ -164,7 +199,7 @@
        handleSelect(event, index) {
            const res = this.typeName.find(item => item.userId === event)
            const { userName } = res
            let users = { ... this.saveParam.flowTaskUsers[index], userName }
            let users = { ... this.collectParam.flowTaskUsers[index], userName }
            console.log(users)
            this.users[index] = users
        },
@@ -175,7 +210,6 @@
            this.done()
        },
        handleConfirm() {
            console.log(this.users)
            console.log(this.saveParam)
            this.apiSave()
        }
Source/UBCS-WEB/src/main.js
@@ -23,6 +23,7 @@
import avueUeditor from 'avue-plugin-ueditor';
import website from '@/config/website';
import crudCommon from '@/mixins/crud';
import Divider from './components/Divider';
// ä¸šåŠ¡ç»„ä»¶
import tenantPackage from './views/system/tenantpackage';
import enupackage from "@/views/modeling/enupackage";
@@ -102,6 +103,7 @@
Vue.component('MasterTree',MasterTree)
Vue.component('FlowPath',FlowPath)
Vue.component('Stage',Stage)
Vue.component('Divider', Divider)
// åŠ è½½ç›¸å…³url地址
Object.keys(urls).forEach(key => {
Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
@@ -1,50 +1,60 @@
<template>
  <div>
    <el-button @click="visible = true">测试</el-button>
    <el-button @click="visible1 = true">相似项查询</el-button>
    <FormTemplateDialog
      :visible.sync="visible"
      :type="this.type"
      :templateOid="this.templateOid"
      :codeClassifyOid="this.codeClassifyOid"
      :codeRuleOid="this.codeRuleOid"
      :disabledProp="disabledProp"
      :rowOid="rowOid"
      @submit="submit"
    ></FormTemplateDialog>
    <ResembleQueryDialog
      :visible.sync="visible1"
      :type="this.type"
      :templateOid="this.templateOid"
      :codeClassifyOid="this.codeClassifyOid"
      :codeRuleOid="this.codeRuleOid"
    ></ResembleQueryDialog>
  </div>
</template>
<script>
import ResembleQueryDialog from '@/components/FormTemplate/ResembleQueryDialog.vue';
export default {
  name: "FormTempalteTest",
  components: { ResembleQueryDialog },
  data() {
    return {
      visible: false,
      visible1: false,
      // é»˜è®¤ç¦ç”¨çš„表元素
      disabledProp: ["id", 'lcstatus'],
      // è¡¨å•类型
      type: "add",
      templateOid: "A12826E4-2B66-6D56-DE30-92BB1D7F607F",
      codeClassifyOid: "D9CF223F-317D-71EB-BD11-433A94CAD9F3",
      codeRuleOid: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
      rowOid: '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9'
    };
  },
  methods: {
    submit(data) {
      console.log(data);
    }
  }
};
</script>
<template>
  <div>
    <el-button @click="visible = true">测试</el-button>
    <el-button @click="visible1 = true">相似项查询</el-button>
    <el-button @click="visible2 = true">附件管理dialog</el-button>
    <FormTemplateDialog
      :visible.sync="visible"
      :type="this.type"
      :templateOid="this.templateOid"
      :codeClassifyOid="this.codeClassifyOid"
      :codeRuleOid="this.codeRuleOid"
      :disabledProp="disabledProp"
      :rowOid="rowOid"
      @submit="submit"
    ></FormTemplateDialog>
    <ResembleQueryDialog
      :visible.sync="visible1"
      :type="this.type"
      :templateOid="this.templateOid"
      :codeClassifyOid="this.codeClassifyOid"
      :codeRuleOid="this.codeRuleOid"
    ></ResembleQueryDialog>
    <fileInHtml :options="{}"></fileInHtml>
    <fileinDialog
      :visible="visible2"
      :options="{}"
      @close="visible2=false"
    ></fileinDialog>
  </div>
</template>
<script>
import ResembleQueryDialog from '@/components/FormTemplate/ResembleQueryDialog.vue';
import fileInHtml from '@/components/file/inHtml.vue';
import fileinDialog from '@/components/file/inDialog.vue';
export default {
  name: "FormTempalteTest",
  components: { ResembleQueryDialog ,fileInHtml ,fileinDialog},
  data() {
    return {
      visible: false,
      visible1: false,
      visible2: false,
      // é»˜è®¤ç¦ç”¨çš„表元素
      disabledProp: ["id", 'lcstatus'],
      // è¡¨å•类型
      type: "add",
      templateOid: "78B8C7C5-A042-0B96-FE6D-65421451782A",
      codeClassifyOid: "4524E801-6CC6-92E8-1AC3-2AB9604E8F96",
      codeRuleOid: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
      rowOid: '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9'
    };
  },
  methods: {
    submit(data) {
      console.log(data);
    }
  }
};
</script>
Source/UBCS-WEB/src/views/MasterData/items.vue
@@ -11,6 +11,7 @@
                       @tableHeadDataFateher="tableHeadDatas"
                       @total="totals"
                       @nodeClick="nodeClick"
                       @tableHeadFindData="tableHeadFindDatas"
                        ></master-tree>
        </basic-container>
      </el-aside>
@@ -26,6 +27,7 @@
                 :tableHeadDataFateher="this.tableHeadDataFateher"
                 :isLoading="isLoading"
                 :templateOid="templateOid"
                 :tableHeadFindData="tableHeadFindData"
      ></TableCrud>
      </el-main>
    </el-container>
@@ -52,7 +54,7 @@
      tableHeadDataFateher:[],
      total:"",
      isLoading: false,
      tableHeadFindData:{}
    }
  },
  created() {
@@ -80,6 +82,9 @@
    tableHeadDatas(val){
      this.tableHeadDataFateher=val
    },
    tableHeadFindDatas(val){
      this.tableHeadFindData=val
    },
    nodeClick(val){
      this.templateOid=val;
      console.log('val',val)
Source/UBCS-WEB/src/views/flow/flowPath.vue
@@ -3,7 +3,7 @@
        <el-button @click="outerVisible = true">流程测试</el-button>
        <el-button @click="handleTable">人员设置</el-button>
        <flow-business :visible.sync="outerVisible"></flow-business>
       <set-personnel :visible.sync="visibleFlow" code="8b5e2017-990f-454a-9c39-4c4eeeb57553" type="PUBLIC"></set-personnel>
       <set-personnel :visible.sync="visibleFlow" :parameter="parameter" :parameter-keys="props" ></set-personnel>
    </div>
</template>
@@ -19,7 +19,20 @@
        return {
            outerVisible: false,
            visibleFlow: false,
            parameter:{
                ids:['0000','22222222'],
                code:'8b5e2017-990f-454a-9c39-4c4eeeb57553',
                type:'PUBLIC',
                name:'模板name',
                template:'模板template'
            },
            props:{
                flowName:'name',
                flowTemplate:'template',
                type:'type',
                ids:'ids',
                code:'code'
            }
        }
    },
    methods: {
Source/UBCS-WEB/vue.config.js
@@ -26,13 +26,13 @@
    proxy: {
      '/api': {
        //本地服务接口地址
        target: 'http://localhost:37000',
        // target: 'http://localhost:37000',
        // target: 'http://localhost:37000',
        // target: 'http://192.168.1.51:37000',
        // target: 'http://192.168.1.46:37000',
        target: 'http://192.168.1.46:37000',
        // target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        // target: 'http://localhost:37000',
          // target: 'http://192.168.1.104:37000',
        // target: 'http://192.168.1.63:37000',
        //target: 'http://192.168.3.7:37000',
        // target: 'http://dev.vci-tech.com:37000',
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -14,6 +14,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class BaseModel implements Serializable {
    @JsonSerialize(
@@ -108,7 +109,7 @@
    private String secretGradeText;
    @TableField(exist = false)
    private Map<String, String> data;
    private Map<String, String> data = new HashMap<>();
    public BaseModel() {
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CommonsMapper.java
@@ -51,4 +51,12 @@
     */
    Integer deleteByTaleAndOid(String tableName,String oids);
    /**
     * ä¼ å…¥è¡¨åï¼Œnameoid获取新的版本号等
     * @param tableName
     * @param nameoid
     * @return
     */
    Map<String,Object> getNextRevision(@Param("tableName")String tableName,@Param("nameoid") String nameoid);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -103,7 +103,7 @@
     * @param cboList    æ•°æ®çš„内容
     */
    void batchSaveSelectChar(CodeClassifyTemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
                             List<String> cboList);
                             List<BaseModel> cboList);
    /**
     * ä½¿ç”¨æ¨¡æ¿çš„主键获取表单的信息
@@ -418,14 +418,15 @@
     * @param attrName å±žæ€§çš„名字
     * @return true è¡¨ç¤ºåº”该忽略
     */
    default boolean checkUnAttrUnEdit(String attrName){
        return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
            ||"ts".equalsIgnoreCase(attrName)
            || "lastmodifier".equalsIgnoreCase(attrName)
            || "lastmodifytime".equalsIgnoreCase(attrName)
            || "createtime".equalsIgnoreCase(attrName)
            || "checkintime".equalsIgnoreCase(attrName)
            ||"checkouttime".equalsIgnoreCase(attrName));
    }
    boolean checkUnAttrUnEdit(String attrName);
//    {
//        return  (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName)
//            ||"ts".equalsIgnoreCase(attrName)
//            || "lastmodifier".equalsIgnoreCase(attrName)
//            || "lastmodifytime".equalsIgnoreCase(attrName)
//            || "createtime".equalsIgnoreCase(attrName)
//            || "checkintime".equalsIgnoreCase(attrName)
//            ||"checkouttime".equalsIgnoreCase(attrName));
//    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.corba.se.impl.orbutil.ObjectUtility;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
@@ -59,7 +60,6 @@
import org.slf4j.LoggerFactory;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
@@ -73,15 +73,21 @@
import javax.annotation.Resource;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
@@ -122,7 +128,7 @@
    @Resource
    ISysClient iSysClient;
    /**
     * ç³»ç»Ÿçš„æœåŠ¡
     * å¯†çº§æœåŠ¡
     */
    @Resource
    private IWebSecretClient secretService;
@@ -341,14 +347,6 @@
    public void changeStatus(BaseModelDTO baseModelDTO) {
        VciBaseUtil.alertNotNull(baseModelDTO, "数据信息", baseModelDTO.getOid(), "主键", baseModelDTO.getBtmname(), "业务类型", baseModelDTO.getLcStatus(), "目标状态");
        List<String> oids = VciBaseUtil.str2List(baseModelDTO.getOid());
//        List<ClientBusinessObject> cboList = boService.selectCBOByOidCollection(oids, baseModelDTO.getBtmname());
        // TODO æ’个点 ä¸šåŠ¡ç±»åž‹å®ŒæˆåŽéœ€è¦ä¿®æ”¹
        QueryWrapper<BtmTypeVO> wrapper = new QueryWrapper<>();
        wrapper.eq("BTMNAME",baseModelDTO.getBtmname());
        wrapper.in("OID",oids);
        // TODO å¾…完善
        //插个点 ä¸šåŠ¡ç±»åž‹å®ŒæˆåŽéœ€è¦ä¿®æ”¹
//        QueryWrapper<BtmTypeVO> wrapper = new QueryWrapper<>();
        List<BaseModel> baseModels = new ArrayList<>();
        baseModels = selectByTypeAndOid(baseModelDTO.getBtmname(), baseModelDTO.getOid());
        if(baseModels.size() == 0){
@@ -368,15 +366,7 @@
        // å›žæ”¶éœ€è¦ä¸šåŠ¡æ•°æ®åˆ é™¤
        if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) {
            R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname()));
//            String referTable = listR.getData().get(0).getTableName();
            commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(),VciBaseUtil.toInSql(baseModelDTO.getOid()));
            // BatchCBO batchCBO = new BatchCBO();
            // batchCBO.getDeleteCbos().addAll(cboList);
            // TODO å¾…完善
            //btmTypeClient.deleteBatchIds(cboList);
            //boService.persistenceBatch(batchCBO);
        } else {
            for (BaseModel baseModel : baseModels) {
                baseModel.setLcStatus(baseModelDTO.getLcStatus());
@@ -439,11 +429,11 @@
        List<String> codeList = productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(),cboList);
        List<String> charList = new ArrayList<>();
        for (BaseModel baseModel : cboList) {
            charList.add(baseModel.getId());
        }
        batchSaveSelectChar(templateVO, charList);
//        List<String> charList = new ArrayList<>();
//        for (BaseModel baseModel : cboList) {
//            charList.add(baseModel.getId());
//        }
        batchSaveSelectChar(templateVO, cboList);
        return codeList.size() > 0 ? codeList.get(0) : "";
//        return null;
    }
@@ -667,7 +657,7 @@
            } else if (StringUtils.isNotBlank(orderDTO.getCopyFromVersion())) {
                sql[0] += " and oid != '" + orderDTO.getCopyFromVersion() + "'";
            }
            sql[0] += " and islastR = '1' and islastV = '1' ";
            sql[0] += " and lastR = '1' and lastV = '1' ";
//            if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) {
            if (Integer.parseInt(commonsMapper.selectById(sql[0]).get(0)) > 0) {
                String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}";
@@ -879,7 +869,6 @@
        }
        try {
            String keyPrefix = BTM_INIT_CACHE.concat(StringPool.COLON).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
//            String finalBtmName = btmName;
            Cache.ValueWrapper valueWrapper = CacheUtil.getCache(keyPrefix).get(keyPrefix.concat(String.valueOf(btmName)));
            if(valueWrapper == null){
                CacheUtil.getCache(keyPrefix).put(keyPrefix.concat(String.valueOf(btmName)), createBaseModel(btmName));
@@ -890,52 +879,6 @@
            logger.error("创建业务类型对象",e);
            throw new VciBaseException("initBtmError",new String[]{btmName});
        }
//        String userName = AuthUtil.getUser().getUserName();
//        CodeWupin wupinEntity = new CodeWupin();
//        wupinEntity.setOid(VciBaseUtil.getPk());
////        bo.setRevisionid((new ObjectUtility()).getNewObjectID36());
////        bo.setNameoid((new ObjectUtility()).getNewObjectID36());
//        wupinEntity.setBtmname(btmName);
//        wupinEntity.setLastR(String.valueOf(1));
//        wupinEntity.setFirstR(String.valueOf(1));
//        wupinEntity.setFirstV(String.valueOf(1));
//        wupinEntity.setLastV(String.valueOf(1));
//        wupinEntity.setCreator(userName);
//        wupinEntity.setCreateTime(new Date());
//        wupinEntity.setLastModifier(userName);
//        wupinEntity.setLastModifyTime(new Date());
//        wupinEntity.setRevisionRule("numberversionrule");
//        wupinEntity.setVersionRule("0");
////        if(StringUtils.isNotBlank(btmTypeVO.getRevisionruleid())){
//            //
////            OsRevisionRuleVO revisionRuleVO = revisionRuleService.getRevisionRuleById(btmTypeVO.getRevisionruleid());
//        wupinEntity.setRevisionValue("1");
////        }
//
//        wupinEntity.setRevisionSeq(1);
//        wupinEntity.setVersionSeq(1);
//        //插个点,需要问勇哥版本问题,展示默认为1
//        wupinEntity.setVersionValue("1");
//        wupinEntity.setLctid("wupinLC");
//        wupinEntity.setLcStatus("Editing");
//        wupinEntity.setId("");
//        wupinEntity.setName("");
//        wupinEntity.setDescription("");
//        wupinEntity.setOwner(userName);
//        wupinEntity.setCheckinby(userName);
//        wupinEntity.setCopyFromVersion("");
//        wupinEntity.setMaterialtype(1001);
//        wupinEntity.setCaigouwl("true");
//        wupinEntity.setShifoupihaoguanli("true");
//        wupinEntity.setKucunwl("true");
//        wupinEntity.setXiaoshouwl("false");
//        wupinEntity.setPassing("true");
//        this.initTypeAttributeValue(wupinEntity,btmTypeVO);
//        return wupinEntity;
//        return cbo;
    }
    /**
@@ -962,7 +905,7 @@
     */
    @Override
    public void batchSaveSelectChar(CodeClassifyTemplateVO templateVO, /*List<ClientBusinessObject> cboList*/
                                    List<String> cboList) {
                                    List<BaseModel> cboList) {
        if (templateVO != null && !CollectionUtils.isEmpty(cboList)) {
            //是异步的,所以直接循环
            List<CodeClassifyTemplateAttrVO> selectAttrVOs = templateVO.getAttributes().stream().filter(s -> StringUtils.isNotBlank(s.getLibraryIdentification())).collect(Collectors.toList());
@@ -970,13 +913,26 @@
            if (!CollectionUtils.isEmpty(selectAttrVOs)) {
//                SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
                selectAttrVOs.parallelStream().forEach(attrVO -> {
                    List<String> valuesList = cboList;
//                    cboList.parallelStream().forEach(cbo -> {
                    List<String> valuesList = new ArrayList<>();
                    cboList.parallelStream().forEach(cbo -> {
//                        String value = cbo.get.getAttributeValue(attrVO.getId());
//                        if (StringUtils.isNotBlank(value)) {
//                            valuesList.add(value);
//                        }
//                    });
                        //将bean转为map,mybatis统一处理
                        Map<String,String> map = null;
//                        baseModels.stream().forEach(model-> {
                        try {
                            map = VciBaseUtil.convertBean2Map(cbo);
                        } catch (Exception e) {
                            throw new VciBaseException("类型转换错误:" + e.getMessage());
                        }
//                        });
                        String value = map.get(attrVO.getId());
                        if (StringUtils.isNotBlank(value)) {
                            valuesList.add(value);
                        }
                    });
                    if (!CollectionUtils.isEmpty(valuesList)) {
                        for (String s : valuesList) {
                            DictBiz dictBiz = new DictBiz();
@@ -2069,12 +2025,15 @@
//        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        //找业务类型,然后使用主键去获取数据库里的数据
//        List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getOid()));
        List<BaseModel> cbos = selectByTypeAndOid(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), orderDTO.getOid());
        QueryWrapper<CodeWupin> btmWrapper = new QueryWrapper<>();
        btmWrapper.eq("OID",orderDTO.getOid());
        CodeWupin cbo = codeWupinMapper.selectOne(btmWrapper);
        if (CollectionUtils.isEmpty(cbos)) {
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
//        QueryWrapper<CodeWupin> btmWrapper = new QueryWrapper<>();
//        btmWrapper.eq("OID",orderDTO.getOid());
//        CodeWupin cbo = codeWupinMapper.selectOne(btmWrapper);
        BaseModel cbo = cbos.get(0);
//        CodeClstemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
//        CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid());
@@ -2112,7 +2071,7 @@
        cbo.setDescription(orderDTO.getDescription());
        cbo.setName(orderDTO.getName());
        try {
            cbo.setDescription(orderDTO.getDescription());
            cbo.setDescription( StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
            cbo.setName(orderDTO.getName());
////            cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
//            cbo.setAttributeValue("name", orderDTO.getName());
@@ -2120,8 +2079,9 @@
            e.printStackTrace();
        }
        cbo.setLastModifyTime(new Date());
        cbo.setLastModifier(AuthUtil.getUser().getUserName());
        codeWupinMapper.updateById(cbo);
        cbo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
        updateBatchByBaseModel(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), Collections.singletonList(cbo));
//        codeWupinMapper.updateById(cbo);
//
//        List<CodeWupinEntity> cboList = new ArrayList<>();
//
@@ -2147,7 +2107,8 @@
//        List<ClientBusinessObject> cboList = new ArrayList<>();
//        cboList.add(cbo);
//        boService.persistenceBatch(batchCBO);
        batchSaveSelectChar(templateVO, Arrays.asList(cbo.getId()));
        batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
//        batchSaveSelectChar(templateVO, Arrays.asList(cbo.getId()));
    }
    /**
@@ -2315,67 +2276,77 @@
     */
    @Override
    public R batchUpdateCode(List<CodeOrderDTO> orderDTOList) {
//        VciBaseUtil.alertNotNull(orderDTOList,"编码申请相关的属性内容");
//        orderDTOList.forEach(orderDTO -> {
//            VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性的内容都为空", orderDTO.getOid(), "数据主键",
//                orderDTO.getCodeClassifyOid(), "主题库分类的主键");
//        });
//        Map<String, CodeOrderDTO> orderDTOMap = orderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
//        List<ClientBusinessObject> updateList = new ArrayList<>();
//        // åº”该都是一个分类下的业务数据,找第一条的就行
//        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid());
        VciBaseUtil.alertNotNull(orderDTOList,"编码申请相关的属性内容");
        orderDTOList.forEach(orderDTO -> {
            VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性的内容都为空", orderDTO.getOid(), "数据主键",
                orderDTO.getCodeClassifyOid(), "主题库分类的主键");
        });
        Map<String, CodeOrderDTO> orderDTOMap = orderDTOList.stream().filter(orderDTO -> orderDTO != null && StringUtils.isNotBlank(orderDTO.getOid())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
        List<BaseModel> updateList = new ArrayList<>();
        // åº”该都是一个分类下的业务数据,找第一条的就行
        CodeClassifyFullInfoBO topClassifyFullInfo = classifyService.getClassifyFullInfo(orderDTOList.get(0).getCodeClassifyOid());
//        Map<String,String> cboOidMap = new HashMap<>();
//        if (CollectionUtils.isEmpty(orderDTOMap.keySet())){
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
        if (CollectionUtils.isEmpty(orderDTOMap.keySet())){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
        List<BaseModel> cboList = selectByTypeAndOid(topClassifyFullInfo.getTopClassifyVO().getBtmtypeid(), VciBaseUtil.array2String(orderDTOMap.keySet().toArray(new String[0])));
//        cboOidMap.put("oid",QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(orderDTOMap.keySet().toArray(new String[0])) + ")");
//        List<ClientBusinessObject> cboList = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), cboOidMap);
//        if (CollectionUtils.isEmpty(cboList)){
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
        if (CollectionUtils.isEmpty(cboList)){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
//        BatchCBO batchCBO = new BatchCBO();
//        CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
//        Map<String, ClientBusinessObject> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
//        orderDTOMap.keySet().stream().forEach(oid -> {
//            CodeOrderDTO orderDTO = orderDTOMap.get(oid);
//            ClientBusinessObject cbo = cboMap.get(oid);
//            if (!cbo.getTs().contains(VciDateUtil.date2Str(orderDTO.getTs(), VciDateUtil.DateTimeFormat))) {
//                throw new VciBaseException("数据不是最新的,可能他人已经修改,请刷新后再试");
//            }
//            if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
//                throw new VciBaseException("数据不是{0}的状态,不允许修改", new String[]{CodeDefaultLC.EDITING.getText()});
//            }
//            //1. åˆ¤æ–­å¿…输项
//            CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
//            checkRequiredAttrOnOrder(templateVO, orderDTO);
//            //2.先注入,再组合,最后校验
//            switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
//            //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
//            switchComponentAttrOnOrder(templateVO, orderDTO);
//            //4.校验规则
//            checkVerifyOnOrder(templateVO, orderDTO);
//            //5.判断关键属性
//            checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
//            //6.校验枚举的内容是否正确
//            checkEnumOnOrder(templateVO, orderDTO);
//            //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
//            switchDateAttrOnOrder(templateVO, orderDTO);
//            //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
//            copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
//            //企业码和集团码的不修改
//            cbo.setDescription(orderDTO.getDescription());
//            cbo.setName(orderDTO.getName());
        Map<String, BaseModel> cboMap = cboList.stream().filter(cbo -> cbo != null).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getOid(), t -> t));
        orderDTOMap.keySet().stream().forEach(oid -> {
            CodeOrderDTO orderDTO = orderDTOMap.get(oid);
            CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
            CodeClassifyTemplateVO firstTemplateVO = templateService.getObjectHasAttrByOid(orderDTOMap.values().stream().findFirst().get().getTemplateOid());
            BaseModel cbo = cboMap.get(oid);
            String code=cbo.getId();
            if (!cbo.getTs().toString().contains(orderDTO.getTs().toString())) {
                throw new VciBaseException("数据不是最新的,可能他人已经修改,请刷新后再试");
            }
            if (!CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(cbo.getLcStatus()) && !orderDTO.isEditInProcess()) {
                throw new VciBaseException("数据不是{0}的状态,不允许修改", new String[]{CodeDefaultLC.EDITING.getText()});
            }
            //1. åˆ¤æ–­å¿…输项
            CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
            checkRequiredAttrOnOrder(templateVO, orderDTO);
            //2.先注入,再组合,最后校验
            switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
            //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
            switchComponentAttrOnOrder(templateVO, orderDTO);
            //4.校验规则
            checkVerifyOnOrder(templateVO, orderDTO);
            //5.判断关键属性
            checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
            //6.校验枚举的内容是否正确
            checkEnumOnOrder(templateVO, orderDTO);
            //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
            switchDateAttrOnOrder(templateVO, orderDTO);
            //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
            copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
            //企业码和集团码的不修改
            cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
            cbo.setName(orderDTO.getName());
//            try {
//                cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
//                cbo.setAttributeValue("id",code);
            cbo.setId(code);
            cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
//                cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
//                cbo.setAttributeValue("name", orderDTO.getName());
            cbo.setName(orderDTO.getName());
//            } catch (VCIError e) {
//                e.printStackTrace();
//            }
//            batchCBO.getUpdateCbos().add(cbo);
//            updateList.add(cbo);
//        });
            updateList.add(cbo);
            batchSaveSelectChar(firstTemplateVO, cboList);
        });
//        boService.persistenceBatch(batchCBO);
//        batchSaveSelectChar(firstTemplateVO, cboList);
        updateBatchByBaseModel(topClassifyFullInfo.getTopClassifyVO().getBtmtypeid(),updateList);
        return R.success("操作成功!");
    }
@@ -2458,64 +2429,76 @@
     */
    @Override
    public void upSaveCode(CodeOrderDTO orderDTO) {
        VciBaseUtil.alertNotNull(orderDTO, "编码数据所在业务类名称", orderDTO.getBtmname());
        String btmName=orderDTO.getBtmname();
        //找业务类型,然后使用主键去获取数据库里的数据
        List<BaseModel> cbos = selectByTypeAndOid(btmName, orderDTO.getCopyFromVersion());
        if (CollectionUtils.isEmpty(cbos)) {
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
        BaseModel oldCbo = cbos.get(0);
        if (!CodeDefaultLC.RELEASED.getValue().equalsIgnoreCase(oldCbo.getLcStatus())) {
            throw new VciBaseException("数据不是{0}的状态,不允许数据更改", new String[]{CodeDefaultLC.RELEASED.getText()});
        }
        //根据数据获取分类oid
        String codeClassifyOid=oldCbo.getData().get(CODE_CLASSIFY_OID_FIELD.toUpperCase());
        orderDTO.setCodeClassifyOid(codeClassifyOid);
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        CodeClassifyTemplateVO templateVO= this.getUsedTemplateByClassifyOid(orderDTO.getCodeClassifyOid());
        orderDTO.setTemplateOid(templateVO.getOid());
        VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性的内容为空", orderDTO.getCopyFromVersion(), "原始数据的主键",
            orderDTO.getCodeClassifyOid(), "主题库分类的主键");
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid());
        //找业务类型,然后使用主键去获取数据库里的数据
//        List<ClientBusinessObject> cbos = boService.queryCBO(classifyFullInfo.getTopClassifyVO().getBtmtypeid(), WebUtil.getOidQuery(orderDTO.getCopyFromVersion()));
//        if (CollectionUtils.isEmpty(cbos)) {
//            throw new VciBaseException(DATA_OID_NOT_EXIST);
//        }
//        ClientBusinessObject oldCbo = cbos.get(0);
//        if (!CodeDefaultLC.RELEASED.getValue().equalsIgnoreCase(oldCbo.getLcStatus())) {
//            throw new VciBaseException("数据不是{0}的状态,不允许数据更改", new String[]{CodeDefaultLC.RELEASED.getText()});
//        }
//        //需要升版
        //需要升版
//        ClientBusinessObjectOperation cboOperation = new ClientBusinessObjectOperation();
//        ClientBusinessObject cbo = null;
        BaseModel cbo = null;
//        try {
//            //cbo = cboOperation.createBusinessObjectVersion(oldCbo,VciBaseUtil.getCurrentUserId());
//            cbo = cboOperation.reviseBusinessObject(oldCbo, "");
        cbo = reviseBusinessObject(oldCbo);
//        } catch (VCIError e) {
//            throw new VciBaseException("初始化相关的内容出现了错误", new String[0], e);
//        }
//        //1. åˆ¤æ–­å¿…输项
//        CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
//        checkRequiredAttrOnOrder(templateVO, orderDTO);
//        //2.先注入,再组合,最后校验
//        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
//        //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
//        switchComponentAttrOnOrder(templateVO, orderDTO);
//        //4.校验规则
//        checkVerifyOnOrder(templateVO, orderDTO);
//        //5.判断关键属性
//        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
//        //6.校验枚举的内容是否正确
//        checkEnumOnOrder(templateVO, orderDTO);
//        //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
//        switchDateAttrOnOrder(templateVO, orderDTO);
//        //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
//        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
//        //企业码和集团码的不修改
//        cbo.setDescription(orderDTO.getDescription());
//        cbo.setName(orderDTO.getName());
        //1. åˆ¤æ–­å¿…输项
        //CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid());
        checkRequiredAttrOnOrder(templateVO, orderDTO);
        //2.先注入,再组合,最后校验
        switchClassifyLevelOnOrder(templateVO, classifyFullInfo, orderDTO);
        //3.处理组合规则。组合规则不能使用编码的属性,因为编码的生成可能是需要属性的
        switchComponentAttrOnOrder(templateVO, orderDTO);
        //4.校验规则
        checkVerifyOnOrder(templateVO, orderDTO);
        //5.判断关键属性
        checkKeyAttrOnOrder(classifyFullInfo, templateVO, orderDTO);
        //6.校验枚举的内容是否正确
        checkEnumOnOrder(templateVO, orderDTO);
        //7.处理时间格式,在数据库里面不论是字符串还是日期格式,都使用相同的格式存储
        switchDateAttrOnOrder(templateVO, orderDTO);
        //默认的内容不能变,所以只需要拷贝自定义的相关属性即可
        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, true);
        //企业码和集团码的不修改
        cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
        cbo.setName(orderDTO.getName());
//        try {
//            cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription());
//            cbo.setAttributeValue("name", orderDTO.getName());
        cbo.setDescription(StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
//        cbo.setAttributeValueWithNoCheck("description", StringUtils.isBlank(orderDTO.getDescription())?"":orderDTO.getDescription());
        cbo.setName(orderDTO.getName());
//        } catch (VCIError e) {
//            e.printStackTrace();
//        }
//        //数据的时候,编码是不变的
//        cbo.setCreateTime(DateUtils.convert2String(new Date(Long.parseLong(cbo.getCreateTime())), "yyyy-MM-dd HH:mm:ss"));
//        cbo.setLastModifyTime(DateUtils.convert2String(new Date(Long.parseLong(cbo.getLastModifyTime())), "yyyy-MM-dd HH:mm:ss"));
        //数据的时候,编码是不变的
        cbo.setCreateTime(cbo.getCreateTime());
        cbo.setLastModifyTime(cbo.getLastModifyTime());
//        List<ClientBusinessObject> cboList = new ArrayList<>();
//        cboList.add(cbo);
//        try {
        try {
//            cboOperation.saveRevisionBuinessObject(cbo);
//        } catch (VCIError vciError) {
//            throw new VciBaseException("数据更改保存出错了", new String[0], vciError);
//        }
//        batchSaveSelectChar(templateVO, cboList);
            insertBatchByType(cbo.getBtmname(), Collections.singletonList(cbo));
        } catch (Exception vciError) {
            throw new VciBaseException("数据更改保存出错了", new String[0], vciError);
        }
        batchSaveSelectChar(templateVO, Collections.singletonList(cbo));
    }
    /**
@@ -3438,4 +3421,45 @@
        return "pl_code_"+refertype.trim().toLowerCase();
    }
    public BaseModel reviseBusinessObject(BaseModel fromBo) {
        BaseModel toBo = new BaseModel();
//        Map<String,String> data = new HashMap<>();
//        toBo.getData().put(data);
        toBo.setOid(VciBaseUtil.getPk());
        toBo.setRevisionOid(VciBaseUtil.getPk());
        toBo.setNameOid(fromBo.getNameOid());
        toBo.setBtmname(fromBo.getBtmname());
        toBo.setLastR(String.valueOf(1));
        toBo.setFirstR(String.valueOf(0));
        toBo.setFirstV(String.valueOf(1));
        toBo.setLastV(String.valueOf(1));
        toBo.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setCreateTime(new Date());
        toBo.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setLastModifyTime(new Date());
        toBo.setRevisionRule(fromBo.getRevisionRule());
        toBo.setVersionRule(fromBo.getVersionRule());
//        RevisionValueObject rvObj = this.getNextRevision(fromBo.getBtmName(), fromBo.getNameoid(), item.revRuleName, item.revInput, revisionVal);
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(fromBo.getBtmname()));
        Map<String, Object> nextRevision = commonsMapper.getNextRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid());
        toBo.setRevisionSeq(Integer.parseInt(nextRevision.get("REVISIONSEQ").toString()));
        toBo.setRevisionValue(nextRevision.get("REVISIONVAL").toString());
//        VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
        toBo.setVersionSeq(Integer.valueOf(nextRevision.get("VERSIONSEQ").toString()));
        toBo.setVersionValue(nextRevision.get("VERSIONVAL").toString());
        toBo.setLctid(fromBo.getLctid());
        toBo.setLcStatus("Editing");
        toBo.setId(fromBo.getId());
        toBo.setName(fromBo.getName());
        toBo.setDescription(fromBo.getDescription());
        toBo.setOwner(String.valueOf(AuthUtil.getUser().getUserId()));
//        toBo.setCheckinBy(String.valueOf(AuthUtil.getUser().getUserId()));
        toBo.setCopyFromVersion(fromBo.getOid());
        toBo.getData().putAll(fromBo.getData());
        toBo.getData().put("CHECKINBY",String.valueOf(AuthUtil.getUser().getUserId()));
//        this.initRevisionTypeAttributeValue(fromBo, toBo);
        return toBo;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -997,7 +997,7 @@
            if (isExport||newErrorMap.size() > 0) {
                createRedisDatas(uuid + "-ok", templateVO, rowIndexCboMap, dataSet, fieldIndexMap, newErrorMap, true);
            } else {
                List<String> dataCBOIdList=new ArrayList<>();
                List<BaseModel> dataCBOIdList=new ArrayList<>();
                //SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
                List<ClientBusinessObject> finalNeedSaveCboList = needSaveCboList;
                CodeClassifyTemplateVO finalTemplateVO = templateVO;
@@ -1011,7 +1011,7 @@
                        BeanUtil.convert(clientBusinessObject,baseModel);
                        baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
                        dataCBOList.add(baseModel);
                        dataCBOIdList.add(baseModel.getOid());
                        dataCBOIdList.add(baseModel);
                    });
                    if (!CollectionUtils.isEmpty(thisCbos)) {
@@ -1338,7 +1338,7 @@
                try {
                    codeList = productCodeService.productCodeAndSaveData(classifyFullInfo,templateVO,ruleVO, orderDTO.getSecDTOList(),dataCBOList);
                    //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                    engineService.batchSaveSelectChar(templateVO, dataCBOIdList);
                    engineService.batchSaveSelectChar(templateVO, dataCBOList);
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("批了申请时失败");
@@ -1427,7 +1427,7 @@
    @Override
    public R batchImportData(List<CodeImprotSaveDatVO> codeImprotSaveDatVOList, String classifyAttr, boolean isImprot) {
        List<String> allNeedSaveCboList=new ArrayList<>();
        List<BaseModel> dataCBOList=new ArrayList<>();
        codeImprotSaveDatVOList.stream().forEach(codeImprotSaveDatVO -> {
            List<SheetRowData> rowDataList = new ArrayList<>();
            List<ClientBusinessObject>cboList=new ArrayList<>();
@@ -1517,13 +1517,13 @@
            log.info("分类:"+classifyFullInfo.getCurrentClassifyVO().getName()+"数据:"+needSaveCboList.size());
            if (!CollectionUtils.isEmpty(needSaveCboList)) {
                List<BaseModel> dataCBOList=new ArrayList<>();
//                List<BaseModel> dataCBOList=new ArrayList<>();
                needSaveCboList.stream().forEach(clientBusinessObject -> {
                    BaseModel baseModel=new BaseModel();
                    BeanUtil.convert(clientBusinessObject,baseModel);
                    baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
                    dataCBOList.add(baseModel);
                    allNeedSaveCboList.add(baseModel.getOid());
//                    allNeedSaveCboList.add(baseModel);
                });
                try {
                //9.我们处理业务数据
@@ -1537,7 +1537,7 @@
                }
            }
            //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
            engineService.batchSaveSelectChar(codeClassifyTemplateVO, allNeedSaveCboList);
            engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
        });
        return  R.success(isImprot?"批量历史导入成功":"批量申请成功");
    }
@@ -1802,7 +1802,7 @@
            try {
                productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
                //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
                engineService.batchSaveSelectChar(templateVO, allNeedSaveCboList);
                engineService.batchSaveSelectChar(templateVO, dataCBOList);
                // if(!isProcess){
                needSaveCboList.stream().forEach(needSaveCbo->{
                    XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CommonsMapper.xml
@@ -63,4 +63,13 @@
        END;
    </update >
    <select id="getNextRevision" resultType="map" >
        select max(revisionSeq) + 1 revisionSeq,
               max(RevisionValue) + 1 revisionVal,
               max(VersionSeq) + 1 VersionSeq,
               max(VersionValue) + 1 VersionVal
        from ${tableName}
        where nameoid = #{nameoid}
    </select>
</mapper>