package com.kmall.admin.haikong.task; import com.fasterxml.jackson.core.type.TypeReference; import com.kmall.admin.entity.OrderGoodsEntity; import com.kmall.admin.entity.haikong.HaiKongMemberOrderSyncResendEntity; import com.kmall.admin.entity.haikong.HaiKongMemberScoreChangeRecordEntity; import com.kmall.admin.haikong.client.HaiKongMemberTemplate; import com.kmall.admin.haikong.constant.ErrorCodeConstants; import com.kmall.admin.haikong.constant.HaiKongMemberOrderResendStatusEnum; import com.kmall.admin.haikong.dto.MemberOrderInfoSyncDTO; import com.kmall.admin.haikong.dto.MemberScoreChangeDTO; import com.kmall.admin.haikong.dto.MemberScoreChangeResponseDTO; import com.kmall.admin.haikong.utils.Response; import com.kmall.admin.service.OrderGoodsService; import com.kmall.admin.service.haikong.HaiKongMemberOrderSyncResendService; 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.*; /** * 重发会员消费订单同步定时任务 * @author lhm * @createDate 2021-12-01 */ @Component public class MemberOrderSyncResendTask { private static final Logger log = LoggerFactory.getLogger(MemberOrderSyncResendTask.class); @Autowired private HaiKongMemberTemplate haiKongMemberTemplate; @Autowired private OrderGoodsService orderGoodsService; @Autowired private HaiKongMemberOrderSyncResendService haiKongMemberOrderSyncResendService; @Scheduled(cron = "0 0/2 * * * ?") public void resend() { // 查询等待发送和发送失败的记录 List haiKongMemberOrderSyncResendEntities = haiKongMemberOrderSyncResendService.queryListByResendStatus(); if (CollectionUtils.isEmpty(haiKongMemberOrderSyncResendEntities)) { return; } List successList = new ArrayList<>(); List failedList = new ArrayList<>(); haiKongMemberOrderSyncResendEntities.forEach(haiKongMemberOrderSyncResendEntity -> { MemberOrderInfoSyncDTO memberOrderInfoSyncDTO = new MemberOrderInfoSyncDTO(); //新增传给海控会员系统添加商品明细 HashMap orderIdMap = new HashMap<>(); orderIdMap.put("orderId",haiKongMemberOrderSyncResendEntity.getOrderId()); List orderGoodsEntities = orderGoodsService.queryList(orderIdMap); List list = new ArrayList(); for (OrderGoodsEntity orderGoodsEntity : orderGoodsEntities) { HashMap map = new HashMap<>(); map.put("item_no",orderGoodsEntity.getSku());//商品编码 map.put("item_name",orderGoodsEntity.getGoodsName());//名称 map.put("item_price",orderGoodsEntity.getActualPaymentAmount());//商品实际支付金额 //会员系统那边开发可不传这两个字段 // map.put("add_score");//商品基础积分 // map.put("active_score",);//商品活动积分 map.put("use_score",orderGoodsEntity.getDeductionScore());//商品使用积分抵扣 map.put("deduction_money",orderGoodsEntity.getDeductionPrice());//商品积分抵扣金额 map.put("item_num",orderGoodsEntity.getNumber());//商品数量 list.add(map); } memberOrderInfoSyncDTO.setItemInfoList(list); BeanUtils.copyProperties(haiKongMemberOrderSyncResendEntity, memberOrderInfoSyncDTO); String body = JacksonUtil.toJson(memberOrderInfoSyncDTO); haiKongMemberOrderSyncResendEntity.setLastResendTime(new Date()); log.info("【重发】请求会员消费订单同步接口!请求体:{}", body); try { String responseJson = haiKongMemberTemplate.memberOrderSync(body); Response response = JacksonUtil.fromListJson(responseJson, new TypeReference>() {}); if (Objects.nonNull(response) && response.getSuccess()) { haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData()); haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus()); successList.add(haiKongMemberOrderSyncResendEntity); log.info("【重发】请求会员消费订单同步接口成功!响应数据:{}", responseJson); }/* else if (Objects.nonNull(response) && ErrorCodeConstants.MemberSysErrorCodeEnum.CODE_500.getCode().equals(response.getCode())) { haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus()); failedList.add(haiKongMemberOrderSyncResendEntity); log.error("【重发】请求会员消费订单同步接口失败!响应:{}", responseJson); }*/ else { haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus()); failedList.add(haiKongMemberOrderSyncResendEntity); log.error("【重发】请求会员消费订单同步接口失败!响应:{}", responseJson); } } catch (Exception e) { // lhm 重发状态是修改成无需重发应修改为重发失败供定时器去重发 // haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus()); haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_FAILED.getStatus()); failedList.add(haiKongMemberOrderSyncResendEntity); log.error("【重发】请求会员消费订单同步接口失败!异常:", e); } }); if (!CollectionUtils.isEmpty(successList)) { haiKongMemberOrderSyncResendService.updateResendStatusBatch(successList); } if (!CollectionUtils.isEmpty(failedList)) { haiKongMemberOrderSyncResendService.updateResendStatusBatch(failedList); } log.info("【重发】此次重发会员消费订单同步接口!成功【{}】条,失败【{}】条!", successList.size(), failedList.size()); } }