Browse Source

fix 重复使用渠道推广优惠码

zoujiajian 3 năm trước cách đây
mục cha
commit
6b7453d71c

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -136,6 +136,11 @@ public class OrderDon extends BaseEntity implements Serializable {
      */
     private String exCode;
 
+    /**
+     * 关联推广id
+     */
+    private Long dsPopularizeId;
+
     /**
      * 自定义订阅节点
      */

+ 16 - 13
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -314,6 +314,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 			orderDon.setCouponMoney(couponMoney);
 			orderDon.setCouponUserId(couponUser.getId());
+			orderDon.setDsPopularizeId(couponUser.getPopularizeId());
 		}
 		orderDon.setSkuId(payRequest.getSkuId());
 		orderDon.setRelationId(relationId);
@@ -1728,19 +1729,21 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				couponUser.setCouponId(exists.getPopularizeCouponId());
 				couponUser.setPopularizeId(exists.getPopularizeId());
 			}
-			CouponUser received = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, couponUser.getCouponId()).last("limit 1"));
-			if (received != null && received.getStatus() != CouponUser.Status.unused) {
-				throw BusinessRuntimeException.getInstance("您已使用该优惠码所对应的优惠券");
-			}
-			couponUser.setUserId(userId);
-			couponUser.setStatus(CouponUser.Status.used);
-			couponUser.setChannel(CouponUser.Channel.exCode);
-			couponFontService.updateCouponUserValidTime(couponUser.getCouponId(), couponUser);
-			try {
-				couponUserMapper.insert(couponUser);
-			} catch (DuplicateKeyException e) {
-				log.info("用户已领取该{}优惠券", couponUser.getCouponId());
-				throw BusinessRuntimeException.getInstance("您已领取该优惠码对应的优惠券,请使用优惠券");
+			if (exists.getPopularizeId() == null) {
+				CouponUser received = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, couponUser.getCouponId()).last("limit 1"));
+				if (received != null && received.getStatus() != CouponUser.Status.unused) {
+					throw BusinessRuntimeException.getInstance("您已使用该优惠码所对应的优惠券");
+				}
+				couponUser.setUserId(userId);
+				couponUser.setStatus(CouponUser.Status.used);
+				couponUser.setChannel(CouponUser.Channel.exCode);
+				couponFontService.updateCouponUserValidTime(couponUser.getCouponId(), couponUser);
+				try {
+					couponUserMapper.insert(couponUser);
+				} catch (DuplicateKeyException e) {
+					log.info("用户已领取该{}优惠券", couponUser.getCouponId());
+					throw BusinessRuntimeException.getInstance("您已领取该优惠码对应的优惠券,请使用优惠券");
+				}
 			}
 		} else {
 			couponUser = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, couponId).last("limit 1"));

+ 7 - 2
netflix-web/src/main/java/com/cyksj/web/controller/manage/coupon/CouponController.java

@@ -4,11 +4,13 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.Log;
+import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.config.corp.WeChatCorpFactory;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.BusinessType;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.corp.CorpUserAuthMapper;
 import com.cyksj.mapper.corp.CorpUserMapper;
 import com.cyksj.mapper.manage.coupon.*;
@@ -71,6 +73,8 @@ public class CouponController {
 
 	private final CouponClassificationMapper couponClassificationMapper;
 
+	private final OrderDonMapper orderDonMapper;
+
 	private final HttpServletRequest request;
 
 	/**
@@ -153,8 +157,9 @@ public class CouponController {
 	public Result<SearchResult<CouponDistributePopularizeView>> getRelationList(HttpServletRequest request) {
 		SearchResult<CouponDistributePopularizeView> search = beanSearcher.search(CouponDistributePopularizeView.class, MapUtils.flatBuilder(request.getParameterMap()).build());
 		search.getDataList().forEach(data -> {
-			Integer usedNum = couponUserMapper.selectCount(Wrappers.lambdaQuery(CouponUser.class)
-					.eq(CouponUser::getPopularizeId, data.getId()).eq(CouponUser::getStatus, CouponUser.Status.used));
+			Integer usedNum = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
+					.eq(OrderDon::getDsPopularizeId, data.getId())
+					.notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
 			data.setUsedNum(usedNum);
 		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);