ludc
2024-04-12 52e81ee85d4c2a3fb9d3fcd70eae998272d48cd2
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeDuckingSyncServiceImpl.java
@@ -9,6 +9,7 @@
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
import com.vci.ubcs.code.constant.MdmDuckingConstant;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
@@ -51,7 +52,6 @@
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.WebUtil;
import com.xkcoding.http.support.Http;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.springblade.core.redis.cache.BladeRedis;
@@ -66,7 +66,6 @@
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;
@@ -118,12 +117,11 @@
   @Value("${erp.item.bearer:bearer: Bearer 7fc32939-0a59-da71-a6e6-6b0d37b53e8a}")
   private String ERPXHDHAUTH;
   @Value("${erp.item.url:http://127.0.0.1:8080/api/pp/pp/v1.0}")
   @Value("${erp.item.url:http://127.0.0.1/api/pp/pp/ext/extend/v1.0}")
   private String ERPXHDHURL;
   @Value("${erp.item.tenant:10000}")
   private String ERPXHDHTENANT;
   /**
    * 业务类型的服务
@@ -185,8 +183,8 @@
   @Autowired(required = false)
   private MdmSearchItemCodeProvider mdmSearchItemCodeProvider;
   @Autowired
   HttpServletRequest request;
   @Resource
   private ICodeAllCodeService codeAllCodeService;
   @Override
   public void DockingDataSyncScheduing() {
@@ -283,7 +281,6 @@
         }
         org.springblade.core.tool.utils.WebUtil.setRequest(new ServletRequestAttributes(request));
      }
      return request;
   }
@@ -305,26 +302,30 @@
         calendar.set(Calendar.HOUR_OF_DAY, 0);
         calendar.set(Calendar.MINUTE, 0);
         calendar.set(Calendar.SECOND, 0);
         log.info("查询时间------->"+calendar.getTime());
         log.info("查询时间------->"+dft.format(new Date()));
         lastchangedon= dft.format(calendar.getTime());
      }else{
         lastchangedon=endDate;
      }
      searchItemParam.setLastchangedon(lastchangedon);
      searchItemParam.setStatus(itemStatus);//
      Map<String,String>searchDataMap=  VciBaseUtil.objectToMapString(searchItemParam);
      searchItemParam.setIsenabled("");
      searchItemParam.setStatus(itemStatus);
      //Map<String,String> searchDataMap = VciBaseUtil.objectToMapString(searchItemParam);
      try {
         paramString=JSONObject.toJSON(searchItemParam).toString();
         String sendParamString=JSONObject.toJSON(searchItemParam).toString();
         // TODO: 改为使用HttpUtils方式进行申请,因为现在申请用之前的方式会报错
         LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
         headers.add("Authorization",ERPXHDHAUTH);
         headers.add("X-ECC-Current-Tenant",ERPXHDHTENANT);
         headers.add("Accept-Language","zh-CHS");
         headers.add("Content-Type",MediaType.APPLICATION_JSON.toString());
         String res = HttpUtils.request(ERPXHDHURL+"/getppModelByElem",paramString,headers, HttpMethod.POST,MediaType.APPLICATION_JSON);
         String res = HttpUtils.request(ERPXHDHURL+"/getppModelByElemNew",sendParamString,headers, HttpMethod.POST,MediaType.APPLICATION_JSON);
         // String res= mdmSearchItemCodeProvider.getppModelByElem(searchItemParam);
         SearchItemVO searchItemVO = JSONObject.toJavaObject(JSONObject.parseObject(res), SearchItemVO.class);
         if (searchItemVO != null) {
            if(!"200".equals(searchItemVO.getStatus())){
               throw new ServiceException(String.format("接口返回状态码为:%s,原因:%s",searchItemVO.getStatus(),searchItemVO.getMessage()));
            }
            BladeUser finalUser;
            paramString = JSONObject.toJSON(searchItemVO).toString();
            log.info("型号代号数据值-------》"+paramString);
@@ -358,7 +359,7 @@
               List<String> itemCodeList = new ArrayList<>();
               ApplyDatasVO allDatasVO = new ApplyDatasVO();
               List<ApplyDataVO> allObjectList = new ArrayList<>();
               if (!CollectionUtils.isEmpty(dataList)) {
               if (Func.isNotEmpty(dataList)) {
                  dataList.stream().forEach(searchItemDataVO -> {
                     String itemCode = StringUtils.isNotBlank(searchItemDataVO.getPROJECTITEM()) ? searchItemDataVO.getPROJECTITEM() : searchItemDataVO.getMMODELCODE();//项目代号
                     dataVOMap.put(itemCode, searchItemDataVO);
@@ -464,8 +465,6 @@
                  paramString = Func.isEmpty(paramObject) ? "" : paramObject.toString();
                  Object backObject = JSONObject.toJSON(allResultDataObjectDetailDOS);
                  backString = Func.isEmpty(backObject) ? "" : backObject.toString();
               }else{
                  throw new Throwable("接口未返回信息");
               }
            } catch (Throwable e) {
               e.printStackTrace();
@@ -537,7 +536,7 @@
         dockingLoge.setInterfaceStatus("false");//接口集成状态
      }
      dockingLogeService.save(dockingLoge);
      log.info("集成推送数据成功,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData);
      log.info("集成推送数据,systemId:"+systemId+",systemname:"+systemName+",operation:"+operation+",param:"+parmaData);
   }
   /***
@@ -950,7 +949,7 @@
   /***
    * 发送编码主数据
    */
   private void sendpushDataForService (List<DockingTask> dockingTaskS){
   private void sendpushDataForService(List<DockingTask> dockingTaskS){
      //每个task依次执行推送
      for (DockingTask dockingTask:dockingTaskS){
         //每个task一个事务,开启
@@ -967,13 +966,31 @@
            //表示是主数据
            CodeClassifyTemplateVO codeClassifyTemplateVO = mdmEngineServiceI.getUsedTemplateByClassifyOid(classifyoid);
            R<List<Map<String, String>>> r = mdmEngineServiceI.getDataByOid(btmoid, codeClassifyTemplateVO.getOid());
            List<CodeClassifyTemplateAttrVO> attrVOS = codeClassifyTemplateVO.getAttributes();
            Map<String/**英文名称**/, String/**中文名称**/> attrIdNameMap = attrVOS.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t.getName(), (o1, o2) -> o2));
            Map<String, String> data = new HashMap<>();
            if (r == null) {
               JSONObject josni = bladeRedis.get(DOCKING_CACHE2_DELETE + btmoid);
               data = (Map) josni;
            // TODO: 回收编码的情况,会出现数据已经回收,但是事务还未执行的情况,
            //  所以这儿缓存就得按照啥时候回收的推送成功了啥时候才能清空指定的缓存
            if (!r.isSuccess() || Func.isEmpty(r.getData())) {
               List<CodeAllCode> codeAllCodes = codeAllCodeService.selectByWrapper(Wrappers.<CodeAllCode>query().lambda().eq(CodeAllCode::getId, dockingTask.getId()));
               CodeAllCode codeAllCode = codeAllCodes.get(0);
               BaseModel baseModel = JSONObject.parseObject(codeAllCode.getBusinessData(), BaseModel.class);
               Map<String, Object> objectMap = VciBaseUtil.objectToMap(baseModel);
               for (Map.Entry<String,Object> entry : objectMap.entrySet()){
                  if(entry.getKey().equals("data") && Func.isNotEmpty(entry.getValue())){
                     Map<String, Object> dataMap = ((JSONObject) entry.getValue());
                     for(Map.Entry<String,Object> dataEntry : dataMap.entrySet()){
                        String v = String.valueOf(dataEntry.getValue());
                        data.put(dataEntry.getKey().toLowerCase(Locale.ROOT), v == null ? "" : v);
                     }
                  }else{
                     String key = entry.getKey().toLowerCase(Locale.ROOT);
                     String value = String.valueOf(entry.getValue());
                     data.put(key, value == null ? "":value);
                  }
               }
               /*JSONObject josni = bladeRedis.get(DOCKING_CACHE2_DELETE + btmoid);
               data = (Map) josni;*/
            } else {
               data = r.getData().get(0);
            }
@@ -1003,8 +1020,10 @@
            }
            if(isGroupCodeFlage){
               code=data.getOrDefault("groupcode","");
               if(StringUtils.isBlank(code)) {//如果是集团码,没有领取到集团码则任务不结束等待集团码申请后再通过定时器调用集团码段
               if(StringUtils.isBlank(code)) {
                  //如果是推送集团码,没有领取到集团码则任务不结束等待集团码申请后再通过定时器调用集团码段
                  dockingTask.setDescription("等待集团申请集团码");
                  // TODO:可能会出现未获取到集团码,就被点了回收,这时候
                  dockingTask.setSendFlag(MdmDuckingConstant.SEND_FLAG_FALSE);
                  dockingTask.setLastModifyTime(new Date());
                  dockingTaskService.updateById(dockingTask);
@@ -1206,7 +1225,7 @@
   /***
    * 查询需要集成的业务数据任务
    */
   private void sendpushDataForService (){
   private void sendpushDataForService(){
      initSysadmin();
      //查询哪些任务还没有执行完成
      //VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
@@ -1226,12 +1245,11 @@
    */
   private void sendpushClsfForService(){
      initSysadmin();
   /*   //查询哪些任务还没有执行完成
      /*   //查询哪些任务还没有执行完成
      VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(DockingTaskDO.class);
      queryWrapper.addQueryMap("sendFlag",MdmDuckingConstant.SEND_FLAG_FALSE);
      queryWrapper.addQueryMap("btmId",DOCKING_DEFAULT_CLASSIFY.toUpperCase(Locale.ROOT));
      List<DockingTaskDO> dockingTaskDOS = dockingTaskDaoI.selectByWrapper(queryWrapper);*/
      //根据类型去查询需要集成的分类或者数据
      LambdaQueryWrapper<DockingTask> queryWrapper = Wrappers.<DockingTask>lambdaQuery();
      queryWrapper.eq(DockingTask::getSendFlag,MdmDuckingConstant.SEND_FLAG_FALSE);