123
This commit is contained in:
@@ -2,6 +2,10 @@ package com.ruoyi.cai.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.cai.domain.AccountChangeLog;
|
||||
import com.ruoyi.cai.domain.User;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.AccountChangeEnum;
|
||||
import com.ruoyi.cai.pay.RechargeTypeEnum;
|
||||
|
||||
/**
|
||||
* 账户明细Service接口
|
||||
@@ -11,4 +15,9 @@ import com.ruoyi.cai.domain.AccountChangeLog;
|
||||
*/
|
||||
public interface AccountChangeLogService extends IService<AccountChangeLog> {
|
||||
|
||||
AccountChangeLog saveLogNoAdmin(Long userId, String usercode, RechargeTypeEnum rechargeTypeEnum, AccountChangeEnum accountChangeEnum, Long price,Long traceId);
|
||||
|
||||
AccountChangeLog saveLog(Long userId,String usercode, RechargeTypeEnum rechargeTypeEnum, AccountChangeEnum accountChangeEnum, Long price, Long traceId,Integer admin);
|
||||
|
||||
AccountChangeLog saveLogAdmin(Long userId,String usercode, RechargeTypeEnum rechargeTypeEnum, AccountChangeEnum accountChangeEnum, Long price,Long traceId);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.ruoyi.cai.domain.Account;
|
||||
import com.ruoyi.cai.domain.ConsumeLog;
|
||||
import com.ruoyi.cai.dto.admin.vo.AccountAdminVo;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.AccountChangeEnum;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 用户账户Service接口
|
||||
@@ -17,9 +20,13 @@ public interface AccountService extends IService<Account> {
|
||||
|
||||
Account getByUserId(Long userId);
|
||||
|
||||
ConsumeLog decr(ConsumeLog log);
|
||||
ConsumeLog decr(ConsumeLog log, AccountBusinessEnum businessEnum);
|
||||
|
||||
void withdraw(Long userId, Long incomeCoin);
|
||||
void withdraw(Long userId, Long incomeCoin, Long traceId);
|
||||
|
||||
void recharge(ConsumeLog consumeLog);
|
||||
|
||||
Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo);
|
||||
|
||||
void distribution(Long userId, Long amount, AccountChangeEnum oneEnum,Long traceId);
|
||||
}
|
||||
|
||||
@@ -11,4 +11,7 @@ import com.ruoyi.cai.domain.ConsumeLog;
|
||||
*/
|
||||
public interface ConsumeLogService extends IService<ConsumeLog> {
|
||||
|
||||
void dealFenxiao(Long id);
|
||||
|
||||
ConsumeLog calculateInitFenxiao(ConsumeLog consumeLog);
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
|
||||
import com.ruoyi.cai.dto.AddRechargeOrderDto;
|
||||
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 充值订单Service接口
|
||||
@@ -16,9 +17,14 @@ import com.ruoyi.common.core.domain.PageQuery;
|
||||
*/
|
||||
public interface RechargeOrderService extends IService<RechargeOrder> {
|
||||
|
||||
RechargeOrder getByOrderNo(String orderNo);
|
||||
|
||||
Page<RechargeOrderAdminVo> pageAdmin(PageQuery pageQuery, RechargeOrderAdminVo bo);
|
||||
|
||||
RechargeOrder addRechargeOrder(AddRechargeOrderDto addRechargeOrderDto);
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
void orderSuccess(String orderNo);
|
||||
|
||||
RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.ruoyi.cai.domain.AccountCash;
|
||||
import com.ruoyi.cai.domain.WithdrawExchange;
|
||||
import com.ruoyi.cai.dto.admin.vo.AccountCashAdminVo;
|
||||
import com.ruoyi.cai.dto.app.query.WithdrawReq;
|
||||
import com.ruoyi.cai.manager.IdManager;
|
||||
import com.ruoyi.cai.mapper.AccountCashMapper;
|
||||
import com.ruoyi.cai.service.AccountCashService;
|
||||
import com.ruoyi.cai.service.AccountBankcardService;
|
||||
@@ -39,10 +40,12 @@ public class AccountCashServiceImpl extends ServiceImpl<AccountCashMapper, Accou
|
||||
if(withdrawExchange == null){
|
||||
throw new ServiceException("参数不正确");
|
||||
}
|
||||
Long traceId = IdManager.nextId();
|
||||
Long coinNum = withdrawExchange.getCoinNum();
|
||||
accountService.withdraw(res.getUserId(), coinNum);
|
||||
accountService.withdraw(res.getUserId(), coinNum,traceId);
|
||||
AccountCash cash = new AccountCash();
|
||||
cash.setUserId(res.getUserId());
|
||||
cash.setTraceId(traceId);
|
||||
cash.setOrderNo("orderNo");
|
||||
cash.setWithdrawCoin(coinNum);
|
||||
cash.setCashMoney(BigDecimal.valueOf(withdrawExchange.getMoney()));
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.ruoyi.cai.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.AccountChangeLog;
|
||||
import com.ruoyi.cai.enums.AccountChangeEnum;
|
||||
import com.ruoyi.cai.mapper.AccountChangeLogMapper;
|
||||
import com.ruoyi.cai.pay.RechargeTypeEnum;
|
||||
import com.ruoyi.cai.service.AccountChangeLogService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -15,4 +17,34 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class AccountChangeLogServiceImpl extends ServiceImpl<AccountChangeLogMapper,AccountChangeLog> implements AccountChangeLogService {
|
||||
|
||||
|
||||
@Override
|
||||
public AccountChangeLog saveLogNoAdmin(Long userId, String usercode, RechargeTypeEnum rechargeTypeEnum, AccountChangeEnum accountChangeEnum, Long price,Long traceId){
|
||||
return this.saveLog(userId,usercode,rechargeTypeEnum,accountChangeEnum,price,traceId,0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccountChangeLog saveLog(Long userId,String usercode, RechargeTypeEnum rechargeTypeEnum,
|
||||
AccountChangeEnum accountChangeEnum, Long price, Long traceId,Integer admin){
|
||||
AccountChangeLog log = new AccountChangeLog();
|
||||
log.setUserId(userId);
|
||||
log.setUsercode(usercode);
|
||||
log.setTraceId(traceId);
|
||||
log.setAccountType(rechargeTypeEnum.getCode());
|
||||
log.setCateId(accountChangeEnum.getCode());
|
||||
log.setCateName(accountChangeEnum.getName());
|
||||
log.setRemark(accountChangeEnum.getDesc());
|
||||
log.setChangeValue(price);
|
||||
// log.setRemark();
|
||||
log.setIsAdmin(admin);
|
||||
this.save(log);
|
||||
return log;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AccountChangeLog saveLogAdmin(Long userId, String usercode, RechargeTypeEnum rechargeTypeEnum, AccountChangeEnum accountChangeEnum, Long price,Long traceId) {
|
||||
return this.saveLog(userId,usercode,rechargeTypeEnum,accountChangeEnum,price,traceId,1);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.*;
|
||||
import com.ruoyi.cai.dto.admin.vo.AccountAdminVo;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.AccountChangeEnum;
|
||||
import com.ruoyi.cai.mapper.AccountMapper;
|
||||
import com.ruoyi.cai.pay.RechargeTypeEnum;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.cai.util.NumCaUtil;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
@@ -30,15 +32,9 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
@Autowired
|
||||
private ConsumeLogService consumeLogService;
|
||||
@Autowired
|
||||
private UserInviteService userInviteService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private UnionUserService unionUserService;
|
||||
@Autowired
|
||||
private UnionService unionService;
|
||||
@Autowired
|
||||
private UserInfoService userInfoService;
|
||||
private AccountChangeLogService accountChangeLogService;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -48,7 +44,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ConsumeLog decr(ConsumeLog consumeLog) {
|
||||
public ConsumeLog decr(ConsumeLog consumeLog, AccountBusinessEnum businessEnum) {
|
||||
log.info("开始扣费 consumeLog={}", JSON.toJSONString(consumeLog));
|
||||
Long userId = consumeLog.getSourceUserId();
|
||||
Long amount = consumeLog.getAmount();
|
||||
@@ -59,12 +55,15 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
throw new ServiceException("余额不足");
|
||||
}
|
||||
boolean flag = false;
|
||||
long coin = account.getCoin();
|
||||
long incomeCoin = 0;
|
||||
long diff = account.getCoin() - amount;
|
||||
// 充值币够用
|
||||
if(diff > 0){
|
||||
long l = baseMapper.decrCoin(userId, amount);
|
||||
long l = baseMapper.decrCoin(userId, coin);
|
||||
flag = l > 0;
|
||||
} else { // 充值币不够用
|
||||
incomeCoin = diff;
|
||||
long decrCoin = baseMapper.decrCoin(userId, account.getCoin());
|
||||
long decrIncomeCoin = baseMapper.decrIncomeCoin(userId, -diff);
|
||||
if(decrCoin > 0 && decrIncomeCoin > 0){
|
||||
@@ -80,19 +79,30 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
if(targetUserId != null){
|
||||
Long anchorAmount = NumCaUtil.coin(amount,consumeLog.getTargetRate());
|
||||
consumeLog.setAnchorAmount(anchorAmount);
|
||||
baseMapper.incsCoin(targetUserId,anchorAmount);
|
||||
baseMapper.incsIncomeCoin(targetUserId,anchorAmount);
|
||||
}
|
||||
// 记录消费方的流水
|
||||
if(coin != 0){
|
||||
accountChangeLogService.saveLogNoAdmin(userId,consumeLog.getSourceUsercode(), RechargeTypeEnum.COIN,businessEnum.getSourceEnum(),coin,consumeLog.getTraceId());
|
||||
}
|
||||
if(incomeCoin != 0){
|
||||
accountChangeLogService.saveLogNoAdmin(userId,consumeLog.getSourceUsercode(), RechargeTypeEnum.COIN_INCOME,businessEnum.getSourceEnum(),incomeCoin,consumeLog.getTraceId());
|
||||
}
|
||||
if(targetUserId != null){
|
||||
accountChangeLogService.saveLogNoAdmin(targetUserId,consumeLog.getTargetUsercode(), RechargeTypeEnum.COIN_INCOME,businessEnum.getTargetEnum(),incomeCoin,consumeLog.getTraceId());
|
||||
}
|
||||
// 获取分销的比例和用户
|
||||
fenxiao(consumeLog);
|
||||
consumeLogService.calculateInitFenxiao(consumeLog);
|
||||
consumeLogService.save(consumeLog);
|
||||
return consumeLog;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void withdraw(Long userId, Long incomeCoin){
|
||||
public void withdraw(Long userId, Long incomeCoin,Long traceId){
|
||||
User user = userService.getById(userId);
|
||||
Account account = this.getByUserId(userId);
|
||||
if(account == null){
|
||||
if(account == null || user == null){
|
||||
throw new ServiceException("无效账号");
|
||||
}
|
||||
if(account.getIncomeCoin() < incomeCoin){
|
||||
@@ -102,80 +112,50 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
||||
if(incs <= 0){
|
||||
throw new ServiceException("需"+incomeCoin+"紫贝才可提现");
|
||||
}
|
||||
// TODO
|
||||
accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), RechargeTypeEnum.COIN_INCOME,AccountBusinessEnum.WITHDRAW.getSourceEnum(),incomeCoin,traceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void recharge(ConsumeLog consumeLog){
|
||||
log.info("开始扣费 consumeLog={}", JSON.toJSONString(consumeLog));
|
||||
Long userId = consumeLog.getSourceUserId();
|
||||
Long amount = consumeLog.getAmount();
|
||||
User user = userService.getById(userId);
|
||||
Account account = this.getByUserId(userId);
|
||||
if(account == null || user == null){
|
||||
throw new ServiceException("无效账号");
|
||||
}
|
||||
baseMapper.incsIncomeCoin(userId, amount);
|
||||
accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), RechargeTypeEnum.COIN,AccountBusinessEnum.RECHARGE.getOneEnum(),amount,consumeLog.getTraceId());
|
||||
// 获取分销的比例和用户
|
||||
consumeLogService.calculateInitFenxiao(consumeLog);
|
||||
consumeLogService.save(consumeLog);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo) {
|
||||
return baseMapper.pageAdmin(pageQuery.build(),bo);
|
||||
}
|
||||
|
||||
private void fenxiao(ConsumeLog consumeLog){
|
||||
if(ConsumeLogType.PAY.getCode().equals(consumeLog.getType())){
|
||||
Long sourceUserId = consumeLog.getSourceUserId();
|
||||
UserInvite userInvite = userInviteService.getByUserId(sourceUserId);
|
||||
if(userInvite != null){
|
||||
User oneUser = userService.getById(userInvite.getInviteId());
|
||||
if(oneUser != null && oneUser.getStatus() == 0){
|
||||
UserInfo userInfo = userInfoService.getByUserId(userInvite.getUserId());
|
||||
consumeLog.setOneRate(userInfo.getPayIncomeRate());
|
||||
consumeLog.setOneUserId(userInvite.getInviteId());
|
||||
consumeLog.setOneUsercode(oneUser.getUsercode());
|
||||
consumeLog.setOnePhone(oneUser.getMobile());
|
||||
consumeLog.setOneJoin(userInvite.getEnableRate());
|
||||
consumeLog.setOneIsUnion(oneUser.getIsUnion());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 分销
|
||||
*/
|
||||
@Override
|
||||
public void distribution(Long userId, Long amount, AccountChangeEnum accountChangeEnum,Long traceId) {
|
||||
User user = userService.getById(userId);
|
||||
Account account = this.getByUserId(userId);
|
||||
if(account == null || user == null){
|
||||
log.error("分销失败,无效账号 userId={}",userId);
|
||||
return;
|
||||
}
|
||||
Long targetUserId = consumeLog.getTargetUserId();
|
||||
if(targetUserId != null){
|
||||
// 获取一级分销
|
||||
UserInvite userInvite = userInviteService.getByUserId(targetUserId);
|
||||
if(userInvite != null){
|
||||
User oneUser = userService.getById(userInvite.getInviteId());
|
||||
if(oneUser != null && oneUser.getStatus() == 0){
|
||||
UserInfo userInfo = userInfoService.getByUserId(userInvite.getUserId());
|
||||
if(ConsumeLogType.GUARD.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInfo.getGuardIncomeRate());
|
||||
}else if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInfo.getGiftIncomeRate());
|
||||
}else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInfo.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())){
|
||||
UnionUser unionUser = unionUserService.getByUserId(targetUserId);
|
||||
if(unionUser != null){
|
||||
User user = userService.getById(unionUser.getId());
|
||||
if(user != null && user.getIsUnion() == 1 && user.getStatus() == 0){
|
||||
Union 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(amount == null || accountChangeEnum == null){
|
||||
log.error("分销失败,参数错误 amount={},accountChangeEnum={}",amount,accountChangeEnum);
|
||||
return;
|
||||
}
|
||||
|
||||
baseMapper.incsCoin(userId, amount);
|
||||
accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), RechargeTypeEnum.COIN_INCOME,accountChangeEnum,amount,traceId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
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.ConsumeLog;
|
||||
import com.ruoyi.cai.domain.*;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.ConsumeLogStatus;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.mapper.ConsumeLogMapper;
|
||||
import com.ruoyi.cai.service.ConsumeLogService;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.cai.util.NumCaUtil;
|
||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 消费记录Service业务层处理
|
||||
@@ -13,6 +25,148 @@ import org.springframework.stereotype.Service;
|
||||
* @date 2023-12-24
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, ConsumeLog> implements ConsumeLogService {
|
||||
@Autowired
|
||||
private UserInviteService userInviteService;
|
||||
@Autowired
|
||||
private UserInfoService userInfoService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private UnionUserService unionUserService;
|
||||
@Autowired
|
||||
private UnionService unionService;
|
||||
@Autowired
|
||||
private AccountService accountService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void dealFenxiao(Long id){
|
||||
ConsumeLog consumer = this.getById(id);
|
||||
if(consumer == null){
|
||||
return;
|
||||
}
|
||||
if(!ConsumeLogStatus.READY.getCode().equals(consumer.getStatus())){
|
||||
// 已经分销完成,无需继续分销
|
||||
return;
|
||||
}
|
||||
if(!BooleanUtils.isTrue(consumer.getCalculateStatus())){
|
||||
// 先计算
|
||||
boolean update = this.update(Wrappers.lambdaUpdate(ConsumeLog.class)
|
||||
.eq(ConsumeLog::getId, id)
|
||||
.eq(ConsumeLog::getCalculateStatus, false)
|
||||
.set(ConsumeLog::getCalculateStatus, true));
|
||||
if(update){
|
||||
consumer = calculateInitFenxiao(consumer);
|
||||
consumer.setCalculateStatus(true);
|
||||
this.updateById(consumer);
|
||||
}
|
||||
}
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
// 在分销
|
||||
boolean update = this.update(Wrappers.lambdaUpdate(ConsumeLog.class)
|
||||
.eq(ConsumeLog::getId, id)
|
||||
.eq(ConsumeLog::getStatus, ConsumeLogStatus.READY.getCode())
|
||||
.set(ConsumeLog::getOpName, loginUser!=null?loginUser.getUsername():"system")
|
||||
.set(ConsumeLog::getOpId, loginUser!=null?loginUser.getUserId():"-1")
|
||||
.set(ConsumeLog::getStatus, ConsumeLogStatus.ALREADY.getCode()));
|
||||
if(!update){
|
||||
log.error("无需分销 consumer={}", JSON.toJSONString(consumer));
|
||||
return;
|
||||
}
|
||||
AccountBusinessEnum accountBusinessEnum = AccountBusinessEnum.getByName(consumer.getBusinessEnum());
|
||||
if(accountBusinessEnum == null){
|
||||
log.error("分销失败 BusinessEnum状态错误! consumerLog={}",JSON.toJSONString(consumer));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
// 计算一级
|
||||
if(consumer.getOneUserId() != null && BooleanUtils.isTrue(consumer.getOneJoin())
|
||||
&& consumer.getOneAmount() > 0){
|
||||
accountService.distribution(consumer.getOneUserId(),consumer.getOneAmount(),accountBusinessEnum.getOneEnum(),consumer.getTraceId());
|
||||
}
|
||||
// 计算工会
|
||||
if(consumer.getUnionUserId() != null && BooleanUtils.isTrue(consumer.getUnionJoin())
|
||||
&& consumer.getUnionAmount() > 0){
|
||||
accountService.distribution(consumer.getUnionUserId(),consumer.getUnionAmount(),accountBusinessEnum.getUnionEnum(),consumer.getTraceId());
|
||||
}
|
||||
}catch (Exception e){
|
||||
log.error("分销发生未知错误,请联系开发检查!",e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConsumeLog calculateInitFenxiao(ConsumeLog consumeLog){
|
||||
if(ConsumeLogType.RECHARGE.getCode().equals(consumeLog.getType())){
|
||||
Long sourceUserId = consumeLog.getSourceUserId();
|
||||
UserInvite userInvite = userInviteService.getByUserId(sourceUserId);
|
||||
if(userInvite != null){
|
||||
User oneUser = userService.getById(userInvite.getInviteId());
|
||||
if(oneUser != null && oneUser.getStatus() == 0){
|
||||
UserInfo userInfo = userInfoService.getByUserId(userInvite.getUserId());
|
||||
consumeLog.setOneRate(userInfo.getPayIncomeRate());
|
||||
consumeLog.setOneUserId(userInvite.getInviteId());
|
||||
consumeLog.setOneUsercode(oneUser.getUsercode());
|
||||
consumeLog.setOnePhone(oneUser.getMobile());
|
||||
consumeLog.setOneJoin(userInvite.getEnableRate());
|
||||
consumeLog.setOneIsUnion(oneUser.getIsUnion());
|
||||
consumeLog.setOneAmount(NumCaUtil.coin(consumeLog.getAmount(),consumeLog.getOneRate()));
|
||||
}
|
||||
}
|
||||
return consumeLog;
|
||||
}
|
||||
Long targetUserId = consumeLog.getTargetUserId();
|
||||
if(targetUserId != null){
|
||||
// 获取一级分销
|
||||
UserInvite userInvite = userInviteService.getByUserId(targetUserId);
|
||||
if(userInvite != null){
|
||||
User oneUser = userService.getById(userInvite.getInviteId());
|
||||
if(oneUser != null && oneUser.getStatus() == 0){
|
||||
UserInfo userInfo = userInfoService.getByUserId(userInvite.getUserId());
|
||||
if(ConsumeLogType.GUARD.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInfo.getGuardIncomeRate());
|
||||
}else if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInfo.getGiftIncomeRate());
|
||||
}else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
|
||||
consumeLog.setOneRate(userInfo.getVideoIncomeRate());
|
||||
}
|
||||
consumeLog.setOneUserId(userInvite.getInviteId());
|
||||
consumeLog.setOneUsercode(oneUser.getUsercode());
|
||||
consumeLog.setOnePhone(oneUser.getMobile());
|
||||
consumeLog.setOneJoin(userInvite.getEnableRate());
|
||||
consumeLog.setOneIsUnion(oneUser.getIsUnion());
|
||||
consumeLog.setOneAmount(NumCaUtil.coin(consumeLog.getAnchorAmount(),consumeLog.getOneRate()));
|
||||
}
|
||||
}
|
||||
// 工会分销 只有通话和礼物才有
|
||||
if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())
|
||||
|| ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())){
|
||||
UnionUser unionUser = unionUserService.getByUserId(targetUserId);
|
||||
if(unionUser != null){
|
||||
User user = userService.getById(unionUser.getId());
|
||||
if(user != null && user.getIsUnion() == 1 && user.getStatus() == 0){
|
||||
Union 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());
|
||||
}
|
||||
consumeLog.setOneAmount(NumCaUtil.coin(consumeLog.getAnchorAmount(),consumeLog.getUnionRate()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return consumeLog;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,19 +9,25 @@ import com.ruoyi.cai.dto.app.query.GiveGuardReq;
|
||||
import com.ruoyi.cai.dto.app.dto.GuardTotalDTO;
|
||||
import com.ruoyi.cai.dto.app.vo.index.GuardIndexVo;
|
||||
import com.ruoyi.cai.dto.app.vo.index.GuardListPageVo;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.enums.SystemConfigEnum;
|
||||
import com.ruoyi.cai.manager.IdManager;
|
||||
import com.ruoyi.cai.manager.LockManager;
|
||||
import com.ruoyi.cai.manager.SystemConfigManager;
|
||||
import com.ruoyi.cai.mapper.GuardTotalMapper;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -43,6 +49,9 @@ public class GuardTotalServiceImpl extends ServiceImpl<GuardTotalMapper, GuardTo
|
||||
private GuardLogService guardLogService;
|
||||
@Autowired
|
||||
private SystemConfigManager systemConfigManager;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
|
||||
@Override
|
||||
public GuardIndexVo guardInfoVo(Long fromUserId, Long toUserId, Integer limit) {
|
||||
@@ -87,39 +96,51 @@ public class GuardTotalServiceImpl extends ServiceImpl<GuardTotalMapper, GuardTo
|
||||
if(!query.getGuardPrice().equals(guardPrice)){
|
||||
throw new ServiceException("守护价格发生变化");
|
||||
}
|
||||
Long guardValue = query.getGuardNum() * guardPrice;
|
||||
ConsumeLog consumeLog = new ConsumeLog();
|
||||
consumeLog.init(fromUser,toUser);
|
||||
consumeLog.setType(ConsumeLogType.GUARD.getCode());
|
||||
consumeLog.setAmount(guardValue);
|
||||
consumeLog.setTargetRate(anchor.getGuardRate());
|
||||
consumeLog = accountService.decr(consumeLog);
|
||||
GuardLog guardLog = new GuardLog();
|
||||
guardLog.setFromUserId(fromUserId);
|
||||
guardLog.setFromUsercode(fromUser.getUsercode());
|
||||
guardLog.setFromMobile(fromUser.getMobile());
|
||||
guardLog.setToUserId(query.getToUserId());
|
||||
guardLog.setToMobile(toUser.getMobile());
|
||||
guardLog.setToUsercode(toUser.getUsercode());
|
||||
guardLog.setGuardNum(query.getGuardNum());
|
||||
guardLog.setGuardValue(guardValue);
|
||||
guardLog.setGuardPrice(guardPrice);
|
||||
guardLog.setConsumeLogId(consumeLog.getId());
|
||||
guardLogService.save(guardLog);
|
||||
GuardTotal one = this.getOne(Wrappers.lambdaQuery(GuardTotal.class)
|
||||
.eq(GuardTotal::getToUserId, query.getToUserId())
|
||||
.eq(GuardTotal::getFromUserId, fromUserId));
|
||||
if(one == null){
|
||||
one = new GuardTotal();
|
||||
one.setFromUserId(fromUserId);
|
||||
one.setFromUsercode(fromUser.getUsercode());
|
||||
one.setFromMobile(fromUser.getMobile());
|
||||
one.setToUserId(query.getToUserId());
|
||||
one.setToMobile(toUser.getMobile());
|
||||
one.setToUsercode(toUser.getUsercode());
|
||||
this.save(one);
|
||||
String guardLock = LockManager.getSendGuardLock(fromUserId);
|
||||
RLock lock = redissonClient.getLock(guardLock);
|
||||
if(lock.isLocked()){
|
||||
throw new ServiceException("您点击太快了");
|
||||
}
|
||||
try {
|
||||
lock.lock(3, TimeUnit.SECONDS);
|
||||
Long guardValue = query.getGuardNum() * guardPrice;
|
||||
Long tractId = IdManager.nextId();
|
||||
ConsumeLog consumeLog = new ConsumeLog();
|
||||
consumeLog.init(fromUser,toUser);
|
||||
consumeLog.setTraceId(tractId);
|
||||
consumeLog.setType(ConsumeLogType.GUARD.getCode());
|
||||
consumeLog.setAmount(guardValue);
|
||||
consumeLog.setTargetRate(anchor.getGuardRate());
|
||||
accountService.decr(consumeLog, AccountBusinessEnum.GUARD);
|
||||
GuardLog guardLog = new GuardLog();
|
||||
guardLog.setFromUserId(fromUserId);
|
||||
guardLog.setFromUsercode(fromUser.getUsercode());
|
||||
guardLog.setFromMobile(fromUser.getMobile());
|
||||
guardLog.setToUserId(query.getToUserId());
|
||||
guardLog.setToMobile(toUser.getMobile());
|
||||
guardLog.setToUsercode(toUser.getUsercode());
|
||||
guardLog.setGuardNum(query.getGuardNum());
|
||||
guardLog.setGuardValue(guardValue);
|
||||
guardLog.setGuardPrice(guardPrice);
|
||||
guardLog.setTraceId(tractId);
|
||||
guardLogService.save(guardLog);
|
||||
GuardTotal one = this.getOne(Wrappers.lambdaQuery(GuardTotal.class)
|
||||
.eq(GuardTotal::getToUserId, query.getToUserId())
|
||||
.eq(GuardTotal::getFromUserId, fromUserId));
|
||||
if(one == null){
|
||||
one = new GuardTotal();
|
||||
one.setFromUserId(fromUserId);
|
||||
one.setFromUsercode(fromUser.getUsercode());
|
||||
one.setFromMobile(fromUser.getMobile());
|
||||
one.setToUserId(query.getToUserId());
|
||||
one.setToMobile(toUser.getMobile());
|
||||
one.setToUsercode(toUser.getUsercode());
|
||||
this.save(one);
|
||||
}
|
||||
baseMapper.incs(fromUserId,query.getToUserId(),query.getGuardNum(),guardValue);
|
||||
}finally {
|
||||
lock.unlock();
|
||||
}
|
||||
baseMapper.incs(fromUserId,query.getToUserId(),query.getGuardNum(),guardValue);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
package com.ruoyi.cai.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.Account;
|
||||
import com.ruoyi.cai.domain.Goods;
|
||||
import com.ruoyi.cai.domain.RechargeOrder;
|
||||
import com.ruoyi.cai.domain.User;
|
||||
import com.ruoyi.cai.domain.*;
|
||||
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
|
||||
import com.ruoyi.cai.dto.AddRechargeOrderDto;
|
||||
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.AccountChangeEnum;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.manager.IdManager;
|
||||
import com.ruoyi.cai.mapper.AccountMapper;
|
||||
import com.ruoyi.cai.mapper.RechargeOrderMapper;
|
||||
import com.ruoyi.cai.mapper.UserMapper;
|
||||
import com.ruoyi.cai.pay.OrderNoUtil;
|
||||
import com.ruoyi.cai.pay.PayStatusEnum;
|
||||
import com.ruoyi.cai.pay.PlatformTypeEnum;
|
||||
import com.ruoyi.cai.pay.RechargeTypeEnum;
|
||||
import com.ruoyi.cai.service.AccountService;
|
||||
import com.ruoyi.cai.service.GoodsService;
|
||||
import com.ruoyi.cai.service.RechargeOrderService;
|
||||
import com.ruoyi.cai.service.UserService;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.common.utils.ServletUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -38,6 +38,7 @@ import java.math.BigDecimal;
|
||||
* @date 2024-01-03
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,RechargeOrder> implements RechargeOrderService {
|
||||
|
||||
|
||||
@@ -49,6 +50,14 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
||||
private AccountService accountService;
|
||||
@Resource
|
||||
private AccountMapper accountMapper;
|
||||
@Autowired
|
||||
private AccountChangeLogService accountChangeLogService;
|
||||
|
||||
@Override
|
||||
public RechargeOrder getByOrderNo(String orderNo){
|
||||
return this.getOne(Wrappers.lambdaQuery(RechargeOrder.class).eq(RechargeOrder::getOrderNo,orderNo)
|
||||
.last("limit 1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<RechargeOrderAdminVo> pageAdmin(PageQuery pageQuery, RechargeOrderAdminVo bo) {
|
||||
@@ -77,6 +86,36 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
||||
return order;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void orderSuccess(String orderNo){
|
||||
RechargeOrder rechargeOrder = this.getByOrderNo(orderNo);
|
||||
if(rechargeOrder == null){
|
||||
throw new ServiceException("订单不存在");
|
||||
}
|
||||
if(!PayStatusEnum.READY_PAY.getCode().equals(rechargeOrder.getPayStatus())){
|
||||
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(rechargeOrder));
|
||||
throw new ServiceException("订单支付状态错误!");
|
||||
}
|
||||
Long traceId = IdManager.nextId();
|
||||
boolean update = this.update(Wrappers.lambdaUpdate(RechargeOrder.class)
|
||||
.eq(RechargeOrder::getOrderNo, rechargeOrder.getOrderNo())
|
||||
.eq(RechargeOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
|
||||
.set(RechargeOrder::getPayStatus, PayStatusEnum.PAY.getCode())
|
||||
.set(RechargeOrder::getTraceId,traceId));
|
||||
if(!update){
|
||||
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(rechargeOrder));
|
||||
throw new ServiceException("订单支付状态错误!");
|
||||
}
|
||||
User user = userService.getById(rechargeOrder.getUserId());
|
||||
ConsumeLog consumeLog = new ConsumeLog();
|
||||
consumeLog.init(user,null);
|
||||
consumeLog.setTraceId(traceId);
|
||||
consumeLog.setType(ConsumeLogType.RECHARGE.getCode());
|
||||
consumeLog.setAmount(rechargeOrder.getRechargeCoin());
|
||||
accountService.recharge(consumeLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto){
|
||||
@@ -89,6 +128,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
||||
throw new ServiceException("参数错误");
|
||||
}
|
||||
Long userId = user.getId();
|
||||
Long traceId = IdManager.nextId();
|
||||
RechargeOrder order = new RechargeOrder();
|
||||
order.setUserId(userId);
|
||||
order.setRechargeName(rechargeTypeEnum.getName());
|
||||
@@ -102,16 +142,19 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
||||
order.setAdmin(true);
|
||||
order.setAdminId(LoginHelper.getUserId());
|
||||
order.setRemark(dto.getRemark());
|
||||
order.setTraceId(traceId);
|
||||
this.save(order);
|
||||
Account account = accountService.getByUserId(userId);
|
||||
if(rechargeTypeEnum == RechargeTypeEnum.COIN){ // 余额调整
|
||||
if(dto.getRechargeCoin() > 0){
|
||||
accountMapper.incsCoin(userId,dto.getRechargeCoin());
|
||||
accountChangeLogService.saveLogAdmin(user.getId(),user.getUsercode(),RechargeTypeEnum.COIN, AccountChangeEnum.SYSTEM_COIN_INCS,dto.getRechargeCoin(),traceId);
|
||||
}else{
|
||||
if(account.getCoin() < -dto.getRechargeCoin()){
|
||||
throw new ServiceException("调整后余额为负数,无法调整");
|
||||
}
|
||||
long l = accountMapper.decrCoin(userId, -dto.getRechargeCoin());
|
||||
accountChangeLogService.saveLogAdmin(user.getId(),user.getUsercode(),RechargeTypeEnum.COIN, AccountChangeEnum.SYSTEM_COIN_DECR,dto.getRechargeCoin(),traceId);
|
||||
if(l == 0){
|
||||
throw new ServiceException("调整后余额为负数,无法调整");
|
||||
}
|
||||
@@ -119,11 +162,13 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
|
||||
}else{
|
||||
if(dto.getRechargeCoin() > 0){
|
||||
accountMapper.incsIncomeCoin(userId,dto.getRechargeCoin());
|
||||
accountChangeLogService.saveLogAdmin(user.getId(),user.getUsercode(),RechargeTypeEnum.COIN_INCOME, AccountChangeEnum.SYSTEM_INCOME_COIN_INCS,dto.getRechargeCoin(),traceId);
|
||||
}else{
|
||||
if(account.getIncomeCoin() < -dto.getRechargeCoin()){
|
||||
throw new ServiceException("调整后收益为负数,无法调整");
|
||||
}
|
||||
long l = accountMapper.decrIncomeCoin(userId, -dto.getRechargeCoin());
|
||||
accountChangeLogService.saveLogAdmin(user.getId(),user.getUsercode(),RechargeTypeEnum.COIN_INCOME, AccountChangeEnum.SYSTEM_INCOME_COIN_DECR,dto.getRechargeCoin(),traceId);
|
||||
if(l == 0){
|
||||
throw new ServiceException("调整后收益为负数,无法调整");
|
||||
}
|
||||
|
||||
@@ -4,16 +4,23 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.cai.domain.*;
|
||||
import com.ruoyi.cai.dto.app.query.GiveGiftRes;
|
||||
import com.ruoyi.cai.dto.app.vo.index.UserGiftIndexVo;
|
||||
import com.ruoyi.cai.enums.AccountBusinessEnum;
|
||||
import com.ruoyi.cai.enums.ConsumeLogType;
|
||||
import com.ruoyi.cai.manager.IdManager;
|
||||
import com.ruoyi.cai.manager.LockManager;
|
||||
import com.ruoyi.cai.mapper.UserGiftMapper;
|
||||
import com.ruoyi.cai.service.*;
|
||||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 礼物记录Service业务层处理
|
||||
@@ -33,6 +40,8 @@ public class UserGiftServiceImpl extends ServiceImpl<UserGiftMapper, UserGift> i
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private AnchorService anchorService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -41,39 +50,52 @@ public class UserGiftServiceImpl extends ServiceImpl<UserGiftMapper, UserGift> i
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean giveGift(GiveGiftRes query) {
|
||||
Long fromUserId = LoginHelper.getUserId();
|
||||
Gift gift = giftService.getById(query.getGiftId());
|
||||
if(gift == null){
|
||||
throw new ServiceException("礼物不存在");
|
||||
}
|
||||
User fromUser = userService.getById(fromUserId);
|
||||
User toUser = userService.getById(query.getToUserId());
|
||||
Anchor anchor = anchorService.getByUserId(query.getToUserId());
|
||||
Long price = gift.getPrice();
|
||||
Long giftAmount = query.getGiftCount() * price;
|
||||
ConsumeLog consumeLog = new ConsumeLog();
|
||||
consumeLog.init(fromUser,toUser);
|
||||
consumeLog.setType(ConsumeLogType.GIFT.getCode());
|
||||
consumeLog.setAmount(giftAmount);
|
||||
consumeLog.setTargetRate(anchor.getGiftRate());
|
||||
consumeLog = accountService.decr(consumeLog);
|
||||
UserGift userGift = new UserGift();
|
||||
userGift.setType(query.getType());
|
||||
userGift.setFromUid(fromUserId);
|
||||
userGift.setFromMobile(fromUser.getMobile());
|
||||
userGift.setFromUsercode(fromUser.getUsercode());
|
||||
userGift.setToUid(query.getToUserId());
|
||||
userGift.setToMobile(toUser.getMobile());
|
||||
userGift.setToUsercode(toUser.getUsercode());
|
||||
userGift.setGiftId(query.getGiftId());
|
||||
userGift.setGiftName(gift.getName());
|
||||
userGift.setGiftImg(gift.getImg());
|
||||
userGift.setGiftPrice(gift.getPrice());
|
||||
userGift.setGiftCount(query.getGiftCount());
|
||||
userGift.setGiftAmount(giftAmount);
|
||||
userGift.setConsumerLogId(consumeLog.getId());
|
||||
this.save(userGift);
|
||||
String guardLock = LockManager.getSendGuardLock(fromUserId);
|
||||
RLock lock = redissonClient.getLock(guardLock);
|
||||
if(lock.isLocked()){
|
||||
throw new ServiceException("您点击太快了");
|
||||
}
|
||||
try {
|
||||
lock.lock(3, TimeUnit.SECONDS);
|
||||
User fromUser = userService.getById(fromUserId);
|
||||
User toUser = userService.getById(query.getToUserId());
|
||||
Anchor anchor = anchorService.getByUserId(query.getToUserId());
|
||||
Long price = gift.getPrice();
|
||||
Long traceId = IdManager.nextId();
|
||||
Long giftAmount = query.getGiftCount() * price;
|
||||
ConsumeLog consumeLog = new ConsumeLog();
|
||||
consumeLog.init(fromUser,toUser);
|
||||
consumeLog.setTraceId(traceId);
|
||||
consumeLog.setType(ConsumeLogType.GIFT.getCode());
|
||||
consumeLog.setAmount(giftAmount);
|
||||
consumeLog.setTargetRate(anchor.getGiftRate());
|
||||
accountService.decr(consumeLog, AccountBusinessEnum.GIFT);
|
||||
UserGift userGift = new UserGift();
|
||||
userGift.setType(query.getType());
|
||||
userGift.setFromUid(fromUserId);
|
||||
userGift.setFromMobile(fromUser.getMobile());
|
||||
userGift.setFromUsercode(fromUser.getUsercode());
|
||||
userGift.setToUid(query.getToUserId());
|
||||
userGift.setToMobile(toUser.getMobile());
|
||||
userGift.setToUsercode(toUser.getUsercode());
|
||||
userGift.setGiftId(query.getGiftId());
|
||||
userGift.setGiftName(gift.getName());
|
||||
userGift.setGiftImg(gift.getImg());
|
||||
userGift.setGiftPrice(gift.getPrice());
|
||||
userGift.setGiftCount(query.getGiftCount());
|
||||
userGift.setGiftAmount(giftAmount);
|
||||
userGift.setTraceId(traceId);
|
||||
this.save(userGift);
|
||||
}finally {
|
||||
lock.unlock();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,10 +39,6 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
|
||||
@Autowired
|
||||
private MemberPriceService memberPriceService;
|
||||
@Autowired
|
||||
private ConsumeLogService consumeLogService;
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
@Autowired
|
||||
private UserMemberService userMemberService;
|
||||
|
||||
/**
|
||||
@@ -159,7 +155,7 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
|
||||
userMemberService.saveOrUpdate(userMember);
|
||||
return true;
|
||||
}
|
||||
if(longs == 1){ // 已经是永久会员还买? 什么都不干
|
||||
if(longs == 1){ // 已经是永久会员还买? 傻逼
|
||||
return true;
|
||||
}
|
||||
userMember.setCreateTime(createTime);
|
||||
|
||||
Reference in New Issue
Block a user