cup 3 lat temu
rodzic
commit
57a1111acf

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

@@ -2,6 +2,7 @@ package com.qs.mp.admin.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.CouponPkgItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
@@ -22,4 +23,11 @@ public interface CouponPkgItemMapper extends BaseMapper<CouponPkgItem> {
      * @return
      */
     List<CouponPkgItemVO> selectDetail(@Param(Constants.WRAPPER) QueryWrapper<CouponPkgItemVO> queryWrapper);
+
+    /**
+     * 根据券包id获取优惠券列表
+     * @param queryWrapper
+     * @return
+     */
+    List<Coupon> selectCouponList(@Param(Constants.WRAPPER) QueryWrapper<Coupon> queryWrapper);
 }

+ 9 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ICouponPkgItemService.java

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.service;
 
+import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.CouponPkgItem;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
@@ -22,4 +23,12 @@ public interface ICouponPkgItemService extends IService<CouponPkgItem> {
      * @return
      */
     List<CouponPkgItemVO> listDetailByCouponPkgId(Long id);
+
+    /**
+     * 根据券包模板id获取优惠券列表
+     * @param couponPkgId
+     * @return
+     */
+    List<Coupon> listCouponByPkgId(String couponPkgId);
+
 }

+ 11 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ICouponPkgService.java

@@ -2,6 +2,7 @@ package com.qs.mp.admin.service;
 
 import com.qs.mp.admin.domain.CouponPkg;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.param.CouponPkgParam;
 import com.qs.mp.admin.domain.vo.CouponPkgVO;
 
@@ -46,4 +47,14 @@ public interface ICouponPkgService extends IService<CouponPkg> {
      * @return
      */
     boolean delete(Long id);
+
+    /**
+     * 券包发券
+     *
+     * @param ticket
+     * @param userId
+     * @param refId
+     */
+    void distribute(Ticket ticket, Long userId, String couponPkgId);
+
 }

+ 9 - 1
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponPkgItemServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qs.mp.admin.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.Coupon;
 import com.qs.mp.admin.domain.CouponPkgItem;
 import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
 import com.qs.mp.admin.mapper.CouponPkgItemMapper;
@@ -24,7 +25,14 @@ public class CouponPkgItemServiceImpl extends ServiceImpl<CouponPkgItemMapper, C
     @Override
     public List<CouponPkgItemVO> listDetailByCouponPkgId(Long id) {
         QueryWrapper<CouponPkgItemVO> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("coupon_pkg_id", id);
+        queryWrapper.eq("t1.coupon_pkg_id", id);
         return this.getBaseMapper().selectDetail(queryWrapper);
     }
+
+    @Override
+    public List<Coupon> listCouponByPkgId(String couponPkgId) {
+        QueryWrapper<Coupon> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("t1.coupon_pkg_id", couponPkgId);
+        return this.getBaseMapper().selectCouponList(queryWrapper);
+    }
 }

+ 102 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponPkgServiceImpl.java

@@ -1,10 +1,13 @@
 package com.qs.mp.admin.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.CouponPkg;
 import com.qs.mp.admin.domain.CouponPkgItem;
+import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.param.CouponPkgItemParam;
 import com.qs.mp.admin.domain.param.CouponPkgParam;
 import com.qs.mp.admin.domain.vo.CouponPkgItemVO;
@@ -13,12 +16,31 @@ import com.qs.mp.admin.mapper.CouponPkgMapper;
 import com.qs.mp.admin.service.ICouponPkgItemService;
 import com.qs.mp.admin.service.ICouponPkgService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.admin.service.ICouponService;
