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;
|
}
|
|
}
|