Selaa lähdekoodia

新用户发优惠券

Evan 2 vuotta sitten
vanhempi
commit
38e854c3ab

+ 4 - 0
mp-admin/src/test/java/com/qs/mp/task/MyTest.java

@@ -42,6 +42,8 @@ import java.util.concurrent.TimeUnit;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
@@ -55,6 +57,8 @@ import java.util.*;
  */
 @SpringBootTest
 public class MyTest {
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
 
     @Autowired
     private IWalletService walletService;

+ 3 - 0
mp-quartz/src/main/java/com/qs/mp/quartz/task/AsyncConsumeTask.java

@@ -81,6 +81,9 @@ public class AsyncConsumeTask {
         } else if (AsyncTaskTypeEnum.CARD_ORDER_DELIVER.getValue().equals(asyncTask.getType())) {
             // 卡密订单发货任务
             asyncTaskService.cardOrderDeliver(asyncTask);
+        } else if (AsyncTaskTypeEnum.NEW_USER_SEND_COUPON.getValue().equals(asyncTask.getType())) {
+            // 新人发优惠券任务
+            asyncTaskService.sendNewUserCoupon(asyncTask);
         } else {
             // 都没匹配到则忽略不处理任务
             return;

+ 8 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ICouponService.java

@@ -48,4 +48,12 @@ public interface ICouponService extends IService<Coupon> {
 	 * @param couponId
 	 */
     void distributeByMarketing(Long userId, String couponId);
+
+
+	/**
+	 * 新用户发券
+	 * @param userId
+	 * @param couponId
+	 */
+	void distributeByNewUser(Long userId, Long couponId);
 }

+ 14 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponServiceImpl.java

@@ -95,6 +95,20 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
         Assert.isTrue(rtn, "发放优惠券奖品,更新优惠券发放量失败。couponId:" + coupon.getCouponId());
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void distributeByNewUser(Long userId, Long couponId) {
+        Coupon coupon = getById(couponId);
+        UserCoupon userCoupon = getUserCoupon(userId, coupon);
+        userCoupon.setUseAreaDesc(coupon.getUseArea().getDesc());
+        userCouponService.save(userCoupon);
+        boolean rtn = update(new LambdaUpdateWrapper<Coupon>().set(Coupon::getDistributeQty, coupon.getDistributeQty() + 1)
+            .eq(Coupon::getCouponId, coupon.getCouponId()).eq(Coupon::getDistributeQty, coupon.getDistributeQty()));
+        if (!rtn) {
+            logger.error("新用户优惠券发放失败.couponId:{}", coupon.getCouponId());
+            throw new ServiceException("新用户优惠券发放失败。couponId:" + coupon.getCouponId());
+        }
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)

+ 6 - 0
mp-service/src/main/java/com/qs/mp/framework/service/IAsyncTaskService.java

@@ -45,4 +45,10 @@ public interface IAsyncTaskService extends IService<AsyncTask> {
      * @param asyncTask
      */
     void cardOrderDeliver(AsyncTask asyncTask);
+
+    /**
+     * 新用户发优惠券
+     * @param asyncTask
+     */
+    void sendNewUserCoupon(AsyncTask asyncTask);
 }

+ 31 - 0
mp-service/src/main/java/com/qs/mp/framework/service/impl/AsyncTaskServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.GoodsCard;
 import com.qs.mp.admin.domain.Ticket;
@@ -29,6 +30,8 @@ import com.qs.mp.framework.domain.AsyncTask;
 import com.qs.mp.framework.mapper.AsyncTaskMapper;
 import com.qs.mp.framework.service.IAsyncTaskService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.system.domain.SysUser;
+import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.user.domain.UserDeliverOrder;
 import com.qs.mp.user.domain.UserDeliverOrderItem;
 import com.qs.mp.user.domain.UserDeliverOrderItemCard;
@@ -118,6 +121,9 @@ public class AsyncTaskServiceImpl extends ServiceImpl<AsyncTaskMapper, AsyncTask
     @Autowired
     private IUserPrizeStorageService userPrizeStorageService;
 
+    @Autowired
+    private ISysUserService sysUserService;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -282,4 +288,29 @@ public class AsyncTaskServiceImpl extends ServiceImpl<AsyncTaskMapper, AsyncTask
             throw new ServiceException("卡密商品发货更新订单明细发货时间失败");
         }
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void sendNewUserCoupon(AsyncTask asyncTask) {
+        logger.info("收到发放新人优惠券任务,bizId={}", asyncTask.getBizId());
+
+        SysUser sysUser = sysUserService.selectUserById(Long.valueOf(asyncTask.getBizId()));
+        if (sysUser == null) {
+            logger.error("收到发放新人优惠券任务,未查到用户信息,bizId={}", asyncTask.getBizId());
+            return;
+        }
+        // 捞取优惠券
+        List<Coupon> couponList = couponService.list(new LambdaQueryWrapper<Coupon>()
+            .eq(Coupon::getType, CouponTypeEnum.TICKET_ORDER)
+            .eq(Coupon::getIsNewUserCoupon, 1));
+        if (CollectionUtils.isEmpty(couponList)) {
+            logger.info("未查到设置的新人优惠券,bizId={}", asyncTask.getBizId());
+            return;
+        }
+        for (Coupon coupon : couponList) {
+            couponService.distributeByNewUser(sysUser.getUserId(), coupon.getCouponId());
+        }
+    }
+
+
 }