This commit is contained in:
777
2025-12-03 16:52:17 +08:00
parent 46a039a678
commit c91ede94a1
22 changed files with 555 additions and 11 deletions

View File

@@ -2,10 +2,7 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.ConsumeLog;
import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.admin.vo.AccountAdminVo;
import com.ruoyi.cai.dto.video.VideoSettleResp;
import com.ruoyi.cai.dto.video.WithholdingFeeUserResp;
@@ -34,6 +31,8 @@ public interface AccountService extends IService<Account> {
void withdrawFail(Long userId, Long incomeCoin, Long traceId);
PointRecordLog rechargePoint(RechargeOrder rechargeOrder, User user);
void recharge(ConsumeLog consumeLog);
void rechargeAdminIgnoreAccount(ConsumeLog consumeLog);

View File

@@ -0,0 +1,22 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.PointRecordLog;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.dto.AddPointAdminDto;
/**
* 用户积分分销Service接口
*
* @author 77
* @date 2025-12-03
*/
public interface PointRecordLogService extends IService<PointRecordLog> {
void adminUpdatePoint(AddPointAdminDto dto);
PointRecordLog initOrder(RechargeOrder order, User user);
void dealCalculateSales(Long pointLogId);
}

View File

@@ -9,7 +9,9 @@ import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.admin.vo.AccountAdminVo;
import com.ruoyi.cai.dto.video.VideoSettleResp;
import com.ruoyi.cai.dto.video.WithholdingFeeUserResp;
import com.ruoyi.cai.enums.ConsumeLogStatus;
import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.enums.PointLogType;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.enums.account.AccountTypeEnum;
@@ -33,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 用户账户Service业务层处理
@@ -214,6 +217,21 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), AccountChangeCodeEnum.WITHDRAW_FAIL,incomeCoin,traceId);
}
@Autowired
private PointRecordLogService pointRecordLogService;
@Transactional(rollbackFor = Exception.class)
@Override
public PointRecordLog rechargePoint(RechargeOrder rechargeOrder, User user){
if(rechargeOrder.getGivePoint() == null || rechargeOrder.getGivePoint() == 0){
return null;
}
log.info("开始赠送积分 orderNo={}", rechargeOrder.getOrderNo());
baseMapper.incrPoint(rechargeOrder.getUserId(), rechargeOrder.getGivePoint());
PointRecordLog pointRecordLog = pointRecordLogService.initOrder(rechargeOrder, user);
return pointRecordLog;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void recharge(ConsumeLog consumeLog){

View File

@@ -0,0 +1,137 @@
package com.ruoyi.cai.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.AddPointAdminDto;
import com.ruoyi.cai.enums.ConsumeLogStatus;
import com.ruoyi.cai.enums.PointLogType;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.mapper.PointRecordLogMapper;
import com.ruoyi.cai.service.PointRecordLogService;
import com.ruoyi.cai.service.UserInfoService;
import com.ruoyi.cai.service.UserInviteService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.cai.util.CaiNumUtil;
import com.ruoyi.common.exception.ServiceException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
/**
* 用户积分分销Service业务层处理
*
* @author 77
* @date 2025-12-03
*/
@RequiredArgsConstructor
@Service
public class PointRecordLogServiceImpl extends ServiceImpl<PointRecordLogMapper,PointRecordLog> implements PointRecordLogService {
@Autowired
private UserInviteService userInviteService;
@Autowired
private UserService userService;
@Autowired
private UserInfoService userInfoService;
@Resource
private AccountMapper accountMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void adminUpdatePoint(AddPointAdminDto dto){
String usercode = dto.getUsercode();
User user = userService.getByUserCode(usercode);
if(user == null){
throw new ServiceException("用户不存在");
}
if(dto.isDistribution()){
if(dto.getPoint() <= 0){
throw new ServiceException("开启分销情况下,无法调整积分为负数");
}
}
accountMapper.incrPoint(user.getId(), dto.getPoint());
PointRecordLog pointLog = new PointRecordLog();
pointLog.setPoints(dto.getPoint());
pointLog.setSourceUserId(user.getId());
pointLog.setSourceUsercode(user.getUsercode());
pointLog.setSourcePhone(user.getMobile());
UserInvite userInvite = userInviteService.getByUserId(user.getId());
if(userInvite != null){
User oneUser = userService.getById(userInvite.getInviteId());
if(oneUser != null && oneUser.getStatus() == 0){
UserInfo userInfo = userInfoService.getByUserId(userInvite.getUserId());
pointLog.setOneRate(userInfo.getPointRate());
pointLog.setOneUserId(oneUser.getId());
pointLog.setOneUsercode(oneUser.getUsercode());
pointLog.setOnePhone(oneUser.getMobile());
pointLog.setOnePoints(CaiNumUtil.coin(pointLog.getPoints(),pointLog.getOneRate()));
}
}
if(dto.isDistribution()){ // 需要分销,直接分销
pointLog.setStatus(ConsumeLogStatus.ALREADY.getCode());
if(pointLog.getOnePoints() >= 0 && pointLog.getOneUserId() != null){
accountMapper.incrPoint(pointLog.getOneUserId(), pointLog.getOnePoints());
}
}else{
pointLog.setStatus(ConsumeLogStatus.NO.getCode());
}
pointLog.setSourceType(PointLogType.ADMIN.getCode());
pointLog.setRemark(dto.getRemark());
pointLog.setCreateTime(LocalDateTime.now());
this.save(pointLog);
}
@Override
public PointRecordLog initOrder(RechargeOrder rechargeOrder, User user){
PointRecordLog log = new PointRecordLog();
log.setPoints(rechargeOrder.getGivePoint());
log.setSourceUserId(user.getId());
log.setSourceUsercode(user.getUsercode());
log.setSourcePhone(user.getMobile());
UserInvite userInvite = userInviteService.getByUserId(user.getId());
if(userInvite != null){
User oneUser = userService.getById(userInvite.getInviteId());
if(oneUser != null && oneUser.getStatus() == 0){
UserInfo userInfo = userInfoService.getByUserId(userInvite.getUserId());
log.setOneRate(userInfo.getPointRate());
log.setOneUserId(oneUser.getId());
log.setOneUsercode(oneUser.getUsercode());
log.setOnePhone(oneUser.getMobile());
log.setOnePoints(CaiNumUtil.coin(log.getPoints(),log.getOneRate()));
}
}
log.setStatus(ConsumeLogStatus.READY.getCode());
log.setSourceType(PointLogType.ORDER.getCode());
log.setSourceId(rechargeOrder.getOrderNo());
log.setCreateTime(LocalDateTime.now());
this.save(log);
return log;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void dealCalculateSales(Long pointLogId) {
PointRecordLog pointRecordLog = this.getById(pointLogId);
if(pointRecordLog == null){
return;
}
if(!ConsumeLogStatus.READY.getCode().equals(pointRecordLog.getStatus())){
return;
}
boolean update = this.update(Wrappers.lambdaUpdate(PointRecordLog.class)
.eq(PointRecordLog::getId, pointLogId)
.eq(PointRecordLog::getStatus, ConsumeLogStatus.READY.getCode())
.set(PointRecordLog::getStatus, ConsumeLogStatus.ALREADY.getCode()));
if(!update){
return;
}
if(pointRecordLog.getOneUserId() == null || pointRecordLog.getPoints() <= 0){
return;
}
accountMapper.incrPoint(pointRecordLog.getOneUserId(), pointRecordLog.getOnePoints());
}
}

View File

@@ -127,9 +127,13 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
consumeLog.setType(ConsumeLogType.RECHARGE.getCode());
consumeLog.setAmount(rechargeOrder.getRechargeCoin());
accountService.recharge(consumeLog);
PointRecordLog pointRecordLog = accountService.rechargePoint(rechargeOrder, user);
RechargeConsumerResp resp = new RechargeConsumerResp();
resp.setSuccess(true);
resp.setConsumeLogId(consumeLog.getId());
if(pointRecordLog != null){
resp.setPointLogId(pointRecordLog.getId());
}
resp.setUserId(user.getId());
resp.setUser(user);
resp.setTraceId(traceId);