package com.cyksj.service.user.impl; import com.cyksj.mapper.DistributeOrdersDeductPointsRecordMapper; import com.cyksj.mapper.UserMapper; import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord; import com.cyksj.model.entity.User; 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; @Override public void deductDistributePoints(Long orderId, Long userId, BigDecimal deductPoints) { 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) { 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) { 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) break; } } @Override public void deductUserBalance(Long userId, BigDecimal subBalance) { 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) { } } }