xiejun
2023-07-03 c3c9baf912f572a78b2b82613d31889be187ab92
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -21,6 +21,7 @@
import com.vci.ubcs.code.vo.webserviceModel.attrmap.RowDatas;
import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultDataObjectDetailDO;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.feign.IWebSecretClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.bo.WriteExcelData;
import com.vci.ubcs.starter.exception.VciBaseException;
@@ -59,6 +60,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.File;
@@ -154,6 +156,11 @@
    */
   @Autowired
   private IBtmTypeClient btmTypeClient;
   /***
    * 密级服务
    */
   @Resource
   private IWebSecretClient secretService;
   /**
    * 批量申请:选取选中分类下的所有模板关键属性,相似属性,必填属性,写入execl中
    *
@@ -189,7 +196,7 @@
            String field=codetemplateAttr.getId();
            String name=codetemplateAttr.getName();
            CodeClassifyTemplateAttrVO codeBaseAttributeDTO=new CodeClassifyTemplateAttrVO();
            boolean res=codetemplateAttr.getAttributeGroup().equals(BATCHADD_EXCEPORT_ATTR_TYPE)//基本属性字段显示
            boolean res=(StringUtils.isNotBlank(codetemplateAttr.getAttributeGroup())&& codetemplateAttr.getAttributeGroup().equals(BATCHADD_EXCEPORT_ATTR_TYPE))//基本属性字段显示
               ||(StringUtils.isNotBlank(codetemplateAttr.getKeyAttrFlag())&&Boolean.parseBoolean(codetemplateAttr.getKeyAttrFlag()))//关键属性的存入
               ||(StringUtils.isNotBlank(codetemplateAttr.getSameRepeatAttrFlag())&&Boolean.parseBoolean(codetemplateAttr.getSameRepeatAttrFlag())) //相似属性的存入
               ||(StringUtils.isNotBlank(codetemplateAttr.getRequireFlag())&&Boolean.parseBoolean(codetemplateAttr.getRequireFlag()));
@@ -752,7 +759,7 @@
    * @return 有错误信息的excel
    */
   @Override
   public CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid, String classifyAttr,File file) {
   public CodeImProtRusultVO batchImportHistoryData(String codeClassifyOid, String classifyAttr,File file) throws  Throwable{
      VciBaseUtil.alertNotNull(codeClassifyOid,"分类的主键");
      ReadExcelOption reo = new ReadExcelOption();
      reo.setReadAllSheet(true);
@@ -997,7 +1004,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;
@@ -1009,9 +1016,9 @@
               thisCbos.stream().forEach(clientBusinessObject -> {
                  BaseModel baseModel=new BaseModel();
                  BeanUtil.convert(clientBusinessObject,baseModel);
                  baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
                  //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
                  dataCBOList.add(baseModel);
                  dataCBOIdList.add(baseModel.getOid());
                  dataCBOIdList.add(baseModel);
               });
               if (!CollectionUtils.isEmpty(thisCbos)) {
@@ -1023,9 +1030,14 @@
                        String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
                        errorMap.put(rowIndex, errorMap.getOrDefault(rowIndex, "") + ";系统错误,存储数据的时候出错了");
                     });
                  }
               }
            });
            if (errorMap.size() > 0) {
               isExport = true;
            }
            createWriteExcelData(rowDataList, errorMap, new ArrayList<>(), titleRowData, shetNameMap, finalTemplateVO);
            engineService.batchSaveSelectChar(templateVO, dataCBOIdList);
         }
      }
