Przeglądaj źródła

fix 存在优惠使用失败记录的情况下,查询订单优惠详情出现多条数据的情况

skyline 1 rok temu
rodzic
commit
2f4e1bcc54

+ 9 - 1
entity/src/main/java/com/kym/entity/miniapp/OrderCoupon.java

@@ -19,9 +19,12 @@ import lombok.experimental.Accessors;
 @TableName("t_order_coupon")
 @Accessors(chain = true)
 public class OrderCoupon extends BaseEntity {
-
     private static final long serialVersionUID = 1L;
 
+    public static final int STATUS_未知 = 0;
+    public static final int STATUS_使用成功 = 1;
+    public static final int STATUS_使用失败 = 2;
+
     /**
      * 优惠券id
      */
@@ -61,4 +64,9 @@ public class OrderCoupon extends BaseEntity {
      * 总优惠金额(分)
      */
     private Integer discountAmount;
+
+    /**
+     * 状态
+     */
+    private Integer status;
 }

+ 2 - 1
mapper/src/main/resources/mappers/miniapp/OrderCouponMapper.xml

@@ -13,13 +13,14 @@
         <result column="coupon_type" property="couponType" />
         <result column="discount" property="discount" />
         <result column="discount_amount" property="discountAmount" />
+        <result column="status" property="status" />
         <result column="create_time" property="createTime" />
         <result column="update_time" property="updateTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id,coupon_id, activity_id, user_coupon_id, user_id, start_charge_seq, coupon_type, discount, discount_amount,create_time,update_time
+        id,coupon_id, activity_id, user_coupon_id, user_id, start_charge_seq, coupon_type, discount, discount_amount,status,create_time,update_time
     </sql>
 
 </mapper>

+ 6 - 0
service/src/main/java/com/kym/service/miniapp/impl/CouponDiscountHandle.java

@@ -80,6 +80,7 @@ public class CouponDiscountHandle implements DiscountService {
                 // 更新订单优惠券关联信息
                 orderCouponService.lambdaUpdate()
                         .set(OrderCoupon::getDiscountAmount, discountAmount)
+                        .set(OrderCoupon::getStatus, OrderCoupon.STATUS_使用成功)
                         .eq(OrderCoupon::getStartChargeSeq, chargeOrder.getStartChargeSeq())
                         .eq(OrderCoupon::getUserCouponId, userCoupon.getId())
                         .update();
@@ -87,6 +88,11 @@ public class CouponDiscountHandle implements DiscountService {
                 // 优惠券使用情况数据
                 couponService.usedQuantifyCount(userCoupon.getCouponId());
             } else {
+                orderCouponService.lambdaUpdate()
+                        .set(OrderCoupon::getStatus, OrderCoupon.STATUS_使用失败)
+                        .eq(OrderCoupon::getStartChargeSeq, chargeOrder.getStartChargeSeq())
+                        .eq(OrderCoupon::getUserCouponId, userCoupon.getId())
+                        .update();
                 log.error("订单使用优惠券失败:订单号:{},优惠券id{}:服务费未达到优惠券使用门槛", chargeOrder.getStartChargeSeq(), userCoupon.getCouponId());
             }
         } catch (Exception e) {

+ 5 - 2
service/src/main/java/com/kym/service/miniapp/impl/UserCouponServiceImpl.java

@@ -166,10 +166,13 @@ public class UserCouponServiceImpl extends MPJBaseServiceImpl<UserCouponMapper,
      */
     @Override
     public UserCoupon getUserCoupon(String startChargeSeq) {
+        var userId = StpUtil.getLoginIdAsLong();
         MPJLambdaWrapper<UserCoupon> wrapper = JoinWrappers.lambda(UserCoupon.class)
                 .selectAll(UserCoupon.class)
-                .rightJoin(OrderCoupon.class, OrderCoupon::getCouponId, UserCoupon::getCouponId)
-                .eq(OrderCoupon::getStartChargeSeq, startChargeSeq);
+                .rightJoin(OrderCoupon.class, on -> on.eq(OrderCoupon::getCouponId, UserCoupon::getCouponId).eq(OrderCoupon::getUserId, UserCoupon::getUserId))
+                .eq(OrderCoupon::getStartChargeSeq, startChargeSeq)
+                .eq(OrderCoupon::getUserId, userId)
+                .eq(OrderCoupon::getStatus, OrderCoupon.STATUS_使用成功);
         return this.getOne(wrapper);
     }
 

+ 6 - 2
service/src/main/java/com/kym/service/miniapp/impl/UserRechargeRightsServiceImpl.java

@@ -1,5 +1,6 @@
 package com.kym.service.miniapp.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -32,10 +33,13 @@ public class UserRechargeRightsServiceImpl extends MPJBaseServiceImpl<UserRechar
      */
     @Override
     public UserRechargeRights getUserRechargeRights(String startChargeSeq) {
+        var userId = StpUtil.getLoginIdAsLong();
         MPJLambdaWrapper<UserRechargeRights> wrapper = JoinWrappers.lambda(UserRechargeRights.class)
                 .selectAll(UserRechargeRights.class)
-                .rightJoin(OrderRechargeRights.class, OrderRechargeRights::getRightsId, UserRechargeRights::getRightsId)
-                .eq(OrderRechargeRights::getStartChargeSeq, startChargeSeq);
+                .rightJoin(OrderRechargeRights.class, on ->
+                        on.eq(OrderRechargeRights::getRightsId, UserRechargeRights::getRightsId).eq(OrderRechargeRights::getUserId, UserRechargeRights::getUserId))
+                .eq(OrderRechargeRights::getStartChargeSeq, startChargeSeq)
+                .eq(UserRechargeRights::getUserId, userId);
         return this.getOne(wrapper);
     }