xiejun
2024-01-26 8acf1b32b94ad05ce47130fd02647e87662aff2a
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.Scheduling.NonWebRequestAttributes;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.CodeOrderDTO;
@@ -54,6 +55,7 @@
import com.vci.ubcs.starter.web.util.WebUtil;
import com.vci.ubcs.system.user.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.BladeUser;
@@ -62,12 +64,16 @@
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionStatus;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.jws.WebMethod;
@@ -102,6 +108,11 @@
   @Value("${erp.item.systemId:ERP}")
   public String systemId;
   @Value("${erp.item.secName:固定码段}")
   public String secName;
   @Value("${erp.item.secValue:A}")
   public String secValue;
   /**
    * 业务类型的服务
@@ -122,8 +133,7 @@
   private MdmIOService mdmIOService;
   @Resource
   private IPasswordFreeLoginService passwordFreeLoginService;
   @Resource
   private WebServiceContext webServiceContext;
   @Resource
   private IDockingLogeService dockingLogeService;
   @Resource
@@ -152,7 +162,6 @@
   private MdmSearchItemCodeProvider mdmSearchItemCodeProvider;
   @Autowired
   HttpServletRequest request;
   @Override
   public void DockingDataSyncScheduing() {
@@ -214,7 +223,40 @@
      });
      return  R.success("手动推送完成,请核对是否推送成功");
   }
   private SearchItemDataVO initData(String status,String itemCode,String mmCode){
      SearchItemDataVO searchItemDataVO=new SearchItemDataVO();
      searchItemDataVO.setLastchangedon(new Date());
      searchItemDataVO.setLastchangedby("19831133");
      searchItemDataVO.setCreatby("19831133");
      searchItemDataVO.setCreatedon(new Date());
      searchItemDataVO.setIsenabled(status);
      searchItemDataVO.setMaterialcode("XMDH0001");
      searchItemDataVO.setStatus("1");
      searchItemDataVO.setProjectcode("3333");
      searchItemDataVO.setProjectitem(itemCode);
      searchItemDataVO.setMmodelcode(mmCode);
      return searchItemDataVO;
   }
   public HttpServletRequest  getRequest(){
      HttpServletRequest request =null;
      RequestAttributes requestAttributes = null;
      try{
         requestAttributes = RequestContextHolder.currentRequestAttributes();
      }catch (IllegalStateException e){
         //requestAttributes = new NonWebRequestAttributes();
         //RequestContextHolder.setRequestAttributes(requestAttributes, true);
         request = new MockHttpServletRequest();
         RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request),true);
      }finally {
         if (requestAttributes instanceof  ServletRequestAttributes) {
            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
            request = servletRequestAttributes.getRequest();
         }
      }
      return request;
   }
   /***
    * 同步型号代号
    */
@@ -232,12 +274,26 @@
      searchItemParam.setLastchangedon(lastchangedon);
      searchItemParam.setStatus("1");//
      Map<String,String>searchDataMap=  VciBaseUtil.objectToMapString(searchItemParam);
      SearchItemVO searchItemVO= mdmSearchItemCodeProvider.getppModelByElem(searchDataMap);
      //SearchItemVO searchItemVO= mdmSearchItemCodeProvider.getppModelByElem(searchDataMap);
      SearchItemVO searchItemVO=new SearchItemVO();
      List<SearchItemDataVO> data=new ArrayList<>();
      SearchItemDataVO searchItemDataVO1=initData("1","","pro-00001");
      SearchItemDataVO searchItemDataVO2=initData("0","item-00001","");
      data.add(searchItemDataVO1);
      data.add(searchItemDataVO2);
      searchItemVO.setData(data);
      searchItemVO.setCode("200");
      searchItemVO.setMsg("");
      String paramString="";
      String backString="成功";
      String msg="成功";
      boolean success=true;
      if(searchItemVO!=null) {
         paramString = JSONObject.toJSON(searchItemVO).toString();
         try {
            //免密登录申请token,request中添加用户信息
            try {
               passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT), request);
               passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT),getRequest());
            }catch (Throwable e){
               throw new Throwable("用户鉴权失败.");
            }
