xiejun
2023-09-22 e2e76076861f0019d127c03273f111a2dcda5913
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -17,8 +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.applybz.ApplyBZParamVO;
import com.vci.ubcs.code.vo.webserviceModel.applybz.ApplyBZVO;
import com.vci.ubcs.code.vo.webserviceModel.applybz.*;
import com.vci.ubcs.code.vo.webserviceModel.person.*;
import com.vci.ubcs.code.vo.webserviceModel.apply.*;
import com.vci.ubcs.code.vo.webserviceModel.attrmap.*;
@@ -55,7 +54,6 @@
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;
@@ -67,9 +65,7 @@
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.*;
@@ -1938,131 +1934,181 @@
      return resultStr;
   }
   /***
    * 标准化生成接口
    * @param data 数据信息
    * @param dataType 数据格式类型
    * @return
    */
   public String applyCodeForBZ(String data,String dataType){
      String resultStr = "";
//      log.info("方法->applyCodeForBZ start");
//
//      final String[] errorid = {"0"};
//      msg="成功";
//      objerrorCode="0";
//      objerrorMsg="成功";
//      log.info("申请编码的数据参数:->"+data);
//      log.info("申请编码的数据类型:->"+dataType);
//      String systemId="";
//      List<XMLResultClassfyVO> resultClassfyVOList = new ArrayList<>();
//      LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
//      try{
//         try {
//            if(StringUtils.isBlank(data)) {
//               errorid[0] ="101";
//               throw new Throwable("接口参数:传递为空");
//            }
//            ApplyBZParamVO applyBZParamVO  =new ApplyBZParamVO();
//            //如果dataType是xml则,通过xml序列化成对象形式,如果是json则通过json转换成对象格式
//            try {
//               if ("xml".equals(dataType)) {
//                  XStream xStream = new XStream(new DomDriver());
//                  xStream.processAnnotations(RootDataVO.class);
//                  xStream.autodetectAnnotations(true);
//                  ApplyBZVO rootDataVO = (ApplyBZVO) xStream.fromXML(data);
//                  applyBZParamVO.setData(rootDataVO);
//               } else {
//                  applyBZParamVO = JSONObject.toJavaObject(JSONObject.parseObject(data), ApplyBZParamVO.class);
//               }
//            }catch (Throwable e){
//               errorid[0] ="101";
//               throw new Throwable("接口参数:传入数据参数解析失败");
//            }
//            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());
//            sessionInfo.setUserName(userVo.getTrueName());
//            sessionInfo.setIp(userVo.getIp());
//            VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
////            List<XMLResultDataObjectDetailDO> allResultDataObjectDetailDOS=new ArrayList<>();
//            String finalSystemId = systemId;
//         } catch (Throwable e) {
//            List<ApplyDataVO> applyDataVOList= classVO.getObjects().getObject();
//            objerrorCode="1";
//            if(!CollectionUtils.isEmpty(applyDataVOList)) {
//               applyDataVOList.stream().forEach(applyDataVO -> {
//                  XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
//                  xmlResultDataObjectDetailDO.setCode("");
//                  xmlResultDataObjectDetailDO.setId(applyDataVO.getId());
//                  xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
//                  xmlResultDataObjectDetailDO.setMsg("编码申请失败:" + e.getMessage());
//                  resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
//               });
//            }else{
//               XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
//               xmlResultDataObjectDetailDO.setCode("");
//               xmlResultDataObjectDetailDO.setId("");
//               xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
//               xmlResultDataObjectDetailDO.setMsg("编码申请失败:" + e.getMessage());
//               resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
//            }
//            e.printStackTrace();
//         }finally {
//            XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
//            resultClassfyVO.setClassCode(classVO.getClassCode());
//            resultClassfyVO.setLibrary(classVO.getLibrary());
//            resultClassfyVO.setFullclsfNamePath(classVO.getFullclsfNamePath());
//            resultClassfyVO.setObjects(resultDataObjectDetailDOs);
//            resultClassfyVOList.add(resultClassfyVO);
//         }
//         XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
//         xmlResultSystemVO.setClassifys(resultClassfyVOList);
//         xmlResultSystemVO.setMsg(msg);
//         xmlResultSystemVO.setErrorid(errorid[0]);
//         resultStr= transferResultXMl(xmlResultSystemVO,dataType);
//      }catch (Throwable e){
//         e.printStackTrace();
//         msg="申请编码失败:"+e.getMessage();
//          /*  XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO();
//            XMLResultSystemVO.setErrorid(errorid);
//            XMLResultSystemVO.setMsg("申请编码失败:->"+e.getMessage());
//            XMLResultSystemVO.setClassifys(resultClassfyVOList);
//            resultStr=transferResultXMl(XMLResultSystemVO,dataType);
//
//            log.error("申请编码失败:->"+e);
//            return resultStr;*/
//      }finally {
//         XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
//         xmlResultSystemVO.setClassifys(resultClassfyVOList);
//         xmlResultSystemVO.setMsg(msg);
//         xmlResultSystemVO.setErrorid(errorid[0]);
//         resultStr= transferResultXMl(xmlResultSystemVO,dataType);
//         final boolean[] issucess = {true};
//         if(!errorid[0].equals("0")) {
//            issucess[0] = false;
//         }else {
//            if(!CollectionUtils.isEmpty(resultClassfyVOList)) {
//               resultClassfyVOList.stream().forEach(xMLResultClassfyVO -> {
//                  xMLResultClassfyVO.getObjects().stream().forEach(objec -> {
//                     if (!(objec.getErrorid().equals("0") || objec.getErrorid().equals("204"))) {
//                        issucess[0] = false;
//                        msg=objec.getMsg();
//                     }
//                  });
//               });
//            }
//         }
//         try {
//            //记录日志
//            this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "applyCodeForBZ");
//         }catch (Throwable e){
//            e.printStackTrace();
//         }
//      }
//      log.info("返回参数:"+resultStr);
      log.info("方法->applyCodeForBZ start");
      final String[] errorid = {"0"};
      msg="成功";
      objerrorCode="0";
      objerrorMsg="成功";
      log.info("申请编码的数据参数:->"+data);
      log.info("申请编码的数据类型:->"+dataType);
      String systemId="";
      List<XMLResultClassfyVO> resultClassfyVOList = new ArrayList<>();
      LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
      try {
         ClassfyBZVO classfyBZVO = null;
         if (StringUtils.isBlank(data)) {
            errorid[0] = "101";
            throw new Throwable("接口参数:dataString 传递为空");
         }
         ApplyBZParamVO applyBZParamVO = new ApplyBZParamVO();
         //如果dataType是xml则,通过xml序列化成对象形式,如果是json则通过json转换成对象格式
         try {
            if ("xml".equals(dataType)) {
               XStream xStream = new XStream(new DomDriver());
               xStream.processAnnotations(RootDataVO.class);
               xStream.autodetectAnnotations(true);
               ApplyBZVO rootDataVO = (ApplyBZVO) xStream.fromXML(data);
               applyBZParamVO.setData(rootDataVO);
            } else {
               applyBZParamVO = JSONObject.toJavaObject(JSONObject.parseObject(data), ApplyBZParamVO.class);
            }
         } catch (Throwable e) {
            errorid[0] = "101";
            throw new Throwable("接口参数:传入数据参数解析失败");
         }
         classfyBZVO = applyBZParamVO.getData().getClassify();
         systemId = applyBZParamVO.getData().getSystemId();
         UserVO userVo = applyBZParamVO.getData().getUser();
         //免密登录申请token,request中添加用户信息
         passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(), this.getRequest());
         AuthUtil.getUser();
         //这是账号信息
         SessionInfo sessionInfo = new SessionInfo();
         sessionInfo.setUserId(userVo.getUserName());
         sessionInfo.setUserName(userVo.getTrueName());
         sessionInfo.setIp(userVo.getIp());
         VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
//         List<XMLResultDataObjectDetailDO> allResultDataObjectDetailDOS=new ArrayList<>();
         String finalSystemId = systemId;
         String libray="";
         boolean isCodeOrGroupCode=false;
         try {
            libray = classfyBZVO.getLibrary();
            CodeClassifyVO codeClassifyVO = getClassfy(classfyBZVO,libray);
            log.info("end:分类查询完毕");
            //获取分类模板信息
            if(codeClassifyVO==null || StringUtils.isBlank(codeClassifyVO.getOid())){
               objerrorCode="100";
               throw  new  Throwable ("根据传输的分类,未获取到分类信息");
            }
            String operation="";
            if(CODE_CHECKCONFIG) {
               //校验是否配置
               DockingSystemConfig dockingSystemConfig=null;
               dockingSystemConfig=checkIspass(finalSystemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue(),codeClassifyVO.getOid());
               if(dockingSystemConfig==null){
                  errorid[0] ="101";
                  throw new Throwable("系统标识为【"+ finalSystemId +"】,集成分类为【"+codeClassifyVO.getName()+"】以上分类,"+sysIntegrationPushTypeEnum.ACCPET_APPCODE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
               }
               isCodeOrGroupCode="true".equals(dockingSystemConfig.getIsGroupCodeFlag())?true:false;
            }
            CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
            if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
               objerrorCode="1";
               throw  new  Throwable ("根据传输的分类,未获取MDM系统中对应模板");
            }
            log.info("end:模板查询完毕");
            ApplyBZDatasVO applyDatasVO = classfyBZVO.getObjects();
            DataObjectVO dataObjectVO = new DataObjectVO();
            List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
            ).collect(Collectors.toList());
            //this.getConfigDatas(finalSystemId, libray, applyDatasVO, attrVOS, dataObjectVO);
            log.info("end:数据组织完毕");
            //规则的主键需要去获取
            CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyVO.getOid());
            if(classifyFullInfo==null ||classifyFullInfo.getCurrentClassifyVO()==null || StringUtils.isBlank(classifyFullInfo.getCurrentClassifyVO().getOid())){
               objerrorCode="1";
               log.info("classifyFullInfo:"+"根据传输的分类,未获取分类相关信息");
               throw  new  Throwable ("根据传输的分类,未获取分类相关信息");
            }
            CodeRuleVO ruleVO = engineService.getCodeRuleByClassifyFullInfo(classifyFullInfo);
            if(ruleVO==null||StringUtils.isBlank(ruleVO.getOid())){
               objerrorCode="102";
               throw  new  Throwable ("根据传输的分类,未获取MDM系统中对应规则");
            }
            log.info("end:规则获取完毕");
            //List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(ruleVO,classifyFullInfo);
            log.info("end:码段获取完毕");
            CodeOrderDTO orderDTO = new CodeOrderDTO();
            orderDTO.setCodeClassifyOid(codeClassifyVO.getOid());//分类主键
            //orderDTO.setSecDTOList(codeOrderSecDTOList);//分类码段
            mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs,isCodeOrGroupCode);
            //allResultDataObjectDetailDOS.add(resultDataObjectDetailDOs);
            log.info("end:申请获取完毕");
         } catch (Throwable e) {
            List<ApplyBZDataVO> applyDataVOList = classfyBZVO.getObjects().getObject();
            objerrorCode = "1";
            if (!CollectionUtils.isEmpty(applyDataVOList)) {
               applyDataVOList.stream().forEach(applyDataVO -> {
                  XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
                  xmlResultDataObjectDetailDO.setCode("");
                  xmlResultDataObjectDetailDO.setId(applyDataVO.getId());
                  xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
                  xmlResultDataObjectDetailDO.setMsg("编码申请失败:" + e.getMessage());
                  resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
               });
            } else {
               XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
               xmlResultDataObjectDetailDO.setCode("");
               xmlResultDataObjectDetailDO.setId("");
               xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
               xmlResultDataObjectDetailDO.setMsg("编码申请失败:" + e.getMessage());
               resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
            }
            e.printStackTrace();
         } finally {
            XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
            resultClassfyVO.setClassCode(classfyBZVO.getClassCode());
            resultClassfyVO.setLibrary(classfyBZVO.getLibrary());
            resultClassfyVO.setFullclsfNamePath(classfyBZVO.getFullclsfNamePath());
            resultClassfyVO.setObjects(resultDataObjectDetailDOs);
            resultClassfyVOList.add(resultClassfyVO);
         }
         XMLResultSystemVO xmlResultSystemVO = new XMLResultSystemVO();
         xmlResultSystemVO.setClassifys(resultClassfyVOList);
         xmlResultSystemVO.setMsg(msg);
         xmlResultSystemVO.setErrorid(errorid[0]);
         resultStr = transferResultXMl(xmlResultSystemVO, dataType);
      }catch (Throwable e){
         e.printStackTrace();
         msg="申请编码失败:"+e.getMessage();
      }finally {
         XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
         xmlResultSystemVO.setClassifys(resultClassfyVOList);
         xmlResultSystemVO.setMsg(msg);
         xmlResultSystemVO.setErrorid(errorid[0]);
         resultStr= transferResultXMl(xmlResultSystemVO,dataType);
         final boolean[] issucess = {true};
         if(!errorid[0].equals("0")) {
            issucess[0] = false;
         }else {
            if(!CollectionUtils.isEmpty(resultClassfyVOList)) {
               resultClassfyVOList.stream().forEach(xMLResultClassfyVO -> {
                  xMLResultClassfyVO.getObjects().stream().forEach(objec -> {
                     if (!(objec.getErrorid().equals("0") || objec.getErrorid().equals("204"))) {
                        issucess[0] = false;
                        msg=objec.getMsg();
                     }
                  });
               });
            }
         }
         try {
            //记录日志
            this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "applyCodeForBZ");
         }catch (Throwable e){
            e.printStackTrace();
         }
      }
      log.info("返回参数:"+resultStr);
      //调用集团申请接口申请集团码
      return resultStr;
   }
