From 74b2581c8a9be309ca6454da3ff2c56501368771 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 09 一月 2025 09:30:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java |  137 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 104 insertions(+), 33 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 9d47a7a..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
@@ -3,19 +3,16 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.account.api.model.AppUserShop;
-import com.ruoyi.account.api.model.UserChangeLog;
-import com.ruoyi.account.api.model.UserPoint;
+import com.ruoyi.account.api.model.*;
 import com.ruoyi.account.mapper.AppUserMapper;
-import com.ruoyi.account.api.model.AppUser;
-import com.ruoyi.account.service.AppUserService;
-import com.ruoyi.account.service.AppUserShopService;
-import com.ruoyi.account.service.UserChangeLogService;
-import com.ruoyi.account.service.UserPointService;
+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,26 +22,23 @@
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.other.api.domain.PointSetting;
-import com.ruoyi.other.api.domain.Region;
-import com.ruoyi.other.api.domain.Shop;
-import com.ruoyi.other.api.domain.VipSetting;
-import com.ruoyi.other.api.feignClient.PointSettingClient;
-import com.ruoyi.other.api.feignClient.RegionClient;
-import com.ruoyi.other.api.feignClient.ShopClient;
-import com.ruoyi.other.api.feignClient.VipSettingClient;
+import com.ruoyi.other.api.domain.*;
+import com.ruoyi.other.api.feignClient.*;
 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;
@@ -61,6 +55,7 @@
  * @author luodangjia
  * @since 2024-11-21
  */
+@Slf4j
 @Service
 public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements AppUserService {
 	
@@ -105,6 +100,17 @@
 	
 	@Resource
 	private RegionClient regionClient;
+
+	@Resource
+	private CouponInfoClient couponInfoClient;
+
+	@Resource
+	private UserCouponService userCouponService;
+
+	@Resource
+	private RedisTemplate redisTemplate;
+	@Resource
+	private BalancePaymentService balancePaymentService;
 
 
 	/**
@@ -355,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){
 				//构建积分流水记录
@@ -366,6 +381,26 @@
 				userPoint.setCreateTime(LocalDateTime.now());
 				userPoint.setAppUserId(appUser.getId());
 				userPointService.save(userPoint);
+			}
+			//获取优惠券
+			if(0 == old){
+				List<CouponInfo> list = couponInfoClient.getCouponInfoByPersonType(4).getData();
+				for (CouponInfo couponInfo : list) {
+					UserCoupon userCoupon = new UserCoupon();
+					userCoupon.setDelFlag(0);
+					userCoupon.setCreateTime(LocalDateTime.now());
+					userCoupon.setAppUserId(appUser.getId());
+					userCoupon.setCouponId(couponInfo.getId());
+					LocalDateTime start = couponInfo.getPeriodStartTime().atTime(0, 0, 0);
+					LocalDateTime end = couponInfo.getPeriodEndTime().atTime(23, 59, 59);
+					if(couponInfo.getPeriodType() == 2){
+						start = LocalDateTime.now();
+						end = start.plusDays(couponInfo.getPeriodDays());
+					}
+					userCoupon.setStartTime(start);
+					userCoupon.setEndTime(end);
+					userCouponService.save(userCoupon);
+				}
 			}
 			//变更等级
 			vipUpgrade(appUser.getId());
@@ -647,6 +682,9 @@
 	public List<NearbyReferrerVo> getNearbyReferrer(NearbyReferrer nearbyReferrer) {
 		//使用地图获取省市区数据
 		String citycode = TencentMapUtil.inverseGeographicalAnalysis(nearbyReferrer.getLongitude(), nearbyReferrer.getLatitude(), false);
+		if(StringUtils.isEmpty(citycode)){
+			citycode = "510100";
+		}
 		if(null != citycode){
 			String cityCode = citycode.substring(0, 4) + "00";
 			List<NearbyReferrerVo> list = this.baseMapper.getNearbyReferrer(cityCode, nearbyReferrer);
@@ -710,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 ADDDATE(create_time,INTERVAL " + vipCancelDay + " DAY) <= now()"));
-		for (AppUser appUser : list) {
-			appUser.setInviteUserId(null);
-			appUser.setShopId(null);
-			this.updateById(appUser);
+
+		//解绑推广人
+		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::getVipId, 1).eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0)
-				.isNull(AppUser::getLastShopTime).eq(AppUser::getStatus, 1).last(" and ADDDATE(create_time,INTERVAL " + vipChangeDay + " DAY) <= now()"));
-		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);
+			}
 		}
 	}
 	
@@ -783,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)){
@@ -793,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) {
@@ -906,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