OrderTest.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. import cn.hutool.core.util.ObjectUtil;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  4. import com.sqx.SqxApplication;
  5. import com.sqx.common.utils.Query;
  6. import com.sqx.common.utils.RedisUtils;
  7. import com.sqx.modules.activity.entity.ActivityPartRecord;
  8. import com.sqx.modules.activity.service.ActivityPartRecordService;
  9. import com.sqx.modules.app.dao.UserMoneyDetailsDao;
  10. import com.sqx.modules.app.entity.UserMoneyDetails;
  11. import com.sqx.modules.app.service.UserMoneyDetailsService;
  12. import com.sqx.modules.app.service.UserMoneyService;
  13. import com.sqx.modules.common.entity.CommonInfo;
  14. import com.sqx.modules.common.service.CommonInfoService;
  15. import com.sqx.modules.coupon.dao.TbCouponUserDao;
  16. import com.sqx.modules.coupon.entity.TbCouponUser;
  17. import com.sqx.modules.coupon.service.TbCouponService;
  18. import com.sqx.modules.errand.entity.TbIndentSmsSendLog;
  19. import com.sqx.modules.goods.entity.GoodsShop;
  20. import com.sqx.modules.order.dao.AppOrderDao;
  21. import com.sqx.modules.order.entity.TbOrder;
  22. import com.sqx.modules.order.service.AppOrderService;
  23. import com.sqx.modules.pay.service.WxService;
  24. import com.sqx.modules.shop.service.ShopMessageService;
  25. import com.sqx.scheduler.order.OrderScheduler;
  26. import lombok.extern.slf4j.Slf4j;
  27. import org.junit.jupiter.api.Test;
  28. import org.junit.runner.RunWith;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.boot.test.context.SpringBootTest;
  31. import org.springframework.test.context.junit4.SpringRunner;
  32. import javax.annotation.Resource;
  33. import java.math.BigDecimal;
  34. import java.time.LocalDateTime;
  35. import java.time.format.DateTimeFormatter;
  36. import java.util.List;
  37. /**
  38. * @author : codingliang
  39. * @date : 2024-09-10 16:24
  40. */
  41. @Slf4j
  42. @RunWith(SpringRunner.class)
  43. @SpringBootTest(classes = SqxApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  44. public class OrderTest {
  45. @Resource
  46. private AppOrderService appOrderService;
  47. @Resource
  48. private ShopMessageService shopMessageService;
  49. @Resource
  50. private TbCouponUserDao tbCouponUserDao;
  51. @Resource
  52. private ActivityPartRecordService activityPartRecordService;
  53. @Resource
  54. private CommonInfoService commonInfoService;
  55. @Resource
  56. private UserMoneyDetailsDao userMoneyDetailsDao;
  57. @Resource
  58. private UserMoneyDetailsService userMoneyDetailsService;
  59. @Resource
  60. private UserMoneyService userMoneyService;
  61. @Resource
  62. private OrderScheduler orderScheduler;
  63. @Resource
  64. private WxService wxService;
  65. @Resource
  66. private RedisUtils redisUtils;
  67. @Autowired
  68. private AppOrderDao appOrderDao;
  69. @Test
  70. public void test() {
  71. List<TbOrder> orderList = appOrderDao.temp();
  72. for (TbOrder tbOrder : orderList) {
  73. QueryWrapper<UserMoneyDetails> queryWrapper = new QueryWrapper<>();
  74. queryWrapper.eq("title", "商户订单收入,订单号:" + tbOrder.getOrderNumber());
  75. if (userMoneyDetailsService.count(queryWrapper) > 0) {
  76. log.info("订单id【{}】,商户用户钱包收入记录已存在,跳过", tbOrder.getOrderId());
  77. continue;
  78. }
  79. log.info("订单id【{}】,开始计算商户用户钱包收入记录", tbOrder.getOrderId());
  80. GoodsShop goodsShop = shopMessageService.selectShopId(tbOrder.getShopId());
  81. // 计算商户应得金额
  82. BigDecimal shopRate = goodsShop.getShopRate();
  83. BigDecimal sumMoney = tbOrder.getPayMoney();
  84. BigDecimal couponMoney = BigDecimal.ZERO;
  85. Long shopIds = -1L;
  86. if (tbOrder.getCouponId() != null) {
  87. TbCouponUser tbCouponUser = tbCouponUserDao.selectById(tbOrder.getCouponId());
  88. sumMoney = tbOrder.getPayMoney().add(tbCouponUser.getMoney());
  89. couponMoney = tbCouponUser.getMoney();
  90. shopIds = tbCouponUser.getShopId();
  91. }
  92. BigDecimal errandMoney = BigDecimal.ZERO;
  93. if (tbOrder.getOrderType() != 1) {
  94. //判断是否达到商家满减 如果达到商家满减 跑腿费让商家承担
  95. if (tbOrder.getAutoSendOrder() != null && tbOrder.getAutoSendOrder() == 0) {
  96. errandMoney = tbOrder.getErrandMoney();
  97. sumMoney = sumMoney.subtract(tbOrder.getErrandMoney());
  98. } else {
  99. sumMoney = sumMoney.subtract(tbOrder.getErrandMoney());
  100. errandMoney = tbOrder.getErrandMoney();
  101. }
  102. }
  103. // 再减去校内配送费
  104. sumMoney = sumMoney.subtract(tbOrder.getInsideDeliveryFee());
  105. // 店铺收入
  106. BigDecimal shopMoney = sumMoney.multiply(shopRate);
  107. shopMoney = shopMoney.setScale(2, BigDecimal.ROUND_DOWN);
  108. BigDecimal pingRate = sumMoney.subtract(shopMoney);
  109. // 商家配送短信服务费 为0
  110. BigDecimal smsSendMoney = BigDecimal.ZERO;
  111. // 这里再判断 是否是商家优惠券 如果是商家优惠券 这笔钱商家承担
  112. if (shopIds != -1 && shopIds != 0) {
  113. shopMoney = shopMoney.subtract(couponMoney);
  114. }
  115. // 判断订单是否参与活动,如果参与活动,则优惠金额由商家承担
  116. ActivityPartRecord activityPartRecord = activityPartRecordService.getByOrderId(tbOrder.getOrderId());
  117. BigDecimal activityDiscountAmount = BigDecimal.ZERO;
  118. if (ObjectUtil.isNotNull(activityPartRecord)) {
  119. activityDiscountAmount = activityPartRecord.getDiscountAmount();
  120. }
  121. if (tbOrder.getAutoSendOrder() != null && tbOrder.getAutoSendOrder() == 1) {
  122. //如果达到商家满减 则商家不加上配送费
  123. if (!"本单已达到商家满减金额,跑腿费由商家承担".equals(tbOrder.getErrandMoneyIsShop())) {
  124. shopMoney = shopMoney.add(tbOrder.getErrandMoney());
  125. }
  126. }
  127. StringBuffer contentBuffer = new StringBuffer();
  128. BigDecimal rider = new BigDecimal(0);
  129. if (ObjectUtils.isNotEmpty(tbOrder.getOrderTypeExtra())&&tbOrder.getOrderTypeExtra()==2) {
  130. // 获取骑手额外配送费
  131. CommonInfo commonInfo = commonInfoService.findOne(443);
  132. if (ObjectUtils.isNotEmpty(commonInfo)) {
  133. rider =rider.add(new BigDecimal(commonInfo.getValue()));
  134. shopMoney=shopMoney.subtract(rider);
  135. }
  136. log.info("订单id【{}】,骑手额外配送费【{}】", tbOrder.getOrderId(), rider);
  137. }
  138. // 添加商户用户钱包收入记录
  139. UserMoneyDetails userMoneyDetails1 = new UserMoneyDetails();
  140. userMoneyDetails1.setShopId(goodsShop.getShopId());
  141. userMoneyDetails1.setTitle("商户订单收入,订单号:" + tbOrder.getOrderNumber());
  142. // 订单金额
  143. BigDecimal orderAmount = tbOrder.getPayMoney().add(couponMoney).add(activityDiscountAmount);
  144. contentBuffer.append("订单金额:").append(orderAmount.setScale(2, BigDecimal.ROUND_DOWN));
  145. if (!couponMoney.equals(BigDecimal.ZERO)) {
  146. contentBuffer.append(",优惠券金额:").append(couponMoney.setScale(2, BigDecimal.ROUND_DOWN));
  147. }
  148. if (!activityDiscountAmount.equals(BigDecimal.ZERO)) {
  149. contentBuffer.append(",活动优惠金额:").append(activityDiscountAmount.setScale(2, BigDecimal.ROUND_DOWN));
  150. }
  151. contentBuffer.append(",用户实付金额:").append(tbOrder.getPayMoney()).append(",其中");
  152. if (tbOrder.getOrderType() != 1) {
  153. contentBuffer.append("跑腿费:").append(errandMoney.setScale(2, BigDecimal.ROUND_DOWN)).append("(").append(tbOrder.getErrandMoneyIsShop()).append(")").append(",");
  154. }
  155. contentBuffer.append("特殊地址跑腿费:").append(tbOrder.getInsideDeliveryFee().setScale(2, BigDecimal.ROUND_DOWN)).append(",");
  156. contentBuffer.append("平台服务费:").append(pingRate.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
  157. contentBuffer.append("短信服务费:").append(smsSendMoney.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
  158. if (ObjectUtils.isNotEmpty(tbOrder.getOrderTypeExtra())&&tbOrder.getOrderTypeExtra()==2) {
  159. contentBuffer.append("骑手额外配送费:").append(rider.setScale(2, BigDecimal.ROUND_DOWN)).append(",");
  160. }
  161. contentBuffer.append("到账金额:").append(shopMoney.setScale(2, BigDecimal.ROUND_DOWN));
  162. if (shopIds == 0) {
  163. contentBuffer.append("(本单为平台优惠券,平台补贴)");
  164. } else if (shopIds != -1) {
  165. contentBuffer.append("(本单为商家优惠券,商家补贴)");
  166. }
  167. userMoneyDetails1.setContent(contentBuffer.toString());
  168. userMoneyDetails1.setType(1);
  169. userMoneyDetails1.setClassify(3);
  170. userMoneyDetails1.setMoney(shopMoney);
  171. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  172. userMoneyDetails1.setCreateTime(LocalDateTime.now().format(dateTimeFormatter1));
  173. userMoneyDetails1.setState(2);
  174. userMoneyDetailsDao.insert(userMoneyDetails1);
  175. log.info("订单id【{}】,商户用户钱包收入记录新增成功", tbOrder.getOrderId());
  176. //将用户支付的金额转入商户用户钱包
  177. userMoneyService.updateMoney(1, goodsShop.getUserId(), shopMoney.doubleValue());
  178. }
  179. }
  180. @Test
  181. public void test2() {
  182. String value = commonInfoService.findOne(19).getValue();
  183. System.out.println("value = " + value);
  184. }
  185. }