xiejun
2023-08-28 300c96cbfb9a9cee605749e0b142205f415e17dc
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.vci.ubcs.code.applyjtcodeservice.feign.IMdmInterJtClient;
import com.vci.ubcs.code.bo.AttributeValue;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
@@ -11,6 +12,7 @@
import com.vci.ubcs.code.entity.CodeAllCode;
import com.vci.ubcs.code.enumpack.CodeDefaultLC;
import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum;
import com.vci.ubcs.code.lifecycle.CodeAllCodeLC;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
@@ -154,7 +156,11 @@
    */
   @Autowired
   private IBtmTypeClient btmTypeClient;
   /***
    * 申请集团编码服务
    */
   @Resource
   private IMdmInterJtClient mdmInterJtClient;
   /***
    * 密级服务
    */
@@ -1962,6 +1968,7 @@
      CodeImportResultVO keyResultVO = batchCheckKeyAttrOnOrder(classifyFullInfo, templateVO, cboList);
      Set<String> selfRepeatRowIndexList = keyResultVO.getSelfRepeatRowIndexList();
      Set<String> keyAttrRepeatRowIndexList = keyResultVO.getKeyAttrRepeatRowIndexList();
      Map<String,List<String>>keyAttrOkOidTORepeatOidMap= keyResultVO.getKeyAttrOkOidTORepeatOidMap();
      if(!CollectionUtils.isEmpty(selfRepeatRowIndexList)){
         selfRepeatRowIndexList.stream().forEach(rowIndex->{
               /* //传入数据之间关键属性的校验
@@ -2064,8 +2071,8 @@
                     String lcstatus =newCbo.getLcStatus();
                     String newOid =newCbo.getOid();
                     Date ts =newCbo.getTs();
                     groupCode=newCbo.getData().get("GROUPCODE");
                     code=newCbo.getId();
                     code = StringUtils.isBlank(newCbo.getId())?"":newCbo.getId();
                     groupCode=newCbo.getData().getOrDefault("GROUPCODE","");
                     String lastmodifier=newCbo.getLastModifier();
                     if (lcstatus!=null&&!lcstatus.equals(CodeDefaultLC.RELEASED.getValue())) {
                        newCbo.setOid(newOid);
@@ -2130,18 +2137,21 @@
            allNeedSaveCboList.add(baseModel.getOid());
         });
         try {
            List<String>applyGroupCodeIdList=new ArrayList<>();
            productCodeService.productCodeAndSaveData(classifyFullInfo, templateVO, ruleVO, orderDTO.getSecDTOList(), dataCBOList);
            //如果是编码生成失败,则直接就失败了,其他的判断出来有错误的我们都统一返回到excel里面
            engineService.batchSaveSelectChar(templateVO, dataCBOList);
            // if(!isProcess){
            dataCBOList.stream().forEach(needSaveCbo->{
               XMLResultDataObjectDetailDO resultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
               String code=needSaveCbo.getId();
               String groupCode=needSaveCbo.getData().getOrDefault("GROUPCODE","");
               String code=StringUtils.isBlank(needSaveCbo.getId())?" ":needSaveCbo.getId();
               String groupCode=needSaveCbo.getData().getOrDefault("GROUPCODE"," ");
               //resultDataObjectDetailDO.setCode(needSaveCbo.getId());
               String msg="申请编码成功";
               String oid=needSaveCbo.getOid();
               String sourceOid=oid;
               applyGroupCodeIdList.add(oid);
               if(codeOidToSystemOidMap.containsKey(oid)){
                  sourceOid=codeOidToSystemOidMap.get(oid);
               }
@@ -2157,6 +2167,9 @@
               resultDataObjectDetailDO.setErrorid("0");
               resultDataObjectDetailDO.setMsg(msg);
               resultDataObjectDetailDOs.add(resultDataObjectDetailDO);
               //处理传送的数据中关键属性重复的,直接拿到已经申请到编码的数据编码直接将赋给关键属性重复的数据
               LinkedList<XMLResultDataObjectDetailDO> repeatDataObjectDetailDOS=handleApplyDataKeyAttrRepeat(keyAttrOkOidTORepeatOidMap,codeOidToSystemOidMap,needSaveCbo,isCodeOrGroupCode);
               resultDataObjectDetailDOs.addAll(repeatDataObjectDetailDOS);
            });
               /* }else{
                    needSaveCboList.stream().forEach(needSaveCbo->{
@@ -2174,6 +2187,13 @@
                    });
                }*/
            //是否调用集团接口申请接口
            if(isCodeOrGroupCode){
               if(!CollectionUtils.isEmpty(applyGroupCodeIdList)) {
                  this.sendApplyGroupcode(applyGroupCodeIdList, classifyFullInfo.getTopClassifyVO().getId(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
               }
            }
         }catch (Throwable e){
            e.printStackTrace();
            needSaveCboList.stream().forEach(needSaveCbo->{
@@ -2194,15 +2214,61 @@
      }
   }
   /***
    *给同一批申请编码存在关键属性的数据赋上一致编码
    * @param keyAttrOkOidTORepeatOidMap 一批申请数据关键属性一致的重复数据映射关系
    * @param codeOidToSystemOidMap
    * @param needSaveCbo
    * @param isCodeOrGroupCode
    */
   private LinkedList<XMLResultDataObjectDetailDO> handleApplyDataKeyAttrRepeat(Map<String,List<String>>keyAttrOkOidTORepeatOidMap,Map<String,String> codeOidToSystemOidMap,BaseModel needSaveCbo,boolean isCodeOrGroupCode){
      LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs=new LinkedList<>();
      String oid=needSaveCbo.getOid();
      if(keyAttrOkOidTORepeatOidMap.containsKey(oid)){
         List<String> repeatOidList= keyAttrOkOidTORepeatOidMap.get(oid);
         if(!CollectionUtils.isEmpty(repeatOidList)){
            String sourceNewOid=needSaveCbo.getOid();
            String sourceOid=sourceNewOid;
            if(codeOidToSystemOidMap.containsKey(oid)){
               sourceOid=codeOidToSystemOidMap.get(oid);
            }
            String code=StringUtils.isBlank(needSaveCbo.getId())?" ":needSaveCbo.getId();
            String groupCode=needSaveCbo.getData().getOrDefault("GROUPCODE"," ");
            String finalSourceOid = sourceOid;
            repeatOidList.stream().forEach(repeatOid->{
               if(codeOidToSystemOidMap.containsKey(repeatOid)){
                  XMLResultDataObjectDetailDO repeatresultDataObjectDetailDO=new XMLResultDataObjectDetailDO();
                  String repeatSourceOid=codeOidToSystemOidMap.get(repeatOid);
                  String repeatMsg="此数据与申请的编码数据id为【"+ finalSourceOid +"】的关键属性一致,则取相同编码";
                  if(isCodeOrGroupCode) {
                     if(StringUtils.isBlank(groupCode)){
                        repeatMsg="申请的编码类型为集团码,等待集团编码赋值";
                     }
                     repeatresultDataObjectDetailDO.setCode(groupCode);
                  }else{
                     repeatresultDataObjectDetailDO.setCode(code);
                  }
                  repeatresultDataObjectDetailDO.setId(repeatSourceOid);
                  repeatresultDataObjectDetailDO.setErrorid("0");
                  repeatresultDataObjectDetailDO.setMsg(repeatMsg);
                  resultDataObjectDetailDOs.add(repeatresultDataObjectDetailDO);
               }
            });
         }
      }
      return  resultDataObjectDetailDOs;
   }
   /***
    * 集成批量同步更新接口
    * @param codeClassifyVO;
    * @param dataObjectVO 数据信息
    * @param resultDataObjectDetailDOs 错误信息
    * @param isCodeOrGroupCode 是否更集团系统数据
    */
   @Transactional(rollbackFor = VciBaseException.class)
   @Override
   public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs) {
   public void batchSyncEditDatas(CodeClassifyVO codeClassifyVO, DataObjectVO dataObjectVO, LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs,boolean isCodeOrGroupCode) {
      String errorid="";
      String msg="";
      //查询分类和模板
@@ -2227,8 +2293,8 @@
      List<String> titleRowData = dataObjectVO.getColName();
      Map<String/**中文名称**/, String/**英文名称**/> attrNameIdMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getName(), t -> t.getId().toLowerCase(Locale.ROOT), (o1, o2) -> o2));
      getFieldIndexMap(titleRowData, attrNameIdMap, fieldIndexMap);
      Map<String, String> cboOidMap = new HashMap<>();
      cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")");
      //Map<String, String> cboOidMap = new HashMap<>();
      //cboOidMap.put("id", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(codeDataMap.keySet().toArray(new String[0])) + ")");
      String tableName ="";
      try {
         R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
@@ -2411,6 +2477,13 @@
            if(deleteList.size()>0) {
               commonsMapper.deleteByTaleAndOid(tableName, VciBaseUtil.array2String(deleteList.toArray(new String[]{})));
            }
            //是否调用集团接口申请接口
            if(isCodeOrGroupCode){
               List<String> IdList=resultDataObjectDetailDOs.stream().filter(xMLResultDataObjectDetailDO-> com.alibaba.cloud.commons.lang.StringUtils.isNotBlank(xMLResultDataObjectDetailDO.getId())).map(XMLResultDataObjectDetailDO::getId).distinct().collect(Collectors.toList());
               if(!CollectionUtils.isEmpty(IdList)) {
                  this.sendApplyGroupcode(IdList, classifyFullInfo.getTopClassifyVO().getBtmTypeId(),sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue());
               }
            }
            errorid="0";
            msg="更新/状态更改/删除成功!";
         }catch (Throwable e){
@@ -2436,6 +2509,7 @@
         }
      }
   }
   /**
    * 校验属性是否为必输
    *
@@ -2743,7 +2817,7 @@
    * @param errorMap
    * @return
    */
   private void   getCodeOrderDTOs(CodeClassifyVO codeClassifyVO,CodeClassifyTemplateVO templateVO,Map<String ,RowDatas>codeDataMap,Map<String, ClientBusinessObject> codeSystemObjectMap,List<CodeOrderDTO> codeOrderDTOList,Map<String,String> errorMap){
   private void getCodeOrderDTOs(CodeClassifyVO codeClassifyVO,CodeClassifyTemplateVO templateVO,Map<String ,RowDatas>codeDataMap,Map<String, ClientBusinessObject> codeSystemObjectMap,List<CodeOrderDTO> codeOrderDTOList,Map<String,String> errorMap){
      codeDataMap.keySet().forEach(code->{
         RowDatas rowDatas=codeDataMap.get(code);
         Map<String, String> data= rowDatas.getFiledValue();
@@ -3846,8 +3920,10 @@
      //必须将属性按照顺序排序好
      List<CodeClassifyTemplateAttrVO> attrVOList = ketAttrMap.values().stream().sorted(((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()))).collect(Collectors.toList());
      Map<String/**行号**/,String/**关键属性的组合内容**/> rowIndexKeyStringMap = new HashMap<>();
      Map<String/**关键属性的组合内容**/,String/**第一个关键属性的数据oid**/> okOidKeyStringMap = new HashMap<>();
      dataList.parallelStream().forEach(cbo-> {
         String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
         String oid=cbo.getOid();
         StringBuilder sb = new StringBuilder();
         for (int i = 0; i < attrVOList.size(); i++) {
            CodeClassifyTemplateAttrVO attrVO = attrVOList.get(i);
@@ -3873,7 +3949,19 @@
         String keyString = sb.toString();
         if(rowIndexKeyStringMap.containsValue(keyString) && StringUtils.isNotBlank(keyString)){
            selfRepeatRowIndexList.add(rowIndex);
            String okOid=okOidKeyStringMap.getOrDefault(keyString,"");
            if(StringUtils.isNotBlank(okOid)){
               List<String>newOidList=new ArrayList<>();
               newOidList.add(oid);
               if(keyAttrOkOidTORepeatOidMap.containsKey(okOid)){
                  List<String> oldOidList=   keyAttrOkOidTORepeatOidMap.get(okOid);
                  newOidList.addAll(oldOidList);
               }
               keyAttrOkOidTORepeatOidMap.put(okOid,newOidList);
            }
         }else {
            okOidKeyStringMap.put(sb.toString(),oid);
            rowIndexKeyStringMap.put(rowIndex, sb.toString());
         }
      });
@@ -4341,4 +4429,17 @@
      }
   }
   /***
    * 申请集团编码
    * @param idList
    * @param btmName
    */
   private void sendApplyGroupcode(List<String> idList,String btmName,String operationType){
      String oids=VciBaseUtil.array2String(idList.toArray(new String[]{}));
      if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue())) {
         mdmInterJtClient.applyGroupCode(oids,btmName);
      }else if(operationType.equals(sysIntegrationPushTypeEnum.ACCPET_EDITCODE)){
         mdmInterJtClient.receiveEditApply(oids,btmName);
      }
   }
}