| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package com.cyksj.service.user.impl;
- import com.cyksj.common.EnvCommonService;
- import com.cyksj.common.constant.Constant;
- 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.sms.SmsService;
- 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;
- private final EnvCommonService envCommonService;
- private final SmsService smsService;
- @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);
- if (envCommonService.isPrdEnv()) {
- if (source != UserBalanceSourceRecord.Source.close && source != UserBalanceSourceRecord.Source.balance) {
- try {
- //短信到账提醒
- String msg = String.format(Constant.BALANCE_NOTIFY_MSG, addBalance.divide(BigDecimal.valueOf(100)));
- smsService.sendSmsToRelationUser(userId, msg);
- } catch (Exception e) {
- }
- }
- }
- 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);
- }
- }
|