From db2d7720496c66c2007e7e3a0be88dbff81148ad Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 31 三月 2025 17:29:41 +0800
Subject: [PATCH] 修改会员续优惠次数功能

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserVipDetailService.java          |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/task/TaskUtil.java                             |  107 ++++++++++++--------------
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java                          |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java               |    5 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserVipDetailServiceImpl.java |   79 ++++++++-----------
 5 files changed, 91 insertions(+), 104 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
index 701a010..b8924ab 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserVipDetail.java
@@ -79,6 +79,11 @@
     @ApiModelProperty(value = "已赠送的月份")
     @TableField("send_month")
     private Integer sendMonth;
+    /**
+     * 本月会员优惠到期时间
+     */
+    @TableField("month_end_time")
+    private LocalDateTime monthEndTime;
 
     @ApiModelProperty(value = "当时购买的vipJson")
     @TableField("vip_json")
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserVipDetailService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserVipDetailService.java
index 4dff539..874f21f 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserVipDetailService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TAppUserVipDetailService.java
@@ -13,5 +13,5 @@
  */
 public interface TAppUserVipDetailService extends IService<TAppUserVipDetail> {
 
-    void giveVipCoupun(Long appUserId, Integer vipId,Long recordId,Integer monthNum);
+    void giveVipCoupun(TAppUserVipDetail recentDetail);
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserVipDetailServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserVipDetailServiceImpl.java
index b5907d9..ca490ed 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserVipDetailServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppUserVipDetailServiceImpl.java
@@ -22,7 +22,7 @@
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author luodangjia
@@ -30,49 +30,36 @@
  */
 @Service
 public class TAppUserVipDetailServiceImpl extends ServiceImpl<TAppUserVipDetailMapper, TAppUserVipDetail> implements TAppUserVipDetailService {
-    @Resource
-    private VipClient vipClient;
-    @Resource
-    private OtherClient otherClient;
-    @Resource
-    private TAppCouponService appCouponService;
-    @Resource
-    private TAppUserVipDetailService tAppUserVipDetailService;
-
-
-
-    @Override
-    public void giveVipCoupun(Long appUserId, Integer vipId,Long recordId,Integer monthNum) {
-        //如果不包含,则更新sendNum,并且赠送优惠卷
-        TAppUserVipDetail byId = tAppUserVipDetailService.getById(recordId);
-        if (byId.getStartTime().plusMonths(byId.getSendMonth()).toLocalDate().compareTo(LocalDate.now())==0&&LocalDate.now().isBefore(byId.getEndTime().toLocalDate())){
-            byId.setSendMonth(byId.getSendMonth()+1);
-        //给这个用户发放对应vip的优惠卷以及充电次数加满
-            List<SendCouponDto> javaList = JSON.parseArray(byId.getCouponIds()).toJavaList(SendCouponDto.class);
-            for (SendCouponDto sendCouponDto : javaList) {
-                Integer number = sendCouponDto.getNumber();
-                for (Integer i = 0; i < number; i++) {
-                    R<TCoupon> couponById = otherClient.getCouponById(sendCouponDto.getId());
-                    TCoupon coupon = couponById.getData();
-                    //将该优惠卷添加到用户优惠卷中
-                    TAppCoupon tAppCoupon = new TAppCoupon();
-                    tAppCoupon.setAppUserId(appUserId);
-                    tAppCoupon.setCouponId(sendCouponDto.getId());
-                    if (coupon.getValidityPeriodMode() == 1) {
-                        tAppCoupon.setEndTime(coupon.getEndTime());
-                    } else {
-                        tAppCoupon.setEndTime(LocalDateTime.now().plusDays(coupon.getDays()));
-                    }
-                    tAppCoupon.setWaysToObtain(4);
-                    tAppCoupon.setStatus(1);
-                    tAppCoupon.setCouponJson(JSON.toJSONString(coupon));
-                    appCouponService.save(tAppCoupon);
-                }
-                }
-
-            }
-        byId.setChargeNum(byId.getSendChargeNum());
-        tAppUserVipDetailService.updateById(byId);
-        }
-
+	@Resource
+	private VipClient vipClient;
+	@Resource
+	private OtherClient otherClient;
+	@Resource
+	private TAppCouponService appCouponService;
+	@Resource
+	private TAppUserVipDetailService tAppUserVipDetailService;
+	
+	
+	@Override
+	public void giveVipCoupun(TAppUserVipDetail recentDetail) {
+		Integer vipType = recentDetail.getVipType();
+		Integer sendMonth = recentDetail.getSendMonth();
+		//月卡
+		if(1 == vipType && 1 == sendMonth){
+			return;
+		}
+		//季卡
+		if(2 == vipType && 3 == sendMonth){
+			return;
+		}
+		//年卡
+		if(3 == vipType && 12 == sendMonth){
+			return;
+		}
+		recentDetail.setSendMonth(sendMonth + 1);
+		recentDetail.setChargeNum(recentDetail.getSendChargeNum());
+		recentDetail.setMonthEndTime(LocalDateTime.now().plusMonths(1));
+		tAppUserVipDetailService.updateById(recentDetail);
+	}
+	
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/task/TaskUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/task/TaskUtil.java
index 578e04a..9018fe3 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/task/TaskUtil.java
@@ -19,61 +19,54 @@
  */
 @Component
 public class TaskUtil {
-
-    @Resource
-    private TAppUserVipDetailService tAppUserVipDetailService;
-
-    @Resource
-    private TAppUserService appUserService;
-
-
-    /**
-     * 每隔一分钟去处理的定时任务
-     */
-    @Scheduled(fixedRate = 1000 * 60)
-    public void sendVipCoupon(){
-        try {
-            //首先获取当前的月份,用int类型标识
-            LocalDate currentDate = LocalDate.now();
-            int monthNum = currentDate.getMonthValue();
-            //获取在当前时间内生效的vipDetail
-            List<TAppUserVipDetail> recentDetails = tAppUserVipDetailService.lambdaQuery()
-                    .ge(TAppUserVipDetail::getStartTime, currentDate)
-                    .le(TAppUserVipDetail::getEndTime, currentDate)
-                    .orderByDesc(TAppUserVipDetail::getStartTime).list();
-            //判断sendNum是否包括当前月份
-            for (TAppUserVipDetail recentDetail : recentDetails) {
-
-                    //赠送优惠卷
-                    tAppUserVipDetailService.giveVipCoupun(recentDetail.getAppUserId(), recentDetail.getVipId(),recentDetail.getId(),monthNum);
-
-
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-
-
-
-    }
-
-    @Scheduled(fixedRate = 1000 * 60)
-    public void changeVipId(){
-        LocalDateTime currentDate = LocalDateTime.now();
-        List<TAppUserVipDetail> recentDetails = tAppUserVipDetailService.lambdaQuery()
-                .le(TAppUserVipDetail::getStartTime, currentDate)
-                .ge(TAppUserVipDetail::getEndTime, currentDate)
-                .orderByDesc(TAppUserVipDetail::getStartTime).list();
-        for (TAppUserVipDetail recentDetail : recentDetails) {
-            TAppUser byId = appUserService.getById(recentDetail.getAppUserId());
-            if (byId!=null) {
-                byId.setVipId(recentDetail.getVipId());
-                appUserService.updateById(byId);
-            }
-        }
-
-    }
-
-
+	
+	@Resource
+	private TAppUserVipDetailService tAppUserVipDetailService;
+	
+	@Resource
+	private TAppUserService appUserService;
+	
+	
+	/**
+	 * 每隔一分钟去处理的定时任务
+	 */
+	@Scheduled(fixedRate = 1000 * 60)
+	public void sendVipCoupon() {
+		try {
+			//会员优惠次数使用完后重新续次数
+			LocalDateTime currentDate = LocalDateTime.now();
+			List<TAppUserVipDetail> recentDetails = tAppUserVipDetailService.lambdaQuery()
+					.le(TAppUserVipDetail::getStartTime, currentDate)
+					.ge(TAppUserVipDetail::getEndTime, currentDate)
+					.eq(TAppUserVipDetail::getChargeNum, 0)
+					.le(TAppUserVipDetail::getMonthEndTime, currentDate)
+					.orderByDesc(TAppUserVipDetail::getStartTime).list();
+			for (TAppUserVipDetail recentDetail : recentDetails) {
+				tAppUserVipDetailService.giveVipCoupun(recentDetail);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		
+	}
+	
+	@Scheduled(fixedRate = 1000 * 60)
+	public void changeVipId() {
+		LocalDateTime currentDate = LocalDateTime.now();
+		List<TAppUserVipDetail> recentDetails = tAppUserVipDetailService.lambdaQuery()
+				.le(TAppUserVipDetail::getStartTime, currentDate)
+				.ge(TAppUserVipDetail::getEndTime, currentDate)
+				.orderByDesc(TAppUserVipDetail::getStartTime).list();
+		for (TAppUserVipDetail recentDetail : recentDetails) {
+			TAppUser byId = appUserService.getById(recentDetail.getAppUserId());
+			if (byId != null) {
+				byId.setVipId(recentDetail.getVipId());
+				appUserService.updateById(byId);
+			}
+		}
+		
+	}
+	
+	
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
index 70dda50..807a699 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/GiveVipUtil.java
@@ -56,6 +56,7 @@
             tAppUserVipDetail.setVipJson(JSON.toJSONString(info.getData()));
             tAppUserVipDetail.setVipType(type);
             tAppUserVipDetail.setCreateTime(LocalDateTime.now());
+            tAppUserVipDetail.setMonthEndTime(LocalDateTime.now().plusMonths(1));
             tAppUserVipDetailService.save(tAppUserVipDetail);
             //直接赠送优惠卷
             for (SendCouponDto sendCouponDto : javaList) {
@@ -98,6 +99,7 @@
             tAppUserVipDetail1.setVipType(type);
             tAppUserVipDetail1.setVipJson(JSON.toJSONString(info.getData()));
             tAppUserVipDetail1.setCreateTime(LocalDateTime.now());
+            tAppUserVipDetail1.setMonthEndTime(LocalDateTime.now().plusMonths(1));
             tAppUserVipDetailService.save(tAppUserVipDetail1);
         }
 

--
Gitblit v1.7.1