Browse Source

修复bug

master
前端-胡立永 2 weeks ago
parent
commit
ba0b2f6379
7 changed files with 407 additions and 17 deletions
  1. +21
    -9
      CatmDogd-Mall-Front-test/src/views/model/AppletConfig/hhindex.vue
  2. +9
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallUserTeacherController.java
  3. +11
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/applet/tencent/TaskConsumer.java
  4. +178
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/job/PartnerLevelCheckJob.java
  5. +13
    -3
      ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletConfig.java
  6. +2
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAApiAppletHhrWorkOutService.java
  7. +173
    -4
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AApiAppletHhrWorkOutServiceImpl.java

+ 21
- 9
CatmDogd-Mall-Front-test/src/views/model/AppletConfig/hhindex.vue View File

@ -99,15 +99,18 @@
<el-table-column label="编码" align="center" prop="paramCode" />
<el-table-column label="数值" align="center" prop="paramValueNum" />
<el-table-column label="比例(计算使用)" align="center" prop="paramValueNo" />
<el-table-column label="需邀请人数" align="center" prop="paramCondition" />
<el-table-column label="需注册人数" align="center" prop="paramCondition" />
<el-table-column label="或需要下单人数" align="center" prop="needOrderUserNum" />
<el-table-column label="保段注册人数" align="center" prop="keepUserNum" />
<el-table-column label="保段下单人数" align="center" prop="keepOrderUserNum" />
<el-table-column label="百分比" align="center" prop="paramValueText" />
<!-- <el-table-column label="参数值-图片" align="center" prop="paramValueImage" v-if="columns[3].visible"/>-->
<!-- <el-table-column label="图片" align="center" prop="paramValueImage">-->
<!-- <template slot-scope="{ row }">-->
<!-- <el-image v-if="row.paramValueImage" :src="row.paramValueImage" :preview-src-list="[row.paramValueImage]" class="small-img circle-img"/>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="图片" align="center" prop="paramValueImage">
<template slot-scope="{ row }">
<el-image v-if="row.paramValueImage" :src="row.paramValueImage" :preview-src-list="[row.paramValueImage]" class="small-img circle-img"/>
</template>
</el-table-column>
<!-- <el-table-column label="参数值-富文本" align="center" prop="paramValueArea" v-if="columns[4].visible"/>-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -159,11 +162,20 @@
<el-form-item label="比例" prop="paramValueNo">
<el-input v-model="form.paramValueNo" placeholder="请输入参数值-百分比" />
</el-form-item>
<el-form-item label="需邀请人数" prop="paramCondition">
<el-input v-model="form.paramCondition" placeholder="需邀请人数" />
<el-form-item label="需注册人数" prop="paramCondition">
<el-input v-model="form.paramCondition" placeholder="需注册人数" />
</el-form-item>
<el-form-item label="或需下单人数" prop="needOrderUserNum">
<el-input v-model="form.needOrderUserNum" placeholder="或需下单人数" />
</el-form-item>
<el-form-item label="保段注册人数" prop="keepUserNum">
<el-input v-model="form.keepUserNum" placeholder="保段注册人数" />
</el-form-item>
<el-form-item label="保段下单人数" prop="keepOrderUserNum">
<el-input v-model="form.keepOrderUserNum" placeholder="保段下单人数" />
</el-form-item>
<el-form-item label="图标">
<el-form-item label="图">
<oss-image-upload v-model="form.paramValueImage" :limit="1"></oss-image-upload>
</el-form-item>
<!-- <el-form-item label="富文本" prop="paramValueArea">-->


+ 9
- 0
ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallUserTeacherController.java View File

