田源
2023-09-18 7647ae9a3db4712b4154adc6317584b66429212b
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -17,6 +17,7 @@
import com.vci.ubcs.code.util.ClientBusinessObject;
import com.vci.ubcs.code.util.gennerAttrMapUtil;
import com.vci.ubcs.code.vo.pagemodel.*;
import com.vci.ubcs.code.vo.webserviceModel.person.*;
import com.vci.ubcs.code.vo.webserviceModel.apply.*;
import com.vci.ubcs.code.vo.webserviceModel.attrmap.*;
import com.vci.ubcs.code.vo.webserviceModel.attrmap.DataObjectVO;
@@ -34,6 +35,7 @@
import com.vci.ubcs.code.vo.webserviceModel.result.xml.XMLResultSystemVO;
import com.vci.ubcs.code.webService.annotation.VciWebservice;
import com.vci.ubcs.code.webService.config.AttributeMapConfig;
import com.vci.ubcs.code.webService.config.PersonAndDeptConfig;
import com.vci.ubcs.code.wrapper.CodeClassifyWrapper;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
@@ -51,16 +53,26 @@
import com.vci.ubcs.system.vo.DeptVO;
import com.vci.ubcs.system.vo.RoleVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.tools.ant.taskdefs.condition.Http;
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.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
@@ -73,15 +85,25 @@
@Slf4j
@VciWebservice(path = "/universalInterface")
public class UniversalInterfaceImpl<IDockingLogeServiceing> implements UniversalInterfaceI {
   @Value("${code.universalinterface.checkSystemConfig:true}")
   public boolean CODE_CHECKCONFIG;
   @Autowired(required = false)
   private AttributeMapConfig attributeMapConfig;
   /***
    * 人员相关配置服务
    */
   @Autowired(required = false)
   private PersonAndDeptConfig personAndDeptConfig;
   /**
    * 缓存服务
    */
   //@Autowired
   //private RedisService redisService;
   /**
    * 主题库分类的服务
    */
@@ -121,7 +143,6 @@
   /**
    * 密级的服务
    */
   @Resource
   private MdmIOService mdmIOService;
@@ -136,12 +157,43 @@
    */
   @Resource
   private IDockingLogeService dockingLogeService;
   @Resource
   private IPasswordFreeLoginService passwordFreeLoginService;
   private  static String separator="##VCI##";
   private  String errorid="0";
   private String msg="成功";
   private  String objerrorCode="0";
   private String objerrorMsg="成功";
   private final ThreadLocal<HttpServletRequest> threadLocal = new ThreadLocal<>();
   @Resource
   private WebServiceContext webServiceContext;
   @Override
   public void setThreadLocal(ThreadLocal<HttpServletRequest> requestThreadLocal){
      this.threadLocal.set(requestThreadLocal.get());
      requestThreadLocal.remove();
   }
   @WebMethod
   private HttpServletRequest getRequest() {
      //rest请求方式获取request
      HttpServletRequest request = this.threadLocal.get();
      if(Func.isEmpty(request)){
         try {
            // webservice请求方式获取HttpServletRequest对象
            request = (HttpServletRequest)webServiceContext.getMessageContext().get(MessageContext.SERVLET_REQUEST);
         }catch (Exception e){
            throw new ServiceException("获取httpServletRequest失败,原因:"+e.getMessage());
         }
      }else {
         this.threadLocal.remove();
      }
      return request;
   }
   /***
    * 申请编码接口
    * @param data 传递的数据参数
@@ -184,9 +236,11 @@
         ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
         systemId = interParameterVO.getData().getSystemId();
         UserVO userVo = interParameterVO.getData().getUser();
         //免密登录申请token,request中添加用户信息
         passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest());
         AuthUtil.getUser();
         List<ClassfyVO> classVOList = classfysVO.getClassify();
         InterParameterVO finalInterParameterVO = interParameterVO;
         //这是账号信息
         SessionInfo sessionInfo = new SessionInfo();
         sessionInfo.setUserId(userVo.getUserName());
@@ -336,6 +390,545 @@
      return resultStr;
   }
   /****
    * 人员数据同步
    * @param personData
    * @return
    * @throws Throwable
    */
   @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<>();
      String message="";
      if(isUsedFlag){
         AtomicBoolean success= new AtomicBoolean(true);
         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.set(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.set(false);
               throw  new  Throwable ("根据配置分类的分类编号,未获取到分类信息");
            }
            CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
            if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
               success.set(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<PersonMasterData> personMasterDataList= personData.getMasterData();
            List<Map> dataList=new ArrayList<>();
            List<String> codeList=new ArrayList<>();
            List<ApplyDataVO> applyDataVOList=new ArrayList<>();
            List<ApplyDataVO> deleteDataVOList=new ArrayList<>();
            personMasterDataList.stream().forEach(personMasterData -> {
               ApplyDataVO object=new ApplyDataVO();
               object.setCode(personMasterData.getLm_code());//编码
               object.setCreator(personMasterData.getCreator());//创建者
               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");//操作类型
                  deleteDataVOList.add(object);
               }else{
                  String worker_category=personMasterData.getWorker_category();
                  object.setOperate("create");
                  applyDataVOList.add(object);
               }
               codeList.add(personMasterData.getLm_code());
            });
            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());
                     String code=engineService.addSaveCode(orderDTO);
                     if(StringUtils.isNotBlank(code)) {
                        StringBuffer sqlsb = new StringBuffer();
                        sqlsb.append(" select * from ");
                        sqlsb.append(tableName);
                        sqlsb.append(" where 1=1 ");
                        sqlsb.append(" and lastr=1 and lastv=1");
                        sqlsb.append(" and id in (");
                        sqlsb.append(VciBaseUtil.toInSql(code));
                        sqlsb.append(")");
                        List<Map<String, String>> newDataMapList = commonsMapper.queryByOnlySqlForMap(sqlsb.toString());
                        if (!CollectionUtils.isEmpty(newDataMapList)) {
                           String oid = StringUtils.isBlank(newDataMapList.get(0).get("OID")) ? "" : newDataMapList.get(0).get("OID");
                           List<String> oidList = new ArrayList<>();
                           oidList.add(oid);
                           //如果有申请就去调用申请集团码
                           if (isPersonApplyGroupCode) {
                              mdmIOService.sendApplyGroupcode(oidList, templateVO.getBtmTypeId(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
                              success.set(true);
                              mesg = "数据保存成功,等待申请集团码";
                           }
                        }
                     }
                  } catch (Exception e) {
                     mesg=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.get();
               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:申请获取完毕");
            }
         }catch (Throwable e){
            success.set(false);
            message="人员数据接受失败:"+e.getMessage();
            //组织返回结果
            boolean finalSuccess = success.get();
            String finalMessage = message;
            masterDataList.stream().forEach(masterData -> {
               ResultMdMapping resultMdMapping=new ResultMdMapping();
               resultMdMapping.setBusiDataId(masterData.getId());
               resultMdMapping.setSuccess(finalSuccess);
               resultMdMapping.setEntityCode(" ");
               resultMdMapping.setMdmCode(masterData.getLm_code());
               resultMdMapping.setMessage(finalMessage);
               resultMdMapping.setSubMdMappings(null);
            });
         }finally {
            resultOrgData.setMessage(message);
            resultOrgData.setSuccess(success.get());
            resultOrgData.setMdMappings(resultMdMappingList);
            Object object = JSONObject.toJSON(resultOrgData);
         }
         String resultStr = JSONObject.toJSONString(resultOrgData);
         String data = JSONObject.toJSONString(personData);
         try {
            //记录日志
            this.saveLogs(systemCode, systemCode, data, resultStr, success.get(), msg, "syncDataForPerson");
         }catch (Throwable e){
            e.printStackTrace();
         }
      }
      return resultOrgData;
   }
   /****
    * 部门数据同步
    * @param orgData
    * @return
    * @throws Throwable
    */
   @Override
   public ResultOrgData syncDataForOrg(OrgData orgData) {
      boolean isUsedFlag= personAndDeptConfig.isUsedFlag();
      ResultOrgData resultOrgData=new ResultOrgData();
      boolean isPersonApplyGroupCode= personAndDeptConfig.isPersonApplyGroupCode();
      List<ResultMdMapping> resultMdMappingList=new ArrayList<>();
      AtomicBoolean success= new AtomicBoolean(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.set(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.set(false);
               throw  new  Throwable ("根据配置分类的分类编号,未获取到分类信息");
            }
            CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
            if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
               success.set(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(orgMasterData -> {
               ApplyDataVO object=new ApplyDataVO();
               object.setCode(orgMasterData.getMdm_code());//编码
               object.setCreator(orgMasterData.getCreator());//创建者
               object.setEditor(orgMasterData.getModifier());//修改者
               object.setId(orgMasterData.getPk_mdm());//主键
               object.setStatus(CodeDefaultLC.RELEASED.getValue());//状态则需要判断
               Map<String,String> dataMap= VciBaseUtil.objectToMapString(orgMasterData);
               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(orgMasterData.getDr()==1){
                  object.setOperate("delete");//操作类型
                  deleteDataVOList.add(object);
               }else{
                  object.setOperate("create");
                  applyDataVOList.add(object);
               }
               codeList.add(orgMasterData.getMdm_code());
            });
            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());
                     String code=engineService.addSaveCode(orderDTO);
                     if(StringUtils.isNotBlank(code)) {
                        StringBuffer sqlsb = new StringBuffer();
                        sqlsb.append(" select * from ");
                        sqlsb.append(tableName);
                        sqlsb.append(" where 1=1 ");
                        sqlsb.append(" and lastr=1 and lastv=1");
                        sqlsb.append(" and id in (");
                        sqlsb.append(VciBaseUtil.toInSql(code));
                        sqlsb.append(")");
                        List<Map<String, String>> newDataMapList = commonsMapper.queryByOnlySqlForMap(sqlsb.toString());
                        if (!CollectionUtils.isEmpty(newDataMapList)) {
                           String oid = StringUtils.isBlank(newDataMapList.get(0).get("OID")) ? "" : newDataMapList.get(0).get("OID");
                           List<String> oidList = new ArrayList<>();
                           oidList.add(oid);
                           //如果有申请就去调用申请集团码
                           if (isPersonApplyGroupCode) {
                              mdmIOService.sendApplyGroupcode(oidList, templateVO.getBtmTypeId(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
                              success.set(true);
                              mesg = "数据保存成功,等待申请集团码";
                           }
                        }
                     }
                  } 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.get();
               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:申请获取完毕");
            }
         }catch (Throwable e){
            success.set(false);
            message="人员数据接受失败:"+e.getMessage();
            //组织返回结果
            boolean finalSuccess = success.get();
            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.get());
            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.get(), msg, "syncDataForOrg");
         }catch (Throwable e){
            e.printStackTrace();
         }
      }
      return resultOrgData;
   }
   /***
    * 统一更新接口(更改状态,更改属性信息)接口
@@ -381,6 +974,8 @@
         ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
         systemId = interParameterVO.getData().getSystemId();
         UserVO userVo = interParameterVO.getData().getUser();
         //免密登录申请token,request中添加用户信息
         passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest());
         List<ClassfyVO> classVOList = classfysVO.getClassify();
         InterParameterVO finalInterParameterVO = interParameterVO;
         //这是账号信息
@@ -404,7 +999,6 @@
                  throw  new  Throwable ("根据传输的分类,未获取到分类信息");
               }
               log.info("end:分类查询完毕");
               String operation="";
               if(CODE_CHECKCONFIG) {
                  //校验是否配置
@@ -527,7 +1121,7 @@
      log.info("查询分类的数据类型:->"+dataType);
      ResultClassifyVO resultClassifyVO =new ResultClassifyVO();
      List<ClassifyVO> classifyVOList=new ArrayList<>();
      ResultData resultData=new ResultData();
      com.vci.ubcs.code.vo.webserviceModel.classify.ResultData resultData=new com.vci.ubcs.code.vo.webserviceModel.classify.ResultData();
      try {
         if (StringUtils.isBlank(data)) {
            errorid = "101";
@@ -553,6 +1147,8 @@
         }
         QueryData queryData=queryClassifyVO.getData();
         UserVO userVo=queryData.getUser();
         //免密登录申请token,request中添加用户信息
         passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest());
         systemId=queryData.getSystemId();
         QueryLibraryVO libraryVO= queryData.getLibrary();
         String libId= libraryVO.getId();
@@ -711,6 +1307,8 @@
         CondtionsVO condtionsVO=dataCondtionsVO.getCondtions();
         systemId=condtionsVO.getSystemId();
         UserVO userVo=condtionsVO.getUser();
         //免密登录申请token,request中添加用户信息
         passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest());
         CondtionVO condtionVO= condtionsVO.getCondtion();
         SessionInfo sessionInfo = new SessionInfo();
         sessionInfo.setUserId(userVo.getUserName());
@@ -887,11 +1485,8 @@
      return resultStr;
   }
   @Override
   public String queryClassifyRule(String data, String dataType) throws Throwable {
      boolean issucess=false;
      String resultStr = "";
      String errorid="0";
@@ -927,6 +1522,8 @@
         }
         QueryData queryData=queryClassifyVO.getData();
         UserVO userVo=queryData.getUser();
         //免密登录申请token,request中添加用户信息
         passwordFreeLoginService.passwordFreeLogin(userVo.getUserName(),this.getRequest());
         systemId=queryData.getSystemId();
         QueryLibraryVO libraryVO= queryData.getLibrary();
         String libId= libraryVO.getId();
@@ -1237,10 +1834,10 @@
                           }
                           log.info(libId);
                        }else if(secType.equals("codelevelsec")) {//层级码段
                           int level = codeBasicSecVO.getCodeLevelValue();
                           CodeClassifyVO levelCodeClassifyVO = new CodeClassifyVO();
                           CodeClassifyFullInfoBO classifyFullInfoBO = this.classifyService.getClassifyFullInfo(codeClassifyDO.getOid());
                           if(codeBasicSecVO.getCodeLevelType().equals("code_level_special")){//指定层级
                              int level = codeBasicSecVO.getCodeLevelValue();
                              List<CodeClassifyVO> classifyVOS = classifyFullInfoBO.getParentClassifyVOs().stream().sorted(((o1, o2) -> o2.getDataLevel().compareTo(o1.getDataLevel()))).collect(Collectors.toList());
                              if (classifyVOS.size() >= level && level > 0) {
                                 levelCodeClassifyVO = classifyVOS.get(level - 1);
@@ -1690,7 +2287,8 @@
      if(StringUtils.isNotBlank(classOid)){
         queryWrapper.in(DockingSystemConfig::getClassifyOid,classOid);
      }
      List<DockingSystemConfig> dockingSystemConfigList=   dockingSystemConfigList=dockingSystemConfigService.list(queryWrapper);
      List<DockingSystemConfig> dockingSystemConfigList=new ArrayList<>();
      dockingSystemConfigList=   dockingSystemConfigList=dockingSystemConfigService.list(queryWrapper);
      if(!CollectionUtils.isEmpty(dockingSystemConfigList)){
       return   dockingSystemConfigList.get(0);
      }else{
@@ -1698,6 +2296,10 @@
            return checkIspass(systemId, type, operationType, codeClassifyVO.getParentCodeClassifyOid());
         }
      }
      return dockingSystemConfigList.get(0);
      if(dockingSystemConfigList.size()>0){
         return dockingSystemConfigList.get(0);
      }else{
         return   new DockingSystemConfig();
      }
   }
}