From ddf3f19408fb311734218aaaa5edb49c5134b1eb Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 08 一月 2025 21:14:36 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java |   87 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 70 insertions(+), 17 deletions(-)

diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
index c81fde8..ed32161 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -11,6 +11,8 @@
 import com.ruoyi.account.mapper.AppUserMapper;
 import com.ruoyi.account.service.*;
 import com.ruoyi.account.util.SMSUtil;
+import com.ruoyi.account.util.payment.PaymentUtil;
+import com.ruoyi.account.util.payment.model.CloseOrderResult;
 import com.ruoyi.account.util.tencentMap.TencentMapUtil;
 import com.ruoyi.account.util.weChat.EnvVersion;
 import com.ruoyi.account.util.weChat.WXCore;
@@ -25,15 +27,18 @@
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.model.LoginUser;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.logging.log4j.core.util.UuidUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -50,6 +55,7 @@
  * @author luodangjia
  * @since 2024-11-21
  */
+@Slf4j
 @Service
 public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements AppUserService {
 	
@@ -100,6 +106,11 @@
 
 	@Resource
 	private UserCouponService userCouponService;
+
+	@Resource
+	private RedisTemplate redisTemplate;
+	@Resource
+	private BalancePaymentService balancePaymentService;
 
 
 	/**
@@ -350,6 +361,15 @@
 				appUser.setProvinceCode(region.getCode());
 			}
 			this.save(appUser);
+			//添加定时任务队列
+			VipSetting vipSetting = vipSettingClient.getVipSetting(1).getData();
+			Integer vipCancelDay = vipSetting.getVipCancelDay();
+			Integer vipChangeDay = vipSetting.getVipChangeDay();
+			//解绑推广人
+			redisTemplate.opsForZSet().add("unbind_promoter", appUser.getId().toString(), LocalDateTime.now().plusDays(vipCancelDay).toEpochSecond(ZoneOffset.UTC));
+			//可更换推广人
+			redisTemplate.opsForZSet().add("replaceable", appUser.getId().toString(), LocalDateTime.now().plusDays(vipChangeDay).toEpochSecond(ZoneOffset.UTC));
+
 			//增加积分变动记录
 			if(0 == old && regisPoint > 0){
 				//构建积分流水记录
@@ -728,23 +748,27 @@
 	@Override
 	public void unbindThePromoter() {
 		//注册X天后没有升级成黄金会员则自动解绑推广人
-		VipSetting vipSetting = vipSettingClient.getVipSetting(1).getData();
-		Integer vipCancelDay = vipSetting.getVipCancelDay();
-		Integer vipChangeDay = vipSetting.getVipChangeDay();
-		List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).isNotNull(AppUser::getInviteUserId)
-				.eq(AppUser::getStatus, 1).last(" and (UNIX_TIMESTAMP(create_time) + (" + vipCancelDay + " * 86400)) <= UNIX_TIMESTAMP()"));
-		for (AppUser appUser : list) {
-			UpdateWrapper<AppUser> updateWrapper = new UpdateWrapper<>();
-			updateWrapper.set("invite_user_id", null).set("shop_id", null).eq("id", appUser.getId());
-			this.update(updateWrapper);
+
+		//解绑推广人
+		Set<Long> unbind_promoter = redisTemplate.opsForZSet().range("unbind_promoter", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
+		if(unbind_promoter.size() > 0){
+			List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).isNotNull(AppUser::getInviteUserId)
+					.eq(AppUser::getStatus, 1).in(AppUser::getId, unbind_promoter));
+			for (AppUser appUser : list) {
+				UpdateWrapper<AppUser> updateWrapper = new UpdateWrapper<>();
+				updateWrapper.set("invite_user_id", null).set("shop_id", null).eq("id", appUser.getId());
+				this.update(updateWrapper);
+			}
 		}
-		
 		//可更换推广人
-		list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0)
-				.eq(AppUser::getStatus, 1).last(" and (UNIX_TIMESTAMP(ifnull(last_shop_time, create_time)) + (" + vipChangeDay + " * 86400)) <= UNIX_TIMESTAMP()"));
-		for (AppUser appUser : list) {
-			appUser.setChangePromoter(1);
-			this.updateById(appUser);
+		Set<Long> replaceable = redisTemplate.opsForZSet().range("replaceable", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
+		if(replaceable.size() > 0){
+			List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0)
+					.eq(AppUser::getStatus, 1).in(AppUser::getId, unbind_promoter));
+			for (AppUser appUser : list) {
+				appUser.setChangePromoter(1);
+				this.updateById(appUser);
+			}
 		}
 	}
 	
@@ -801,7 +825,7 @@
 	}
 
 	@Override
-	public IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser) {
+	public IPage<AppUser> getAppuserPage(Integer pageNum, Integer pageSize, AppUser appUser, Integer shopId, Set<Long> userId) {
 		if (StringUtils.isNotEmpty(appUser.getShopName())){
 			R<Set<Integer>> shopR = shopClient.getShopIdByName(appUser.getShopName());
 			if (R.isSuccess(shopR)){
@@ -811,7 +835,7 @@
 				}
 			}
 		}
-		return appUserMapper.getAppuserPage(new Page<>(pageNum, pageSize), appUser);
+		return appUserMapper.getAppuserPage(new Page<>(pageNum, pageSize), appUser, shopId, userId);
 	}
 	@Override
 	public IPage<AppUser> getAppuserPage1(Integer pageNum, Integer pageSize, AppUser appUser,Integer objectId,List<Long> userIds) {
@@ -924,4 +948,33 @@
 			this.updateBatchById(appUserList);
 		}
 	}
+
+
+
+	/**
+	 * 定时任务关闭订单
+	 */
+	@Override
+	public void closeOrder() {
+		//订单支付数据
+		long second = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
+		Set<String> orderPayment = redisTemplate.opsForZSet().range("BalanceRecharge", 0, second);
+		if(orderPayment.size() > 0){
+			List<BalancePayment> list = balancePaymentService.list(new LambdaQueryWrapper<BalancePayment>().in(BalancePayment::getId, orderPayment));
+			for (BalancePayment order : list) {
+				if(null == order || order.getStatus() != 1){
+					redisTemplate.opsForZSet().remove("BalanceRecharge", order.getId());
+					continue;
+				}
+				//开始执行关闭订单操作
+				CloseOrderResult closeOrderResult = PaymentUtil.closeOrder(order.getId().toString());
+				if((null == closeOrderResult || !closeOrderResult.getRa_Status().equals("100")) &&
+						Arrays.asList("0", "4", "101", "10080000", "10080002", "10083004", "10083005").contains(closeOrderResult.getRb_Code())){
+					redisTemplate.opsForZSet().add("BalanceRecharge", order.getId(), 0);
+					log.error("关闭订单失败:{}---->{}", order.getId(), com.alibaba.fastjson2.JSON.toJSONString(closeOrderResult));
+				}
+				redisTemplate.opsForZSet().remove("BalanceRecharge", order.getId());
+			}
+		}
+	}
 }

--
Gitblit v1.7.1