SendOrderInfoTask.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package com.kmall.admin.haikong.task;
  2. import com.fasterxml.jackson.core.type.TypeReference;
  3. import com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity;
  4. import com.kmall.admin.entity.haikong.HaiKongSendOrderInfoDetailRecordEntity;
  5. import com.kmall.admin.entity.haikong.HaiKongSendOrderInfoRecordEntity;
  6. import com.kmall.admin.haikong.client.VmcShopTemplate;
  7. import com.kmall.admin.haikong.constant.ErrorCodeConstants;
  8. import com.kmall.admin.haikong.constant.HaiKongMemberOrderResendStatusEnum;
  9. import com.kmall.admin.haikong.dto.*;
  10. import com.kmall.admin.haikong.utils.Response;
  11. import com.kmall.admin.service.PickUpCodeService;
  12. import com.kmall.admin.service.haikong.HaiKongSendOrderInfoDetailRecordService;
  13. import com.kmall.admin.service.haikong.HaiKongSendOrderInfoRecordService;
  14. import com.kmall.admin.utils.jackson.JacksonUtil;
  15. import com.kmall.common.constant.Dict;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.scheduling.annotation.Scheduled;
  21. import org.springframework.stereotype.Component;
  22. import org.springframework.util.CollectionUtils;
  23. import java.util.ArrayList;
  24. import java.util.Date;
  25. import java.util.List;
  26. import java.util.Objects;
  27. import java.util.stream.Collectors;
  28. /**
  29. * 推送订单,重推接口
  30. * @author lhm
  31. * @createDate 2021-12-10
  32. */
  33. @Component
  34. public class SendOrderInfoTask {
  35. private static final Logger log = LoggerFactory.getLogger(SendOrderInfoTask.class);
  36. @Autowired
  37. private HaiKongSendOrderInfoRecordService haiKongSendOrderInfoRecordService;
  38. @Autowired
  39. private HaiKongSendOrderInfoDetailRecordService haiKongSendOrderInfoDetailRecordService;
  40. @Autowired
  41. private PickUpCodeService pickUpCodeService;
  42. @Autowired
  43. private VmcShopTemplate vmcShopTemplate;
  44. @Scheduled(cron = "0 0/1 * * * ?")
  45. public void resend() {
  46. // 查询等待发送和发送失败的记录
  47. List<HaiKongSendOrderInfoRecordEntity> haiKongSendOrderInfoRecordEntities = haiKongSendOrderInfoRecordService.queryListByResendStatus();
  48. if (CollectionUtils.isEmpty(haiKongSendOrderInfoRecordEntities)) {
  49. return;
  50. }
  51. List<HaiKongSendOrderInfoRecordEntity> successList = new ArrayList<>();
  52. List<HaiKongSendOrderInfoRecordEntity> failedList = new ArrayList<>();
  53. haiKongSendOrderInfoRecordEntities.forEach(haiKongSendOrderInfoRecordEntity -> {
  54. SendOrderToVmcShopDTO sendOrderToVmcShopDTO = new SendOrderToVmcShopDTO();
  55. SeaportInfoDTO seaportInfoDTO = new SeaportInfoDTO();
  56. PayInfoDTO payInfoDTO = new PayInfoDTO();
  57. OrderInfoDTO orderInfoDTO = new OrderInfoDTO();
  58. BeanUtils.copyProperties(haiKongSendOrderInfoRecordEntity, orderInfoDTO);
  59. BeanUtils.copyProperties(haiKongSendOrderInfoRecordEntity, payInfoDTO);
  60. String response1 = payInfoDTO.getResponse();
  61. response1 = response1.replaceAll("\r|\n", "");
  62. payInfoDTO.setResponse(response1);
  63. seaportInfoDTO.setSeaportCode(haiKongSendOrderInfoRecordEntity.getSeaportCode());
  64. seaportInfoDTO.setPlatform(haiKongSendOrderInfoRecordEntity.getPlatform());
  65. seaportInfoDTO.setIdentityCard(haiKongSendOrderInfoRecordEntity.getIdentityCard());
  66. seaportInfoDTO.setIdentityMobile(haiKongSendOrderInfoRecordEntity.getIdentityMobile());
  67. seaportInfoDTO.setIdentityName(haiKongSendOrderInfoRecordEntity.getIdentityName());
  68. seaportInfoDTO.setOrderProductInfoList(JacksonUtil.fromListJson(haiKongSendOrderInfoRecordEntity.getOrderProductInfo(), new TypeReference<List<OrderProductInfoDTO>>() {}));
  69. List<HaiKongSendOrderInfoDetailRecordEntity> detailRecordEntities = haiKongSendOrderInfoDetailRecordService.queryListByOrderId(haiKongSendOrderInfoRecordEntity.getOuterOrderNo());
  70. List<OrderInfoItemDTO> dtoList = detailRecordEntities.stream().map(detailRecord -> {
  71. OrderInfoItemDTO orderInfoItemDTO = new OrderInfoItemDTO();
  72. BeanUtils.copyProperties(detailRecord, orderInfoItemDTO);
  73. orderInfoItemDTO.setTax(detailRecord.getIsTax());
  74. return orderInfoItemDTO;
  75. }).collect(Collectors.toList());
  76. sendOrderToVmcShopDTO.setPayInfo(payInfoDTO);
  77. sendOrderToVmcShopDTO.setSeaportInfo(seaportInfoDTO);
  78. sendOrderToVmcShopDTO.setOrderInfoItems(dtoList);
  79. sendOrderToVmcShopDTO.setOrderInfo(orderInfoDTO);
  80. try {
  81. String body = JacksonUtil.getObjectMapper().writeValueAsString(sendOrderToVmcShopDTO);
  82. log.info("【重发】请求免税mall创建订单接口!请求体:{}", body);
  83. String responseJson = vmcShopTemplate.sendOrder(body);
  84. Response<String> response = JacksonUtil.fromListJson(responseJson, new TypeReference<Response<String>>() {});
  85. if (Objects.nonNull(response) && ErrorCodeConstants.VmcShopSysErrorCodeEnum.CODE_0.getCode().equals(response.getCode())) {
  86. haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
  87. successList.add(haiKongSendOrderInfoRecordEntity);
  88. log.info("【重发】请求免税mall创建订单接口成功!响应数据:{}", responseJson);
  89. } else if (Objects.nonNull(response) && ErrorCodeConstants.VmcShopSysErrorCodeEnum.CODE_10500.getCode().equals(response.getCode())) {
  90. haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
  91. failedList.add(haiKongSendOrderInfoRecordEntity);
  92. log.error("【重发】请求免税mall创建订单接口失败!响应:{}", responseJson);
  93. } else if (Objects.isNull(response)) {
  94. haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus());
  95. failedList.add(haiKongSendOrderInfoRecordEntity);
  96. log.error("【重发】请求免税mall创建订单接口失败!响应:{}", responseJson);
  97. } else {
  98. haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
  99. failedList.add(haiKongSendOrderInfoRecordEntity);
  100. log.error("【重发】请求免税mall创建订单接口失败!响应:{}", responseJson);
  101. }
  102. } catch (Exception e) {
  103. haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
  104. failedList.add(haiKongSendOrderInfoRecordEntity);
  105. log.error("【重发】请求免税mall创建订单接口失败!异常:", e);
  106. }
  107. });
  108. if (!CollectionUtils.isEmpty(successList)) {
  109. haiKongSendOrderInfoRecordService.updateResendStatusBatch(successList);
  110. List<String> orderSnList = successList.stream().map(HaiKongSendOrderInfoRecordEntity::getOuterOrderNo).collect(Collectors.toList());
  111. pickUpCodeService.updateBatchPickUpCodeStatus(orderSnList, Dict.PickUpCodeStatusEnum.item_0.getStatus());
  112. }
  113. if (!CollectionUtils.isEmpty(failedList)) {
  114. haiKongSendOrderInfoRecordService.updateResendStatusBatch(failedList);
  115. }
  116. log.info("【重发】此次重发会员消费订单同步接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size());
  117. }
  118. }