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

View File

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

View File

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

View File

@@ -9,6 +9,8 @@ import lombok.Getter;
* @author ZL * @author ZL
*/ */
public enum SystemConfigEnum { public enum SystemConfigEnum {
REGISTER_AWARD("88", "注册奖励",SystemConfigGroupEnum.BUSINESS),
FAST_PAY_AWARD("300", "首充奖励",SystemConfigGroupEnum.BUSINESS),
GUARD_PRICE("1314", "守护价格",SystemConfigGroupEnum.BUSINESS), GUARD_PRICE("1314", "守护价格",SystemConfigGroupEnum.BUSINESS),
DEFAULT_ANCHOR_PRICE("200","主播默认价格",SystemConfigGroupEnum.BUSINESS), DEFAULT_ANCHOR_PRICE("200","主播默认价格",SystemConfigGroupEnum.BUSINESS),
DEFAULT_ANCHOR_GUARD_PRICE("0.5","主播默认守护提成",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_COIN_OUT(402,AccountCateEnum.GIFT,"送出礼物",AccountTypeEnum.COIN,"",false),
GIFT_INCOME_COIN_OUT(403,AccountCateEnum.GIFT,"送出礼物",AccountTypeEnum.INCOME_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), RECHARGE_INVITE(502,AccountCateEnum.SYSTEM,"邀请奖励(充值)",AccountTypeEnum.INCOME_COIN,"",true),
VIDEO_INVITE(503,AccountCateEnum.SYSTEM,"邀请奖励(视频)",AccountTypeEnum.INCOME_COIN,"",true), VIDEO_INVITE(503,AccountCateEnum.SYSTEM,"邀请奖励(视频)",AccountTypeEnum.INCOME_COIN,"",true),
GIFT_INVITE(504,AccountCateEnum.SYSTEM,"邀请奖励(礼物)",AccountTypeEnum.INCOME_COIN,"",true), GIFT_INVITE(504,AccountCateEnum.SYSTEM,"邀请奖励(礼物)",AccountTypeEnum.INCOME_COIN,"",true),
GUARD_INVITE(505,AccountCateEnum.SYSTEM,"邀请奖励(守护)",AccountTypeEnum.INCOME_COIN,"",true), GUARD_INVITE(505,AccountCateEnum.SYSTEM,"邀请奖励(守护)",AccountTypeEnum.INCOME_COIN,"",true),
REGISTER_INVITE(506,AccountCateEnum.SYSTEM,"注册奖励",AccountTypeEnum.INCOME_COIN,"",null), REGISTER_AWARD(506,AccountCateEnum.SYSTEM,"注册奖励",AccountTypeEnum.INCOME_COIN,"",null),
RAKE_INVITE(507,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_INCOME(701,AccountCateEnum.IM,"收到私信",AccountTypeEnum.INCOME_COIN,"",true),
IM_COIN_OUT(702,AccountCateEnum.IM,"私信支出",AccountTypeEnum.COIN,"",false), 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; 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.manager.ConsumerManager;
import com.ruoyi.cai.service.RechargeOrderService;
import com.ruoyi.cai.service.VipOrderService; import com.ruoyi.cai.service.VipOrderService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -15,6 +16,8 @@ public class PayManager {
private VipOrderService vipOrderService; private VipOrderService vipOrderService;
@Autowired @Autowired
private ConsumerManager consumerManager; private ConsumerManager consumerManager;
@Autowired
private AwardManager awardManager;
public void callBack(String orderNo){ public void callBack(String orderNo){
OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo); OrderTypeEnum orderTypeEnum = OrderNoUtil.getType(orderNo);
@@ -27,7 +30,10 @@ public class PayManager {
vipOrderService.orderSuccess(orderNo); vipOrderService.orderSuccess(orderNo);
break; break;
case RECHARGE_ORDER_SUB: case RECHARGE_ORDER_SUB:
consumerManager.rechargeOrderSuccess(orderNo); ConsumeResp resp = consumerManager.rechargeOrderSuccess(orderNo);
if(resp.isSuccess()){
awardManager.giveFastPayAsync(resp.getUserId(), resp.getConsumeLogId());
}
break; break;
default: default:
break; break;

View File

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