@@ -2071,6 +2117,48 @@
    * @param classfyVO
    */
   private  CodeClassifyVO getClassfy(ClassfyVO classfyVO,String libray) throws Throwable{
      CodeClassifyVO classifyVO = new CodeClassifyVO();
      try {
         String classCode = classfyVO.getClassCode();
         String className = classfyVO.getFullclsfNamePath();
         //根据分类代号查询分类信息
         if (StringUtils.isNotBlank(classfyVO.getClassCode())) {
            Map<String, String> conditionMap = new HashMap<>();
            List<CodeClassify> codeClassifyList = classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().eq(CodeClassify::getId, classCode));
            final CodeClassify[] newCodeClassify = {new CodeClassify()};
            if (!CollectionUtils.isEmpty(codeClassifyList)) {
               codeClassifyList.stream().forEach(codeClassify -> {
                  CodeClassifyVO codeClassifyVO=  classifyService.getTopClassifyVO(codeClassify.getOid());
                  if(codeClassifyVO.getId().equals(libray)){
                     newCodeClassify[0] =codeClassify;
                  }
               });
               classifyVO = new CodeClassifyVO();
               BeanUtilForVCI.copyPropertiesIgnoreCase(newCodeClassify[0], classifyVO);
               //将DTO转换为DO
               if(StringUtils.isBlank(classifyVO.getOid())){
                  throw new  Throwable("申请编码的分类:【"+classCode+"】不属于库节点【"+libray+"】,请检查参数分类节点/库节点信息是否匹配");
               }
            }else{
               throw new  Throwable("根据分类代号未查询到相应的分类信息");
            }
         } else {
            classifyVO = classifyService.getObjectByClsfNamePath(className.replace(separator, "/"));
            if(StringUtils.isBlank(classifyVO.getOid())){
               throw new  Throwable("根据分类名称路径未查询到相应的分类信息");
            }
         }
      }catch (Throwable e){
         objerrorCode="100";
         throw    new  Throwable("获取分类信息失败:"+e.getMessage());
      }
      return classifyVO;
   }
   /***
    * 查询校验分类信息
    * @param classfyVO
    */
   private  CodeClassifyVO getClassfy(ClassfyBZVO classfyVO,String libray) throws Throwable{
      CodeClassifyVO classifyVO = new CodeClassifyVO();
      try {
         String classCode = classfyVO.getClassCode();
@@ -2122,6 +2210,21 @@
      });
      return clientBusinessObjectList;
   }
   private List<CodeOrderSecDTO> getRuleCodeOrderSecDTOsBZ(CodeRuleVO ruleVO,CodeClassifyFullInfoBO classifyFullInfo){
      List<CodeBasicSecVO>  codeBasicSecVOS= ruleVO.getSecVOList();
      List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
      Map<String,String> errorMap=new HashMap<>();
      for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) {
         String sectype = codeBasicSecVO.getSecType();
         String classifySecOid= codeBasicSecVO.getOid();
         String message="";
      }
      return codeOrderSecDTOList;
   }
   /***
    * 根据穿入的参数信息校验码段规则
    */
@@ -2131,7 +2234,7 @@
      SectionVOList.stream().forEach(SectionVO->{
         sectionVOMap.put(SectionVO.getName(),SectionVO.getValue());
      });
      Map<String,CodeClassifyVO> codeClassifyVOMap= classifyFullInfo.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getId(), t -> t,(o1, o2)->o2));
      //Map<String,CodeClassifyVO> codeClassifyVOMap= classifyFullInfo.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getId(), t -> t,(o1, o2)->o2));
      List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
      Map<String,String> errorMap=new HashMap<>();
      for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) {