ludc
2023-12-05 25ef4e85586c27433c865b69c67ccf5a380b93a7
Merge remote-tracking branch 'origin/master'
已修改12个文件
已添加1个文件
411 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/GetItem.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/statistic/chart.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/BatchImport/index.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/index.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/statistic/statisticPage.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/GetItem.js
@@ -126,3 +126,13 @@
    }
  })
}
//集团码模板下载
export const exportGroupCodeExcel = (params) => {
  return request({
    url: '/api/ubcs-code/mdmEngineController/exportGroupCodeExcel',
    method: 'get',
    params,
    responseType: 'blob'
  })
}
Source/UBCS-WEB/src/api/statistic/chart.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
import request from '@/router/axios';
//统计分析数据
export const getStatisticAnalysis = (params) => {
  return request({
    url: '/api/ubcs-code/mdmEngineController/getStatisticAnalysis',
    method: 'get',
    params
  })
}
Source/UBCS-WEB/src/components/BatchImport/index.vue
@@ -13,7 +13,7 @@
      </li>
    </ul>
    <div
      v-show="currentTypeObj[type]['upParams'] === 'classifyAttr' && this.type !== 'bulkEdit'"
      v-show="currentTypeObj[type]['upParams'] === 'classifyAttr' && this.type !== 'bulkEdit'&& this.type !== 'groupCode'"
      class="radio_box"
    >
      <span>分类的路径使用的属性:</span>
@@ -61,21 +61,23 @@
      >
    </el-upload>
    <template #footer>
      <el-button
        v-if="type !== 'bulkEdit'"
        :loading="downloadLoading"
        size="small"
        type="primary"
        @click="downloadTemplateFun"
      >下载导入模板
      </el-button>
      <el-button v-if="type === 'bulkEdit'"
                 :loading="downloadLoading"
                 size="small"
                 type="primary"
                 @click="downloadTemplateFun"
      >下载编辑模板
      </el-button>
      <div v-if="type !== 'groupCode'">
        <el-button
          v-if="type !== 'bulkEdit' "
          :loading="downloadLoading"
          size="small"
          type="primary"
          @click="downloadTemplateFun"
        >下载导入模板
        </el-button>
        <el-button v-if="type === 'bulkEdit'"
                   :loading="downloadLoading"
                   size="small"
                   type="primary"
                   @click="downloadTemplateFun"
        >下载编辑模板
        </el-button>
      </div>
      <el-button size="small" @click="dialogVisible = false">关闭</el-button>
    </template>
    <ShowImportData
@@ -248,6 +250,15 @@
          downloadTemplateFun: downloadBatchApplyCodeTemplate,
          upParams: "classifyAttr",
        },
        groupCode: {
          title: "集团码导入",
          tipList: [
            "1.标题带五角星的表示关键属性,带星号表示必输项",
            "2.每次仅能最多导入5000条数据(可通过nacos进行配置,推荐5000/次导入),如果出错会返回错误的数据和原因,但是正确数据可以继续保存",
            "3.Excel第一行和第二行依次为企业编码和集团编码(必填)"
          ],
          action: "/api/ubcs-code/mdmEngineController/importGroupCode"
        }
      },
      secDTOList: [],
    };
