init
This commit is contained in:
@@ -2,6 +2,7 @@ package com.ruoyi.cai.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.cai.domain.CaiAccount;
|
||||
import com.ruoyi.cai.domain.CaiConsumeLog;
|
||||
|
||||
/**
|
||||
* 用户账户Service接口
|
||||
@@ -13,9 +14,7 @@ public interface CaiAccountService extends IService<CaiAccount> {
|
||||
|
||||
CaiAccount getByUserId(Long userId);
|
||||
|
||||
boolean incs(Long userId, Long value);
|
||||
|
||||
boolean decr(Long userId, Long value);
|
||||
CaiConsumeLog decr(CaiConsumeLog log);
|
||||
|
||||
boolean withdraw(Long userId, Long incomeCoin);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
package com.ruoyi.cai.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.CaiAccount;
|
||||
import com.ruoyi.cai.domain.*;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.mapper.CaiAccountMapper;
|
||||
import com.ruoyi.cai.service.CaiAccountService;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.cai.util.NumCaUtil;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 用户账户Service业务层处理
|
||||
*
|
||||
@@ -16,38 +23,134 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
* @date 2023-12-23
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class CaiAccountServiceImpl extends ServiceImpl<CaiAccountMapper,CaiAccount> implements CaiAccountService {
|
||||
|
||||
@Autowired
|
||||
private CaiConsumeLogService consumeLogService;
|
||||
|
||||
|
||||
@Override
|
||||
public CaiAccount getByUserId(Long userId) {
|
||||
return this.getOne(Wrappers.lambdaQuery(CaiAccount.class).eq(CaiAccount::getUserId,userId).last("limit 1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean incs(Long userId, Long value) {
|
||||
return baseMapper.incs(userId,value) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean decr(Long userId, Long value) {
|
||||
public CaiConsumeLog decr(CaiConsumeLog consumeLog) {
|
||||
log.info("开始扣费 consumeLog={}", JSON.toJSONString(consumeLog));
|
||||
Long userId = consumeLog.getSourceUserId();
|
||||
Long amount = consumeLog.getAmount();
|
||||
|
||||
CaiAccount account = this.getByUserId(userId);
|
||||
if(account.getTotalCoin() < value){
|
||||
long totalCoin = account.getIncomeCoin() + account.getCoin();
|
||||
if(totalCoin < amount){
|
||||
throw new ServiceException("余额不足");
|
||||
}
|
||||
long incs = baseMapper.incs(userId, -value);
|
||||
if(incs <= 0){
|
||||
return false;
|
||||
boolean flag = false;
|
||||
long diff = account.getCoin() - amount;
|
||||
// 充值币够用
|
||||
if(diff > 0){
|
||||
long l = baseMapper.decrCoin(userId, amount);
|
||||
flag = l > 0;
|
||||
} else { // 充值币不够用
|
||||
long decrCoin = baseMapper.decrCoin(userId, account.getCoin());
|
||||
long decrIncomeCoin = baseMapper.decrIncomeCoin(userId, -diff);
|
||||
if(decrCoin > 0 && decrIncomeCoin > 0){
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
CaiAccount newAccount = this.getByUserId(userId);
|
||||
Long decrCoinFlag = newAccount.getCoin() - value;
|
||||
if(decrCoinFlag >= 0){
|
||||
baseMapper.incsCoin(userId, -value,0L);
|
||||
}else{
|
||||
baseMapper.incsCoin(userId, -newAccount.getCoin(), decrCoinFlag);
|
||||
// 扣费不成功
|
||||
if(!flag){
|
||||
throw new ServiceException("扣费失败,请重新购买");
|
||||
}
|
||||
return true;
|
||||
// 开始处理 接收方的费用
|
||||
Long targetUserId = consumeLog.getTargetUserId();
|
||||
if(targetUserId != null){
|
||||
Long anchorAmount = NumCaUtil.coin(amount,consumeLog.getTargetRate());
|
||||
consumeLog.setAnchorAmount(anchorAmount);
|
||||
baseMapper.incsCoin(targetUserId,anchorAmount);
|
||||
}
|
||||
// 获取分销的比例和用户
|
||||
fenxiao(consumeLog);
|
||||
consumeLogService.save(consumeLog);
|
||||
return consumeLog;
|
||||
}
|
||||
@Autowired
|
||||
private CaiUserInviteService userInviteService;
|
||||
@Autowired
|
||||
private CaiUserService userService;
|
||||
@Autowired
|
||||
private CaiUnionUserService unionUserService;
|
||||
@Autowired
|
||||
private CaiUnionService unionService;
|
||||
|
||||
|
||||
private void fenxiao(CaiConsumeLog consumeLog){
|
||||
if(ConsumeLogType.PAY.getCode().equals(consumeLog.getType())){
|
||||
Long sourceUserId = consumeLog.getSourceUserId();
|
||||
CaiUserInvite userInvite = userInviteService.getByUserId(sourceUserId);
|
||||
if(userInvite != null){
|
||||
CaiUser oneUser = userService.getById(userInvite.getInviteId());
|
||||
if(oneUser != null && oneUser.getStatus() == 0){
|
||||
consumeLog.setOneRate(userInvite.getPayIncomeRate());
|
||||
consumeLog.setOneUserId(userInvite.getInviteId());
|
||||
consumeLog.setOneUsercode(oneUser.getUsercode());
|
||||
consumeLog.setOnePhone(oneUser.getMobile());
|
||||
consumeLog.setOneJoin(userInvite.getEnableRate());
|
||||
consumeLog.setOneIsUnion(oneUser.getIsUnion());
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
Long targetUserId = consumeLog.getTargetUserId();
|
||||
if(targetUserId != null){
|
||||
// 获取一级分销
|
||||
CaiUserInvite userInvite = userInviteService.getByUserId(targetUserId);
|
||||
if(userInvite != null){
|
||||
CaiUser oneUser = userService.getById(userInvite.getInviteId());
|
||||
if(oneUser != null && oneUser.getStatus() == 0){
|
||||
if(ConsumeLogType.GUARD.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInvite.getGuardIncomeRate());
|
||||
}else if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInvite.getGiftIncomeRate());
|
||||
}else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInvite.getVideoIncomeRate());
|
||||
}
|
||||
consumeLog.setOneUserId(userInvite.getInviteId());
|
||||
consumeLog.setOneUsercode(oneUser.getUsercode());
|
||||
consumeLog.setOnePhone(oneUser.getMobile());
|
||||
consumeLog.setOneJoin(userInvite.getEnableRate());
|
||||
consumeLog.setOneIsUnion(oneUser.getIsUnion());
|
||||
}
|
||||
}
|
||||
// 工会分销 只有通话和礼物才有
|
||||
if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())
|
||||
|| ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
|
||||
CaiUnionUser unionUser = unionUserService.getByUserId(targetUserId);
|
||||
if(unionUser != null){
|
||||
CaiUser user = userService.getById(unionUser.getId());
|
||||
if(user != null && user.getIsUnion() == 1 && user.getStatus() == 0){
|
||||
CaiUnion union = unionService.getById(unionUser.getUnionId());
|
||||
if(union != null){
|
||||
consumeLog.setUnionUsercode(user.getUsercode());
|
||||
consumeLog.setUnionPhone(user.getMobile());
|
||||
consumeLog.setUnionUserId(user.getId());
|
||||
consumeLog.setUnionJoin(false);
|
||||
if(unionUser.getEnableRate() && union.getEnableRate()){
|
||||
consumeLog.setUnionJoin(true);
|
||||
}
|
||||
if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setUnionRate(unionUser.getGiftDivide());
|
||||
}else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setUnionRate(unionUser.getVideoDivide());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,13 +2,17 @@ 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.CaiAnchor;
|
||||
import com.ruoyi.cai.domain.CaiConsumeLog;
|
||||
import com.ruoyi.cai.domain.CaiGuardTotal;
|
||||
import com.ruoyi.cai.domain.CaiUser;
|
||||
import com.ruoyi.cai.dto.app.dto.GuardNum;
|
||||
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
|
||||
import com.ruoyi.cai.dto.app.vo.GuardTotalVo;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.mapper.CaiGuardTotalMapper;
|
||||
import com.ruoyi.cai.service.CaiAccountService;
|
||||
import com.ruoyi.cai.service.CaiAnchorService;
|
||||
import com.ruoyi.cai.service.CaiGuardTotalService;
|
||||
import com.ruoyi.cai.service.CaiUserService;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
@@ -33,6 +37,8 @@ public class CaiGuardTotalServiceImpl extends ServiceImpl<CaiGuardTotalMapper,Ca
|
||||
private CaiUserService userService;
|
||||
@Autowired
|
||||
private CaiAccountService accountService;
|
||||
@Autowired
|
||||
private CaiAnchorService anchorService;
|
||||
|
||||
@Override
|
||||
public List<GuardTotalVo> selectGuardTotalLimit(Long fromUserId,Integer limit) {
|
||||
@@ -43,18 +49,25 @@ public class CaiGuardTotalServiceImpl extends ServiceImpl<CaiGuardTotalMapper,Ca
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean giveGuard(GiveGuardReq query) {
|
||||
Long fromUserId = LoginHelper.getUserId();
|
||||
CaiUser user = userService.getById(query.getToUserId());
|
||||
if(user == null){
|
||||
CaiUser fromUser = userService.getById(fromUserId);
|
||||
CaiUser toUser = userService.getById(query.getToUserId());
|
||||
if(toUser == null){
|
||||
throw new ServiceException("女神不存在");
|
||||
}
|
||||
if(user.getIsAnchor() != 1){
|
||||
if(toUser.getIsAnchor() != 1){
|
||||
throw new ServiceException("只能给女神送守护");
|
||||
}
|
||||
Long guardValue = query.getGuardNum() * GUARD_UNIT_PRICE;
|
||||
boolean boo = accountService.decr(fromUserId, -guardValue);
|
||||
if(!boo){
|
||||
throw new ServiceException("余额不足");
|
||||
CaiAnchor anchor = anchorService.getByUserId(toUser.getId());
|
||||
if(anchor == null){
|
||||
throw new ServiceException("女神不存在");
|
||||
}
|
||||
Long guardValue = query.getGuardNum() * GUARD_UNIT_PRICE;
|
||||
CaiConsumeLog consumeLog = new CaiConsumeLog();
|
||||
consumeLog.init(fromUser,toUser);
|
||||
consumeLog.setType(ConsumeLogType.GUARD.getCode());
|
||||
consumeLog.setAmount(guardValue);
|
||||
consumeLog.setTargetRate(anchor.getGuardRate());
|
||||
consumeLog = accountService.decr(consumeLog);
|
||||
// TODO 增加守护流水
|
||||
CaiGuardTotal one = this.getOne(Wrappers.lambdaQuery(CaiGuardTotal.class)
|
||||
.eq(CaiGuardTotal::getToUserId, query.getToUserId())
|
||||
|
||||
@@ -51,14 +51,14 @@ public class CaiUserCallServiceImpl extends ServiceImpl<CaiUserCallMapper,CaiUse
|
||||
caiUserCall.setCallPrice(anchor.getPrice());
|
||||
caiUserCall.setReceiverVideoDivide(anchor.getVideoRate());
|
||||
CaiUnionUser unionUser = unionUserService.getByUserId(toUser.getId());
|
||||
if(unionUser != null && unionUser.getType() == 1){
|
||||
if(unionUser != null && unionUser.getEnableRate()){
|
||||
caiUserCall.setReceiverUnionUserId(unionUser.getUserId());
|
||||
caiUserCall.setReceiverUnionVideoDivide(unionUser.getVideoDivide());
|
||||
}
|
||||
CaiUserInvite invite = inviteService.getByUserId(toUser.getId());
|
||||
if(invite != null){
|
||||
caiUserCall.setReceiverInviteUserId(invite.getInviteId());
|
||||
caiUserCall.setReceiverIncomeDivide(invite.getRewardIncomeRate());
|
||||
caiUserCall.setReceiverIncomeDivide(invite.getVideoIncomeRate());
|
||||
}
|
||||
boolean save = this.save(caiUserCall);
|
||||
if(!save){
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
package com.ruoyi.cai.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.CaiAccount;
|
||||
import com.ruoyi.cai.domain.CaiGift;
|
||||
import com.ruoyi.cai.domain.CaiUserGift;
|
||||
import com.ruoyi.cai.domain.*;
|
||||
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
|
||||
import com.ruoyi.cai.dto.app.vo.UserGiftVo;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.mapper.CaiUserGiftMapper;
|
||||
import com.ruoyi.cai.service.CaiAccountService;
|
||||
import com.ruoyi.cai.service.CaiGiftService;
|
||||
import com.ruoyi.cai.service.CaiUserGiftService;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -32,6 +29,11 @@ public class CaiUserGiftServiceImpl extends ServiceImpl<CaiUserGiftMapper,CaiUse
|
||||
private CaiGiftService giftService;
|
||||
@Autowired
|
||||
private CaiAccountService accountService;
|
||||
@Autowired
|
||||
private CaiUserService userService;
|
||||
@Autowired
|
||||
private CaiAnchorService anchorService;
|
||||
|
||||
|
||||
@Override
|
||||
public List<UserGiftVo> selectGiftList(Long userId) {
|
||||
@@ -45,12 +47,17 @@ public class CaiUserGiftServiceImpl extends ServiceImpl<CaiUserGiftMapper,CaiUse
|
||||
if(gift == null){
|
||||
throw new ServiceException("礼物不存在");
|
||||
}
|
||||
CaiUser fromUser = userService.getById(fromUserId);
|
||||
CaiUser toUser = userService.getById(query.getToUserId());
|
||||
CaiAnchor anchor = anchorService.getByUserId(query.getToUserId());
|
||||
Long price = gift.getPrice();
|
||||
Long giftAmount = query.getGiftCount() * price;
|
||||
boolean boo = accountService.decr(fromUserId, -giftAmount);
|
||||
if(!boo){
|
||||
throw new ServiceException("余额不足");
|
||||
}
|
||||
CaiConsumeLog consumeLog = new CaiConsumeLog();
|
||||
consumeLog.init(fromUser,toUser);
|
||||
consumeLog.setType(ConsumeLogType.GIFT.getCode());
|
||||
consumeLog.setAmount(giftAmount);
|
||||
consumeLog.setTargetRate(anchor.getGiftRate());
|
||||
consumeLog = accountService.decr(consumeLog);
|
||||
CaiUserGift userGift = new CaiUserGift();
|
||||
userGift.setType(query.getType());
|
||||
userGift.setFromUid(fromUserId);
|
||||
@@ -58,6 +65,7 @@ public class CaiUserGiftServiceImpl extends ServiceImpl<CaiUserGiftMapper,CaiUse
|
||||
userGift.setGiftId(query.getGiftId());
|
||||
userGift.setGiftCount(query.getGiftCount());
|
||||
userGift.setGiftAmount(giftAmount);
|
||||
userGift.setConsumerLogId(consumeLog.getId());
|
||||
this.save(userGift);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user