+import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.common.enums.CouponPkgStatusEnum;
+import com.qs.mp.common.enums.CouponUseAreaEnum;
+import com.qs.mp.common.enums.UserCouponStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
+import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.system.service.id.BizIdGenerator;
+import com.qs.mp.user.domain.UserCoupon;
+import com.qs.mp.user.domain.UserCouponChannel;
+import com.qs.mp.user.domain.UserTicketOrder;
+import com.qs.mp.user.domain.UserTicketOrderItem;
+import com.qs.mp.user.service.IUserCouponChannelService;
+import com.qs.mp.user.service.IUserCouponService;
+import com.qs.mp.user.service.IUserTicketOrderItemService;
+import com.qs.mp.user.service.IUserTicketOrderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,9 +57,89 @@ import java.util.Objects;
 @Service
 public class CouponPkgServiceImpl extends ServiceImpl<CouponPkgMapper, CouponPkg> implements ICouponPkgService {
 
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
     @Autowired
     private ICouponPkgItemService couponPkgItemService;
 
+    @Autowired
+    private BizIdGenerator bizIdGenerator;
+
+    @Autowired
+    private IUserTicketOrderItemService userTicketOrderItemService;
+
+    @Autowired
+    private IChannelService channelService;
+
+    @Autowired
+    private IUserTicketOrderService userTicketOrderService;
+
+    @Autowired
+    private IUserCouponChannelService userCouponChannelService;
+
+    @Autowired
+    private IUserCouponService userCouponService;
+
+    @Autowired
+    private ICouponService couponService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void distribute(Ticket ticket, Long userId, String couponPkgId) {
+        List<Coupon> couponList = couponPkgItemService.listCouponByPkgId(couponPkgId);
+        if (CollectionUtils.isEmpty(couponList)) {
+            throw new ServiceException("优惠券不存在");
+        }
+
+        List<UserCouponChannel> userCouponChannelList = new ArrayList<>();
+        List<UserCoupon> userCouponList = new ArrayList<>();
+        for (Coupon coupon : couponList) {
+            UserCoupon userCoupon = new UserCoupon();
+            userCoupon.setId(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
+            userCoupon.setUserId(userId);
+            userCoupon.setVerifyCode(bizIdGenerator.newIdWithUidSharding(String.valueOf(userId)));
+            userCoupon.setCouponId(coupon.getCouponId());
+            if (coupon.getDueDays() > 0) {
+                userCoupon.setValidStart(DateUtils.getToday());
+                userCoupon.setValidEnd(DateUtils.addDays(userCoupon.getValidStart(), coupon.getDueDays() - 1));
+            } else {
+                userCoupon.setValidStart(coupon.getValidStart());
+                userCoupon.setValidEnd(coupon.getValidEnd());
+            }
+            userCoupon.setStatus(UserCouponStatusEnum.UNUSED);
+
+            // 确定限定范围
+            if (coupon.getUseArea() == CouponUseAreaEnum.POST_SCOPE) {
+                UserTicketOrderItem orderItem = userTicketOrderItemService.queryFinishedOrderItem(userId, ticket.getTicketId());
+                UserTicketOrder ticketOrder = userTicketOrderService.getById(orderItem.getOrderId());
+                if (null == orderItem || null == ticketOrder.getChannelId()) {
+                    LogUtil.error(logger, "券包优惠券的限定使用范围类型为发放时生成,但找不到关联的渠道ID。orderItem:{0}",
+                            new Object[]{JSONObject.toJSONString(orderItem)});
+                    throw new ServiceException("优惠券发放失败");
+                }
+                UserCouponChannel userCouponChannel = new UserCouponChannel();
+                userCouponChannel.setUserCouponId(userCoupon.getId());
+                userCouponChannel.setChannelId(ticketOrder.getChannelId());
+                userCouponChannelList.add(userCouponChannel);
+                Channel channel = channelService.getById(ticketOrder.getChannelId());
+                userCoupon.setUseAreaDesc(channel.getSiteName());
+            } else {
+                userCoupon.setUseAreaDesc(coupon.getUseArea().getDesc());
+            }
+
+            userCouponList.add(userCoupon);
+
+            boolean rtn = couponService.update(new LambdaUpdateWrapper<Coupon>().set(Coupon::getDistributeQty, coupon.getDistributeQty() + 1)
+                    .eq(Coupon::getCouponId, coupon.getCouponId()).eq(Coupon::getDistributeQty, coupon.getDistributeQty()));
+            Assert.isTrue(rtn, "领取优惠券奖品,更新优惠券发放量失败。couponId:" + coupon.getCouponId());
+        }
+
+        userCouponChannelService.saveBatch(userCouponChannelList);
+
+        userCouponService.saveBatch(userCouponList);
+
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean delete(Long id) {

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

@@ -76,7 +76,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 	private IChannelService channelService;
 
   @Override
-  @Transactional
+  @Transactional(rollbackFor = Exception.class)
   public void distribute(Ticket ticket, Long userId, String couponId) {
     Coupon coupon = getById(couponId);
     UserCoupon userCoupon = new UserCoupon();

+ 8 - 6
mp-service/src/main/java/com/qs/mp/user/service/impl/UserHitPrizeServiceImpl.java

@@ -8,10 +8,7 @@ import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.TicketAwards;
 import com.qs.mp.admin.domain.TicketAwardsPrize;
 import com.qs.mp.admin.domain.dto.TicketDrawNumDTO;
-import com.qs.mp.admin.service.ICouponService;
-import com.qs.mp.admin.service.ITicketAwardsPrizeService;
-import com.qs.mp.admin.service.ITicketAwardsService;
-import com.qs.mp.admin.service.ITicketService;
+import com.qs.mp.admin.service.*;
 import com.qs.mp.common.enums.CouponUseAreaEnum;
 import com.qs.mp.common.enums.PrizeStorageInTypeEnum;
 import com.qs.mp.common.enums.PrizeStorageStatusEnum;
@@ -90,6 +87,9 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
     @Autowired
     private BizIdGenerator bizIdGenerator;
 
+    @Autowired
+    private ICouponPkgService couponPkgService;
+
     @Override
     public List<TicketAwardsPrize> listPrize(Ticket ticket, Long userId) {
         UserHitPrize userHitPrize = getOne(new LambdaQueryWrapper<UserHitPrize>().eq(UserHitPrize::getTicketId, ticket.getTicketId()));
@@ -125,7 +125,7 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void cashPrize(Ticket ticket, Long userId, String awardsId, String prizeId) {
         // 更新奖品已兑奖数量
         TicketAwardsPrize ticketAwardsPrize = ticketAwardsPrizeService.getById(prizeId);
@@ -150,7 +150,9 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
             userCoinService.produce(userId, ticketAwardsPrize.getValue(), userHitPrize.getId());
         } else if (ticketAwardsPrize.getPrizeType() == TicketPrizeTypeEnum.COUPON) {
             couponService.distribute(ticket, userId, ticketAwardsPrize.getRefId());
-        } else {
+        } else if (ticketAwardsPrize.getPrizeType() == TicketPrizeTypeEnum.COUPON_PKG) {
+            couponPkgService.distribute(ticket, userId, ticketAwardsPrize.getRefId());
+        }else {
             userPrizeStorageService.takeInStorage(userId, ticketAwardsPrize, PrizeStorageInTypeEnum.TICKET_CASHED, userHitPrize.getId());
         }
 

+ 7 - 0
mp-service/src/main/resources/mapper/admin/CouponPkgItemMapper.xml

@@ -31,4 +31,11 @@
         left join mp_coupon t2 on t1.coupon_id = t2.coupon_id
         ${ew.customSqlSegment}
     </select>
+
+    <select id="selectCouponList" resultType="com.qs.mp.admin.domain.Coupon">
+        select t2.*
+        from mp_coupon_pkg_item t1
+        left join mp_coupon t2 on t1.coupon_id = t2.coupon_id
+        ${ew.customSqlSegment}
+    </select>
 </mapper>