package com.kmall.admin.haikong.task; import com.fasterxml.jackson.core.type.TypeReference; import com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity; import com.kmall.admin.entity.haikong.HaiKongSendOrderInfoDetailRecordEntity; import com.kmall.admin.entity.haikong.HaiKongSendOrderInfoRecordEntity; import com.kmall.admin.haikong.client.VmcShopTemplate; import com.kmall.admin.haikong.constant.HaiKongMemberOrderResendStatusEnum; import com.kmall.admin.haikong.dto.*; import com.kmall.admin.haikong.utils.Response; import com.kmall.admin.service.haikong.HaiKongSendOrderInfoDetailRecordService; import com.kmall.admin.service.haikong.HaiKongSendOrderInfoRecordService; import com.kmall.admin.utils.jackson.JacksonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 推送订单,重推接口 * @author lhm * @createDate 2021-12-10 */ @Component public class SendOrderInfoTask { private static final Logger log = LoggerFactory.getLogger(SendOrderInfoTask.class); @Autowired private HaiKongSendOrderInfoRecordService haiKongSendOrderInfoRecordService; @Autowired private HaiKongSendOrderInfoDetailRecordService haiKongSendOrderInfoDetailRecordService; @Autowired private VmcShopTemplate vmcShopTemplate; @Scheduled(cron = "0 0/1 * * * ?") public void resend() { // 查询等待发送和发送失败的记录 List haiKongSendOrderInfoRecordEntities = haiKongSendOrderInfoRecordService.queryListByResendStatus(); if (CollectionUtils.isEmpty(haiKongSendOrderInfoRecordEntities)) { return; } List successList = new ArrayList<>(); List failedList = new ArrayList<>(); haiKongSendOrderInfoRecordEntities.forEach(haiKongSendOrderInfoRecordEntity -> { SendOrderToVmcShopDTO sendOrderToVmcShopDTO = new SendOrderToVmcShopDTO(); SeaportInfoDTO seaportInfoDTO = new SeaportInfoDTO(); PayInfoDTO payInfoDTO = new PayInfoDTO(); OrderInfoDTO orderInfoDTO = new OrderInfoDTO(); BeanUtils.copyProperties(haiKongSendOrderInfoRecordEntity, orderInfoDTO); BeanUtils.copyProperties(haiKongSendOrderInfoRecordEntity, payInfoDTO); seaportInfoDTO.setSeaportCode(haiKongSendOrderInfoRecordEntity.getSeaportCode()); seaportInfoDTO.setPlatform(haiKongSendOrderInfoRecordEntity.getPlatform()); seaportInfoDTO.setIdentityCard(haiKongSendOrderInfoRecordEntity.getIdentityCard()); seaportInfoDTO.setIdentityMobile(haiKongSendOrderInfoRecordEntity.getIdentityMobile()); seaportInfoDTO.setIdentityName(haiKongSendOrderInfoRecordEntity.getIdentityName()); seaportInfoDTO.setOrderProductInfoList(JacksonUtil.fromListJson(haiKongSendOrderInfoRecordEntity.getOrderProductInfo(), new TypeReference>() {})); List detailRecordEntities = haiKongSendOrderInfoDetailRecordService.queryListByOrderId(haiKongSendOrderInfoRecordEntity.getOuterOrderNo()); List dtoList = detailRecordEntities.stream().map(detailRecord -> { OrderInfoItemDTO orderInfoItemDTO = new OrderInfoItemDTO(); BeanUtils.copyProperties(detailRecord, orderInfoItemDTO); orderInfoItemDTO.setTax(detailRecord.getIsTax()); return orderInfoItemDTO; }).collect(Collectors.toList()); sendOrderToVmcShopDTO.setPayInfo(payInfoDTO); sendOrderToVmcShopDTO.setSeaportInfo(seaportInfoDTO); sendOrderToVmcShopDTO.setOrderInfoItems(dtoList); sendOrderToVmcShopDTO.setOrderInfo(orderInfoDTO); String body = JacksonUtil.toJson(sendOrderToVmcShopDTO); log.info("【重发】请求免税mall创建订单接口!请求体:{}", body); try { String responseJson = vmcShopTemplate.sendOrder(body); Response response = JacksonUtil.fromListJson(responseJson, new TypeReference>() {}); if (Objects.nonNull(response) && !"failure".equals(response.getResult())) { haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus()); successList.add(haiKongSendOrderInfoRecordEntity); log.info("【重发】请求免税mall创建订单接口成功!响应数据:{}", responseJson); } else { haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus()); failedList.add(haiKongSendOrderInfoRecordEntity); log.error("【重发】请求免税mall创建订单接口失败!响应:{}", responseJson); } } catch (Exception e) { haiKongSendOrderInfoRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus()); failedList.add(haiKongSendOrderInfoRecordEntity); log.error("【重发】请求免税mall创建订单接口失败!异常:", e); } }); if (!CollectionUtils.isEmpty(successList)) { haiKongSendOrderInfoRecordService.updateResendStatusBatch(successList); } if (!CollectionUtils.isEmpty(failedList)) { haiKongSendOrderInfoRecordService.updateResendStatusBatch(failedList); } log.info("【重发】此次重发会员消费订单同步接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size()); } }