|
@@ -24,6 +24,7 @@ import com.gree.mall.miniapp.plus.service.*;
|
|
|
import com.gree.mall.miniapp.utils.CommonUtils;
|
|
|
import com.gree.mall.miniapp.utils.DateUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -69,6 +70,9 @@ public class CouponLogic {
|
|
|
@Autowired
|
|
|
CommonLogic commonLogic;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ CouponUserService couponUserService;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 统计 未使用 ,已使用,已过期优惠券
|
|
@@ -608,4 +612,164 @@ public class CouponLogic {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public List<Coupon> listAll(HttpServletRequest request) {
|
|
|
+ CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat(request);
|
|
|
+ List<CouponUser> list = couponUserService.lambdaQuery().eq(CouponUser::getUserId, currentCompanyWechat.getUserId()).list();
|
|
|
+ if (CollectionUtils.isEmpty(list))
|
|
|
+ return new ArrayList<>();
|
|
|
+
|
|
|
+ List<String> couponIds = list.stream().map(CouponUser::getCouponId).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ List<Coupon> couponList = couponService.lambdaQuery().eq(Coupon::getCouponId, couponIds).list();
|
|
|
+ List<Coupon> coupons = new ArrayList<>();
|
|
|
+ for (Coupon coupon : couponList) {
|
|
|
+ Integer count = userCouponService.lambdaQuery()
|
|
|
+ .eq(UserCoupon::getUserId, currentCompanyWechat.getUserId())
|
|
|
+ .eq(UserCoupon::getCouponId, coupon.getCouponId()).count();
|
|
|
+
|
|
|
+ for (int i = 0; i < (coupon.getReceiveLimitCount() -count); i++) {
|
|
|
+ coupons.add(coupon);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return coupons;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void getCoupon(HttpServletRequest request, String userId, List<String> couponIds) {
|
|
|
+
|
|
|
+ CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat(request);
|
|
|
+
|
|
|
+ List<CouponUser> list = couponUserService.lambdaQuery()
|
|
|
+ .eq(CouponUser::getUserId, currentCompanyWechat.getUserId())
|
|
|
+ .in(CollectionUtils.isNotEmpty(couponIds),CouponUser::getCouponId, couponIds)
|
|
|
+ .list();
|
|
|
+ if (CollectionUtils.isEmpty(list))
|
|
|
+ return;
|
|
|
+
|
|
|
+ Date now = new Date();
|
|
|
+ List<UserCoupon> listCouponUser = new ArrayList<>();
|
|
|
+ for (CouponUser couponUser : list) {
|
|
|
+
|
|
|
+ Coupon coupon = couponService.getById(couponUser.getCouponId());
|
|
|
+
|
|
|
+
|
|
|
+ //限领张数
|
|
|
+ Integer receiveLimitCount = coupon.getReceiveLimitCount();
|
|
|
+ //剩余可领取数量
|
|
|
+ Integer leftAmount = coupon.getLeftAmount();
|
|
|
+ //已领取数量
|
|
|
+ Integer receiveAmount = coupon.getReceiveAmount() == null ? 0 : coupon.getReceiveAmount();
|
|
|
+ if (leftAmount <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(couponIds)) {
|
|
|
+
|
|
|
+ Integer count = userCouponService.lambdaQuery()
|
|
|
+ .eq(UserCoupon::getUserId, userId)
|
|
|
+ .eq(UserCoupon::getCouponId, coupon.getCouponId()).count();
|
|
|
+ if (receiveLimitCount != 0 && count >= receiveLimitCount) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ UserCoupon userCoupon = new UserCoupon();
|
|
|
+ userCoupon.setCouponId(couponUser.getCouponId());
|
|
|
+ userCoupon.setUserId(userId);
|
|
|
+ userCoupon.setReceiveTime(now);
|
|
|
+ userCoupon.setCouponName(coupon.getCouponName());
|
|
|
+ userCoupon.setCouponType(coupon.getCouponType());
|
|
|
+ userCoupon.setOrderAmount(coupon.getOrderAmount());
|
|
|
+ userCoupon.setCouponValue(coupon.getCouponValue());
|
|
|
+ userCoupon.setStatus(false);
|
|
|
+ //userCoupon.setTransferType(transferType);
|
|
|
+ if (coupon.getActiveDay() == null) {
|
|
|
+ coupon.setActiveDay(0);
|
|
|
+ }
|
|
|
+ if (coupon.getActiveType() == CouponActiveTypeEnum.COMMON.getActiveType()) {
|
|
|
+ userCoupon.setActiveStartTime(coupon.getActiveStartTime());
|
|
|
+ userCoupon.setActiveEndTime(coupon.getActiveEndTime());
|
|
|
+ }
|
|
|
+ //当日起多少天
|
|
|
+ if (coupon.getActiveType() == CouponActiveTypeEnum.TODAY.getActiveType()) {
|
|
|
+ userCoupon.setActiveStartTime(DateUtils.getStartTime());
|
|
|
+ userCoupon.setActiveEndTime(DateUtils.getStartTimeByDay(coupon.getActiveDay()));
|
|
|
+ }
|
|
|
+ //次日起多少天
|
|
|
+ if (coupon.getActiveType() == CouponActiveTypeEnum.NEXTDAY.getActiveType()) {
|
|
|
+ userCoupon.setActiveStartTime(DateUtils.getStartTimeByDay(1));
|
|
|
+ userCoupon.setActiveEndTime(DateUtils.getStartTimeByDay(coupon.getActiveDay() + 1));
|
|
|
+ }
|
|
|
+ userCoupon.setState(now.before(coupon.getActiveEndTime()) && now.after(coupon.getActiveStartTime()));
|
|
|
+ userCoupon.setCompanyId(currentCompanyWechat.getUser().getCompanyId());
|
|
|
+ userCoupon.setCompanyName(currentCompanyWechat.getUser().getCompanyName());
|
|
|
+ listCouponUser.add(userCoupon);
|
|
|
+
|
|
|
+
|
|
|
+ //实际领取张数
|
|
|
+
|
|
|
+ //维护券的剩余数量和领取数量
|
|
|
+ coupon.setLeftAmount(leftAmount - 1);
|
|
|
+ coupon.setReceiveAmount(receiveAmount + 1);
|
|
|
+ coupon.updateById();
|
|
|
+
|
|
|
+ }else {
|
|
|
+
|
|
|
+
|
|
|
+ //实际领取张数
|
|
|
+ int num = leftAmount - receiveLimitCount < 0 ? 0 : leftAmount - receiveLimitCount;
|
|
|
+ //维护券的剩余数量和领取数量
|
|
|
+ coupon.setLeftAmount(leftAmount - num);
|
|
|
+ coupon.setReceiveAmount(receiveAmount + num);
|
|
|
+ coupon.updateById();
|
|
|
+
|
|
|
+ while (true){
|
|
|
+
|
|
|
+ UserCoupon userCoupon = new UserCoupon();
|
|
|
+ userCoupon.setCouponId(couponUser.getCouponId());
|
|
|
+ userCoupon.setUserId(userId);
|
|
|
+ userCoupon.setReceiveTime(now);
|
|
|
+ userCoupon.setCouponName(coupon.getCouponName());
|
|
|
+ userCoupon.setCouponType(coupon.getCouponType());
|
|
|
+ userCoupon.setOrderAmount(coupon.getOrderAmount());
|
|
|
+ userCoupon.setCouponValue(coupon.getCouponValue());
|
|
|
+ userCoupon.setStatus(false);
|
|
|
+ //userCoupon.setTransferType(transferType);
|
|
|
+ if (coupon.getActiveDay() == null) {
|
|
|
+ coupon.setActiveDay(0);
|
|
|
+ }
|
|
|
+ if (coupon.getActiveType() == CouponActiveTypeEnum.COMMON.getActiveType()) {
|
|
|
+ userCoupon.setActiveStartTime(coupon.getActiveStartTime());
|
|
|
+ userCoupon.setActiveEndTime(coupon.getActiveEndTime());
|
|
|
+ }
|
|
|
+ //当日起多少天
|
|
|
+ if (coupon.getActiveType() == CouponActiveTypeEnum.TODAY.getActiveType()) {
|
|
|
+ userCoupon.setActiveStartTime(DateUtils.getStartTime());
|
|
|
+ userCoupon.setActiveEndTime(DateUtils.getStartTimeByDay(coupon.getActiveDay()));
|
|
|
+ }
|
|
|
+ //次日起多少天
|
|
|
+ if (coupon.getActiveType() == CouponActiveTypeEnum.NEXTDAY.getActiveType()) {
|
|
|
+ userCoupon.setActiveStartTime(DateUtils.getStartTimeByDay(1));
|
|
|
+ userCoupon.setActiveEndTime(DateUtils.getStartTimeByDay(coupon.getActiveDay() + 1));
|
|
|
+ }
|
|
|
+ userCoupon.setState(now.before(coupon.getActiveEndTime()) && now.after(coupon.getActiveStartTime()));
|
|
|
+ userCoupon.setCompanyId(currentCompanyWechat.getUser().getCompanyId());
|
|
|
+ userCoupon.setCompanyName(currentCompanyWechat.getUser().getCompanyName());
|
|
|
+ userCoupon.insert();
|
|
|
+
|
|
|
+ Integer count = userCouponService.lambdaQuery()
|
|
|
+ .eq(UserCoupon::getUserId, userId)
|
|
|
+ .eq(UserCoupon::getCouponId, coupon.getCouponId()).count();
|
|
|
+ if (receiveLimitCount != 0 && count >= receiveLimitCount) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
}
|