@ -50,6 +50,9 @@ public class ApiMallUserTeacherController extends BaseController {
@Autowired
private MemberWechatService memberWechatService;
@Autowired
private IAApiAppletHhrWorkOutService apiAppletHhrWorkOutService;
//mall-首页周边伴宠师
@ApiOperation("mall-首页周边伴宠师接口")
@GetMapping("/getTeacherListIndex")
@ -370,6 +373,12 @@ public class ApiMallUserTeacherController extends BaseController {
member.setSpreadUid(users.getUserId());
memberMapper.updateById(member);
try {
apiAppletHhrWorkOutService.checkPartnerUpgrade(users.getUserId());
}catch (Exception e){
log.error(e.getMessage());
}
return AjaxResult.success();
}


+ 11
- 0
ruoyi-catdog/src/main/java/com/ruoyi/applet/tencent/TaskConsumer.java View File

@ -107,6 +107,8 @@ public class TaskConsumer implements QueueConsumer {
@Autowired
private IAppletConfigService appletConfigService;
@Autowired
private IAApiAppletHhrWorkOutService apiAppletHhrWorkOutService;
private class TaskThread extends Thread {
@ -147,6 +149,8 @@ public class TaskConsumer implements QueueConsumer {
startOrder(h5OrderVO, model.getOrder());
} catch (Exception e) {
log.error("task消费异常:{}", e);
}
@ -157,6 +161,13 @@ public class TaskConsumer implements QueueConsumer {
private void smsHandler(Order order) {
try {
Member member = memberService.selectById(order.getMemberId());
try {
apiAppletHhrWorkOutService.checkPartnerUpgrade(member.getSpreadUid());
}catch (Exception e){
log.error(e.getMessage());
}
String phone = memberService.getPhoneDecrypted(member.getPhoneEncrypted());
//TODO 查询订单的开始日期和结束日期


+ 178
- 0
ruoyi-catdog/src/main/java/com/ruoyi/job/PartnerLevelCheckJob.java View File

@ -0,0 +1,178 @@
package com.ruoyi.job;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.ums.domain.Member;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.ruoyi.model.domain.AppUsers;
import com.ruoyi.model.domain.AppletConfig;
import com.ruoyi.model.service.IAppUsersService;
import com.ruoyi.model.service.IAppletConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
/**
* 合伙人等级检查定时任务
* 每月检查合伙人是否达到保段要求未达标则降级
*
* @author system
*/
@Component
@Slf4j
public class PartnerLevelCheckJob {
@Autowired
private IAppUsersService appUsersService;
@Autowired
private IAppletConfigService appletConfigService;
@Autowired
private MemberMapper memberMapper;
@Autowired
private OrderMapper orderMapper;
/**
* 每月1号凌晨3点执行合伙人等级检查
* 检查上个月的数据是否达到保段要求
*/
@Async
@Scheduled(cron = "0 0 3 1 * ?")
public void checkPartnerLevel() {
log.info("定时任务[合伙人等级检查]开始执行");
try {
// 获取所有合伙人用户userHh = 1 userHhRole > 0
List<AppUsers> partners = appUsersService.list(
Wrappers.<AppUsers>lambdaQuery()
.eq(AppUsers::getUserHh, 1)
.gt(AppUsers::getUserHhRole, 0)
);
if (partners.isEmpty()) {
log.info("当前没有合伙人用户需要检查");
return;
}
// 获取上个月的时间范围
LocalDateTime now = LocalDateTime.now();
LocalDateTime lastMonthStart = now.minusMonths(1)
.with(TemporalAdjusters.firstDayOfMonth())
.withHour(0).withMinute(0).withSecond(0).withNano(0);
LocalDateTime lastMonthEnd = now.minusMonths(1)
.with(TemporalAdjusters.lastDayOfMonth())
.withHour(23).withMinute(59).withSecond(59);
int totalChecked = 0;
int totalDowngraded = 0;
for (AppUsers partner : partners) {
totalChecked++;
// 获取当前等级的保段要求
AppletConfig currentLevelConfig = appletConfigService.getOne(
Wrappers.<AppletConfig>lambdaQuery()
.eq(AppletConfig::getParamClass, "pet_payment_hh")
.eq(AppletConfig::getParamValueNum, partner.getUserHhRole())
);
if (currentLevelConfig == null) {
log.warn("合伙人用户ID: {} 的等级配置不存在,跳过检查", partner.getUserId());
continue;
}
// 获取保段要求
Integer keepUserNum = currentLevelConfig.getKeepUserNum(); // 保段注册人数
Integer keepOrderUserNum = currentLevelConfig.getKeepOrderUserNum(); // 保段下单人数
if (keepUserNum == null || keepOrderUserNum == null) {
log.warn("合伙人用户ID: {} 的等级保段要求未配置,跳过检查", partner.getUserId());
continue;
}
// 获取用户邀请码
String invitationCode = appUsersService.getUserCode(partner.getUserId());
// 统计上个月通过邀请码注册的用户数
Integer monthRegisterUsers = memberMapper.selectCount(
Wrappers.<Member>lambdaQuery()
.eq(Member::getInviteCode, invitationCode)
.ge(Member::getCreateTime, lastMonthStart)
.le(Member::getCreateTime, lastMonthEnd)
);
// 获取通过邀请码注册的所有用户ID列表
List<Member> invitedMembers = memberMapper.selectList(
Wrappers.<Member>lambdaQuery()
.select(Member::getId)
.eq(Member::getInviteCode, invitationCode)
);
List<Long> memberIds = new ArrayList<>();
for (Member member : invitedMembers) {
memberIds.add(member.getId());
}
// 统计上个月下单用户数排除待支付和已关闭订单
Integer monthOrderUsers = 0;
if (!memberIds.isEmpty()) {
List<Order> monthOrderList = orderMapper.selectList(
Wrappers.<Order>lambdaQuery()
.select(Order::getMemberId)
.in(Order::getMemberId, memberIds)
.notIn(Order::getStatus, 0, 4) // 排除待支付和已关闭订单
.ge(Order::getCreateTime, lastMonthStart)
.le(Order::getCreateTime, lastMonthEnd)
.groupBy(Order::getMemberId)
);
monthOrderUsers = monthOrderList.size();
}
// 检查是否达到保段要求
boolean meetRequirement = monthRegisterUsers >= keepUserNum && monthOrderUsers >= keepOrderUserNum;
log.info("合伙人用户ID: {}, 当前等级: {}, 上月注册用户: {}/{}, 上月下单用户: {}/{}, 是否达标: {}",
partner.getUserId(), partner.getUserHhRole(),
monthRegisterUsers, keepUserNum,
monthOrderUsers, keepOrderUserNum,
meetRequirement);
// 如果未达到保段要求则降级
if (!meetRequirement && partner.getUserHhRole() > 0) {
int newLevel = partner.getUserHhRole() - 1;
// 更新用户等级
boolean updateResult = appUsersService.lambdaUpdate()
.eq(AppUsers::getUserId, partner.getUserId())
.set(AppUsers::getUserHhRole, newLevel)
.update();
if (updateResult) {
totalDowngraded++;
log.info("合伙人用户ID: {} 因未达保段要求,等级从 {} 降至 {}",
partner.getUserId(), partner.getUserHhRole(), newLevel);
} else {
log.error("合伙人用户ID: {} 等级降级失败", partner.getUserId());
}
} else if (!meetRequirement && partner.getUserHhRole() == 0) {
log.info("合伙人用户ID: {} 已是最低等级(0级),无法继续降级", partner.getUserId());
}
}
log.info("定时任务[合伙人等级检查]执行完成,共检查 {} 个合伙人,降级 {} 个", totalChecked, totalDowngraded);
} catch (Exception e) {
log.error("定时任务[合伙人等级检查]执行异常", e);
}
}
}

+ 13
- 3
ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletConfig.java View File

@ -157,9 +157,21 @@ public class AppletConfig
private Integer paramValueNum;
/** 参数值-达成人数 */
@Excel(name = "参数值-达成人数")
@Excel(name = "参数值-需要注册人数")
private Integer paramCondition;
/** 参数值-达成人数 */
@Excel(name = "参数值-需要下单人数")
private Integer needOrderUserNum;
/** 参数值-达成人数 */
@Excel(name = "参数值-保段注册人数")
private Integer keepUserNum;
/** 参数值-达成人数 */
@Excel(name = "参数值-保段下单人数")
private Integer keepOrderUserNum;
/** 参数值-百分比 */
@Excel(name = "参数值-百分比")
private BigDecimal paramValueNo;
@ -168,14 +180,12 @@ public class AppletConfig
@Excel(name = "分类")
private String paramClass;
/** 创建人 */
private String createBy;
/** 创建时间 */
private LocalDateTime createTime;
/** 修改时间 */
private LocalDateTime updateTime;


+ 2
- 1
ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAApiAppletHhrWorkOutService.java View File

@ -20,6 +20,7 @@ public interface IAApiAppletHhrWorkOutService {
//合伙人工作台 - 根据用户标识查询用户下单详细信息
AjaxResult HhrMyUserGetById(Long appUserId);
//合伙人等级升级检查
AjaxResult checkPartnerUpgrade(Long appUserId);
}

+ 173
- 4
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AApiAppletHhrWorkOutServiceImpl.java View File

@ -69,8 +69,7 @@ public class AApiAppletHhrWorkOutServiceImpl implements IAApiAppletHhrWorkOutSer
Map<String,Object> map = new HashMap<>();
map.put("info",appUsers); //用户信息
// map.put("partner_level","初级合伙人"); //合伙人等级
// 计算合伙人入住天数
long partnerDays = 0;
if (appUsers.getCreateTime() != null) {
@ -85,8 +84,9 @@ public class AApiAppletHhrWorkOutServiceImpl implements IAApiAppletHhrWorkOutSer
if (petPaymentHh != null){
map.put("partner_new_num",petPaymentHh.getParamValueText()); //合伙人当前合伙人比例
map.put("partner_new_image",petPaymentHh.getParamValueImage()); //合伙人当前合伙人比例
map.put("partner_level", petPaymentHh.getParamValue()); //合伙人等级
}else {
map.put("partner_new_num", 0); //合伙人当前合伙人比例
// map.put("partner_new_num", 0); //合伙人当前合伙人比例
}
AppletConfig partner_upgrade_num = appletConfigService.selectAppletConfigByClassAndNum("pet_payment_hh", appUsers.getUserHhRole()+1);
@ -94,10 +94,11 @@ public class AApiAppletHhrWorkOutServiceImpl implements IAApiAppletHhrWorkOutSer
if (partner_upgrade_num != null){
map.put("partner_upgrade_num", partner_upgrade_num.getParamValueText()); //合伙人晋级之后的合伙人比例
}else {
map.put("partner_upgrade_num", -1); //合伙人晋级之后的合伙人比例
// map.put("partner_upgrade_num", -1); //合伙人晋级之后的合伙人比例
}
map.put("user_code", appUsersService.getUserCode(appUserId)); //邀请码
map.put("level_list", appletConfigService.lambdaQuery().eq(AppletConfig::getParamClass, "pet_payment_hh").list()); //等级列表
map.put("user_code_bj","https://image.hhlm1688.com/img/work/log/indexInfo/11.png"); //邀请码背景图
map.put("user_code_fx","https://image.hhlm1688.com/img/work/log/indexInfo/11.png"); //分享海报背景图
map.put("user_code_url","https://image.hhlm1688.com/img/work/log/indexInfo/11.png"); //分销链接背景图
@ -387,5 +388,173 @@ public class AApiAppletHhrWorkOutServiceImpl implements IAApiAppletHhrWorkOutSer
return AjaxResult.success("用户下单详细信息成功",map);
}
//合伙人等级升级检查
@Override
public AjaxResult checkPartnerUpgrade(Long appUserId) {
try {
// 获取用户信息
AppUsers appUsers = appUsersService.selectAppUsersByUserId(appUserId);
if (appUsers == null) {
return AjaxResult.error("用户不存在");
}
// 检查是否为合伙人
if (appUsers.getUserHh() == null || appUsers.getUserHh() != 1) {
return AjaxResult.error("用户不是合伙人");
}
Integer currentLevel = appUsers.getUserHhRole();
if (currentLevel == null) {
currentLevel = 0;
}
// 获取下一个等级的配置
AppletConfig nextLevelConfig = appletConfigService.getOne(
Wrappers.<AppletConfig>lambdaQuery()
.eq(AppletConfig::getParamClass, "pet_payment_hh")
.eq(AppletConfig::getParamValueNum, currentLevel + 1)
);
if (nextLevelConfig == null) {
return AjaxResult.success("已是最高等级,无法继续升级");
}
// 获取升级要求
Integer needRegisterNum = nextLevelConfig.getParamCondition(); // 需要注册人数
Integer needOrderUserNum = nextLevelConfig.getNeedOrderUserNum(); // 需要下单人数
if (needRegisterNum == null || needOrderUserNum == null) {
return AjaxResult.error("下一等级升级条件未配置");
}
// 获取当前等级的保段要求
AppletConfig currentLevelConfig = appletConfigService.getOne(
Wrappers.<AppletConfig>lambdaQuery()
.eq(AppletConfig::getParamClass, "pet_payment_hh")
.eq(AppletConfig::getParamValueNum, currentLevel)
);
Integer keepUserNum = 0;
Integer keepOrderUserNum = 0;
if (currentLevelConfig != null) {
keepUserNum = currentLevelConfig.getKeepUserNum() != null ? currentLevelConfig.getKeepUserNum() : 0;
keepOrderUserNum = currentLevelConfig.getKeepOrderUserNum() != null ? currentLevelConfig.getKeepOrderUserNum() : 0;
}
// 获取用户邀请码
String invitationCode = appUsersService.getUserCode(appUserId);
// 获取当月时间范围
LocalDateTime monthStart = LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0).withNano(0);
LocalDateTime monthEnd = LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59);
// 统计累积注册用户
Integer totalRegisterUsers = memberMapper.selectCount(
Wrappers.<Member>lambdaQuery()
.eq(Member::getInviteCode, invitationCode)
);
// 统计当月注册用户
Integer monthRegisterUsers = memberMapper.selectCount(
Wrappers.<Member>lambdaQuery()
.eq(Member::getInviteCode, invitationCode)
.ge(Member::getCreateTime, monthStart)
.le(Member::getCreateTime, monthEnd)
);
// 获取通过邀请码注册的所有用户ID列表
List<Member> invitedMembers = memberMapper.selectList(
Wrappers.<Member>lambdaQuery()
.select(Member::getId)
.eq(Member::getInviteCode, invitationCode)
);
List<Long> memberIds = new ArrayList<>();
for (Member member : invitedMembers) {
memberIds.add(member.getId());
}
// 统计累积下单用户
Integer totalOrderUsers = 0;
Integer monthOrderUsers = 0;
if (!memberIds.isEmpty()) {
// 累积下单用户
List<Order> totalOrderList = orderMapper.selectList(
Wrappers.<Order>lambdaQuery()
.select(Order::getMemberId)
.in(Order::getMemberId, memberIds)
.notIn(Order::getStatus, 0, 4) // 排除待支付和已关闭订单
.groupBy(Order::getMemberId)
);
totalOrderUsers = totalOrderList.size();
// 当月下单用户
List<Order> monthOrderList = orderMapper.selectList(
Wrappers.<Order>lambdaQuery()
.select(Order::getMemberId)
.in(Order::getMemberId, memberIds)
.notIn(Order::getStatus, 0, 4) // 排除待支付和已关闭订单
.ge(Order::getCreateTime, monthStart)
.le(Order::getCreateTime, monthEnd)
.groupBy(Order::getMemberId)
);
monthOrderUsers = monthOrderList.size();
}
// 检查升级条件累计注册或累计下单达成其中一个条件即可
boolean meetUpgradeCondition = totalRegisterUsers >= needRegisterNum || totalOrderUsers >= needOrderUserNum;
// 检查当月保段条件
boolean meetMonthlyCondition = monthRegisterUsers >= keepUserNum && monthOrderUsers >= keepOrderUserNum;
Map<String, Object> result = new HashMap<>();
result.put("currentLevel", currentLevel);
result.put("nextLevel", currentLevel + 1);
result.put("totalRegisterUsers", totalRegisterUsers);
result.put("needRegisterNum", needRegisterNum);
result.put("totalOrderUsers", totalOrderUsers);
result.put("needOrderUserNum", needOrderUserNum);
result.put("monthRegisterUsers", monthRegisterUsers);
result.put("keepUserNum", keepUserNum);
result.put("monthOrderUsers", monthOrderUsers);
result.put("keepOrderUserNum", keepOrderUserNum);
result.put("meetUpgradeCondition", meetUpgradeCondition);
result.put("meetMonthlyCondition", meetMonthlyCondition);
// 如果同时满足升级条件和当月保段条件则进行升级
if (meetUpgradeCondition && meetMonthlyCondition) {
boolean upgradeResult = appUsersService.lambdaUpdate()
.eq(AppUsers::getUserId, appUserId)
.set(AppUsers::getUserHhRole, currentLevel + 1)
.update();
if (upgradeResult) {
result.put("upgraded", true);
result.put("message", "恭喜!等级升级成功,从等级" + currentLevel + "升至等级" + (currentLevel + 1));
log.info("合伙人用户ID: {} 升级成功,从等级 {} 升至等级 {}", appUserId, currentLevel, currentLevel + 1);
} else {
result.put("upgraded", false);
result.put("message", "升级失败,请稍后重试");
log.error("合伙人用户ID: {} 升级失败", appUserId);
}
} else {
result.put("upgraded", false);
if (!meetUpgradeCondition && !meetMonthlyCondition) {
result.put("message", "未达到升级条件且当月未达保段要求");
} else if (!meetUpgradeCondition) {
result.put("message", "累积数据未达到升级条件");
} else {
result.put("message", "当月数据未达到保段要求");
}
}
return AjaxResult.success("检查完成", result);
} catch (Exception e) {
log.error("合伙人等级升级检查异常,用户ID: {}", appUserId, e);
return AjaxResult.error("检查异常: " + e.getMessage());
}
}
}

Loading…
Cancel
Save