This commit is contained in:
dute7liang
2024-01-20 18:29:44 +08:00
parent 5a9c8c9246
commit 2f67a35684
8 changed files with 116 additions and 12 deletions

View File

@@ -11,10 +11,7 @@ import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.executor.ExecutorConstant;
import com.ruoyi.cai.manager.CodeManager;
import com.ruoyi.cai.manager.LockManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.manager.UserForbidManager;
import com.ruoyi.cai.manager.*;
import com.ruoyi.cai.service.*;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginUser;
@@ -72,14 +69,14 @@ public class CaiLoginManager {
private UnionService unionService;
@Autowired
private UnionUserService unionUserService;
@Autowired
private Yunxin yunxin;
@Resource
private ImUserClient imUserClient;
@Autowired
private UserCountService userCountService;
@Autowired
private UserForbidManager userForbidManager;
@Autowired
private AwardManager awardManager;
public String login(String username,String password){
User user = userService.getByUsername(username);
@@ -121,13 +118,14 @@ public class CaiLoginManager {
if(lock.isLocked()){
throw new ServiceException("您点击太快了");
}
lock.lock(5, TimeUnit.SECONDS);
lock.lock();
try {
CaiLoginManager bean = SpringUtil.getBean(CaiLoginManager.class);
user = bean.registerUser(caiUser);
}finally {
lock.unlock();
}
awardManager.giveRegisterAsync(user.getId());
if(user.getInviteId() != null){
User finalUser = user;
ExecutorConstant.COMMON_EXECUTOR.execute(() -> dealInviteId(finalUser));

View File

@@ -45,6 +45,10 @@ public class UserInfo {
* 登录次数
*/
private Integer loginCount;
/**
* 是否领取首充奖励true领取 false未领取
*/
private Boolean fastPay;
/**
* 最后登录IP
*/

View File

@@ -4,6 +4,7 @@ import lombok.Data;
@Data
public class ConsumeResp {
private Long userId;
private Long consumeLogId;
private boolean success;
}

View File

@@ -9,6 +9,8 @@ import lombok.Getter;
* @author ZL
*/
public enum SystemConfigEnum {
REGISTER_AWARD("88", "注册奖励",SystemConfigGroupEnum.BUSINESS),
FAST_PAY_AWARD("300", "首充奖励",SystemConfigGroupEnum.BUSINESS),
GUARD_PRICE("1314", "守护价格",SystemConfigGroupEnum.BUSINESS),
DEFAULT_ANCHOR_PRICE("200","主播默认价格",SystemConfigGroupEnum.BUSINESS),
DEFAULT_ANCHOR_GUARD_PRICE("0.5","主播默认守护提成",SystemConfigGroupEnum.BUSINESS),

View File

@@ -18,13 +18,13 @@ public enum AccountChangeCodeEnum {
GIFT_COIN_OUT(402,AccountCateEnum.GIFT,"送出礼物",AccountTypeEnum.COIN,"",false),
GIFT_INCOME_COIN_OUT(403,AccountCateEnum.GIFT,"送出礼物",AccountTypeEnum.INCOME_COIN,"",false),
FAST_WITHDRAW(501,AccountCateEnum.SYSTEM,"奖励",AccountTypeEnum.INCOME_COIN,"",null),
FAST_PAY_AWARD(501,AccountCateEnum.SYSTEM,"奖励",AccountTypeEnum.INCOME_COIN,"",null),
RECHARGE_INVITE(502,AccountCateEnum.SYSTEM,"邀请奖励(充值)",AccountTypeEnum.INCOME_COIN,"",true),
VIDEO_INVITE(503,AccountCateEnum.SYSTEM,"邀请奖励(视频)",AccountTypeEnum.INCOME_COIN,"",true),
GIFT_INVITE(504,AccountCateEnum.SYSTEM,"邀请奖励(礼物)",AccountTypeEnum.INCOME_COIN,"",true),
GUARD_INVITE(505,AccountCateEnum.SYSTEM,"邀请奖励(守护)",AccountTypeEnum.INCOME_COIN,"",true),
REGISTER_INVITE(506,AccountCateEnum.SYSTEM,"注册奖励",AccountTypeEnum.INCOME_COIN,"",null),
RAKE_INVITE(507,AccountCateEnum.SYSTEM,"排行榜奖励",AccountTypeEnum.INCOME_COIN,"",null),
REGISTER_AWARD(506,AccountCateEnum.SYSTEM,"注册奖励",AccountTypeEnum.INCOME_COIN,"",null),
RAKE_AWARD(507,AccountCateEnum.SYSTEM,"排行榜奖励",AccountTypeEnum.INCOME_COIN,"",null),
IM_INCOME(701,AccountCateEnum.IM,"收到私信",AccountTypeEnum.INCOME_COIN,"",true),
IM_COIN_OUT(702,AccountCateEnum.IM,"私信支出",AccountTypeEnum.COIN,"",false),

View File

@@ -0,0 +1,92 @@
package com.ruoyi.cai.manager;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserInfo;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.executor.ExecutorConstant;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.service.AccountChangeLogService;
import com.ruoyi.cai.service.UserInfoService;
import com.ruoyi.cai.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Component
@Slf4j
public class AwardManager {
@Autowired
private SystemConfigManager systemConfigManager;
@Resource
private AccountMapper accountMapper;
@Autowired
private AccountChangeLogService accountChangeLogService;
@Autowired
private UserService userService;
@Autowired
private UserInfoService userInfoService;
public void giveRegisterAsync(Long userId){
AwardManager bean = SpringUtil.getBean(AwardManager.class);
ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
bean.giveRegister(userId);
});
}
public void giveRegister(Long userId){
Long price = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.REGISTER_AWARD);
if(price == 0){
return;
}
User user = userService.getById(userId);
if(user == null){
log.error("注册奖励领取失败 用户不存在 userId={}",userId);
return;
}
accountMapper.incsIncomeCoin(userId,price);
accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), AccountChangeCodeEnum.REGISTER_AWARD,price,null);
}
public void giveFastPayAsync(Long userId, Long traceId){
AwardManager bean = SpringUtil.getBean(AwardManager.class);
ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
bean.giveFastPay(userId,traceId);
});
}
@Transactional(rollbackFor = Exception.class)
public void giveFastPay(Long userId,Long traceId){
Long price = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.FAST_PAY_AWARD);
if(price == 0){
return;
}
User user = userService.getById(userId);
if(user == null){
log.error("首充奖励领取失败 用户不存在 userId={}",userId);
return;
}
UserInfo userInfo = userInfoService.getByUserId(userId);
if(userInfo == null || BooleanUtils.isNotTrue(userInfo.getFastPay())){
log.warn("首充奖励领取失败 用户已领取 userId={}",userId);
return;
}
boolean update = userInfoService.update(Wrappers.lambdaUpdate(UserInfo.class)
.eq(UserInfo::getId, userInfo.getUserId())
.eq(UserInfo::getFastPay, false)
.set(UserInfo::getFastPay, true));
if(!update){
log.warn("首充奖励领取失败 用户已领取 userId={}",userId);
return;
}
accountMapper.incsIncomeCoin(userId,price);
accountChangeLogService.saveLogNoAdmin(user.getId(),user.getUsercode(), AccountChangeCodeEnum.FAST_PAY_AWARD,price,traceId);
}
}

View File

@@ -1,7 +1,8 @@
package com.ruoyi.cai.pay;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.manager.AwardManager;
import com.ruoyi.cai.manager.ConsumerManager;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +16,8 @@ public class PayManager {
private VipOrderService vipOrderService;
@Autowired
private ConsumerManager consumerManager;
@Autowired
private AwardManager awardManager;
public void callBack(String orderNo){
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
@@ -27,7 +30,10 @@ public class PayManager {
vipOrderService.orderSuccess(orderNo);
break;
case RECHARGE_ORDER_SUB:
consumerManager.rechargeOrderSuccess(orderNo);
ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo);
if(resp.isSuccess()){
awardManager.giveFastPayAsync(resp.getUserId(), resp.getConsumeLogId());
}
break;
default:
break;

View File

@@ -122,6 +122,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
ConsumeResp resp = new ConsumeResp();
resp.setSuccess(true);
resp.setConsumeLogId(consumeLog.getId());
resp.setUserId(user.getId());
return resp;
}