liujie
13 小时以前 baab7ff48901687c054c5910bd7637cf2b195987
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
package com.supersavedriving.driver.modular.system.util;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.supersavedriving.driver.modular.system.model.*;
import com.supersavedriving.driver.modular.system.service.*;
import com.supersavedriving.driver.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;
    }
}