@@ -1054,7 +1066,19 @@
      return codeImProtRusultVO;
   }
   /*private void converBaseModels(List<ClientBusinessObject> clientBusinessObjects,List<BaseModel>dataCBOList){
      clientBusinessObjects.stream().forEach(clientBusinessObject -> {
         BaseModel baseModel=new BaseModel();
         BeanUtil.convert(clientBusinessObject,baseModel);
         Map<String,String> dataMap=new HashMap<>();
         clientBusinessObject.getHisAttrValList()
         baseModel.setData(VciBaseUtil.objectToMapString(baseModel));
         AttributeValue[] newAttributeValue=    clientBusinessObject.getNewAttrValList();
         dataCBOList.add(baseModel);
      });
   }*/
   /***
    * 从execl里构建对象
    * @param rowDataList
@@ -1331,14 +1355,14 @@
            cboList.stream().forEach(clientBusinessObject -> {
               BaseModel baseModel=new BaseModel();
               BeanUtil.convert(clientBusinessObject,baseModel);
               baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
               //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
               dataCBOList.add(baseModel);
               dataCBOIdList.add(baseModel.getOid());
            });
            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 +1451,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 +1541,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));
               //baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
               dataCBOList.add(baseModel);
               allNeedSaveCboList.add(baseModel.getOid());
//               allNeedSaveCboList.add(baseModel);
            });
            try {
            //9.我们处理业务数据
@@ -1537,7 +1561,7 @@
            }
         }
         //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
         engineService.batchSaveSelectChar(codeClassifyTemplateVO, allNeedSaveCboList);
         engineService.batchSaveSelectChar(codeClassifyTemplateVO, dataCBOList);
      });
      return  R.success(isImprot?"批量历史导入成功":"批量申请成功");
   }
@@ -1795,14 +1819,14 @@
         needSaveCboList.stream().forEach(clientBusinessObject -> {
            BaseModel baseModel=new BaseModel();
            BeanUtil.convert(clientBusinessObject,baseModel);
            baseModel.setData(VciBaseUtil.objectToMapString(clientBusinessObject));
         //(VciBaseUtil.objectToMapString(clientBusinessObject));
            dataCBOList.add(baseModel);
            allNeedSaveCboList.add(baseModel.getOid());
         });
         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();
@@ -1859,6 +1883,7 @@
    * @param dataObjectVO 数据信息
    * @param resultDataObjectDetailDOs 错误信息
    */
   @Transactional(rollbackFor = VciBaseException.class)
   @Override
   public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
      String errorid="";
@@ -1887,9 +1912,30 @@
      getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
      Map<String, String> cboOidMap = new HashMap<>();
      cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")");
      R<BtmTypeVO>  r= btmTypeClient.getDetail(templateVO.getBtmTypeId());
      BtmTypeVO btmTypeVO =r.getData();
      String tableName=btmTypeVO.getTableName();
      String tableName ="";
      try {
         R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
         if(r.getCode()!=200) {
            throw new Throwable(r.getMsg());
         }
         BtmTypeVO btmTypeVO = r.getData();
         if (btmTypeVO == null) {
            throw new Throwable("根据业务类型未查询到业务类型对象!");
         }
         tableName = btmTypeVO.getTableName();
         if (StringUtils.isBlank(tableName)) {
            throw new Throwable("根据业务类型未查询到业务类型相关联的表");
         }
      }catch (Throwable e){
         log.error("查询业务对象表"+e);
         XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
         xmlResultDataObjectDetailDO.setErrorid("103");
         xmlResultDataObjectDetailDO.setMsg("查询业务对象表"+e);
         xmlResultDataObjectDetailDO.setId("");
         xmlResultDataObjectDetailDO.setCode("");
         resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
         return;
      }
      StringBuffer sb=new StringBuffer();
      sb.append(" select * from ");
@@ -1975,7 +2021,7 @@
            BaseModel baseModel=new BaseModel();
            BeanUtil.convert(cbo,baseModel);
            baseModel.setData(VciBaseUtil.objectToMapString(cbo));
            //baseModel.setData(VciBaseUtil.objectToMapString(cbo));
            updateList.add(baseModel);
         }else if(operation.equals("delete")){//如果在流程中不允许删除,不在流程中状态为发布或者停用的数据不允许删除,将其更改为停用,其他的情况直接删除
            //  if(finalIsProcess){
@@ -2016,7 +2062,7 @@
               BaseModel baseModel=new BaseModel();
               BeanUtil.convert(cbo,baseModel);
               baseModel.setData(VciBaseUtil.objectToMapString(cbo));
               //baseModel.setData(VciBaseUtil.objectToMapString(cbo));
               updateList.add(baseModel);
            }catch (VciBaseException e) {
               e.printStackTrace();
@@ -2180,7 +2226,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 (commonsMapper.queryCountBySql(sql[0]) > 0) {
            String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}";
            String[] objs = new String[]{trim ? "是" : "否", ignoreCase ? "是" : "否", ignoreWidth ? "是" : "否", trimAll ? "是" : "否"};
@@ -2283,10 +2329,10 @@
         }
         int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
         /*if (secret == 0 || !secretService.checkDataSecret(secret)) {
         if (secret == 0 || !secretService.checkDataSecret(secret).getData()) {
            Integer userSecret = VciBaseUtil.getCurrentUserSecret();
            cbo.setAttributeValue(SECRET_FIELD, String.valueOf((userSecret == null || userSecret == 0) ? UserSecretEnum.NONE.getValue() : userSecret));
         }*/
         }
      } catch (Throwable e) {
         log.error("设置默认的属性的值错误", e);
      }
