Pu Zhibing
84 分钟以前 b293f932d31971dfff8769f61ad39de50fd28c43
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
127
128
package com.supersavedriving.user.modular.system.util;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.supersavedriving.user.modular.system.model.*;
import com.supersavedriving.user.modular.system.service.*;
import com.supersavedriving.user.modular.system.warpper.CouponWarpper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
 
@Component
public class CouponUtil {
    @Autowired
    private ICouponService couponService;
 
    @Autowired
    private IUserToCouponService userToCouponService;
    @Autowired
    private ITActivityService activityService;
    @Autowired
    private ITBranchOfficeAreaService branchOfficeAreaService;
    @Autowired
    private ITActivityAreaService activityAreaService;
    @Autowired
    private ITActivityCouponService activityCouponService;
 
    public List<CouponWarpper> pushCoupon(Order order){
        Double orderMoney = order.getOrderMoney();
        Integer userId = order.getUserId();
 
        // 查询进行中的活动优惠券
        List<TBranchOfficeArea> branchOfficeAreas = branchOfficeAreaService.selectList(new EntityWrapper<TBranchOfficeArea>()
                .eq("branchOfficeId", order.getBranchOfficeId()));
        List<String> areaCodes = branchOfficeAreas.stream().map(TBranchOfficeArea::getAreaCode).collect(Collectors.toList());
        List<TActivityArea> activityAreas = activityAreaService.selectList(new EntityWrapper<TActivityArea>().in("areaCode", areaCodes));
        List<Integer> activityIds = activityAreas.stream().map(TActivityArea::getActivityId).distinct().collect(Collectors.toList());
        List<TActivity> tActivities = activityService.selectList(new EntityWrapper<TActivity>().in("id", activityIds).eq("status", 2)
                .ge("endTime", new Date())
                .lt("startTime", new Date()));
        if(CollectionUtils.isEmpty(tActivities)){
            return new ArrayList<>();
        }
        List<Integer> activityIdList = tActivities.stream().map(TActivity::getId).collect(Collectors.toList());
        List<TActivityCoupon> activityCoupons = activityCouponService.selectList(new EntityWrapper<TActivityCoupon>().in("activityId", activityIdList));
        List<Integer> couponIds = activityCoupons.stream().map(TActivityCoupon::getCouponId).collect(Collectors.toList());
        if(CollectionUtils.isEmpty(couponIds)){
            return new ArrayList<>();
        }
        List<Coupon> coupons = couponService.selectList(new EntityWrapper<Coupon>().eq("coupon_type", 4)
                .eq("coupon_state", 1).eq("status", 1).gt("remaining_quantity", 0)
                .in("id", couponIds));
        List<CouponWarpper> list = new ArrayList<>();
        for (Coupon coupon : coupons) {
            if (orderMoney < coupon.getSendNum()) {
                continue;
            }
            if (coupon.getRemainingQuantity() > 0) {
 
                UserToCoupon userToCoupon = new UserToCoupon();
                userToCoupon.setCouponId(coupon.getId());
                userToCoupon.setCreateTime(new Date());
                userToCoupon.setUserId(userId);
                userToCoupon.setStatus(1);
                userToCoupon.setCouponTotal(1);
                userToCoupon.setValidCount(1);
                userToCoupon.setExpireTime(new Date(System.currentTimeMillis() + (coupon.getCouponValidity().longValue() * 24L * 60L * 60L * 1000L)));
                activityCoupons.stream().filter(activityCoupon -> activityCoupon.getCouponId().equals(coupon.getId())).findFirst().ifPresent(activityCoupon -> {
                    userToCoupon.setActivityId(activityCoupon.getActivityId());
                });
                userToCouponService.insert(userToCoupon);
 
                CouponWarpper couponWarpper = new CouponWarpper();
                couponWarpper.setCouponConditionalAmount(coupon.getCouponConditionalAmount());
                couponWarpper.setCouponPreferentialAmount(coupon.getCouponPreferentialAmount());
                couponWarpper.setCouponName(coupon.getCouponName());
                couponWarpper.setNumber(userToCoupon.getValidCount());
                couponWarpper.setExpirationDate(userToCoupon.getExpireTime().getTime());
                list.add(couponWarpper);
            }
 
            coupon.setRemainingQuantity(coupon.getRemainingQuantity()-1);
            couponService.updateById(coupon);
        }
        return list;
    }
 
    public List<CouponWarpper> pushchongzhiCoupon(double orderMoney,Integer userId){
        List<Coupon> coupons = couponService.selectList(new EntityWrapper<Coupon>().eq("coupon_type", 5)
                .eq("coupon_state", 1).eq("status", 1).gt("remaining_quantity", 0));
        List<CouponWarpper> list = new ArrayList<>();
        for (Coupon coupon : coupons) {
            if (orderMoney<coupon.getSendNum()){
                continue;
            }
            Long num = coupon.getRemainingQuantity();
//            for (int i = 0; i < num; i++) {
            if (num>0) {
                UserToCoupon userToCoupon = new UserToCoupon();
                userToCoupon.setCouponId(coupon.getId());
                userToCoupon.setCreateTime(new Date());
                userToCoupon.setUserId(userId);
                userToCoupon.setStatus(1);
                userToCoupon.setCouponTotal(1);
                userToCoupon.setValidCount(1);
                userToCoupon.setExpireTime(new Date(System.currentTimeMillis() + (coupon.getCouponValidity().longValue() * 24L * 60L * 60L * 1000L)));
                userToCouponService.insert(userToCoupon);
 
                CouponWarpper couponWarpper = new CouponWarpper();
                couponWarpper.setCouponConditionalAmount(coupon.getCouponConditionalAmount());
                couponWarpper.setCouponPreferentialAmount(coupon.getCouponPreferentialAmount());
                couponWarpper.setCouponName(coupon.getCouponName());
                couponWarpper.setNumber(userToCoupon.getValidCount());
                couponWarpper.setExpirationDate(userToCoupon.getExpireTime().getTime());
                list.add(couponWarpper);
//            }
                coupon.setRemainingQuantity(coupon.getRemainingQuantity() - 1);
                couponService.updateById(coupon);
            }
        }
        return list;
    }
 
}