xiejun
2023-12-06 e9a590e862148092027510b15d33cdd32691a6f5
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -8,6 +8,7 @@
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.CodeBZApplyDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.entity.*;
@@ -37,7 +38,6 @@
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;
import com.vci.ubcs.starter.exception.VciBaseException;
@@ -54,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.http.auth.AuthenticationException;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -72,6 +71,7 @@
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
@@ -84,6 +84,50 @@
@Slf4j
@VciWebservice(path = "/universalInterface")
public class UniversalInterfaceImpl<IDockingLogeServiceing> implements UniversalInterfaceI {
   /***
    * 操作类型
    */
   @Value("${bzApply.operationType:operationType}")
   private String operationType;
   /***
    * 是否系列
    */
   @Value("${bzApply.isSeries:isSeries}")
   private String isSeries;
   /***
    *发布时间
    */
   @Value("${bzApply.releaseTime:releaseTime}")
   private String releaseTime;
   /***
    * 源标准号
    */
   @Value("${bzApply.oldCode:oldCode}")
   private String oldCode;
   /***
    * 系列流水
    */
   @Value("${bzApply.seriesFlow:seriesFlow}")
   private String seriesFlow;
   /***
    * 是否变更系列
    */
   @Value("${bzApply.isEditSeries:isEditSeries}")
   private String isEditSeries;
   /***
    * 控制是否写入值的码段名称
    */
   @Value("${bzApply.secName:系列号}")
   private String secName;
   /***
    * 控制是否写入值的码段名称
    */
   @Value("${bzApply.yearSecName:年代号}")
   private String yearSecName;
   @Value("${code.universalinterface.checkSystemConfig:true}")
   public boolean CODE_CHECKCONFIG;
@@ -237,9 +281,7 @@
         UserVO userVo = interParameterVO.getData().getUser();
         //免密登录申请token,request中添加用户信息
         //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest());
         passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT),this.getRequest());
         AuthUtil.getUser();
         List<ClassfyVO> classVOList = classfysVO.getClassify();
         InterParameterVO finalInterParameterVO = interParameterVO;
         //这是账号信息
