| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package com.cyksj.service.user.impl;
- import com.cyksj.mapper.DistributeOrdersDeductPointsRecordMapper;
- import com.cyksj.mapper.UserBalanceSourceRecordMapper;
- import com.cyksj.mapper.UserMapper;
- import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
- import com.cyksj.model.entity.User;
- import com.cyksj.model.entity.UserBalanceSourceRecord;
- import com.cyksj.service.user.UserBenefitsService;
- import lombok.RequiredArgsConstructor;
- import org.springframework.dao.DuplicateKeyException;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- /*
- *项目名: netflix
- *文件名: UserBenefitsServiceImpl
- *创建者: JavaZou
- *创建时间:2023/5/18 16:06
- */
- @Service
- @RequiredArgsConstructor
- public class UserBenefitsServiceImpl implements UserBenefitsService {
- private final UserMapper userMapper;
- private final DistributeOrdersDeductPointsRecordMapper distributeOrdersDeductPointsRecordMapper;
- private final UserBalanceSourceRecordMapper userBalanceSourceRecordMapper;
- @Override
- public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) {
- if (deductPoints.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal points = user.getPoints();
- Integer success = userMapper.subPointsNegative(userId, points, deductPoints);
- if (success == 1){
- //记录积分已发送后,退款后扣除积分记录
- deductPointsRecord(orderId, userId, deductPoints);
- break;
- }
- }
- }
- @Override
- public void addDistributePoints(Long userId, BigDecimal addPoints) {
- if (addPoints.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal points = user.getPoints();
- Integer success = userMapper.updatePoints(user.getId(), points, addPoints);
- if (success == 1) break;
- }
- }
- @Override
- public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source) {
- if (addBalance.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal balance = user.getBalance();
- Integer success = userMapper.addUserBalance(user.getId(), balance, addBalance);
- if (success == 1) {
- recordBalanceBySource(userId, addBalance, source);
- break;
- }
- }
- }
- @Override
- public void deductUserBalance(Long userId, BigDecimal subBalance) {
- if (subBalance.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal balance = user.getBalance();
- Integer success = userMapper.deductUserBalance(user.getId(), balance, subBalance);
- if (success == 1) break;
- }
- }
- public void deductPointsRecord(Long orderId, Long userId, BigDecimal deductPoints) {
- try {
- DistributeOrdersDeductPointsRecord record = new DistributeOrdersDeductPointsRecord();
- record.setOrderId(orderId);
- record.setUserId(userId);
- record.setDeductPoints(deductPoints);
- distributeOrdersDeductPointsRecordMapper.insert(record);
- } catch (DuplicateKeyException e) {
- }
- }
- @Override
- public void recordBalanceBySource(Long userId, BigDecimal balance, UserBalanceSourceRecord.Source source) {
- UserBalanceSourceRecord userBalanceSourceRecord = new UserBalanceSourceRecord();
- userBalanceSourceRecord.setUserId(userId);
- userBalanceSourceRecord.setBalance(balance);
- userBalanceSourceRecord.setSource(source);
- userBalanceSourceRecordMapper.insert(userBalanceSourceRecord);
- }
- }
|