Bladeren bron

用户选中站点下可以领取的优惠券列表

skyline 1 jaar geleden
bovenliggende
commit
350e96469e

+ 5 - 0
entity/src/main/java/com/kym/entity/admin/queryParams/CouponQueryParam.java

@@ -108,4 +108,9 @@ public class CouponQueryParam extends PageParams {
      * 备注
      */
     private String remark;
+
+    /**
+     * 站点id
+     */
+    private String stationId;
 }

+ 25 - 5
miniapp/src/main/java/com/kym/miniapp/controller/CouponController.java

@@ -1,18 +1,38 @@
 package com.kym.miniapp.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.kym.common.R;
+import com.kym.entity.admin.queryParams.CommonQueryParam;
+import com.kym.entity.admin.queryParams.CouponQueryParam;
+import com.kym.service.admin.CouponService;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * <p>
- * 用户优惠券关联表 前端控制器
+ * 用户优惠券 前端控制器
  * </p>
  *
  * @author skyline
  * @since 2024-04-29
  */
 @RestController
-@RequestMapping("/user-coupon")
-public class UserCouponController {
+@RequestMapping("/coupon")
+public class CouponController {
+
+    private final CouponService couponService;
+
+    public CouponController(CouponService couponService) {
+        this.couponService = couponService;
+    }
+
+    /**
+     * 获取当前站点可以领取的优惠券列表
+     *
+     * @param params
+     * @return
+     */
+    @GetMapping(value = "/listAvailableCoupons")
+    public R<?> listAvailableCoupons(@ModelAttribute CouponQueryParam params) {
+        return R.success(couponService.listRightsAndCoupons(params));
+    }
 
 }

+ 2 - 0
service/src/main/java/com/kym/service/admin/CouponService.java

@@ -18,4 +18,6 @@ public interface CouponService extends MPJBaseService<Coupon> {
     PageBean<Coupon> listCoupon(CouponQueryParam params);
 
     void issueCoupons(UserCouponsIssueVo userCouponsIssue);
+
+    PageBean<Coupon> listRightsAndCoupons(CouponQueryParam params);
 }

+ 35 - 6
service/src/main/java/com/kym/service/admin/impl/CouponServiceImpl.java

@@ -1,25 +1,27 @@
 package com.kym.service.admin.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.CommUtil;
-import com.kym.common.utils.IDGenerator;
+import com.kym.entity.admin.ActivityStation;
 import com.kym.entity.admin.Coupon;
 import com.kym.entity.admin.queryParams.CouponQueryParam;
-import com.kym.entity.admin.vo.CouponVo;
 import com.kym.entity.admin.vo.UserCouponsIssueVo;
 import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.User;
 import com.kym.entity.miniapp.UserCoupon;
 import com.kym.mapper.admin.CouponMapper;
 import com.kym.service.admin.ActivityService;
+import com.kym.service.admin.ActivityStationService;
 import com.kym.service.admin.CouponService;
 import com.kym.service.miniapp.UserService;
 import com.kym.service.mq.producer.UserCouponSender;
-import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -42,12 +44,15 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
     private final UserService userService;
 
     private final ActivityService activityService;
+    private final ActivityStationService activityStationService;
 
     private final UserCouponSender userCouponSender;
 
-    public CouponServiceImpl(UserService userService, @Lazy ActivityService activityService, UserCouponSender userCouponSender) {
+    public CouponServiceImpl(UserService userService, @Lazy ActivityService activityService,
+                             ActivityStationService activityStationService, UserCouponSender userCouponSender) {
         this.userService = userService;
         this.activityService = activityService;
+        this.activityStationService = activityStationService;
         this.userCouponSender = userCouponSender;
     }
 
@@ -65,13 +70,20 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 
     @Override
     public void issueCoupons(UserCouponsIssueVo userCouponsIssue) {
+        var coupons = lambdaQuery().in(Coupon::getId, userCouponsIssue.getCouponIds()).list();
+
+        // 校验优惠券领取方式
+        if (coupons.stream().anyMatch(coupon -> coupon.getReceiveType().equals(Coupon.RECEIVE_TYPE_主动领取))) {
+            throw new BusinessException("包含限主动领取的优惠券");
+        }
+
         List<User> users = new ArrayList<>();
         if (CommUtil.isNotEmptyAndNull(userCouponsIssue.getUserIds())) {
             users = userService.lambdaQuery().in(User::getId, userCouponsIssue.getUserIds()).list();
         } else if (CommUtil.isNotEmptyAndNull(userCouponsIssue.getPhones())) {
             users = userService.lambdaQuery().in(User::getMobilePhone, userCouponsIssue.getPhones()).list();
         }
-        var coupons = lambdaQuery().in(Coupon::getId, userCouponsIssue.getCouponIds()).list();
+
         var activityList = activityService.listByIds(coupons.stream().map(Coupon::getActivityId).toList());
         users.forEach(user -> {
             for (Coupon coupon : coupons) {
@@ -94,4 +106,21 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
         });
     }
 
+    @Override
+    @DS("db-admin")
+    public PageBean<Coupon> listRightsAndCoupons(CouponQueryParam params) {
+        if (CommUtil.isEmptyOrNull(params.getStationId())) {
+            throw new BusinessException("请选择充电站点");
+        }
+        PageHelper.startPage(params.getPageNum(), params.getPageSize());
+        MPJLambdaWrapper<Coupon> wrapper = JoinWrappers.lambda(Coupon.class)
+                .selectAll(Coupon.class)
+                .leftJoin(ActivityStation.class, ActivityStation::getActivityId, Coupon::getActivityId)
+                .eq(Coupon::getReceiveType, Coupon.RECEIVE_TYPE_主动领取)
+                .eq(Coupon::getStatus, Coupon.STATUS_有效)
+                .eq(ActivityStation::getStationId, params.getStationId());
+        var res = this.selectJoinList(Coupon.class, wrapper);
+        return new PageBean<>(res);
+    }
+
 }