‘linchangsheng’ 1 тиждень тому
батько
коміт
4555f4ee34

+ 33 - 18
src/main/java/com/gree/mall/miniapp/controller/coupon/CouponController.java

@@ -39,7 +39,6 @@ public class CouponController {
     @Autowired
     RedisLockRegistry redisLockRegistry;
 
-
     @GetMapping("/timeout")
     @ApiOperation(value = "优惠券过期提醒")
     public ResponseHelper<Boolean> timeout(
@@ -49,6 +48,14 @@ public class CouponController {
         return ResponseHelper.success(timeout);
     }
 
+    @GetMapping("/detail")
+    @ApiOperation(value = "券详情")
+    public ResponseHelper<CouponBean> detail(
+            @ApiParam(value = "id", required = true) @RequestParam String couponId
+    ) throws RemoteServiceException {
+        UserCoupon detail = couponLogic.detail(couponId);
+        return ResponseHelper.success(detail);
+    }
 
     @GetMapping("/count")
     @ApiOperation(value = "优惠券统计")
@@ -72,6 +79,7 @@ public class CouponController {
         return ResponseHelper.success(page);
     }
 
+
     @GetMapping("/list/expiring")
     @ApiOperation(value = "快要到期优惠券列表")
     public ResponseHelper<List<UserCoupon>> expiring(
@@ -81,6 +89,29 @@ public class CouponController {
         return ResponseHelper.success(coupons);
     }
 
+    @GetMapping("/list/useable")
+    @ApiOperation(value = "可用优惠券列表")
+    public ResponseHelper<List<CustomCoupouBean>> useableCoupou(
+            @ApiParam(value = "用户id", required = true) @RequestParam(required = true) String userId,
+            @ApiParam(value = "订单金额", required = true) @RequestParam(required = true) BigDecimal orderAmount,
+            @ApiParam(value = "商品ids", required = true) @RequestParam(required = true) List<String> goodsSpecIds
+    ) throws RemoteServiceException {
+        return ResponseHelper.success(couponLogic.useableCoupou(userId, orderAmount, goodsSpecIds));
+    }
+
+
+
+
+/*
+
+
+
+
+
+
+
+
+
     @GetMapping("/list/all")
     @ApiOperation(value = "可领/已领/待领优惠券列表")
     public ResponseHelper<List<CouponObtainBean>> listAll(
@@ -115,25 +146,8 @@ public class CouponController {
     }
 
 
-    @GetMapping("/list/useable")
-    @ApiOperation(value = "可用优惠券列表")
-    public ResponseHelper<List<CustomCoupouBean>> useableCoupou(
-            @ApiParam(value = "用户id", required = true) @RequestParam(required = true) String userId,
-            @ApiParam(value = "订单金额", required = true) @RequestParam(required = true) BigDecimal orderAmount,
-            @ApiParam(value = "商品ids", required = true) @RequestParam(required = true) List<String> goodsSpecIds
-    ) throws RemoteServiceException {
-        return ResponseHelper.success(couponLogic.useableCoupou(userId, orderAmount, goodsSpecIds));
-    }
 
 
-    @GetMapping("/detail")
-    @ApiOperation(value = "券详情")
-    public ResponseHelper<CouponBean> detail(
-            @ApiParam(value = "id", required = true) @RequestParam String couponId
-    ) throws RemoteServiceException {
-        UserCoupon detail = couponLogic.detail(couponId);
-        return ResponseHelper.success(detail);
-    }
 
     @GetMapping("/transfer/qrcode")
     @ApiOperation(value = "获取转赠二维码")
@@ -150,6 +164,7 @@ public class CouponController {
 
         return ResponseHelper.success(couponLogic.transferCoupon(request,userCouponId));
     }
+*/
 
 
 }

+ 64 - 0
src/main/java/com/gree/mall/miniapp/controller/coupon/CouponNewController.java

@@ -0,0 +1,64 @@
+package com.gree.mall.miniapp.controller.coupon;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.miniapp.bean.coupon.*;
+import com.gree.mall.miniapp.constant.Constant;
+import com.gree.mall.miniapp.exception.RemoteServiceException;
+import com.gree.mall.miniapp.helper.ResponseHelper;
+import com.gree.mall.miniapp.logic.coupon.CouponLogic;
+import com.gree.mall.miniapp.plus.entity.Coupon;
+import com.gree.mall.miniapp.plus.entity.UserCoupon;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Slf4j
+@RestController
+@Api(value = "新优惠券", tags = {"新优惠券"})
+@RequestMapping(value = "/couponNew", produces = "application/json; charset=utf-8")
+public class CouponNewController {
+
+    @Autowired
+    CouponLogic couponLogic;
+    @Autowired
+    RedisLockRegistry redisLockRegistry;
+
+
+    @GetMapping("/list/all")
+    @ApiOperation(value = "待领优惠券列表")
+    public ResponseHelper<List<Coupon>> listAll(
+            HttpServletRequest request
+    ) throws RemoteServiceException {
+        List<Coupon> coupons = couponLogic.listAll(request);
+        return ResponseHelper.success(coupons);
+    }
+
+    @GetMapping("/obtain")
+    @ApiOperation(value = "领券")
+    public ResponseHelper obtain(HttpServletRequest request,
+                                 @ApiParam(value = "用户id") @RequestParam(required = false) String userId,
+                                 @ApiParam(value = "优惠券id") @RequestParam(required = false) List<String> couponIds
+    ) throws RemoteServiceException, InterruptedException {
+
+        couponLogic.getCoupon(request, userId, couponIds);
+
+        return ResponseHelper.success();
+    }
+
+}
+
+

+ 164 - 0
src/main/java/com/gree/mall/miniapp/logic/coupon/CouponLogic.java

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