Răsfoiți Sursa

发放优惠券

skyline 2 ani în urmă
părinte
comite
4634491e3e

+ 16 - 6
admin/src/main/java/com/kym/admin/controller/CouponController.java

@@ -4,11 +4,9 @@ import com.kym.common.R;
 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.service.admin.CouponService;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * <p>
@@ -60,10 +58,22 @@ public class CouponController {
      * @param
      * @return
      */
-    @PostMapping("list")
-    public R<?> listCoupon(@RequestBody CouponQueryParam params) {
+    @GetMapping("list")
+    public R<?> listCoupon(@ModelAttribute CouponQueryParam params) {
         return R.success(couponService.listCoupon(params));
     }
 
 
+    /**
+     * 发放优惠券
+     *
+     * @param userCouponsIssue
+     * @return
+     */
+    @PostMapping("issueCoupons")
+    R<?> issueCoupons(@RequestBody UserCouponsIssueVo userCouponsIssue) {
+        couponService.issueCoupons(userCouponsIssue);
+        return R.success();
+    }
+
 }

+ 19 - 0
entity/src/main/java/com/kym/entity/admin/vo/UserCouponsIssueVo.java

@@ -0,0 +1,19 @@
+package com.kym.entity.admin.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserCouponsIssueVo {
+
+    /**
+     * 用户id
+     */
+    private List<Long> userIds;
+
+    /**
+     * 优惠券id
+     */
+    private List<Long> couponIds;
+}

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

@@ -5,6 +5,7 @@ import com.kym.entity.admin.Coupon;
 import com.baomidou.mybatisplus.extension.service.IService;
 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;
 
 /**
@@ -20,4 +21,5 @@ public interface CouponService extends MPJBaseService<Coupon> {
 
     PageBean<Coupon> listCoupon(CouponQueryParam params);
 
+    void issueCoupons(UserCouponsIssueVo userCouponsIssue);
 }

+ 4 - 4
service/src/main/java/com/kym/service/admin/impl/ActivityServiceImpl.java

@@ -116,11 +116,11 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
         // 新增优惠券活动
         if (activityVo.getDiscountType().equals(Activity.DISCOUNT_TYPE_优惠券) && !CommUtil.isEmptyOrNull(activityVo.getCouponList())) {
             List<Coupon> couponList = activityVo.getCouponList().stream().peek(coupon -> {
-                BeanUtils.copyProperties(activity, coupon, "id");
+                BeanUtils.copyProperties(activity, coupon, "id","name");
                 coupon.setActivityId(activity.getId());
             }).collect(Collectors.toList());
             couponService.saveBatch(couponList);
-            handleUserCoupons(activity, activityVo);
+//            handleUserCoupons(activity, activityVo);
         }
 
         // 加入活动延迟启停队列
@@ -153,8 +153,8 @@ public class ActivityServiceImpl extends MPJBaseServiceImpl<ActivityMapper, Acti
                 break;
         }
 //        userCouponService.saveBatch(userCouponList);
-        // userCoupon存储量大 发送消息至队列 todo 发券改为手动,以领券为主
-        // userCouponList.forEach(userCouponSender::sendMessage);
+         // userCoupon存储量大 发送消息至队列 todo 发券改为手动,以领券为主
+         userCouponList.forEach(userCouponSender::sendMessage);
     }
 
     /**

+ 39 - 0
service/src/main/java/com/kym/service/admin/impl/CouponServiceImpl.java

@@ -7,13 +7,21 @@ import com.kym.common.utils.IDGenerator;
 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.CouponService;
+import com.kym.service.miniapp.UserService;
+import com.kym.service.queue.producer.UserCouponSender;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
 /**
  * <p>
  * 优惠券表 服务实现类
@@ -25,6 +33,14 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements CouponService {
 
+    private final UserService userService;
+
+    private final UserCouponSender userCouponSender;
+
+    public CouponServiceImpl(UserService userService, UserCouponSender userCouponSender) {
+        this.userService = userService;
+        this.userCouponSender = userCouponSender;
+    }
 
     @Override
     @Transactional
@@ -47,4 +63,27 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
         return new PageBean<>(res);
     }
 
+    @Override
+    public void issueCoupons(UserCouponsIssueVo userCouponsIssue) {
+        var users = userService.lambdaQuery().in(User::getId, userCouponsIssue.getUserIds()).list();
+        var coupons = lambdaQuery().in(Coupon::getId, userCouponsIssue.getCouponIds()).list();
+        users.forEach(user -> {
+            for (Coupon coupon : coupons) {
+                var userCoupon = new UserCoupon();
+                userCoupon.setActivityId(coupon.getActivityId());
+                userCoupon.setCouponId(coupon.getId());
+                userCoupon.setUserId(user.getId());
+                userCoupon.setStartTime(LocalDateTime.now());
+                userCoupon.setEndTime(LocalDateTime.now().with(LocalTime.MAX).plusDays(coupon.getValidity() - 1));
+                userCoupon.setValidity(coupon.getValidity());
+                userCoupon.setCouponType(coupon.getCouponType());
+                userCoupon.setDiscount(coupon.getDiscount());
+                userCoupon.setMinServiceMoney(coupon.getMinServiceMoney());
+                userCoupon.setAllowStacke(coupon.getAllowStacke());
+                userCoupon.setRemark(coupon.getRemark());
+                userCouponSender.sendMessage(userCoupon);
+            }
+        });
+    }
+
 }