@@ -858,6 +900,7 @@
                     orderDTO.setData(rowData.getFiledValue());
                     String code=engineService.addSaveCodeNotauthUser(orderDTO,false);
                     if(StringUtils.isNotBlank(code)) {
                        //rowData.setCode(code);
                        StringBuffer sqlsb = new StringBuffer();
                        sqlsb.append(" select * from ");
                        sqlsb.append(tableName);
@@ -1070,7 +1113,7 @@
            }
         });
      }catch (Throwable e){
         e.printStackTrace();;
         e.printStackTrace();
         msg="编码更改/状态更改/删除:"+e.getMessage();
          /*  XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO();
            XMLResultSystemVO.setErrorid(errorid);
@@ -1254,7 +1297,7 @@
         issucess=true;
         resultData.setLibrary(libraryVo);
      }catch (Throwable e){
         e.printStackTrace();;
         e.printStackTrace();
         msg="查询分类失败:"+e.getMessage();
      }finally {
         resultData.setErrorid(errorid);
@@ -1473,7 +1516,7 @@
            msg = "接口参数:library 未查询到对应的库节点信息";
         }
      }catch (Throwable e){
         e.printStackTrace();;
         e.printStackTrace();
         msg="查询数据失败:"+e.getMessage();
      }finally {
         resultDataVO.setErrorid(errorid);
@@ -1925,7 +1968,7 @@
         issucess=true;
         resultClassifyRuleData.setLibrary(resultLibraryVO);
      }catch (Throwable e){
         e.printStackTrace();;
         e.printStackTrace();
         msg="查询分类失败:"+e.getMessage();
      }finally {
         resultClassifyRuleData.setErrorid(errorid);
@@ -1982,7 +2025,7 @@
         try {
            if ("xml".equals(dataType)) {
               XStream xStream = new XStream(new DomDriver());
               xStream.processAnnotations(RootDataVO.class);
               xStream.processAnnotations(ApplyBZVO.class);
               xStream.autodetectAnnotations(true);
               ApplyBZVO rootDataVO = (ApplyBZVO) xStream.fromXML(data);
               applyBZParamVO.setData(rootDataVO);
@@ -1999,18 +2042,15 @@
         //免密登录申请token,request中添加用户信息
         //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(), this.getRequest());
         passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(),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;
         libray = classfyBZVO.getLibrary();
         CodeClassifyVO codeClassifyVO = getClassfy(classfyBZVO,libray);
         log.info("end:分类查询完毕");
@@ -2032,8 +2072,8 @@
         }
         CodeClassifyTemplateVO templateVO = engineService.getUsedTemplateByClassifyOid(codeClassifyVO.getOid());
         if(templateVO==null||StringUtils.isBlank(templateVO.getOid())){
            objerrorCode="1";
            throw  new  Throwable ("根据传输的分类,未获取MDM系统中对应模板");
            objerrorCode="100";
            throw  new  Throwable ("根据传输的分类,未获取系统中对应模板");
         }
         log.info("end:模板查询完毕");
         ApplyBZDatasVO applyBZDatasVO = classfyBZVO.getObjects();
@@ -2041,54 +2081,76 @@
         List<CodeClassifyTemplateAttrVO> attrVOS = templateVO.getAttributes().stream().filter(s -> !DEFAULT_SYNC_ATTR_LIST.contains(s.getId()) && VciBaseUtil.getBoolean(s.getFormDisplayFlag())
         ).collect(Collectors.toList());
         List<ApplyBZDataVO> applyBZDataVOList=   applyBZDatasVO.getObject();
         if(applyBZDataVOList.size()>1){
            objerrorCode="1";
            throw  new  Throwable ("标准申请只支持一条数据申请");
         }
         String finalLibray = libray;
         ClassfyBZVO finalClassfyBZVO = classfyBZVO;
         //规则的主键需要去获取
         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(classfyBZVO.getSections().getSection(), ruleVO,classifyFullInfo);
         log.info("end:码段获取完毕");
         CodeBZApplyDTO codeBZApplyDTO=new CodeBZApplyDTO();
         codeBZApplyDTO.setSecDTOList(codeOrderSecDTOList);//分类码段
         applyBZDataVOList.stream().forEach(applyBZDataVO -> {
            String code="";
            String id=applyBZDataVO.getId();
            try {
               this.getConfigDatas(finalSystemId, finalLibray, applyBZDatasVO, attrVOS, dataObjectVO);
               List<ProppertyVO> proppertyVOList=applyBZDataVO.getProp();
               String oldCodeValue=applyBZDataVO.getOldCode();
               setPropertyValue(oldCode,oldCodeValue,proppertyVOList);//源标准号
               boolean editSeriesFlag= applyBZDataVO.isEditSeriesFlag();
               setPropertyValue(isEditSeries,String.valueOf(editSeriesFlag),proppertyVOList);//是否更为系列
               boolean seriesFlag=applyBZDataVO.isSeriesFlag();
               setPropertyValue(isSeries,String.valueOf(seriesFlag),proppertyVOList);//源标准类型
               String operationTypeValue=applyBZDataVO.getOperationType();
               setPropertyValue(operationType,operationTypeValue,proppertyVOList);//操作类型1:制定,2:修订
               String releaseTimeValue= applyBZDataVO.getReleaseTime();
               setPropertyValue(releaseTime,releaseTimeValue,proppertyVOList);//发布时间
               String seriesFlow=applyBZDataVO.getSeriesFlow();//系列流水
               codeBZApplyDTO.setOldCode(oldCodeValue);
               codeBZApplyDTO.setReleaseTime(releaseTimeValue);
               codeBZApplyDTO.setEditSeries(editSeriesFlag);
               codeBZApplyDTO.setSeries(seriesFlag);
               codeBZApplyDTO.setOperationType(operationTypeValue);
               codeBZApplyDTO.setSeriesFlow(seriesFlow);
               codeBZApplyDTO.setCodeClassifyOid(codeClassifyVO.getOid());
               codeBZApplyDTO.setCodeRuleOid(ruleVO.getOid());
               codeBZApplyDTO.setTemplateOid(templateVO.getOid());
               codeBZApplyDTO.setCreator(applyBZDataVO.getCreator());
               codeBZApplyDTO.setLastModifier(applyBZDataVO.getEditor());
               codeBZApplyDTO.setLcStatus(applyBZDataVO.getStatus());
               ApplyBZDatasVO newApplyBZDatasVO=new ApplyBZDatasVO();
               newApplyBZDatasVO.setObject(Arrays.asList(applyBZDataVO));
               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:申请获取完毕");
               this.getConfigDatas(finalSystemId, finalLibray, newApplyBZDatasVO, attrVOS, dataObjectVO);
               log.info("end:数据组织完毕");
               codeBZApplyDTO.setData(dataObjectVO.getRowData().get(0).getFiledValue());
               code=engineService.addSaveBZCodeNotauthUser(codeBZApplyDTO,false);
               msg="编码申请成功:编码为:"+code;
            } catch (Throwable e) {
               List<ApplyBZDataVO> applyDataVOList = finalClassfyBZVO.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);
               }
               msg="编码申请失败:" +e.getMessage();
               e.printStackTrace();
            }finally {
               XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
               xmlResultDataObjectDetailDO.setCode(code);
               xmlResultDataObjectDetailDO.setId(id);
               xmlResultDataObjectDetailDO.setErrorid(objerrorCode);
               xmlResultDataObjectDetailDO.setMsg(msg);
               resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
            }
         });
         XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
@@ -2106,7 +2168,6 @@
         e.printStackTrace();
         msg="申请编码失败:"+e.getMessage();
      }finally {
         XMLResultSystemVO xmlResultSystemVO=new XMLResultSystemVO();
         xmlResultSystemVO.setClassifys(resultClassfyVOList);
         xmlResultSystemVO.setMsg(msg);
@@ -2137,6 +2198,13 @@
      log.info("返回参数:"+resultStr);
      //调用集团申请接口申请集团码
      return resultStr;
   }
   private void setPropertyValue(String key,String value,List<ProppertyVO> proppertyVOList){
      ProppertyVO proppertyVO=new ProppertyVO();
      proppertyVO.setKey(key);
      proppertyVO.setValue(StringUtils.isBlank(value)?"":value);
      proppertyVOList.add(proppertyVO);
   }
   /***
    * 查询校验分类信息
@@ -2227,7 +2295,7 @@
      List<ClientBusinessObject> clientBusinessObjectList=new ArrayList<>();
      oldDataMap.stream().forEach(dataMap->{
         ClientBusinessObject clientBusinessObject=new ClientBusinessObject();
         DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject);
         DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,clientBusinessObject,true);
         for (String key:dataMap.keySet()){
            Object value= dataMap.getOrDefault(key,"");
            clientBusinessObject.setAttributeValue(key.toLowerCase(Locale.ROOT),value==null?"":value.toString());
@@ -2252,7 +2320,7 @@
   /***
    * 根据穿入的参数信息校验码段规则
    * 根据传入的参数信息校验码段规则
    */
   private List<CodeOrderSecDTO> getRuleCodeOrderSecDTOs(List<SectionVO> SectionVOList,CodeRuleVO ruleVO,CodeClassifyFullInfoBO classifyFullInfo) throws Throwable{
      List<CodeBasicSecVO>  codeBasicSecVOS= ruleVO.getSecVOList();
@@ -2265,6 +2333,7 @@
      Map<String,String> errorMap=new HashMap<>();
      for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) {
         String sectype = codeBasicSecVO.getSecType();
         String newSecName=codeBasicSecVO.getName();
         String classifySecOid= codeBasicSecVO.getOid();
         String message="";
         if (!sectype.equals(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())) {
@@ -2294,14 +2363,14 @@
                     }
                  }
               }
               if(StringUtils.isBlank(sectypeValue)){
               if(StringUtils.isBlank(sectypeValue)&&!newSecName.equals(secName)){
                  message="传入的分类码段:【" + name + " 】的值不允许为空";
                  errorMap.put("error",errorMap.getOrDefault("error","")+";"+message);
               }
               CodeOrderSecDTO.setSecValue(sectypeValue);
               codeOrderSecDTOList.add(CodeOrderSecDTO);
            } else {
               message="传入的码段规则缺少" + name + "码段";
               message="传入的码段规则缺少" + name;
               errorMap.put("error",errorMap.getOrDefault("error","")+";"+message);
            }
         }
@@ -2384,7 +2453,7 @@
            LinkedHashMap<Integer, String> integerValueMap = new LinkedHashMap<>();
            Map<String, String> filedValueMap = new HashMap<>();
            if (!CollectionUtils.isEmpty(proppertyVOList)) {
               Map<String, String> sourceKeyValueMap = proppertyVOList.stream().collect(Collectors.toMap(ProppertyVO::getKey, ProppertyVO::getValue, (key1, key2) -> key2));
               Map<String, String> sourceKeyValueMap = proppertyVOList.stream().collect(Collectors.toMap(ProppertyVO::getKey,  ProppertyVO::getValue, (key1, key2) -> key2));
               Map<String, String> keyValueMap = new HashMap<>();
               //判断attrMapConfigMap是否有值,如果没有则说明基础默认的是编码系统字段
               if (!CollectionUtils.isEmpty(attrMapConfigMap)) {