From db9f19d3fa154e2efdf1a4f9bc5402a742f3d433 Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Tue, 25 Feb 2025 13:57:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E7=BA=A7=E7=AD=BE=E5=88=B0=E7=BB=99?= =?UTF-8?q?=E4=B8=8A=E7=BA=A7=E5=8A=B1=20=E8=BE=BE=E6=A0=87=E5=A5=96?= =?UTF-8?q?=E5=8A=B1=20=E5=8F=AF=E4=BB=A5=E6=97=A0=E9=99=90=E8=8E=B7?= =?UTF-8?q?=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/modules/app/entity/UserEntity.java | 5 + .../modules/app/entity/UserMoneyDetails.java | 6 + .../sqx/modules/job/task/TempOrdersTask.java | 163 +++++++++++++----- 3 files changed, 131 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/sqx/modules/app/entity/UserEntity.java b/src/main/java/com/sqx/modules/app/entity/UserEntity.java index 08b6ba8c..878d91c2 100644 --- a/src/main/java/com/sqx/modules/app/entity/UserEntity.java +++ b/src/main/java/com/sqx/modules/app/entity/UserEntity.java @@ -183,6 +183,11 @@ public class UserEntity implements Serializable { */ private Long inviterUserId; + /** + * 邀请下级打卡奖励金额 + */ + private BigDecimal inviteAmount; + /** * 是否是新用户 1否 */ diff --git a/src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java b/src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java index 354fbf59..dcdd8eb8 100644 --- a/src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java +++ b/src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java @@ -106,6 +106,12 @@ public class UserMoneyDetails implements Serializable { @ApiModelProperty("金额类型: 1 红包,2金币") private Integer moneyType; + /** + * 循环邀请奖励次数 + */ + @ApiModelProperty("循环邀请奖励次数") + private Integer awardCount; + /** * 创建时间 */ diff --git a/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java b/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java index a23e08bb..addd13a2 100644 --- a/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java +++ b/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java @@ -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() .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() -// .eq(InviteAchievement::getUserId, sourceUser.getUserId()) -// .eq(InviteAchievement::getState, 1)); - Set byUserIdList = inviteAchievementService.list(new LambdaQueryWrapper().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 list = userInfoService.list(new LambdaQueryWrapper().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().eq(UserInfo::getUserId, sourceUser.getUserId()).select(UserInfo::getCertNo)); - Set collect = userInfoService.list(new LambdaQueryWrapper().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().eq(UserInfo::getUserId, sourceUser.getUserId())); + if (userInfo == null || StrUtil.isBlank(userInfo.getCertNo())) { return; } - logger.info("邀请达标人员: {}", count); - //count 邀请的已达标人数 - for (CompletAward completAward : completAwardService.list(new QueryWrapper().eq("invite_count", count).eq("status", 1))) { + + DateTime beginOfDay = DateUtil.beginOfDay(new Date()); + // 查询用户支付完成订单数 + int orderCount = ordersDao.selectCount(new LambdaQueryWrapper() + .eq(Orders::getUserId, user.getUserId()) + .eq(Orders::getStatus, 1) + .eq(Orders::getPayWay, 9) + .ge(Orders::getCreateTime, beginOfDay)); + if (orderCount < signCount) { + return; + } + + // 检查用户当天是否已经给过奖励 + LambdaQueryWrapper 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 byUserIdList = inviteAchievementService.list(new LambdaQueryWrapper().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 list = userInfoService.list(new LambdaQueryWrapper().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().eq(UserInfo::getUserId, sourceUser.getUserId()).select(UserInfo::getCertNo)); + Set collect = userInfoService.list(new LambdaQueryWrapper().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 completAwardList = completAwardService.list(new QueryWrapper().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 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() - .eq(UserMoney::getUserId, userMoney.getUserId()) - .eq(UserMoney::getId, userMoney.getId()) - .set(UserMoney::getInviteIncomeCoin, userMoney.getInviteIncomeCoin()) - .set(UserMoney::getInviteIncomeMoney, userMoney.getInviteIncomeMoney())); - } - } }