ludc
2023-09-12 114c0b5aa8bffa7120d7294ba0631d2ef78711c1
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -352,14 +352,23 @@
    */
   @Override
   public ResultOrgData syncDataForPerson(PersonData personData) {
      boolean isUsedFlag= personAndDeptConfig.isUsedFlag();
      ResultOrgData resultOrgData=new ResultOrgData();
      boolean isPersonApplyGroupCode= personAndDeptConfig.isPersonApplyGroupCode();
      String systemCode=personData.getSystemCode();
      List<ResultMdMapping> resultMdMappingList=new ArrayList<>();
      boolean success=true;
      String message="";
      if(isUsedFlag){
         List<PersonMasterData> masterDataList = personData.getMasterData();
         List<PersonMasterData> masterDataList=new ArrayList<>();
         List<String> fields= VciBaseUtil.str2List(personAndDeptConfig.getPersonFields());
         try {
            if(personData==null){
               throw new Throwable("传入参数为null");
            }
            masterDataList = personData.getMasterData();
            String personLibrary = personAndDeptConfig.getPersonLibrary();
            if (StringUtils.isBlank(personLibrary)) {
               success=false;
@@ -400,15 +409,31 @@
               object.setEditor(personMasterData.getModifier());//修改者
               object.setId(personMasterData.getId());//主键
               object.setStatus(CodeDefaultLC.RELEASED.getValue());//状态则需要判断
               Map<String,String> dataMap= VciBaseUtil.objectToMapString(personMasterData);
               List<ProppertyVO> proppertyVOList=new ArrayList<>();
               /***
                * 根据配置文件获取枚举值
                */
               fields.stream().forEach(field->{
                  if(dataMap.containsKey(field)){
                     String enumFiled= dataMap.get(field);
                     EnumerableData enumerableData=JSONObject.toJavaObject(JSONObject.parseObject(enumFiled),EnumerableData.class);
                     String enumCode=enumerableData.getCode();
                     //String enumCodeValue=enumerableData.getName();
                     ProppertyVO proppertyVO=new ProppertyVO();
                     proppertyVO.setKey(field);
                     proppertyVO.setValue(enumCode);
                     proppertyVOList.add(proppertyVO);
                     dataMap.remove(field);
                  }
               });
               dataMap.forEach((key,vaule)->{
                  ProppertyVO proppertyVO=new ProppertyVO();
                  proppertyVO.setKey(key);
                  proppertyVO.setValue(vaule);
                  proppertyVOList.add(proppertyVO);
               });
               object.setProp(proppertyVOList);
               if(personMasterData.getDr()==1){
                  object.setOperate("delete");//操作类型
@@ -470,7 +495,7 @@
            LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs=new LinkedList<>();
            if(editDatasVO.getObject()!=null&&editDatasVO.getObject().size()>0){
               DataObjectVO dataObjectVO = new DataObjectVO();
               this.getConfigDatas("ERP", personLibrary, editDatasVO, attrVOS, dataObjectVO);
               this.getConfigDatas(systemCode, personLibrary, editDatasVO, attrVOS, dataObjectVO);
               log.info("start:修改数据执行完毕");
               boolean  personApplyGroupCode =personAndDeptConfig.isPersonApplyGroupCode();
               mdmIOService.batchSyncEditDatas(codeClassifyVO,dataObjectVO, resultDataObjectDetailDOs,personApplyGroupCode);
@@ -478,7 +503,7 @@
            }
            if(applyDatasVO.getObject()!=null&&applyDatasVO.getObject().size()>0) {
               DataObjectVO dataObjectVO = new DataObjectVO();
               this.getConfigDatas("ERP", personLibrary, editDatasVO, attrVOS, dataObjectVO);
               this.getConfigDatas(systemCode, personLibrary, applyDatasVO, attrVOS, dataObjectVO);
               CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
               CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
@@ -492,6 +517,7 @@
                     CodeOrderDTO orderDTO = new CodeOrderDTO();
                     List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
                     orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//分类主键
                     orderDTO.setTemplateOid(templateVO.getOid());
                     if(!CollectionUtils.isEmpty(ruleVO.getSecVOList())) {
                        ruleVO.getSecVOList().stream().forEach(codeBasicSecVO -> {
                           if (codeBasicSecVO.getSecType().equals("codevariablesec")) {//规则之定义为可变码段存储主数据传递过来的数据
@@ -503,6 +529,7 @@
                           }
                        });
                     }
                     orderDTO.setCodeRuleOid(ruleVO.getOid());
                     orderDTO.setSecDTOList(codeOrderSecDTOList);//存储编码
                     orderDTO.setData(rowData.getFiledValue());
                     engineService.addSaveCode(orderDTO);
@@ -533,6 +560,11 @@
                  resultMdMappingList.add(resultMdMapping);
               });
               log.info("end:申请获取完毕");
               //如果有申请就去调用申请集团码
               if(isPersonApplyGroupCode){
                  List<String> oidList=new ArrayList<>();
                  mdmIOService.sendApplyGroupcode(oidList,templateVO.getBtmTypeId(),sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
               }
            }
         }catch (Throwable e){
            success=false;
@@ -554,10 +586,17 @@
            resultOrgData.setSuccess(success);
            resultOrgData.setMdMappings(resultMdMappingList);
            Object object = JSONObject.toJSON(resultOrgData);
            return resultOrgData;
         }
         String resultStr = JSONObject.toJSONString(resultOrgData);
         String data = JSONObject.toJSONString(personData);
         try {
            //记录日志
            this.saveLogs(systemCode, systemCode, data, resultStr, success, msg, "syncDataForPerson");
         }catch (Throwable e){
            e.printStackTrace();
         }
      }
      Object object = JSONObject.toJSON(resultOrgData);
      return resultOrgData;
   }
   /****
@@ -568,7 +607,246 @@
    */
   @Override
   public ResultOrgData syncDataForOrg(OrgData orgData) {
      return null;
      boolean isUsedFlag= personAndDeptConfig.isUsedFlag();
      ResultOrgData resultOrgData=new ResultOrgData();
      boolean isPersonApplyGroupCode= personAndDeptConfig.isPersonApplyGroupCode();
      List<ResultMdMapping> resultMdMappingList=new ArrayList<>();
      boolean success=true;
      String message="";
      String systemCode="";
      if(isUsedFlag){
         List<OrgMasterData> orgMasterDataList=new ArrayList<>();
         List<String> fields= VciBaseUtil.str2List(personAndDeptConfig.getPersonFields());
         try {
            if(orgData==null){
               throw new Throwable("传入参数为null");
            }
            systemCode=orgData.getSystemCode();
            orgMasterDataList = orgData.getMasterData();
            String personLibrary = personAndDeptConfig.getPersonLibrary();
            if (StringUtils.isBlank(personLibrary)) {
               success=false;
               log.info("集成配置缺少人员库节点信息,personLibrary->" + personLibrary);
               throw  new Throwable("集成配置缺少人员库节点信息,personLibrary->" + personLibrary);
            }
            String personClassCode = personAndDeptConfig.getPersonClassCode();
            ClassfyVO classfyVO = new ClassfyVO();
            classfyVO.setLibrary(personLibrary);
            classfyVO.setClassCode(personClassCode);
            CodeClassifyVO  codeClassifyVO=this.getClassfy(classfyVO,personLibrary);
            log.info("end:分类查询完毕");
            //获取分类模板信息
            if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){
               success=false;
               throw  new  Throwable ("根据配置分类的分类编号,未获取到分类信息");
            }
            CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
            if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
               success=false;
               throw  new  Throwable ("根据传输的分类,未获取MDM系统中对应模板");
            }
            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
            ).collect(Collectors.toList());
            List<Map> dataList=new ArrayList<>();
            List<String> codeList=new ArrayList<>();
            List<ApplyDataVO> applyDataVOList=new ArrayList<>();
            List<ApplyDataVO> deleteDataVOList=new ArrayList<>();
            orgMasterDataList.stream().forEach(personMasterData -> {
               ApplyDataVO object=new ApplyDataVO();
               object.setCode(personMasterData.getMdm_code());//编码
               object.setCreator(personMasterData.getCreator());//创建者
               object.setEditor(personMasterData.getModifier());//修改者
               object.setId(personMasterData.getPk_mdm());//主键
               object.setStatus(CodeDefaultLC.RELEASED.getValue());//状态则需要判断
               Map<String,String> dataMap= VciBaseUtil.objectToMapString(personMasterData);
               List<ProppertyVO> proppertyVOList=new ArrayList<>();
               /***
                * 根据配置文件获取枚举值
                */
               fields.stream().forEach(field->{
                  if(dataMap.containsKey(field)){
                     String enumFiled= dataMap.get(field);
                     EnumerableData enumerableData=JSONObject.toJavaObject(JSONObject.parseObject(enumFiled),EnumerableData.class);
                     String enumCode=enumerableData.getCode();
                     //String enumCodeValue=enumerableData.getName();
                     ProppertyVO proppertyVO=new ProppertyVO();
                     proppertyVO.setKey(field);
                     proppertyVO.setValue(enumCode);
                     proppertyVOList.add(proppertyVO);
                     dataMap.remove(field);
                  }
               });
               dataMap.forEach((key,vaule)->{
                  ProppertyVO proppertyVO=new ProppertyVO();
                  proppertyVO.setKey(key);
                  proppertyVO.setValue(vaule);
                  proppertyVOList.add(proppertyVO);
               });
               object.setProp(proppertyVOList);
               if(personMasterData.getDr()==1){
                  object.setOperate("delete");//操作类型
                  deleteDataVOList.add(object);
               }else{
                  codeList.add(personMasterData.getMdm_code());
                  object.setOperate("create");
                  applyDataVOList.add(object);
               }
            });
            R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(templateVO.getBtmTypeId());
            if(!r.isSuccess()) {
               throw new Throwable(r.getMsg());
            }
            BtmTypeVO btmTypeVO = r.getData();
            if (btmTypeVO == null) {
               throw new Throwable("根据业务类型未查询到业务类型对象!");
            }
            String tableName = btmTypeVO.getTableName();
            if (com.alibaba.nacos.common.utils.StringUtils.isBlank(tableName)) {
               throw new Throwable("根据业务类型未查询到业务类型相关联的表");
            }
            StringBuffer sb=new StringBuffer();
            sb.append(" select * from ");
            sb.append(tableName);
            sb.append(" where 1=1 ");
            sb.append(" and lastr=1 and lastv=1" );
            sb.append(" and id in (");
            sb.append(VciBaseUtil.toInSql(codeList.toArray(new String[0])));
            sb.append(")");
            List<Map<String,String>> dataMapList=commonsMapper.queryByOnlySqlForMap(sb.toString());
            List<ClientBusinessObject> cboList=   ChangeMapTOClientBusinessObjects(dataMapList);
            ApplyDatasVO applyDatasVO=new ApplyDatasVO();
            ApplyDatasVO editDatasVO=new ApplyDatasVO();
            if(!CollectionUtils.isEmpty(cboList)){
               Map<String,ClientBusinessObject> oldpplyDataVOMap=   cboList.stream().filter(data -> data != null && StringUtils.isNotBlank(data.getId())).collect(Collectors.toList()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t));
               //数据库不存在的
               List<ApplyDataVO> applyApplyDataVOList = applyDataVOList.stream().filter(cbo -> {
                  String code =cbo.getCode();
                  return !oldpplyDataVOMap.containsKey(code);
               }).collect(Collectors.toList());
               applyDatasVO.setObject(applyApplyDataVOList);
               //数据库存在的
               List<ApplyDataVO> editApplyDataVOList = applyDataVOList.stream().filter(cbo -> {
                  String code =cbo.getCode();
                  if(oldpplyDataVOMap.containsKey(code)){
                     cbo.setOperate("update");
                  }
                  return oldpplyDataVOMap.containsKey(code);
               }).collect(Collectors.toList());
               editApplyDataVOList.addAll(deleteDataVOList);
               editDatasVO.setObject(editApplyDataVOList);
            }else{
               applyDatasVO.setObject(applyDataVOList);
            }
            LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs=new LinkedList<>();
            if(editDatasVO.getObject()!=null&&editDatasVO.getObject().size()>0){
               DataObjectVO dataObjectVO = new DataObjectVO();
               this.getConfigDatas(systemCode, personLibrary, editDatasVO, attrVOS, dataObjectVO);
               log.info("start:修改数据执行完毕");
               boolean  personApplyGroupCode =personAndDeptConfig.isPersonApplyGroupCode();
               mdmIOService.batchSyncEditDatas(codeClassifyVO,dataObjectVO, resultDataObjectDetailDOs,personApplyGroupCode);
               log.info("end:修改数据执行完毕");
            }
            if(applyDatasVO.getObject()!=null&&applyDatasVO.getObject().size()>0) {
               DataObjectVO dataObjectVO = new DataObjectVO();
               this.getConfigDatas(systemCode, personLibrary, applyDatasVO, attrVOS, dataObjectVO);
               CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
               CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
               if(ruleVO==null||"".equals(ruleVO.getOid())){
                  throw  new Throwable("编码规则");
               }
               List<XMLResultDataObjectDetailDO> xDOs=new CopyOnWriteArrayList<>();
               dataObjectVO.getRowData().parallelStream().forEach(rowData->{
                  String mesg="";
                  try {
                     CodeOrderDTO orderDTO = new CodeOrderDTO();
                     List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
                     orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//分类主键
                     orderDTO.setTemplateOid(templateVO.getOid());
                     if(!CollectionUtils.isEmpty(ruleVO.getSecVOList())) {
                        ruleVO.getSecVOList().stream().forEach(codeBasicSecVO -> {
                           if (codeBasicSecVO.getSecType().equals("codevariablesec")) {//规则之定义为可变码段存储主数据传递过来的数据
                              CodeOrderSecDTO CodeOrderSecDTO = new CodeOrderSecDTO();
                              CodeOrderSecDTO.setSecOid(codeBasicSecVO.getOid());
                              CodeOrderSecDTO.setSecValue(rowData.getCode());
                              codeOrderSecDTOList.add(CodeOrderSecDTO);
                           }
                        });
                     }
                     orderDTO.setCodeRuleOid(ruleVO.getOid());
                     orderDTO.setSecDTOList(codeOrderSecDTOList);//存储编码
                     orderDTO.setData(rowData.getFiledValue());
                     engineService.addSaveCode(orderDTO);
                  } catch (Exception e) {
                     mesg=e.getMessage();
                     e.getMessage();
                     e.printStackTrace();
                  }finally {
                     XMLResultDataObjectDetailDO x=new XMLResultDataObjectDetailDO();
                     x.setId(rowData.getOid());
                     x.setCode(rowData.getCode());
                     x.setMsg(mesg);
                     x.setErrorid("1");
                     xDOs.add(x);
                  }
               });
               resultDataObjectDetailDOs.addAll(xDOs);
               boolean finalSuccess1 = success;
               String finalMessage1 = message;
               resultDataObjectDetailDOs.stream().forEach(resultDataObjectDetailDO->{
                  ResultMdMapping resultMdMapping=new ResultMdMapping();
                  resultMdMapping.setBusiDataId(resultDataObjectDetailDO.getId());
                  resultMdMapping.setSuccess(finalSuccess1);
                  resultMdMapping.setEntityCode(" ");
                  resultMdMapping.setMdmCode(resultDataObjectDetailDO.getCode());
                  resultMdMapping.setMessage(finalMessage1);
                  resultMdMapping.setSubMdMappings(null);
                  resultMdMappingList.add(resultMdMapping);
               });
               log.info("end:申请获取完毕");
               //如果有申请就去调用申请集团码
               if(isPersonApplyGroupCode){
                  List<String> oidList=new ArrayList<>();
                  mdmIOService.sendApplyGroupcode(oidList,templateVO.getBtmTypeId(),sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
               }
            }
         }catch (Throwable e){
            success=false;
            message="人员数据接受失败:"+e.getMessage();
            //组织返回结果
            boolean finalSuccess = success;
            String finalMessage = message;
            orgMasterDataList.stream().forEach(masterData -> {
               ResultMdMapping resultMdMapping=new ResultMdMapping();
               resultMdMapping.setBusiDataId(masterData.getPk_mdm());
               resultMdMapping.setSuccess(finalSuccess);
               resultMdMapping.setEntityCode(" ");
               resultMdMapping.setMdmCode(masterData.getMdm_code());
               resultMdMapping.setMessage(finalMessage);
               resultMdMapping.setSubMdMappings(null);
            });
         }finally {
            resultOrgData.setMessage(message);
            resultOrgData.setSuccess(success);
            resultOrgData.setMdMappings(resultMdMappingList);
            Object object = JSONObject.toJSON(resultOrgData);
         }
         String resultStr = JSONObject.toJSONString(resultOrgData);
         String data = JSONObject.toJSONString(orgData);
         try {
            //记录日志
            this.saveLogs(systemCode, systemCode, data, resultStr, success, msg, "syncDataForOrg");
         }catch (Throwable e){
            e.printStackTrace();
         }
      }
      return resultOrgData;
   }
   /***
    * 统一更新接口(更改状态,更改属性信息)接口