UserBusinessFrontServiceImpl.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. package com.cyksj.service.distribute.impl;
  2. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  3. import com.cyksj.common.constant.Constant;
  4. import com.cyksj.mapper.OrderDonMapper;
  5. import com.cyksj.mapper.UserRenewChangeTicketRecordMapper;
  6. import com.cyksj.mapper.manage.distribute.UserBusinessDefaultRateConfigMapper;
  7. import com.cyksj.mapper.manage.distribute.UserDistributeBusinessOrderDonRecordMapper;
  8. import com.cyksj.mapper.manage.distribute.UserDistributeBusinessRateMapper;
  9. import com.cyksj.model.entity.*;
  10. import com.cyksj.redis.RedisService;
  11. import com.cyksj.service.distribute.UserBusinessFrontService;
  12. import com.ejlchina.searcher.BeanSearcher;
  13. import lombok.RequiredArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.dao.DuplicateKeyException;
  16. import org.springframework.stereotype.Service;
  17. import java.math.BigDecimal;
  18. /*
  19. *项目名: netflix
  20. *文件名: UserBusinessFrontServiceImpl
  21. *创建者: JavaZou
  22. *创建时间:2023/3/23 14:20
  23. */
  24. @Service
  25. @RequiredArgsConstructor
  26. @Slf4j
  27. public class UserBusinessFrontServiceImpl implements UserBusinessFrontService {
  28. private final BeanSearcher beanSearcher;
  29. private final UserDistributeBusinessRateMapper userDistributeBusinessRateMapper;
  30. private final OrderDonMapper orderDonMapper;
  31. private final UserDistributeBusinessOrderDonRecordMapper businessOrderDonRecordMapper;
  32. private final UserRenewChangeTicketRecordMapper renewChangeTicketRecordMapper;
  33. private final RedisService redisService;
  34. private final UserBusinessDefaultRateConfigMapper defaultRateConfigMapper;
  35. @Override
  36. public void taskDistributeRateBenefits(Long sharedId, Long businessId, OrderDon order, Integer distributeRate) {
  37. UserDistributeBusinessRate businessRate = userDistributeBusinessRateMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessRate.class)
  38. .eq(UserDistributeBusinessRate::getBusinessId, businessId)
  39. .eq(UserDistributeBusinessRate::getGoodsId, order.getGoodsId())
  40. .eq(UserDistributeBusinessRate::getSkuId, order.getSkuId()).last("limit 1"));
  41. if (businessRate != null) {
  42. //首单
  43. if (order.getOrderType() == 1) {
  44. log.info("商务首单orderId:{}分销分配提成开始", order.getId());
  45. //用户之前是否下过单
  46. Integer count = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
  47. .eq(OrderDon::getUserId, order.getUserId())
  48. .ne(OrderDon::getId, order.getId()).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
  49. if (count == 0) {
  50. //是否享受过该用户带来的首单 提成
  51. UserDistributeBusinessOrderDonRecord record = businessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessOrderDonRecord.class)
  52. .eq(UserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
  53. .eq(UserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
  54. .eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1)
  55. .last("limit 1"));
  56. if (record == null) {
  57. try {
  58. boolean isSuccess = redisService.setNx(RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getNameFormat(order.getUserId()), businessId, RedisService.key.BUSINESS_FIRST_ORDER_USER_KEY.getTimeout());
  59. if (isSuccess) {
  60. //首单虚物规格 提成
  61. record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, businessRate.getFirstOrderRate(), null, distributeRate);
  62. if (record == null) {
  63. return;
  64. }
  65. businessOrderDonRecordMapper.insert(record);
  66. log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}首单:{}提成", businessId, sharedId, order.getUserId(), order.getId());
  67. }
  68. } catch (DuplicateKeyException e) {
  69. log.error("商务:{}重复获取分销人:{}分销的用户:{}首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
  70. }
  71. }
  72. }
  73. }
  74. //续费
  75. if (order.getOrderType() == 2) {
  76. log.info("商务首单续费分销分配提成开始");
  77. //是否享受过该用户首单 提成
  78. UserDistributeBusinessOrderDonRecord record = businessOrderDonRecordMapper.selectOne(Wrappers.lambdaQuery(UserDistributeBusinessOrderDonRecord.class)
  79. .eq(UserDistributeBusinessOrderDonRecord::getBusinessId, businessId)
  80. .eq(UserDistributeBusinessOrderDonRecord::getUserId, order.getUserId())
  81. .eq(UserDistributeBusinessOrderDonRecord::getOrderType, 1).last("limit 1"));
  82. if (record != null) {
  83. log.info("开始给商务人员:{}分配用户:{}首单续费提成", businessId, order.getUserId());
  84. //是否更换过车票规格座位号
  85. Long preRelationId = record.getPreRelationId();
  86. Long relationId = order.getRelationId();
  87. if (relationId.equals(preRelationId)) {
  88. try {
  89. //分配首单续费提成
  90. record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, null, businessRate.getRenewOrderRate(), distributeRate);
  91. if (record == null) {
  92. return;
  93. }
  94. businessOrderDonRecordMapper.insert(record);
  95. log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}续费首单:{}提成", businessId, sharedId, order.getUserId(), order.getId());
  96. } catch (DuplicateKeyException e) {
  97. log.error("商务:{}重复获取分销人:{}分销的用户:{}续费首单:{}提成", businessId, businessId, order.getUserId(), order.getId());
  98. }
  99. } else {
  100. UserRenewChangeTicketRecord renewChangeTicketRecord = renewChangeTicketRecordMapper.selectOne(Wrappers.lambdaQuery(UserRenewChangeTicketRecord.class)
  101. .eq(UserRenewChangeTicketRecord::getUserId, order.getUserId())
  102. .eq(UserRenewChangeTicketRecord::getAfterRelationId, relationId)
  103. .last("limit 1"));
  104. if (renewChangeTicketRecord != null && renewChangeTicketRecord.getPreRelationId().equals(preRelationId)) {
  105. try {
  106. //分配首单续费更换车位后提成
  107. record = saveBusinessTakeMoneyRecord(order, businessId, sharedId, null, businessRate.getRenewOrderRate(), distributeRate);
  108. if (record == null) {
  109. return;
  110. }
  111. businessOrderDonRecordMapper.insert(record);
  112. log.info("开始给商务人员:{}分配分销人:{}分销的用户:{}续费首单:{}更换后车位提成", businessId, sharedId, order.getUserId(), order.getId());
  113. } catch (DuplicateKeyException e) {
  114. log.error("商务:{}重复获取分销人:{}分销的用户:{}续费首单:{}更换后车位提成", businessId, businessId, order.getUserId(), order.getId());
  115. }
  116. }
  117. }
  118. }
  119. }
  120. }
  121. }
  122. /**
  123. * 保存商务分配提成记录
  124. */
  125. public UserDistributeBusinessOrderDonRecord saveBusinessTakeMoneyRecord(OrderDon order, Long businessId, Long sharedId, Integer firstOrderRate, Integer renewOrderRate, Integer distributeRate) {
  126. UserBusinessDefaultRateConfig defaultGoodsRateConfig = defaultRateConfigMapper.selectOne(Wrappers.lambdaQuery(UserBusinessDefaultRateConfig.class)
  127. .eq(UserBusinessDefaultRateConfig::getGoodsId, order.getGoodsId()).last("limit 1"));
  128. if (defaultGoodsRateConfig == null) {
  129. log.info("系统默认商务分销配置未配置,businessId:{},orderId:{}", businessId, order.getId());
  130. return null;
  131. }
  132. UserDistributeBusinessOrderDonRecord record = new UserDistributeBusinessOrderDonRecord();
  133. record.setBusinessId(businessId);
  134. record.setUserId(order.getUserId());
  135. record.setSharedId(sharedId);
  136. record.setOrderType(order.getOrderType());
  137. record.setOrderCreatedTime(order.getCreatedTime());
  138. record.setOrderId(order.getId());
  139. record.setPreRelationId(order.getRelationId());
  140. //是否超过默认配置平台比例
  141. Integer defaultGoodsRate = defaultGoodsRateConfig.getRate();
  142. //首单提成比例
  143. BigDecimal orderMoney = order.getMoney();
  144. BigDecimal takeMoney = BigDecimal.ZERO;
  145. if (firstOrderRate != null) {
  146. if (distributeRate > defaultGoodsRate) {
  147. if (defaultGoodsRateConfig.getIsPlatPay()) {
  148. log.info("首单,平台承担商务businessId:{}配置分销者sharedId:{}超过平台goodsId:{}标准分销比例:{}", businessId, sharedId, order.getGoodsId(), defaultGoodsRate);
  149. } else {
  150. firstOrderRate -= distributeRate - defaultGoodsRate;
  151. log.info("商务businessId:{}配置分销者sharedId:{}比例超过标准比例,可获取首单提成比例为:{}", businessId, sharedId, firstOrderRate);
  152. if (firstOrderRate <= 0) {
  153. log.info("商务businessId:{}获得分销者sharedId:{}首单提成比例不大于0", businessId, sharedId);
  154. return null;
  155. }
  156. }
  157. }
  158. record.setRate(firstOrderRate);
  159. BigDecimal firstRate = BigDecimal.valueOf(firstOrderRate).divide(BigDecimal.valueOf(100));
  160. takeMoney = orderMoney.multiply(firstRate);
  161. }
  162. if (renewOrderRate != null) {
  163. if (distributeRate > defaultGoodsRate) {
  164. if (defaultGoodsRateConfig.getIsPlatPay()) {
  165. log.info("首单续费,平台承担商务businessId:{}配置分销者sharedId:{}超过平台goodsId:{}标准分销比例:{}", businessId, sharedId, order.getGoodsId(), defaultGoodsRate);
  166. } else {
  167. renewOrderRate -= distributeRate - defaultGoodsRate;
  168. log.info("商务businessId:{}配置分销者sharedId:{}比例超过标准比例,可获取首单续费提成比例为:{}", businessId, sharedId, renewOrderRate);
  169. if (renewOrderRate <= 0) {
  170. log.info("商务businessId:{}获得分销者sharedId:{}首单续费提成比例不大于0", businessId, sharedId);
  171. return null;
  172. }
  173. }
  174. }
  175. record.setRate(renewOrderRate);
  176. BigDecimal renewRate = BigDecimal.valueOf(renewOrderRate).divide(BigDecimal.valueOf(100));
  177. takeMoney = orderMoney.multiply(renewRate);
  178. }
  179. record.setTakeMoney(takeMoney);
  180. return record;
  181. }
  182. }