下级签到给上级励
达标奖励 可以无限获得
This commit is contained in:
@@ -183,6 +183,11 @@ public class UserEntity implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Long inviterUserId;
|
private Long inviterUserId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邀请下级打卡奖励金额
|
||||||
|
*/
|
||||||
|
private BigDecimal inviteAmount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否是新用户 1否
|
* 是否是新用户 1否
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -106,6 +106,12 @@ public class UserMoneyDetails implements Serializable {
|
|||||||
@ApiModelProperty("金额类型: 1 红包,2金币")
|
@ApiModelProperty("金额类型: 1 红包,2金币")
|
||||||
private Integer moneyType;
|
private Integer moneyType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 循环邀请奖励次数
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("循环邀请奖励次数")
|
||||||
|
private Integer awardCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.sqx.modules.job.task;
|
package com.sqx.modules.job.task;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.thread.ThreadUtil;
|
import cn.hutool.core.thread.ThreadUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
@@ -204,8 +205,6 @@ public class TempOrdersTask {
|
|||||||
logger.info("活动领取开始: 用户: {}, 邀请用户: {}", user.getUserName(), sourceUser.getUserName());
|
logger.info("活动领取开始: 用户: {}, 邀请用户: {}", user.getUserName(), sourceUser.getUserName());
|
||||||
InviteAchievement inviteAchievement = inviteAchievementService.getByUserId(user.getUserId());
|
InviteAchievement inviteAchievement = inviteAchievementService.getByUserId(user.getUserId());
|
||||||
|
|
||||||
BigDecimal incomeMoney = new BigDecimal(0);
|
|
||||||
BigDecimal incomeCoin = new BigDecimal(0);
|
|
||||||
// 首次达标
|
// 首次达标
|
||||||
int signCount = Integer.parseInt(commonRepository.findOne(913).getValue());
|
int signCount = Integer.parseInt(commonRepository.findOne(913).getValue());
|
||||||
logger.info("{}签到次数: {}", user.getUserName(), inviteAchievement.getCount());
|
logger.info("{}签到次数: {}", user.getUserName(), inviteAchievement.getCount());
|
||||||
@@ -231,9 +230,8 @@ public class TempOrdersTask {
|
|||||||
inviteAchievementService.update(inviteAchievement, new LambdaQueryWrapper<InviteAchievement>()
|
inviteAchievementService.update(inviteAchievement, new LambdaQueryWrapper<InviteAchievement>()
|
||||||
.eq(InviteAchievement::getUserId, inviteAchievement.getUserId())
|
.eq(InviteAchievement::getUserId, inviteAchievement.getUserId())
|
||||||
.eq(InviteAchievement::getId, inviteAchievement.getId()));
|
.eq(InviteAchievement::getId, inviteAchievement.getId()));
|
||||||
incomeMoney = incomeMoney.add(new BigDecimal(amount));
|
|
||||||
|
|
||||||
//代理
|
// 代理
|
||||||
if (StringUtils.isNotBlank(user.getQdCode()) && !"666666".equals(user.getQdCode())) {
|
if (StringUtils.isNotBlank(user.getQdCode()) && !"666666".equals(user.getQdCode())) {
|
||||||
SysUserEntity sysUser = sysUserService.selectSysUserByQdCode(user.getQdCode());
|
SysUserEntity sysUser = sysUserService.selectSysUserByQdCode(user.getQdCode());
|
||||||
if (sysUser != null) {
|
if (sysUser != null) {
|
||||||
@@ -256,37 +254,131 @@ public class TempOrdersTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// int count = inviteAchievementService.count(
|
calcUserInviteAmount(user, sourceUser, signCount);
|
||||||
// new LambdaQueryWrapper<InviteAchievement>()
|
|
||||||
// .eq(InviteAchievement::getUserId, sourceUser.getUserId())
|
calcInviteStandardAward(sourceUser);
|
||||||
// .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()) {
|
* @param user 用户
|
||||||
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()));
|
private void calcUserInviteAmount(UserEntity user, UserEntity sourceUser, Integer signCount) {
|
||||||
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))
|
UserInfo userInfo = userInfoService.getOne(new LambdaQueryWrapper<UserInfo>().eq(UserInfo::getUserId, sourceUser.getUserId()));
|
||||||
.stream().map(UserInfo::getCertNo).collect(Collectors.toSet());
|
if (userInfo == null || StrUtil.isBlank(userInfo.getCertNo())) {
|
||||||
// 去除与本人身份信息相同的用户
|
|
||||||
if (!collect.isEmpty() && userInfo != null && StrUtil.isNotBlank(userInfo.getCertNo())) {
|
|
||||||
collect.remove(userInfo.getCertNo());
|
|
||||||
}
|
|
||||||
count = collect.size();
|
|
||||||
} else {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logger.info("邀请达标人员: {}", count);
|
|
||||||
//count 邀请的已达标人数
|
DateTime beginOfDay = DateUtil.beginOfDay(new Date());
|
||||||
for (CompletAward completAward : completAwardService.list(new QueryWrapper<CompletAward>().eq("invite_count", count).eq("status", 1))) {
|
// 查询用户支付完成订单数
|
||||||
|
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<>();
|
QueryWrapper<UserMoneyDetails> moneyDetailsQuery = new QueryWrapper<>();
|
||||||
moneyDetailsQuery.eq("classify", 6);
|
moneyDetailsQuery.eq("classify", 6);
|
||||||
moneyDetailsQuery.eq("user_id", sourceUser.getUserId());
|
moneyDetailsQuery.eq("user_id", sourceUser.getUserId());
|
||||||
moneyDetailsQuery.eq("source_id", completAward.getId());
|
moneyDetailsQuery.eq("source_id", completAward.getId());
|
||||||
//达标人数
|
// 奖励次数
|
||||||
int awardCount = userMoneyDetailsService.count(moneyDetailsQuery);
|
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()) {
|
switch (completAward.getType()) {
|
||||||
case 1:
|
case 1:
|
||||||
UserMoneyDetails userMoneyDetails1 = new UserMoneyDetails(
|
UserMoneyDetails userMoneyDetails1 = new UserMoneyDetails(
|
||||||
@@ -295,7 +387,6 @@ public class TempOrdersTask {
|
|||||||
|
|
||||||
userMoneyService.updateMoney(1, sourceUser.getUserId(), completAward.getAwardNumber().doubleValue());
|
userMoneyService.updateMoney(1, sourceUser.getUserId(), completAward.getAwardNumber().doubleValue());
|
||||||
userMoneyDetailsService.save(userMoneyDetails1);
|
userMoneyDetailsService.save(userMoneyDetails1);
|
||||||
incomeCoin = completAward.getAwardNumber();
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
UserMoneyDetails userMoneyDetails2 = new UserMoneyDetails(
|
UserMoneyDetails userMoneyDetails2 = new UserMoneyDetails(
|
||||||
@@ -304,23 +395,9 @@ public class TempOrdersTask {
|
|||||||
|
|
||||||
userMoneyService.updateAmount(1, sourceUser.getUserId(), completAward.getAwardNumber().doubleValue());
|
userMoneyService.updateAmount(1, sourceUser.getUserId(), completAward.getAwardNumber().doubleValue());
|
||||||
userMoneyDetailsService.save(userMoneyDetails2);
|
userMoneyDetailsService.save(userMoneyDetails2);
|
||||||
incomeMoney = incomeMoney.add(completAward.getAwardNumber());
|
|
||||||
break;
|
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()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user