下级签到给上级励

达标奖励 可以无限获得
This commit is contained in:
GYJ
2025-02-25 13:57:49 +08:00
parent 9b14002c71
commit db9f19d3fa
3 changed files with 131 additions and 43 deletions

View File

@@ -183,6 +183,11 @@ public class UserEntity implements Serializable {
*/
private Long inviterUserId;
/**
* 邀请下级打卡奖励金额
*/
private BigDecimal inviteAmount;
/**
* 是否是新用户 1否
*/

View File

@@ -106,6 +106,12 @@ public class UserMoneyDetails implements Serializable {
@ApiModelProperty("金额类型: 1 红包2金币")
private Integer moneyType;
/**
* 循环邀请奖励次数
*/
@ApiModelProperty("循环邀请奖励次数")
private Integer awardCount;
/**
* 创建时间
*/

View File

@@ -1,6 +1,7 @@
package com.sqx.modules.job.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
@@ -204,8 +205,6 @@ public class TempOrdersTask {
logger.info("活动领取开始: 用户: {}, 邀请用户: {}", user.getUserName(), sourceUser.getUserName());
InviteAchievement inviteAchievement = inviteAchievementService.getByUserId(user.getUserId());
BigDecimal incomeMoney = new BigDecimal(0);
BigDecimal incomeCoin = new BigDecimal(0);
// 首次达标
int signCount = Integer.parseInt(commonRepository.findOne(913).getValue());
logger.info("{}签到次数: {}", user.getUserName(), inviteAchievement.getCount());
@@ -231,9 +230,8 @@ public class TempOrdersTask {
inviteAchievementService.update(inviteAchievement, new LambdaQueryWrapper<InviteAchievement>()
.eq(InviteAchievement::getUserId, inviteAchievement.getUserId())
.eq(InviteAchievement::getId, inviteAchievement.getId()));
incomeMoney = incomeMoney.add(new BigDecimal(amount));
//代理
// 代理
if (StringUtils.isNotBlank(user.getQdCode()) && !"666666".equals(user.getQdCode())) {
SysUserEntity sysUser = sysUserService.selectSysUserByQdCode(user.getQdCode());
if (sysUser != null) {
@@ -256,37 +254,131 @@ public class TempOrdersTask {
}
}
// int count = inviteAchievementService.count(
// new LambdaQueryWrapper<InviteAchievement>()
// .eq(InviteAchievement::getUserId, sourceUser.getUserId())
// .eq(InviteAchievement::getState, 1));
Set<Long> byUserIdList = inviteAchievementService.list(new LambdaQueryWrapper<InviteAchievement>().eq(InviteAchievement::getUserId, sourceUser.getUserId())
.eq(InviteAchievement::getState, 1).select(InviteAchievement::getTargetUserId)).stream().map(InviteAchievement::getTargetUserId).collect(Collectors.toSet());
int count;
if (!byUserIdList.isEmpty()) {
List<UserInfo> list = userInfoService.list(new LambdaQueryWrapper<UserInfo>().in(UserInfo::getUserId, byUserIdList).isNotNull(UserInfo::getAccountNo).select(UserInfo::getCertNo));
logger.info("邀请用户实名信息: {}", list.stream().map(UserInfo::getCertNo).collect(Collectors.toSet()));
UserInfo userInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, sourceUser.getUserId()).select(UserInfo::getCertNo));
Set<String> collect = userInfoService.list(new LambdaQueryWrapper<UserInfo>().in(UserInfo::getUserId, byUserIdList).isNotNull(UserInfo::getAccountNo).select(UserInfo::getCertNo))
.stream().map(UserInfo::getCertNo).collect(Collectors.toSet());
// 去除与本人身份信息相同的用户
if (!collect.isEmpty() && userInfo != null && StrUtil.isNotBlank(userInfo.getCertNo())) {
collect.remove(userInfo.getCertNo());
}
count = collect.size();
} else {
calcUserInviteAmount(user, sourceUser, signCount);
calcInviteStandardAward(sourceUser);
}
/**
* 计算用户邀请奖励金额
* @param user 用户
*/
private void calcUserInviteAmount(UserEntity user, UserEntity sourceUser, Integer signCount) {
// 检查用户是否实名认证
UserInfo userInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, sourceUser.getUserId()));
if (userInfo == null || StrUtil.isBlank(userInfo.getCertNo())) {
return;
}
logger.info("邀请达标人员: {}", count);
//count 邀请的已达标人数
for (CompletAward completAward : completAwardService.list(new QueryWrapper<CompletAward>().eq("invite_count", count).eq("status", 1))) {
DateTime beginOfDay = DateUtil.beginOfDay(new Date());
// 查询用户支付完成订单数
int orderCount = ordersDao.selectCount(new LambdaQueryWrapper<Orders>()
.eq(Orders::getUserId, user.getUserId())
.eq(Orders::getStatus, 1)
.eq(Orders::getPayWay, 9)
.ge(Orders::getCreateTime, beginOfDay));
if (orderCount < signCount) {
return;
}
// 检查用户当天是否已经给过奖励
LambdaQueryWrapper<UserMoneyDetails> moneyDetailsQuery = new LambdaQueryWrapper<>();
moneyDetailsQuery.eq(UserMoneyDetails::getClassify, 6);
moneyDetailsQuery.eq(UserMoneyDetails::getUserId, sourceUser.getUserId());
moneyDetailsQuery.eq(UserMoneyDetails::getByUserId, user.getUserId());
moneyDetailsQuery.eq(UserMoneyDetails::getCreateTime, beginOfDay);
int count = userMoneyDetailsService.count(moneyDetailsQuery);
if (count > 0) {
return;
}
// 给用户邀请当日达标奖励
if (sourceUser.getInviteAmount() == null || sourceUser.getInviteAmount().compareTo(BigDecimal.ZERO) <= 0) {
sourceUser.setInviteAmount(new BigDecimal("0.1"));
userService.updateById(sourceUser);
}
UserMoneyDetails userMoneyDetails = new UserMoneyDetails();
userMoneyDetails.setClassify(6);
userMoneyDetails.setMoney(sourceUser.getInviteAmount());
userMoneyDetails.setUserId(sourceUser.getUserId());
userMoneyDetails.setByUserId(user.getUserId());
userMoneyDetails.setCreateTime(DateUtil.now());
userMoneyDetails.setContent("下级签到奖励" + sourceUser.getInviteAmount() + "");
userMoneyDetails.setTitle("签到奖励");
userMoneyDetails.setState(2);
userMoneyDetails.setType(1);
userMoneyDetails.setMoneyType(1);
userMoneyDetailsService.save(userMoneyDetails);
//上级 存入余额 钱
userMoneyService.updateAmount(1, sourceUser.getUserId(), sourceUser.getInviteAmount().doubleValue());
logger.info("用户: {} 邀请用户: {} 下级签到奖励: {}", sourceUser.getUserId(), user.getUserId(), sourceUser.getInviteAmount());
}
/**
* 计算分享达标奖励
*
*/
private void calcInviteStandardAward(UserEntity sourceUser) {
Set<Long> byUserIdList = inviteAchievementService.list(new LambdaQueryWrapper<InviteAchievement>().eq(InviteAchievement::getUserId, sourceUser.getUserId())
.eq(InviteAchievement::getState, 1).select(InviteAchievement::getTargetUserId)).stream().map(InviteAchievement::getTargetUserId).collect(Collectors.toSet());
int inviteCount;
if (byUserIdList.isEmpty()) {
return;
}
List<UserInfo> list = userInfoService.list(new LambdaQueryWrapper<UserInfo>().in(UserInfo::getUserId, byUserIdList).isNotNull(UserInfo::getAccountNo).select(UserInfo::getCertNo));
logger.info("邀请用户实名信息: {}", list.stream().map(UserInfo::getCertNo).collect(Collectors.toSet()));
UserInfo userInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, sourceUser.getUserId()).select(UserInfo::getCertNo));
Set<String> collect = userInfoService.list(new LambdaQueryWrapper<UserInfo>().in(UserInfo::getUserId, byUserIdList).isNotNull(UserInfo::getAccountNo).select(UserInfo::getCertNo))
.stream().map(UserInfo::getCertNo).collect(Collectors.toSet());
// 去除与本人身份信息相同的用户
if (!collect.isEmpty() && userInfo != null && StrUtil.isNotBlank(userInfo.getCertNo())) {
collect.remove(userInfo.getCertNo());
}
inviteCount = collect.size();
logger.info("邀请达标人员: {}", inviteCount);
// 查询所有已开启的奖励
List<CompletAward> completAwardList = completAwardService.list(new QueryWrapper<CompletAward>().eq("status", 1));
if (completAwardList.isEmpty()) {
return;
}
// 遍历奖励,寻找最低达标人数
int minInviteCount = completAwardList.get(0).getInviteCount();
for (CompletAward completAward : completAwardList) {
if (completAward.getInviteCount() < minInviteCount) {
minInviteCount = completAward.getInviteCount();
}
}
// 如果邀请人数小于最低达标人数,则不发放奖励
if (inviteCount < minInviteCount) {
return;
}
// 查询是否开启分享循环奖励
int isLoop = Integer.parseInt(commonRepository.findOne(932).getValue());
// 遍历奖励,发放奖励
for (CompletAward completAward : completAwardList) {
QueryWrapper<UserMoneyDetails> moneyDetailsQuery = new QueryWrapper<>();
moneyDetailsQuery.eq("classify", 6);
moneyDetailsQuery.eq("user_id", sourceUser.getUserId());
moneyDetailsQuery.eq("source_id", completAward.getId());
//达标人
// 奖励次
int awardCount = userMoneyDetailsService.count(moneyDetailsQuery);
if (awardCount < 1) {
// 如果未开启循环奖励,并且已经发放过奖励,则跳过
if (isLoop != 1 && awardCount > 0) {
continue;
}
// 计算获取奖励次数
int awardNum = inviteCount / completAward.getInviteCount();
if (isLoop != 1) {
awardNum = 1;
}
for (int i = 0; i < awardNum - awardCount; i++) {
switch (completAward.getType()) {
case 1:
UserMoneyDetails userMoneyDetails1 = new UserMoneyDetails(
@@ -295,7 +387,6 @@ public class TempOrdersTask {
userMoneyService.updateMoney(1, sourceUser.getUserId(), completAward.getAwardNumber().doubleValue());
userMoneyDetailsService.save(userMoneyDetails1);
incomeCoin = completAward.getAwardNumber();
break;
case 2:
UserMoneyDetails userMoneyDetails2 = new UserMoneyDetails(
@@ -304,23 +395,9 @@ public class TempOrdersTask {
userMoneyService.updateAmount(1, sourceUser.getUserId(), completAward.getAwardNumber().doubleValue());
userMoneyDetailsService.save(userMoneyDetails2);
incomeMoney = incomeMoney.add(completAward.getAwardNumber());
break;
}
}
}
if (incomeMoney.compareTo(BigDecimal.ZERO) > 0 || incomeCoin.compareTo(BigDecimal.ZERO) > 0) {
UserMoney userMoney = userMoneyService.selectUserMoneyByUserId(sourceUser.getUserId());
userMoney.setInviteIncomeCoin(userMoney.getInviteIncomeCoin() == null ? incomeCoin : userMoney.getInviteIncomeCoin().add(incomeCoin));
userMoney.setInviteIncomeMoney(userMoney.getInviteIncomeMoney() == null ? incomeMoney : userMoney.getInviteIncomeMoney().add(incomeMoney));
userMoneyService.update(null, new LambdaUpdateWrapper<UserMoney>()
.eq(UserMoney::getUserId, userMoney.getUserId())
.eq(UserMoney::getId, userMoney.getId())
.set(UserMoney::getInviteIncomeCoin, userMoney.getInviteIncomeCoin())
.set(UserMoney::getInviteIncomeMoney, userMoney.getInviteIncomeMoney()));
}
}
}