@@ -257,6 +313,8 @@
            List<SearchItemDataVO> dataList = searchItemVO.getData();
            Map<String, SearchItemDataVO> dataVOMap = new HashMap<>();
            List<String> itemCodeList = new ArrayList<>();
            ApplyDatasVO allDatasVO = new ApplyDatasVO();
            List<ApplyDataVO> allObjectList=new ArrayList<>();
            if (!CollectionUtils.isEmpty(dataList)) {
               dataList.stream().forEach(searchItemDataVO -> {
                  String itemCode = StringUtils.isNotBlank(searchItemDataVO.getProjectitem()) ? searchItemDataVO.getProjectitem() : searchItemDataVO.getMmodelcode();//项目代号
@@ -264,7 +322,7 @@
                  itemCodeList.add(itemCode);
               });
               String tableName = "";
               R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(btmName);
               R<BtmTypeVO> r = btmTypeClient.getAllAttributeByBtmId(codeClassify.getBtmTypeId());
               if (!r.isSuccess()) {
                  throw new Throwable(r.getMsg());
               }
@@ -273,7 +331,7 @@
                  throw new Throwable("根据业务类型未查询到业务类型对象!");
               }
               tableName = btmTypeVO.getTableName();
               if (com.alibaba.nacos.common.utils.StringUtils.isBlank(tableName)) {
               if (StringUtils.isBlank(tableName)) {
                  throw new Throwable("根据业务类型未查询到业务类型相关联的表");
               }
               StringBuffer sb = new StringBuffer();
@@ -282,19 +340,21 @@
               sb.append(" where 1=1");
               sb.append(" and lastr=1 and lastv=1");
               sb.append(" and codeclsfid = '" + codeClassify.getOid() + "' ");
               sb.append( VciBaseUtil.toInSql(attrKey,VciBaseUtil.array2String(itemCodeList.toArray(new String[]{}))));
               sb.append(" and "+ VciBaseUtil.toInSql(attrKey,itemCodeList.toArray(new String[]{})));
               List<Map<String, String>> newDataList = commonsMapper.queryByOnlySqlForMap(sb.toString());
               //List<BaseModel> baseModelList=new ArrayList<>();
               Map<String,BaseModel> baseModelMap=new HashMap<>();
               newDataList.stream().forEach(dataMap->{
                  BaseModel baseModel=new BaseModel();
                  DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(dataMap,baseModel,false,user);
                  Map<String,String> newDateMap=new CaseInsensitiveMap<>(dataMap);
                  DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(newDateMap,baseModel,true,user);
                  DefaultAttrAssimtUtil.updateDefaultAttrAssimt(baseModel,user);
                  //baseModelList.add(baseModel);
                  String attrKeyValue=dataMap.getOrDefault(attrKey,"");
                  String attrKeyValue=newDateMap.getOrDefault(attrKey,"");
                  baseModelMap.put(attrKeyValue,baseModel);
               });
               ApplyDatasVO editDatasVO = new ApplyDatasVO();
               List<ApplyDataVO> addObjectList=new ArrayList<>();
               List<ApplyDataVO> editObjectList=new ArrayList<>();
               dataVOMap.forEach((key,value)->{
@@ -305,6 +365,10 @@
                     changeObjectToMap(value,"",user,"create",addObjectList);
                  }
               });
               allObjectList.addAll(addObjectList);
               allObjectList.addAll(editObjectList);
               allDatasVO.setObject(allObjectList);
               LinkedList<XMLResultDataObjectDetailDO> allResultDataObjectDetailDOS=new LinkedList<>();
               if(!CollectionUtils.isEmpty(addObjectList)){
                  //规则的主键需要去获取
                  CodeClassifyFullInfoBO classifyFullInfo = codeClassifyService.getClassifyFullInfo(codeClassify.getOid());
@@ -323,32 +387,89 @@
                  this.getConfigDatas(systemId, btmName, applyDatasVO, attrVOS, dataObjectVO);
                  CodeOrderDTO orderDTO = new CodeOrderDTO();
                  orderDTO.setCodeClassifyOid(codeClassify.getOid());//分类主键
                  //码段设置
                  List<SectionVO> section=new ArrayList<>();
                  SectionVO sectionVO=new SectionVO();
                  sectionVO.setValue(secValue);
                  sectionVO.setName(secName);
                  section.add(sectionVO);
                  log.info("end:规则获取完毕");
                  List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(null, ruleVO,classifyFullInfo);
                  List<CodeOrderSecDTO> codeOrderSecDTOList = getRuleCodeOrderSecDTOs(section, ruleVO,classifyFullInfo);
                  log.info("end:码段获取完毕");
                  orderDTO.setSecDTOList(codeOrderSecDTOList);//分类码段
                  mdmIOService.batchSyncApplyCode(orderDTO, dataObjectVO, resultDataObjectDetailDOs,false);
                  allResultDataObjectDetailDOS.addAll(resultDataObjectDetailDOs);
               }
               //更新数据(更新状态)
               if(!CollectionUtils.isEmpty(editObjectList)){
                  DataObjectVO dataObjectVO = new DataObjectVO();
                  ApplyDatasVO applyDatasVO = new ApplyDatasVO();
                  applyDatasVO.setObject(editObjectList);
                  LinkedList<XMLResultDataObjectDetailDO> resultDataObjectDetailDOs = new LinkedList<>();
                  CodeClassifyVO codeClassifyVO=new CodeClassifyVO();
                  BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassify, codeClassifyVO);
                  this.getConfigDatas(systemId, btmName, applyDatasVO, attrVOS, dataObjectVO);
                  mdmIOService.batchSyncEditDatas(codeClassifyVO,dataObjectVO, resultDataObjectDetailDOs,false);
                  allResultDataObjectDetailDOS.addAll(resultDataObjectDetailDOs);
               }
               Object paramObject = JSONObject.toJSON(allDatasVO);
               paramString=Func.isEmpty(paramObject)?"":paramObject.toString();
               Object backObject = JSONObject.toJSON(allResultDataObjectDetailDOS);
               backString=Func.isEmpty(backObject)?"":backObject.toString();
            }
         }
         catch (Throwable e){
            e.printStackTrace();;
            log.error("查询失败--->"+e);
            success=false;
            backString="查询失败--->"+e;
            msg="查询失败--->"+e;
         }finally {
            try {
               //记录日志
               this.saveLogs(systemId, systemId, paramString, backString, success, msg, "queryData");
            }catch (Throwable e){
               e.printStackTrace();
               log.error(e.getMessage());
            }
         }
      }
   }
   /***
    * 记录日志信息
    * @param systemId
    * @param parmaData
    * @param result
    * @return
    */
   private  void saveLogs(String systemId,String systemName,String parmaData, String result,boolean isSucess,String msg,String operation){
      //记录日志信息
      DockingLog dockingLoge=new DockingLog();
      //String oid=redisService.getUUIDEveryDay();
      dockingLoge.setSystemCode(StringUtils.isBlank(systemId)?"-":systemId);//设置系统标识
      dockingLoge.setSystemName(StringUtils.isBlank(systemName)?"-":systemName);
      dockingLoge.setMsg(msg);//日志消息
      dockingLoge.setClassifyId("-");//分类编号
      dockingLoge.setClassifyName("-");//分类名称
      dockingLoge.setClassifyOid("-");//分类主键
      dockingLoge.setUniqueCode("-");//唯一标识
      dockingLoge.setSystemOid("-");//系统标识
//        dockingLogeDO.setName(operation);
      //dockingLogeDO.setOid(oid);//日志主键
      dockingLoge.setParamString(parmaData);//参数信息
      dockingLoge.setReturnString(result);//返回信息
      dockingLoge.setType(operation);//日志操作类型
      dockingLoge.setCreateTime(new Date());
      if(isSucess) {
         dockingLoge.setInterfaceStatus("true");//接口集成状态
      }else{
         dockingLoge.setInterfaceStatus("false");//接口集成状态
      }
      dockingLogeService.save(dockingLoge);
      log.info("集成推送数据成功,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData);
   }
   /***
    * 根据传入的参数信息校验码段规则
    */
@@ -540,13 +661,15 @@
    //String status= searchItemDataVO.getStatus();//数据状态 字符型,枚举值;制单:0;审批中:1;通过:2;驳回:3;
    String mmodelCode=searchItemDataVO.getMmodelcode();//制造型号代号
    initProperty("mmodelCode","","mmodelCode",propList);
    initProperty("mmodelcode","",mmodelCode,propList);
    String projectCode= searchItemDataVO.getProjectcode();//项目编码
    initProperty("projectcode","","projectCode",propList);
    initProperty("projectcode","",projectCode,propList);
    String projectItem=searchItemDataVO.getProjectitem();//项目代号
    initProperty("projectitem","","projectItem",propList);
    initProperty("projectitem","",projectItem,propList);
    String materialCode=searchItemDataVO.getMaterialcode();//产品编码
    initProperty("materialcode","","materialCode",propList);
    initProperty("materialcode","",materialCode,propList);
    //组合属性的处理
    initProperty(attrKey,"",StringUtils.isNotBlank(projectItem)?projectItem:mmodelCode,propList);
    String creatBy=searchItemDataVO.getCreatby();//创建者
    Date cretaeDon= searchItemDataVO.getCreatedon();//创建日期 日期型,如:2023-09-08 19:24:11
    String lastchangeBy=searchItemDataVO.getLastchangedby();//更改者
@@ -554,7 +677,7 @@
    String isenabled=  searchItemDataVO.getIsenabled();//字符型,枚举值;停用:0;启用:1;
    applyDataVO.setOperate(operation);
    applyDataVO.setCode(code);
    if(isenabled.equals(0)){
    if(isenabled.equals("0")){
       applyDataVO.setStatus(CodeDefaultLC.DISABLE.getValue());
    }else{
       applyDataVO.setStatus(CodeDefaultLC.RELEASED.getValue());