@@ -2535,11 +2581,11 @@
               cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
               cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
               int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
               /*if(secret == 0 || !secretService.checkDataSecret(secret) ){
               if(secret == 0 || !secretService.checkDataSecret(secret).getData() ){
                  Integer userSecret = VciBaseUtil.getCurrentUserSecret();
                  String secretValue= String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret);
                  cbo.setAttributeValue(SECRET_FIELD,secretValue);
               }*/
               }
               if(rowData.getStatus().equals(CodeDefaultLC.DISABLE.getValue())){//停用
                  cbo.setLcStatus(CodeDefaultLC.DISABLE.getValue());
               }else if(rowData.getStatus().equals(CodeDefaultLC.EDITING.getValue())){//编辑
@@ -2633,11 +2679,11 @@
               cbo.setAttributeValue(CODE_CLASSIFY_OID_FIELD,classifyFullInfo.getCurrentClassifyVO().getOid());
               cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
               //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
               /*int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
               if(secret == 0 || !secretService.checkDataSecret(secret) ){
               int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
               if(secret == 0 || !secretService.checkDataSecret(secret).getData() ){
                  Integer userSecret = VciBaseUtil.getCurrentUserSecret();
                  cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
               }*/
               }
            }else{
               //此时还没有转换路径
               //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
@@ -2690,10 +2736,10 @@
               cbo.setAttributeValue(CODE_FULL_PATH_FILED,fullPath);
               //cbo.setLcStatus(CodeDefaultLC.EDITING.getValue());
               int secret = VciBaseUtil.getInt(cbo.getAttributeValue(SECRET_FIELD));
               /*if(secret == 0 || !secretService.checkDataSecret(secret) ){
               if(secret == 0 || !secretService.checkDataSecret(secret).getData() ){
                  Integer userSecret = VciBaseUtil.getCurrentUserSecret();
                  cbo.setAttributeValue(SECRET_FIELD,String.valueOf((userSecret==null || userSecret ==0)? UserSecretEnum.NONE.getValue():userSecret));
               }*/
               }
            }else{
               //此时还没有转换路径
               //cbo.setAttributeValue(CODE_FULL_PATH_FILED, childOidPathMap.getOrDefault(rowData.getData().getOrDefault(CODE_CLASSIFY_OID_FIELD,""),fullPath));
@@ -2970,21 +3016,35 @@
    * @param cboList 数据的列表
    * @param errorMap 错误的信息
    */
   private void batchCheckIdExistOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String ,String> errorMap){
   private void batchCheckIdExistOnOrder(CodeClassifyTemplateVO templateVO,List<ClientBusinessObject> cboList,Map<String ,String> errorMap) throws Throwable{
      List<String> existIds = new ArrayList<>();
      String tableName ="";
      try {
         R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
         if(r.getCode()!=200) {
            throw new Throwable(r.getMsg());
         }
         BtmTypeVO btmTypeVO = r.getData();
         if (btmTypeVO == null) {
            throw new Throwable("根据业务类型未查询到业务类型对象!");
         }
         tableName = btmTypeVO.getTableName();
         if (StringUtils.isBlank(tableName)) {
            throw new Throwable("根据业务类型未查询到业务类型相关联的表");
         }
      }catch (Throwable e){
         throw e;
      }
      String finalTableName = tableName;
      VciBaseUtil.switchCollectionForOracleIn(cboList).stream().forEach(cbos -> {
         Map<String, String> conditionMap = new HashMap<>();
         conditionMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])) + ")");
         R<BtmTypeVO>  r= btmTypeClient.getDetail(templateVO.getBtmTypeId());
         BtmTypeVO btmTypeVO =r.getData();
         String tableName=btmTypeVO.getTableName();
         StringBuffer sb=new StringBuffer();
         sb.append(" select id from ");
         sb.append(tableName);
         sb.append(finalTableName);
         sb.append(" where 1=1 ");
         sb.append(" id in (");
         sb.append(" and id in (");
         sb.append(VciBaseUtil.toInSql(cbos.stream().map(s -> s.getId()).collect(Collectors.toSet()).toArray(new String[0])));
         sb.append(")");
         List<String> idList= commonsMapper.selectById(sb.toString());
@@ -3807,8 +3867,8 @@
         }else{
            if (!CollectionUtils.isEmpty(conditionMap)) {
               Map<String, String> andConditionMap = new HashMap<>();
               andConditionMap.put("islastr", "1");
               andConditionMap.put("islastv", "1");
               andConditionMap.put("lastr", "1");
               andConditionMap.put("lastv", "1");
               conditionMap.putAll(andConditionMap);
               PageHelper pageHelper = new PageHelper(-1);
               pageHelper.addDefaultDesc("id");