UserBenefitsServiceImpl.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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.UserMapper;
  7. import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
  8. import com.cyksj.model.entity.User;
  9. import com.cyksj.model.entity.UserBalanceSourceRecord;
  10. import com.cyksj.service.sms.SmsService;
  11. import com.cyksj.service.user.UserBenefitsService;
  12. import lombok.RequiredArgsConstructor;
  13. import org.springframework.dao.DuplicateKeyException;
  14. import org.springframework.stereotype.Service;
  15. import java.math.BigDecimal;
  16. /*
  17. *项目名: netflix
  18. *文件名: UserBenefitsServiceImpl
  19. *创建者: JavaZou
  20. *创建时间:2023/5/18 16:06
  21. */
  22. @Service
  23. @RequiredArgsConstructor
  24. public class UserBenefitsServiceImpl implements UserBenefitsService {
  25. private final UserMapper userMapper;
  26. private final DistributeOrdersDeductPointsRecordMapper distributeOrdersDeductPointsRecordMapper;
  27. private final UserBalanceSourceRecordMapper userBalanceSourceRecordMapper;
  28. private final EnvCommonService envCommonService;
  29. private final SmsService smsService;
  30. @Override
  31. public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) {
  32. if (deductPoints.compareTo(BigDecimal.ZERO) <= 0) {
  33. return;
  34. }
  35. while (true) {
  36. User user = userMapper.selectById(userId);
  37. if (user == null) break;
  38. BigDecimal points = user.getPoints();
  39. Integer success = userMapper.subPointsNegative(userId, points, deductPoints);
  40. if (success == 1){
  41. //记录积分已发送后,退款后扣除积分记录
  42. deductPointsRecord(orderId, userId, deductPoints);
  43. break;
  44. }
  45. }
  46. }
  47. @Override
  48. public void addDistributePoints(Long userId, BigDecimal addPoints) {
  49. if (addPoints.compareTo(BigDecimal.ZERO) <= 0) {
  50. return;
  51. }
  52. while (true) {
  53. User user = userMapper.selectById(userId);
  54. if (user == null) break;
  55. BigDecimal points = user.getPoints();
  56. Integer success = userMapper.updatePoints(user.getId(), points, addPoints);
  57. if (success == 1) break;
  58. }
  59. }
  60. @Override
  61. public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source) {
  62. if (addBalance.compareTo(BigDecimal.ZERO) <= 0) {
  63. return;
  64. }
  65. while (true) {
  66. User user = userMapper.selectById(userId);
  67. if (user == null) break;
  68. BigDecimal balance = user.getBalance();
  69. Integer success = userMapper.addUserBalance(user.getId(), balance, addBalance);
  70. if (success == 1) {
  71. recordBalanceBySource(userId, addBalance, source);
  72. if (envCommonService.isPrdEnv()) {
  73. if (source != UserBalanceSourceRecord.Source.close && source != UserBalanceSourceRecord.Source.balance) {
  74. try {
  75. //短信到账提醒
  76. String msg = String.format(Constant.BALANCE_NOTIFY_MSG, addBalance.divide(BigDecimal.valueOf(100)));
  77. smsService.sendSmsToRelationUser(userId, msg);
  78. } catch (Exception e) {
  79. }
  80. }
  81. }
  82. break;
  83. }
  84. }
  85. }
  86. @Override
  87. public void deductUserBalance(Long userId, BigDecimal subBalance) {
  88. if (subBalance.compareTo(BigDecimal.ZERO) <= 0) {
  89. return;
  90. }
  91. while (true) {
  92. User user = userMapper.selectById(userId);
  93. if (user == null) break;
  94. BigDecimal balance = user.getBalance();
  95. Integer success = userMapper.deductUserBalance(user.getId(), balance, subBalance);
  96. if (success == 1) break;
  97. }
  98. }
  99. public void deductPointsRecord(Long orderId, Long userId, BigDecimal deductPoints) {
  100. try {
  101. DistributeOrdersDeductPointsRecord record = new DistributeOrdersDeductPointsRecord();
  102. record.setOrderId(orderId);
  103. record.setUserId(userId);
  104. record.setDeductPoints(deductPoints);
  105. distributeOrdersDeductPointsRecordMapper.insert(record);
  106. } catch (DuplicateKeyException e) {
  107. }
  108. }
  109. @Override
  110. public void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source) {
  111. UserBalanceSourceRecord userBalanceSourceRecord = new UserBalanceSourceRecord();
  112. userBalanceSourceRecord.setUserId(userId);
  113. userBalanceSourceRecord.setBalance(balance);
  114. userBalanceSourceRecord.setSource(source);
  115. userBalanceSourceRecordMapper.insert(userBalanceSourceRecord);
  116. }
  117. }