UserBenefitsServiceImpl.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.cyksj.service.user.impl;
  2. import com.cyksj.mapper.DistributeOrdersDeductPointsRecordMapper;
  3. import com.cyksj.mapper.UserMapper;
  4. import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
  5. import com.cyksj.model.entity.User;
  6. import com.cyksj.service.user.UserBenefitsService;
  7. import lombok.RequiredArgsConstructor;
  8. import org.springframework.dao.DuplicateKeyException;
  9. import org.springframework.stereotype.Service;
  10. import java.math.BigDecimal;
  11. /*
  12. *项目名: netflix
  13. *文件名: UserBenefitsServiceImpl
  14. *创建者: JavaZou
  15. *创建时间:2023/5/18 16:06
  16. */
  17. @Service
  18. @RequiredArgsConstructor
  19. public class UserBenefitsServiceImpl implements UserBenefitsService {
  20. private final UserMapper userMapper;
  21. private final DistributeOrdersDeductPointsRecordMapper distributeOrdersDeductPointsRecordMapper;
  22. @Override
  23. public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) {
  24. while (true) {
  25. User user = userMapper.selectById(userId);
  26. if (user == null) break;
  27. BigDecimal points = user.getPoints();
  28. Integer success = userMapper.subPointsNegative(userId, points, deductPoints);
  29. if (success == 1){
  30. //记录积分已发送后,退款后扣除积分记录
  31. deductPointsRecord(orderId, userId, deductPoints);
  32. break;
  33. }
  34. }
  35. }
  36. @Override
  37. public void addDistributePoints(Long userId, BigDecimal addPoints) {
  38. while (true) {
  39. User user = userMapper.selectById(userId);
  40. if (user == null) break;
  41. BigDecimal points = user.getPoints();
  42. Integer success = userMapper.updatePoints(user.getId(), points, addPoints);
  43. if (success == 1) break;
  44. }
  45. }
  46. @Override
  47. public void addUserBalance(Long userId, BigDecimal addBalance) {
  48. while (true) {
  49. User user = userMapper.selectById(userId);
  50. if (user == null) break;
  51. BigDecimal balance = user.getBalance();
  52. Integer success = userMapper.addUserBalance(user.getId(), balance, addBalance);
  53. if (success == 1) break;
  54. }
  55. }
  56. @Override
  57. public void deductUserBalance(Long userId, BigDecimal subBalance) {
  58. while (true) {
  59. User user = userMapper.selectById(userId);
  60. if (user == null) break;
  61. BigDecimal balance = user.getBalance();
  62. Integer success = userMapper.deductUserBalance(user.getId(), balance, subBalance);
  63. if (success == 1) break;
  64. }
  65. }
  66. public void deductPointsRecord(Long orderId, Long userId, BigDecimal deductPoints) {
  67. try {
  68. DistributeOrdersDeductPointsRecord record = new DistributeOrdersDeductPointsRecord();
  69. record.setOrderId(orderId);
  70. record.setUserId(userId);
  71. record.setDeductPoints(deductPoints);
  72. distributeOrdersDeductPointsRecordMapper.insert(record);
  73. } catch (DuplicateKeyException e) {
  74. }
  75. }
  76. }