CmsOrderDonServiceImpl.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.cyksj.service.mange.impl;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
  6. import com.cyksj.common.util.Jsons;
  7. import com.cyksj.mapper.GoodsDonSkuMapper;
  8. import com.cyksj.mapper.OrderDonMapper;
  9. import com.cyksj.mapper.OrderDonTransportMapper;
  10. import com.cyksj.mapper.OrderDonWaybillMapper;
  11. import com.cyksj.mapper.stock.GoodsSkuStockRelateMapper;
  12. import com.cyksj.model.entity.*;
  13. import com.cyksj.model.excel.ExcelOrderDonInfo;
  14. import com.cyksj.model.manage.request.ReqSetLogisticsPost;
  15. import com.cyksj.service.mange.CmsOrderDonService;
  16. import com.cyksj.service.mange.stock.GoodsDonStockService;
  17. import com.cyksj.service.order.UserRealOrderBenefitsService;
  18. import com.cyksj.service.template.TemplateCommonService;
  19. import lombok.RequiredArgsConstructor;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import java.util.List;
  24. import java.util.Optional;
  25. /**
  26. * @author chan
  27. * @date 2021/10/25 下午10:14
  28. */
  29. @Service
  30. @Slf4j
  31. @RequiredArgsConstructor
  32. public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon> implements CmsOrderDonService {
  33. private final OrderDonTransportMapper transportMapper;
  34. private final OrderDonWaybillMapper orderDonWaybillMapper;
  35. private final GoodsSkuStockRelateMapper skuStockRelateMapper;
  36. private final GoodsDonStockService goodsDonStockService;
  37. private final TemplateCommonService templateCommonService;
  38. private final GoodsDonSkuMapper goodsDonSkuMapper;
  39. private final UserRealOrderBenefitsService userRealOrderBenefitsService;
  40. private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
  41. @Override
  42. public List<ExcelOrderDonInfo> exportOrderInfo(Long promotionId, String start, String end) {
  43. return this.getBaseMapper().exportOrderInfo(promotionId,start,end);
  44. }
  45. @Override
  46. public OrderDonTransport getTransport(Long orderId) {
  47. return transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class).eq(OrderDonTransport::getOrderId, orderId));
  48. }
  49. @Transactional(rollbackFor = Throwable.class)
  50. @Override
  51. public OrderDonWaybill setWaybill(ReqSetLogisticsPost reqSetLogisticsPost) {
  52. OrderDonWaybill orderDonWaybill = Optional.ofNullable(orderDonWaybillMapper.selectOne(Wrappers.lambdaQuery(OrderDonWaybill.class).eq(OrderDonWaybill::getOrderId, reqSetLogisticsPost.getOrderId()))).orElse(new OrderDonWaybill());
  53. orderDonWaybill.setCodeCn(reqSetLogisticsPost.getCodeCn());
  54. orderDonWaybill.setTrackingNumber(reqSetLogisticsPost.getTrackingNumber());
  55. orderDonWaybill.setOrderId(reqSetLogisticsPost.getOrderId());
  56. orderDonWaybill.setRemark(reqSetLogisticsPost.getRemark());
  57. OrderDon orderDon = getById(orderDonWaybill.getOrderId());
  58. if(orderDonWaybill.getId() == null){
  59. orderDonWaybillMapper.insert(orderDonWaybill);
  60. orderDon.setStatus(OrderDon.Status.transport);
  61. updateById(orderDon);
  62. //发放实物购买权益
  63. Boolean isReceivedAll = true;
  64. GoodsDonSku sku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
  65. if (sku != null) {
  66. if (sku.getIsBenefits()) {
  67. if (StrUtil.isNotEmpty(sku.getBenefitsList())) {
  68. try {
  69. List<GoodsDonSku> goodsDonSkus = Jsons.parseList(sku.getBenefitsList(), GoodsDonSku.class);
  70. //自购实物 获取权益
  71. isReceivedAll = userRealOrderBenefitsService.getPayRealGoodsBenefits(orderDon.getUserId(), orderDon.getId(), goodsDonSkus);
  72. } catch (Exception e) {
  73. }
  74. }
  75. }
  76. }
  77. final Boolean flag = isReceivedAll;
  78. //库存扣减逻辑
  79. List<GoodsSkuStockRelate> relateList = skuStockRelateMapper.selectList(Wrappers.lambdaQuery(GoodsSkuStockRelate.class).eq(GoodsSkuStockRelate::getSkuId,orderDon.getSkuId()));
  80. if(!relateList.isEmpty()){
  81. relateList.forEach((relate)->{
  82. goodsDonStockService.upStockRelate(relate.getStockId(),orderDon.getId(),"transport");
  83. });
  84. }
  85. //发送微信模板消息
  86. TASK_POOL.execute(()->{
  87. try {
  88. log.info("发送发货通知至{}用户", orderDon.getUserId());
  89. templateCommonService.sendTransportMsgNotify(orderDon, reqSetLogisticsPost, flag);
  90. } catch (Exception e) {
  91. log.error("发送发货通知至{}用户失败:{}", orderDon.getUserId(), e);
  92. }
  93. });
  94. }else {
  95. if (orderDon.getStatus() == OrderDon.Status.hasPayment) {
  96. orderDon.setStatus(OrderDon.Status.transport);
  97. updateById(orderDon);
  98. }
  99. orderDonWaybillMapper.updateById(orderDonWaybill);
  100. }
  101. return orderDonWaybill;
  102. }
  103. }