UserBenefitsServiceImpl.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package com.cyksj.service.user.impl;
  2. import com.cyksj.common.EnvCommonService;
  3. import com.cyksj.common.constant.Constant;
  4. import com.cyksj.mapper.DistributeOrdersDeductPointsRecordMapper;
  5. import com.cyksj.mapper.UserBalanceSourceRecordMapper;
  6. import com.cyksj.mapper.UserGalaxycoinRecordMapper;
  7. import com.cyksj.mapper.UserMapper;
  8. import com.cyksj.mapper.shop.YhShopDistributeOrdersDeductPointsRecordMapper;
  9. import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
  10. import com.cyksj.model.entity.User;
  11. import com.cyksj.model.entity.UserBalanceSourceRecord;
  12. import com.cyksj.model.entity.YhShopDistributeOrdersDeductPointsRecord;
  13. import com.cyksj.service.sms.SmsService;
  14. import com.cyksj.service.user.UserBenefitsService;
  15. import lombok.RequiredArgsConstructor;
  16. import org.springframework.dao.DuplicateKeyException;
  17. import org.springframework.stereotype.Service;
  18. import java.math.BigDecimal;
  19. /*
  20. *项目名: netflix
  21. *文件名: UserBenefitsServiceImpl
  22. *创建者: JavaZou
  23. *创建时间:2023/5/18 16:06
  24. */
  25. @Service
  26. @RequiredArgsConstructor
  27. public class UserBenefitsServiceImpl implements UserBenefitsService {
  28. private final UserMapper userMapper;
  29. private final DistributeOrdersDeductPointsRecordMapper distributeOrdersDeductPointsRecordMapper;
  30. private final UserBalanceSourceRecordMapper userBalanceSourceRecordMapper;
  31. private final EnvCommonService envCommonService;
  32. private final SmsService smsService;
  33. private final YhShopDistributeOrdersDeductPointsRecordMapper yhShopDistributeOrdersDeductPointsRecordMapper;
  34. private final UserGalaxycoinRecordMapper userGalaxycoinRecordMapper;
  35. @Override
  36. public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) {
  37. if (deductPoints.compareTo(BigDecimal.ZERO) <= 0) {
  38. return;
  39. }
  40. while (true) {
  41. User user = userMapper.selectById(userId);
  42. if (user == null) break;
  43. BigDecimal points = user.getPoints();
  44. Integer success = userMapper.subPointsNegative(userId, points, deductPoints);
  45. if (success == 1){
  46. //记录积分已发送后,退款后扣除积分记录
  47. deductPointsRecord(orderId, userId, deductPoints);
  48. break;
  49. }
  50. }
  51. }
  52. @Override
  53. public void addDistributePoints(Long userId, BigDecimal addPoints) {
  54. if (addPoints.compareTo(BigDecimal.ZERO) <= 0) {
  55. return;
  56. }
  57. while (true) {
  58. User user = userMapper.selectById(userId);
  59. if (user == null) break;
  60. BigDecimal points = user.getPoints();
  61. Integer success = userMapper.updatePoints(user.getId(), points, addPoints);
  62. if (success == 1) break;
  63. }
  64. }
  65. @Override
  66. public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source, Long yhsId, Long orderId, String detail, Boolean isRecord) {
  67. if (addBalance.compareTo(BigDecimal.ZERO) <= 0) {
  68. return;
  69. }
  70. while (true) {
  71. User user = userMapper.selectById(userId);
  72. if (user == null) break;
  73. BigDecimal balance = user.getBalance();
  74. Integer success = userMapper.addUserBalance(user.getId(), balance, addBalance);
  75. if (success == 1) {
  76. if (isRecord) {
  77. recordBalanceBySource(userId, addBalance, source, orderId, detail);
  78. }
  79. if (envCommonService.isPrdEnv() && isRecord && yhsId == 0) {
  80. try {
  81. //短信到账提醒
  82. String msg = String.format(Constant.BALANCE_NOTIFY_MSG, addBalance.divide(BigDecimal.valueOf(100)));
  83. smsService.sendSmsToRelationUser(userId, msg);
  84. } catch (Exception e) {
  85. }
  86. }
  87. break;
  88. }
  89. }
  90. }
  91. @Override
  92. public void deductUserBalance(Long userId, BigDecimal subBalance) {
  93. if (subBalance.compareTo(BigDecimal.ZERO) <= 0) {
  94. return;
  95. }
  96. while (true) {
  97. User user = userMapper.selectById(userId);
  98. if (user == null) break;
  99. BigDecimal balance = user.getBalance();
  100. Integer success = userMapper.deductUserBalance(user.getId(), balance, subBalance);
  101. if (success == 1) break;
  102. }
  103. }
  104. public void deductPointsRecord(Long orderId, Long userId, BigDecimal deductPoints) {
  105. try {
  106. DistributeOrdersDeductPointsRecord record = new DistributeOrdersDeductPointsRecord();
  107. record.setOrderId(orderId);
  108. record.setUserId(userId);
  109. record.setDeductPoints(deductPoints);
  110. distributeOrdersDeductPointsRecordMapper.insert(record);
  111. } catch (DuplicateKeyException e) {
  112. }
  113. }
  114. @Override
  115. public void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source, Long orderId, String detail) {
  116. UserBalanceSourceRecord userBalanceSourceRecord = new UserBalanceSourceRecord();
  117. userBalanceSourceRecord.setUserId(userId);
  118. userBalanceSourceRecord.setBalance(balance);
  119. userBalanceSourceRecord.setSource(source);
  120. userBalanceSourceRecord.setOrderId(orderId);
  121. userBalanceSourceRecord.setDetail(detail);
  122. userBalanceSourceRecordMapper.insert(userBalanceSourceRecord);
  123. }
  124. @Override
  125. public void addYhsMoney(Long userId, BigDecimal addYhsMoney) {
  126. if (addYhsMoney.compareTo(BigDecimal.ZERO) <= 0) {
  127. return;
  128. }
  129. while (true) {
  130. User user = userMapper.selectById(userId);
  131. if (user == null) break;
  132. BigDecimal yhsMoney = user.getYhsMoney();
  133. Integer success = userMapper.addYhsMoney(user.getId(), yhsMoney, addYhsMoney);
  134. if (success == 1) {
  135. break;
  136. }
  137. }
  138. }
  139. @Override
  140. public void deductYhShopTakeMoney(Long orderId, Long shopUserId, BigDecimal deductMoney) {
  141. if (deductMoney.compareTo(BigDecimal.ZERO) <= 0) {
  142. return;
  143. }
  144. while (true) {
  145. User user = userMapper.selectById(shopUserId);
  146. if (user == null) break;
  147. BigDecimal yhsMoney = user.getYhsMoney();
  148. Integer success = userMapper.subYhShopUserMoney(shopUserId, yhsMoney, deductMoney);
  149. if (success == 1){
  150. //记录提成已发送后,退款后扣除用户店铺提成 记录
  151. deductYhsMoneyRecord(orderId, shopUserId, deductMoney);
  152. break;
  153. }
  154. }
  155. }
  156. private void deductYhsMoneyRecord(Long orderId, Long shopUserId, BigDecimal deductMoney) {
  157. try {
  158. YhShopDistributeOrdersDeductPointsRecord record = new YhShopDistributeOrdersDeductPointsRecord();
  159. record.setOrderId(orderId);
  160. record.setShopUserId(shopUserId);
  161. record.setDeductMoney(deductMoney);
  162. yhShopDistributeOrdersDeductPointsRecordMapper.insert(record);
  163. } catch (DuplicateKeyException e) {
  164. }
  165. }
  166. }