luodangjia
2024-09-10 ce19680b98669f8b4e66b2ce82fe0dcebe178445
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.ruoyi.account.util;
 
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.account.api.dto.SendCouponDto;
import com.ruoyi.account.api.model.TAppCoupon;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserVipDetail;
import com.ruoyi.account.service.TAppCouponService;
import com.ruoyi.account.service.TAppUserVipDetailService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TVip;
import com.ruoyi.other.api.feignClient.OtherClient;
import com.ruoyi.other.api.feignClient.VipClient;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
 
@Component
public class GiveVipUtil {
 
    @Resource
    private VipClient vipClient;
    @Resource
    private TAppUserVipDetailService tAppUserVipDetailService;
    @Resource
    private OtherClient otherClient;
    @Resource
    private TAppCouponService appCouponService;
    public void sendVip(TAppUser nowUser,Integer vipId,Integer plusDay){
        if (nowUser.getVipEndTime()==null||nowUser.getVipEndTime().isBefore(LocalDateTime.now())) {
     
            nowUser.setVipEndTime(LocalDateTime.now().plusMonths(plusDay));
 
            //直接再detail里新增数据,因为不是续费
            TAppUserVipDetail tAppUserVipDetail = new TAppUserVipDetail();
            tAppUserVipDetail.setAppUserId(nowUser.getId());
            tAppUserVipDetail.setStartTime(LocalDateTime.now());
            tAppUserVipDetail.setEndTime(LocalDateTime.now().plusMonths(plusDay).minusDays(1));
            tAppUserVipDetail.setVipId(vipId);
 
            R<TVip> info = vipClient.getInfo1(vipId);
            TVip vip = info.getData();
            List<SendCouponDto> javaList = new ArrayList<>();
            if (vip.getCoupon()!=null) {
                javaList  = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class);
            }
 
            tAppUserVipDetail.setCouponIds(vip.getCoupon());
            tAppUserVipDetail.setSendChargeNum(vip.getDiscountTimes());
            tAppUserVipDetail.setChargeNum(vip.getDiscountTimes());
            tAppUserVipDetail.setDiscountMoney(vip.getMaximumDeduction());
            tAppUserVipDetail.setSendMonth(1);
            tAppUserVipDetailService.save(tAppUserVipDetail);
            //直接赠送优惠卷
            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(nowUser.getId());
                tAppCoupon.setCouponId(Integer.valueOf(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);
                }
            }
 
 
        }else {
            nowUser.setVipEndTime(nowUser.getVipEndTime().plusDays(plusDay).minusDays(1));
            //获取detail里结束时间大于当前时间的数据,并将enttime延长
            TAppUserVipDetail tAppUserVipDetail = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getVipId,vipId).eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one();
            if (tAppUserVipDetail!=null) {
                List<TAppUserVipDetail> list = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).ge(TAppUserVipDetail::getStartTime, tAppUserVipDetail.getEndTime()).list();
                for (TAppUserVipDetail appUserVipDetail : list) {
                    appUserVipDetail.setStartTime(appUserVipDetail.getStartTime().plusMonths(plusDay).minusDays(1));
                    appUserVipDetail.setEndTime(appUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1));
                }
                tAppUserVipDetailService.updateBatchById(list);
                tAppUserVipDetail.setEndTime(tAppUserVipDetail.getEndTime().plusMonths(plusDay).minusDays(1));
 
                tAppUserVipDetailService.updateById(tAppUserVipDetail);
            }else {
                TAppUserVipDetail tAppUserVipDetail2 = tAppUserVipDetailService.lambdaQuery().eq(TAppUserVipDetail::getAppUserId, nowUser.getId()).orderByDesc(TAppUserVipDetail::getEndTime).last("limit 1").one();
 
                TAppUserVipDetail tAppUserVipDetail1 = new TAppUserVipDetail();
                tAppUserVipDetail1.setAppUserId(nowUser.getId());
                tAppUserVipDetail1.setStartTime(tAppUserVipDetail2.getEndTime());
                tAppUserVipDetail1.setEndTime(tAppUserVipDetail2.getEndTime().plusMonths(plusDay).minusDays(1));
                tAppUserVipDetail1.setVipId(vipId);
 
                R<TVip> info = vipClient.getInfo1(vipId);
                TVip vip = info.getData();
                List<SendCouponDto> javaList = new ArrayList<>();
                if (vip.getCoupon()!=null) {
                    javaList  = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class);
                }
 
                tAppUserVipDetail1.setCouponIds(vip.getCoupon());
                tAppUserVipDetail1.setSendChargeNum(vip.getDiscountTimes());
                tAppUserVipDetail1.setChargeNum(vip.getDiscountTimes());
                tAppUserVipDetail1.setDiscountMoney(vip.getMaximumDeduction());
                tAppUserVipDetail1.setSendMonth(1);
                tAppUserVipDetailService.save(tAppUserVipDetail1);
 
            }
 
        }
 
    }
}