| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- 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.mapper.shop.YhShopDistributeOrdersDeductPointsRecordMapper;
- import com.cyksj.model.entity.DistributeOrdersDeductPointsRecord;
- import com.cyksj.model.entity.User;
- import com.cyksj.model.entity.UserBalanceSourceRecord;
- import com.cyksj.model.entity.YhShopDistributeOrdersDeductPointsRecord;
- 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 org.springframework.transaction.annotation.Transactional;
- 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;
- private final YhShopDistributeOrdersDeductPointsRecordMapper yhShopDistributeOrdersDeductPointsRecordMapper;
- @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
- @Transactional(rollbackFor = Throwable.class)
- public void addUserBalance(Long userId, BigDecimal addBalance, UserBalanceSourceRecord.Source source, Long yhsId, Long orderId, String detail, Boolean isRecord) {
- if (addBalance == null || 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) {
- if (isRecord) {
- recordBalanceBySource(userId, addBalance, source, orderId, detail, null, null);
- }
- if (envCommonService.isPrdEnv() && isRecord && yhsId != null && yhsId == 0) {
- 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) {
- throw new IllegalStateException("user does not exist");
- }
- BigDecimal balance = user.getBalance();
- if (balance.compareTo(subBalance) < 0) {
- throw new IllegalStateException("user balance is insufficient");
- }
- 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, Long orderId, String detail, String remark, String operator) {
- UserBalanceSourceRecord userBalanceSourceRecord = new UserBalanceSourceRecord();
- userBalanceSourceRecord.setUserId(userId);
- userBalanceSourceRecord.setBalance(balance);
- userBalanceSourceRecord.setSource(source);
- userBalanceSourceRecord.setOrderId(orderId);
- userBalanceSourceRecord.setDetail(detail);
- userBalanceSourceRecord.setRemark(remark);
- userBalanceSourceRecord.setOperator(operator);
- userBalanceSourceRecordMapper.insert(userBalanceSourceRecord);
- }
- @Override
- public void addYhsMoney(Long userId, BigDecimal addYhsMoney) {
- if (addYhsMoney.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal yhsMoney = user.getYhsMoney();
- Integer success = userMapper.addYhsMoney(user.getId(), yhsMoney, addYhsMoney);
- if (success == 1) {
- break;
- }
- }
- }
- @Override
- public void deductYhShopTakeMoney(Long orderId, Long shopUserId, BigDecimal deductMoney) {
- if (deductMoney.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(shopUserId);
- if (user == null) break;
- BigDecimal yhsMoney = user.getYhsMoney();
- Integer success = userMapper.subYhShopUserMoney(shopUserId, yhsMoney, deductMoney);
- if (success == 1){
- //记录提成已发送后,退款后扣除用户店铺提成 记录
- deductYhsMoneyRecord(orderId, shopUserId, deductMoney);
- break;
- }
- }
- }
- @Override
- public void addDistributeSubMoney(Long userId, BigDecimal addApplyMoney) {
- if (addApplyMoney.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal subApplyMoney = user.getSubApplyMoney();
- Integer success = userMapper.addDistributeSubMoney(user.getId(), subApplyMoney, addApplyMoney);
- if (success == 1) {
- break;
- }
- }
- }
- @Override
- public void addMpMoney(Long userId, BigDecimal addMoney) {
- if (addMoney.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(userId);
- if (user == null) break;
- BigDecimal mpMoney = user.getMpMoney();
- Integer success = userMapper.addMpMoney(user.getId(), mpMoney, addMoney);
- if (success == 1) {
- break;
- }
- }
- }
- @Override
- public void deductUserMirrorShopTakeMoney(Long orderId, Long shopUserId, BigDecimal deductMoney) {
- if (deductMoney.compareTo(BigDecimal.ZERO) <= 0) {
- return;
- }
- while (true) {
- User user = userMapper.selectById(shopUserId);
- if (user == null) break;
- BigDecimal mpMoney = user.getMpMoney();
- Integer success = userMapper.subUserMirrorShopMoney(shopUserId, mpMoney, deductMoney);
- if (success == 1){
- break;
- }
- }
- }
- private void deductYhsMoneyRecord(Long orderId, Long shopUserId, BigDecimal deductMoney) {
- try {
- YhShopDistributeOrdersDeductPointsRecord record = new YhShopDistributeOrdersDeductPointsRecord();
- record.setOrderId(orderId);
- record.setShopUserId(shopUserId);
- record.setDeductMoney(deductMoney);
- yhShopDistributeOrdersDeductPointsRecordMapper.insert(record);
- } catch (DuplicateKeyException e) {
- }
- }
- }
|