@@ -291,16 +302,9 @@
        return;
      }
      if (this.type === 'bulkEdit') {
        this.tableHeadFindData.map(item => item.prop)
          .forEach((prop, index) => {
            this.exportArrTwo[`attrIdIndexMap[${index}]`] = prop;
          });
        downloadExcelBatchEdit({
          codeClassifyOid: this.codeClassifyOid,
          'conditionMap[oid]': this.ids, ...this.exportArrTwo,
          limit: -1
        }).then(res => {
          // console.log('res',res)
          if (res) {
            func.downloadFileByBlobHandler(res);
            this.$message.success('下载成功,请查看!')
Source/UBCS-WEB/src/components/FormTemplate/FormTemplate.vue
@@ -103,9 +103,14 @@
      type: String,
      default: "",
    },
    selectRow:{
      type:Array,
      default:[]
    }
  },
  data() {
    return {
      selectValue:"",
      //年代号
      dataYearCode: {
        type: "",
@@ -206,6 +211,15 @@
      handler(newV) {
        this.$emit("dataYearCode", newV)
      }
    },
    selectRow:{
      handler(newval){
        console.log(newval);
        let ids = newval.map(item => item.id);
        this.selectValue= ids.join(",");
      },
      deep:true,
      immediate:true
    }
  },
  methods: {
@@ -320,7 +334,9 @@
          value:formItem.defaultValue || (formItem.dicData && formItem.dicData.length > 0 && formItem.secType == "codefixedsec" ? formItem.dicData[0].id : null) ||
            (formItem.secType == "codedatesec" ? formItem.codeDateValue : null) || (TreeValue && formItem.secType == "codelevelsec" ? TreeValue : null) ||
            (formItem.secType == "codeattrsec" ? this.add : null) || (this.status === "apply" && formItem.field === "codeStandardEditType" ? "1" : null) ||
            (this.status === "amend" && formItem.field === "codeStandardEditType" ? "2" : null),
            (this.status === "amend" && formItem.field === "codeStandardEditType" ? "2" : null) ||
            //父组件如果是参照数据会将selectRow置空,selectRow不为空就说明不是参照要回填源标准号数据
            (this.status === "amend" && this.selectRow && (formItem.field === "oldcode" ? this.selectValue : null)),
          placeholder: formItem.inputTip,
          comboxKey: formItem.comboxKey,
          tip: formItem.tooltips,
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -14,6 +14,7 @@
      v-if="dialogVisible" key="masterForm"
      ref="FormTemplate"
      v-bind="$attrs"
      :selectRow="selectRow"
      :TreeValue="TreeValue"
      :eventList="eventList"
      :rowOid="rowOid"
@@ -139,6 +140,10 @@
      type: Object,
      default: () => ({}),
    },
    selectRow:{
      type:Array,
      default:[]
    }
  },
  data() {
    return {
@@ -242,15 +247,11 @@
    },
  },
  watch: {
    codeApplyForm: {
      handler(newval, oldval) {
        // console.log('newval',newval)
      }
    }
  },
  methods: {
    openDialog() {
      //新增和修改共同调用
      //新增和修改共同调用(有改动 ä¸éœ€è¦åœ¨ä½¿ç”¨edit,方法没什么影响)
      this.getFormTemplate();
      if (this.type === "add" || (this.type !== "add" && this.status === "amend")) {
        this.getCodeRule();
@@ -473,7 +474,7 @@
            secValue: this.codeApplyForm[item.oid],
          };
        });
        //标准特定
        //标准特定字段映射
        const mappings = {
          codeStandardEditType: 'operationType',
          reviseSeries: 'series',
Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -99,9 +99,9 @@
          </FormTemplateDialog>
          <!--          ä¿®è®¢-->
          <FormTemplateDialog :codeClassifyOid="this.codeClassifyOid" :codeRuleOid="this.codeRuleOid"
                              :disabledProp="disabledProp" :rowOid="rowOid" :templateOid="templateOid" :title="'修改编码信息'"
                              :visible.sync="amendvisible" status="amend"
                              type="edit" @submit="amendSumbit"></FormTemplateDialog>
                              :disabledProp="disabledProp" :templateOid="templateOid" :title="'数据修订'"
                              :visible.sync="amendvisible" status="amend" :selectRow="selectRow"
                              type="add" @submit="amendSumbit"></FormTemplateDialog>
          <!--          æ–°å¢ž-->
          <FormTemplateDialog :TreeValue="TreeValue" :codeClassifyOid="this.codeClassifyOid"
                              :codeRuleOid="this.codeRuleOid" :disabledProp="disabledProp" :templateOid="templateOid"
@@ -113,7 +113,7 @@
          <FormTemplateDialog :codeClassifyOid="this.codeClassifyOid" :codeRuleOid="this.codeRuleOid"
                              :disabledProp="disabledProp" :templateOid="templateOid" :title="'修改编码信息'"
                              :visible.sync="editvisible"
                              rowOid="rowOid"
                              :rowOid="rowOid"
                              type="edit" @submit="EditSumbit"></FormTemplateDialog>
          <!--          æ‰¹é‡ç¼–辑-->
          <!--          <MasterEditBulk :visible.sync="bulkeditvisible" ></MasterEditBulk>-->
@@ -187,7 +187,8 @@
  upSaveCode,
  applyGroupCode,
  receiveEditApply,
  applySaveCode
  applySaveCode,
  exportGroupCodeExcel
} from "@/api/GetItem";
import {processTS, changeStatus} from "@/api/template/setPersonnel"
import {listCodeAttributeByClassId} from "@/api/integration/integration.js";
@@ -485,8 +486,7 @@
      this.LinkObject = row;
      this.LinkVisible = true;
      this.LinkList = Object.keys(row).map(property => property)
      // console.log(result);
      // console.log(this.LinkObject)
    },
    //状态搜索
    cellSelectHandler(row) {
@@ -554,7 +554,34 @@
        if (uniqueFlag === 'CODEAMEND') return this.codeAMENDHandler()
        //批量编辑
        if (uniqueFlag === 'bulkEdit') return this.bulkEditHandler("bulkEdit")
        //集团码导出
        if (uniqueFlag === 'excelGroupCode') return this.excelGroupCode()
        //集团码导入
        if (uniqueFlag === 'importGroupCode') return this.importGroupCode("groupCode")
      });
    },
    importGroupCode(type){
      this.batchImportData.visible = true
      this.batchImportData.type = type
      this.batchImportData.codeClassifyOid = this.codeClassifyOid
    },
    //集团码导出
    excelGroupCode(){
      debugger
      this.isLoading = true;
      exportGroupCodeExcel({
        codeClassifyOid: this.codeClassifyOid,
      }).then(res => {
        console.log(res.data)
        if (res) {
          func.downloadFileByBlobHandler(res);
          this.$message.success('下载成功,请查看!');
          this.isLoading = false;
        }
      }).catch(error=>{
        this.$message.error(error);
        this.isLoading = false;
      })
    },
    //标准申请
    codeApplyHandler() {
@@ -589,22 +616,37 @@
    //标准修订
    codeAMENDHandler() {
      let foundItem = false;
      this.tableHeadFindData.forEach(item => {
        if (item.field === "oldcode" && Object.keys(item.referConfig).length >= 1) {
          foundItem = true;
        }
      });
      if (foundItem) {
        this.amendvisible = true;
        this.rowOid = this.selectRow[0].oid;
        if(this.selectRow.length >= 1){
          this.$confirm('已有参照是否取消勾选继续执行?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            this.selectRow = [];
            //取消勾选状态
            this.$refs.dataTable.clearSelection();
            this.amendvisible = true;
          }).catch(() => {
            this.$message({
              type: 'info',
              message: '已取消当前操作'
            });
          });
        }else {
          this.amendvisible = true;
        }
      } else {
        if (this.selectRow.length !== 1) {
          this.$message.warning("请选择一条数据");
        if (this.selectRow.length <= 0) {
          this.$message.warning("请至少选择一条数据");
        } else {
          this.amendvisible = true;
          this.rowOid = this.selectRow[0].oid;
        }
      }
    },
@@ -613,10 +655,6 @@
      // console.log(this.nodeClickList)
      if (this.nodeClickList.children.length >= 1) {
        this.$message.warning('当前选择的分类不是叶子节点,不允许批量编辑!')
        return;
      }
      if (this.selectRow.length <= 0) {
        this.$message.warning('请选择至少一条数据!')
        return;
      }
      const Editing = this.selectRow.every(item => item.lcstatus === 'Editing');
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue
@@ -376,7 +376,7 @@
              </el-option>
            </el-select>
            <el-switch
              v-if="item.edit === 'switch'" v-model="row[item.prop]" :disabled="!editOpenFlag" active-value="true" v-show="!AddCellFlag"
              v-if="item.edit === 'switch'" v-model="row[item.prop]" :disabled="!editOpenFlag" active-value="true"
              inactive-value="false">
            </el-switch>
            <span v-else>{{ row[item.prop] }}</span>
Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
@@ -40,12 +40,12 @@
            </div>
          </div>
          <!--          å·¦ä¾§æ ‘-->
          <div style="height: calc(100vh - 230px);overflow: auto">
          <div style="height: calc(100vh - 230px);overflow: auto;">
            <avue-tree ref="tree" v-model="CloneTreeAvueform" v-loading="loading" :data="CloneTreedata"
                       :defaultExpandAll="false"
                       :option="Treeoption"
                       class="classifyTree"
                       style="height: calc(100vh - 280px)"
                       style="height: calc(100vh - 280px);"
                       @node-click="nodeClick"
            >
            </avue-tree>
Source/UBCS-WEB/src/views/statistic/statisticPage.vue
@@ -65,7 +65,7 @@
import pieChart from "../../components/StatisticsComponent/pieChart"
import ColumnarChart from "../../components/StatisticsComponent/ColumnarChart"
import mixCart from "../../components/StatisticsComponent/mixCart"
import {getStatisticAnalysis} from "@/api/statistic/chart"
export default {
  components: {
    lineChart,
@@ -179,6 +179,9 @@
    //新增
    addHandler() {
      this.addVisible = true;
      getStatisticAnalysis({btmNames:'part'}  ).then(res=>{
        console.log(res)
      })
    },
    //取消
    escHandler() {
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -857,4 +857,15 @@
            ControllerUtil.writeDataToResponse(response,msg.getBytes(StandardCharsets.UTF_8),null);
        }
    }
    /**
     * èŽ·å–ç»Ÿè®¡åˆ†æžæ•°æ®
     * @param btmNames ä¸šåŠ¡ç±»åž‹
     * @return
     */
    @GetMapping("/getStatisticAnalysis")
    @VciBusinessLog(operateName = "获取统计分析数据")
    public R getStatisticAnalysis(String btmNames) {
        return engineService.getStatisticAnalysis(btmNames);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/MdmEngineService.java
@@ -513,4 +513,10 @@
     * @return æ‰§è¡Œç»“æžœ
     */
    String addSaveBZCodeNotauthUser(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception;
    /**
     * èŽ·å–ç»Ÿè®¡åˆ†æžæ•°æ®
     * @param btmNames ä¸šåŠ¡ç±»åž‹
     * @return æ•°æ®é›†
     */
    R getStatisticAnalysis(String btmNames);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -60,6 +60,7 @@
import com.vci.ubcs.system.feign.ISysClient;
import com.vci.ubcs.system.user.entity.User;
import com.vci.ubcs.system.user.feign.IUserClient;
import io.swagger.models.auth.In;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import oracle.sql.TIMESTAMP;
import org.slf4j.Logger;
@@ -1140,6 +1141,75 @@
    @Override
    public String addSaveBZCodeNotauthUser(CodeBZApplyDTO codeBZApplyDTO, boolean authUser) throws Exception {
        return    addSaveBZCode(codeBZApplyDTO,authUser);
    }
    /**
     * èŽ·å–ç»Ÿè®¡åˆ†æžæ•°æ®
     * @param btmNames ä¸šåŠ¡ç±»åž‹
     * @return æ•°æ®é›†
     */
    @Override
    public R getStatisticAnalysis(String btmNames) {
        //查询业务类型对应的数据库表
        R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Arrays.asList(btmNames.split(",")));
        if (!listR.isSuccess() || listR.getData().size() == 0) {
            throw new ServiceException("传入业务类型未查询到相应表单,请检查!");
        }
        List tableData = new ArrayList();
        for (BtmTypeVO datum : listR.getData()) {
            String sql = "select count(*) countNum, to_char(CREATETIME, 'mm') countDate\n" +
                            "from "+ datum.getTableName() +"\n" +
                            "where CREATETIME >= to_date(EXTRACT(YEAR FROM SYSDATE) || '-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND LASTV = '1'\n" +
                            "group by to_char(CREATETIME, 'mm')\n" +
                            "order by to_char(CREATETIME, 'mm')";
            //查询出需要处理的数据
            List<Map> maps = commonsMapper.selectBySql(sql);
            if(maps.size() == 0){
                throw new ServiceException("传入类型["+ datum.getName() + ":" +
                    datum.getId() +"]未查到相关统计数据,请确认!!!!");
            }
            //当年每月月份之前之和
            List<Integer> monthCount = new ArrayList<>(12);
            //当年每月的月份数据
            List<Integer> month = new ArrayList<>();
            //获取当前月的数字
            Calendar instance = Calendar.getInstance();
            int nowmonth = instance.get(Calendar.MONTH) + 1;
            //从1到12月进行处理
            for (Integer i = 1; i <= 12; i++) {
                //当前月后所有数据设置为0
                if(i>nowmonth){
                    monthCount.add(0);
                    month.add(0);
                }
                //当前月份之前之和
                Integer count = 0;
                //当前月份数据
                Integer sameMonth = 0;
                //对数据库查的数据进行处理,对当前月份进行累加
                for (Map map : maps) {
                    Integer mounDate = Integer.parseInt(String.valueOf(map.get("COUNTDATE")));
                    if(mounDate <= i){
                        count += Integer.parseInt(String.valueOf(map.get("COUNTNUM")));
                    }
                    if (mounDate == i) {
                        sameMonth = Integer.parseInt(String.valueOf(map.get("COUNTNUM")));
                    }
                }
                monthCount.add(count);
                month.add(sameMonth);
            }
            //对数据进行整合
            HashMap<String,Object> menuData = new HashMap<>();
            menuData.put("menuName",datum.getName());
            menuData.put("codeType",null);
            ArrayList monthData = new ArrayList();
            monthData.add(monthCount);
            monthData.add(month);
            menuData.put("menuData",monthData);
            tableData.add(menuData);
        }
        return R.data(tableData);
    }
    /**
@@ -2434,7 +2504,15 @@
                } else {
                    return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE;
                }
            } else {
            } else if(key.endsWith("_in")){
                String field = UBCSSqlKeyword.getColumn(key, "_in");
                if (referFieldMap.containsKey(field)) {
                    return VciBaseUtil.toInSql(referFieldMap.get(field),value);  //referFieldMap.get(field) + SPACE + "= '" + value + "'" + SPACE;
                } else {
                    return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE;
                }
            }else {
//                if (referFieldMap.containsKey(key)) {
//                    //说明是参照的,我们参照的查询都认为是字符串,如果是时间格式的查询肯定有问题,
//                    String selectKey = referFieldMap.get(key);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -1290,8 +1290,11 @@
        ReadExcelOption reo = new ReadExcelOption();
        reo.setReadAllSheet(true);
        List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
        if (sheetDataSetList.size() > LIMIT + 1) {
            throw new VciBaseException("为了保证系统的稳定性,请一次不要导入超过1万条的数据");
        if (sheetDataSetList.get(0).getRowData().size() > LIMIT + 1) {
            throw new ServiceException("为了保证系统的稳定性,请一次不要导入超过1万条的数据");
        }
        if (sheetDataSetList.get(0).getRowData().size() == 0) {
            throw new ServiceException("未读取到excle相关数据,请确认!!!");
        }
        boolean isExport=false;
        Map<String,List<WriteExcelData>> shetNameMap=new HashMap<>();
@@ -1373,13 +1376,9 @@
                    codeAllCodeService.updateBatchById(codeAllCodes);
                } catch (Throwable e) {
                    log.error("批量产生编码的时候出错了", e);
//                thisCbos.stream().forEach(cbo -> {
//                    String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                    errorMap.put(sheetRowData.getRowIndex(), ";系统错误,存储数据的时候出错了:"+e.getMessage());
//                });
                }
            }
            if (errorMap.size() > 0) {
                isExport = true;
            }
@@ -4991,7 +4990,7 @@
        }
        fieldList=execGroupCodePortDataDTO.getFieldList();
        List<Map<String,String>>dataList=new ArrayList<>();
        getDatas(classifyFullInfo,templateVO,fieldList,dataList);
        getDatas(classifyFullInfo,templateVO,fieldList,dataList,null);
        execGroupCodePortDataDTO.setDataList(dataList);//放数据
        execGroupCodePortDataDTO.setSheetName(codeClassifyVO.getName()+"集团码导入模板");
        String tempFolder = LocalFileUtil.getDefaultTempFolder();
@@ -5082,6 +5081,86 @@
    }
    /***
     * å¯¼å…¥é›†å›¢ç 
     * @param codeClassifyOid
     * @param file
     * @return
     */
    public String improtGroupCode(String codeClassifyOid, File file) throws ServiceException {
        VciBaseUtil.alertNotNull(codeClassifyOid,"分类的主键");
        ReadExcelOption reo = new ReadExcelOption();
        reo.setReadAllSheet(true);
        List<SheetDataSet> sheetDataSetList = ExcelUtil.readDataObjectFromExcel(file,null,reo);
        if (sheetDataSetList.size() > LIMIT + 1) {
            throw new ServiceException("为了保证系统的稳定性,请一次不要导入超过1万条的数据");
        }
        CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid);
        CodeClassifyTemplateVO templateVO = new CodeClassifyTemplateVO();
        //除去默认的属性.还有只有表单显示的字段才导入
        List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s ->!DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
        ).collect(Collectors.toList());
        ExecGroupCodePortDataDTO execGroupCodePortDataDTO=new ExecGroupCodePortDataDTO();
        createExportGroupCodeMapConfig(templateVO,execGroupCodePortDataDTO);//组织数据
        List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS=execGroupCodePortDataDTO.getCodeAttrMapGroupAttrDTOS();
        if(!CollectionUtils.isEmpty(codeAttrMapGroupAttrDTOS)){
            throw new ServiceException("集团属性映射未配置");
        }
        Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t));
        SheetDataSet dataSet= sheetDataSetList.get(0);
        List<String> titleRowData = dataSet.getColName();
        Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap = new HashMap<>();
        getGroupCodeFieldIndexMap(titleRowData,codeAttrMapGroupAttrDTOS,fieldIndexMap);
        //需要判断是否所有的属性都在模板上了
        List<CodeClassifyTemplateAttrVO> unExistAttrVOs = attrVOS.stream().filter(s -> !fieldIndexMap.containsValue(s.getId().toLowerCase(Locale.ROOT))
            && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getComponentRule()) && com.alibaba.cloud.commons.lang.StringUtils.isBlank(s.getClassifyInvokeAttr())//组合规则和分类注入确实没给用户导出去
        ).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(unExistAttrVOs)){
            String message=unExistAttrVOs.stream().map(CodeClassifyTemplateAttrVO::getName).collect(Collectors.joining(SERIAL_UNIT_SPACE));
            throw new VciBaseException("【" + message + "】这些属性在excel中没有找到");
        }
        List<ClientBusinessObject> cboList = new ArrayList<>();
        List<SheetRowData> rowDataList = dataSet.getRowData();
        getExportGroupCodeDatas(fieldIndexMap,rowDataList,cboList);//构建数据对象
        List<String> codeList= cboList.stream().map(ClientBusinessObject::getId).collect(Collectors.toList());
        List<Map<String,String>>dataList=new ArrayList<>();
        getDatas(classifyFullInfo,templateVO,execGroupCodePortDataDTO.getFieldList(),dataList,codeList);
        //查询系统中存在
        if(!CollectionUtils.isEmpty(dataList)){
        }
        return "";
    }
    /**
     *
     * @param fieldIndexMap
     * @param rowDataList
     * @param cboList
     */
    private void getExportGroupCodeDatas(Map<Integer,String> fieldIndexMap,List<SheetRowData> rowDataList,List<ClientBusinessObject>cboList){
        rowDataList.stream().forEach(sheetRowData -> {
            sheetRowData.getData().forEach((index,value)->{
                ClientBusinessObject cbo=new ClientBusinessObject();
                String field = fieldIndexMap.get(index);
                if (StringUtils.isBlank(field)) {
                    throw new VciBaseException("第" + (index + 1) + "列的标题在系统中不存在");
                }
                try {
                    cbo.setAttributeValueWithNoCheck(field, value);
                    if (WebUtil.isDefaultField(field)) {
                        WebUtil.setValueToField(field, cbo, value);
                    }
                } catch (VciBaseException e) {
                    log.error("设置属性的值错误", e);
                }
                cboList.add(cbo);
            });
        });
    }
    /***
     * é›†å›¢å¯¼å‡ºæ¨¡æ¿å±žæ€§æ˜ å°„信息获取
     * @param templateVO
     * @param execGroupCodePortDataDTO
@@ -5117,23 +5196,51 @@
    }
    /***
     * é›†å›¢ç å±žæ€§è½¬æ¢
     * @param titleRowData
     * @param codeAttrMapGroupAttrDTOS
     * @param fieldIndexMap
     */
    private void getGroupCodeFieldIndexMap(List<String> titleRowData,List<CodeAndGroupCodeAttrMappingDTO> codeAttrMapGroupAttrDTOS,Map<Integer/**列号**/,String/**字段的名称**/> fieldIndexMap){
        Map<String, CodeAndGroupCodeAttrMappingDTO> codeSystemObjectMap = codeAttrMapGroupAttrDTOS.stream().filter(codeAttrMappingDTO -> codeAttrMappingDTO != null && StringUtils.isNotBlank(codeAttrMappingDTO.getSourceAttrName())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getSourceAttrName(), t -> t));
        for (int i = 0; i < titleRowData.size(); i++) {
            String title = titleRowData.get(i);
            CodeAndGroupCodeAttrMappingDTO codeAndGroupCodeAttrMappingDTO =codeSystemObjectMap.get(title.replace(KEY_ATTR_CHAR,"").replace(REQUIRED_CHAR,""));
            String id=codeAndGroupCodeAttrMappingDTO.getTargetAttrKey();
            if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "集团码".equalsIgnoreCase(title)){
                id = CODE_GROUP_FIELD;
            }
            if(com.alibaba.cloud.commons.lang.StringUtils.isBlank(id) && "企业编码".equalsIgnoreCase(title)){
                id = CODE_FIELD;
            }
            if(com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(id)){
                fieldIndexMap.put(i,id);
            }
        }
    }
    /***
     * æŸ¥è¯¢æœªæœ‰é›†å›¢ç çš„æ•°æ®
     * @param classifyFullInfo
     * @param templateVO
     * @param selectFieldList
     * @param dataList
     */
    private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList){
    private void getDatas(CodeClassifyFullInfoBO classifyFullInfo,CodeClassifyTemplateVO templateVO,LinkedList<String> selectFieldList,List<Map<String,String>>dataList,List<String> codeList ){
        //先查询数据
        String btmTypeId = classifyFullInfo.getTopClassifyVO().getBtmTypeId();
        String codeClassifyOid=classifyFullInfo.getCurrentClassifyVO().getOid();
        Map<String, String> conditionMap = new HashMap<>();
        Map<String, String> conditionMap=new HashMap<>();
        if(conditionMap == null){
            conditionMap = new HashMap<>();
        }
        if(conditionMap.containsKey(VciQueryWrapperForDO.OID_FIELD)){
            conditionMap.put(VciQueryWrapperForDO.OID_FIELD,QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(conditionMap.get(VciQueryWrapperForDO.OID_FIELD)) + ")");
        }
        if(!CollectionUtils.isEmpty(codeList)){
            conditionMap.put("id_in",VciBaseUtil.array2String(codeList.toArray(new String[]{})));
        }
        conditionMap.put("codeclsfpath","*" + codeClassifyOid + "*");
        conditionMap.put("groupcode_null", "null");
        conditionMap.put("lastr", "1");