ソースを参照

修复活动限制校验时没有按活动id过滤bug

codingliang 1 年間 前
コミット
540a86a1c5

+ 2 - 2
src/main/java/com/sqx/modules/activity/service/impl/ActivityServiceImpl.java

@@ -357,8 +357,8 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityDao, Activity> impl
             // 每天限制的数量
             Integer limitValue = shopActivityBO.getLimitValue();
 
-            int curDateCount = orderService.countByShopIdAndUserIdAndCurDate(order.getShopId(), order.getUserId(), order.getOrderId());
-            return limitValue.intValue() >= curDateCount;
+            int curDateCount = orderService.countByShopIdAndActivityIdAndUserIdAndCurDate(order.getShopId(), shopActivityBO.getActivityId(), order.getUserId(), order.getOrderId());
+            return limitValue.intValue() > curDateCount;
         }
 
         return true;

+ 10 - 0
src/main/java/com/sqx/modules/order/dao/AppOrderDao.java

@@ -74,4 +74,14 @@ public interface AppOrderDao extends BaseMapper<TbOrder> {
     List<TbOrder> selectMakeOrdersList(LocalDateTime minusMinutes);
 
     List<Long> selectCurrentOrderSequenceByShopId(@Param("shopId") Long shopId);
+
+    /**
+     * 统计用户当天在当前店铺参与某次活动的次数
+     * @param shopId 店铺id
+     * @param activityId 活动id
+     * @param userId 用户id
+     * @param orderId 当前订单id
+     * @return
+     */
+    int countByShopIdAndActivityIdAndUserIdAndCurDate(@Param("shopId") Long shopId, @Param("activityId") Long activityId, @Param("userId") Long userId, @Param("orderId") Long orderId);
 }

+ 3 - 2
src/main/java/com/sqx/modules/order/service/AppOrderService.java

@@ -134,14 +134,15 @@ public interface AppOrderService extends IService<TbOrder> {
     int countByShopIdAndUserId(Long shopId, Long userId, Long orderId);
 
     /**
-     * 查询用户当天在指定店铺的有效订单数量
+     * 查询用户当天在指定店铺参与某活动的有效订单数量
      *      (排除当前orderId,如果有的话)
      * @param shopId 店铺id
+     * @param activityId 活动id
      * @param userId 用户id
      * @param orderId 订单id
      * @return 订单数量
      */
-    int countByShopIdAndUserIdAndCurDate(Long shopId, Long userId, Long orderId);
+    int countByShopIdAndActivityIdAndUserIdAndCurDate(Long shopId, Long activityId, Long userId, Long orderId);
 
     /**
      * 店铺完成订单

+ 2 - 12
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -642,18 +642,8 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
     }
 
     @Override
-    public int countByShopIdAndUserIdAndCurDate(Long shopId, Long userId, Long orderId) {
-        LocalDate now = LocalDate.now();
-
-        LambdaQueryWrapper<TbOrder> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(TbOrder::getShopId, shopId);
-        queryWrapper.eq(TbOrder::getUserId, userId);
-        queryWrapper.ge(TbOrder::getCreateTime, now + " 00:00:00")
-                .le(TbOrder::getCreateTime, now + " 23:59:59");
-        queryWrapper.ne(ObjectUtil.isNotNull(orderId), TbOrder::getOrderId, orderId);
-        // 已支付
-        queryWrapper.eq(TbOrder::getIsPay, 1);
-        return this.count(queryWrapper);
+    public int countByShopIdAndActivityIdAndUserIdAndCurDate(Long shopId, Long activityId, Long userId, Long orderId) {
+        return baseMapper.countByShopIdAndActivityIdAndUserIdAndCurDate(shopId, activityId, userId, orderId);
     }
 
     /**

+ 17 - 0
src/main/resources/mapper/order/OrderMapper.xml

@@ -412,4 +412,21 @@
         order by pay_time asc
     </select>
 
+    <select id="countByShopIdAndActivityIdAndUserIdAndCurDate" resultType="java.lang.Integer">
+        select
+            count(1)
+        from
+             tb_order o
+             left join activity_part_record apr on apr.order_id = o.order_id
+        where
+            o.shop_id = #{shopId}
+            and o.user_id = #{userId}
+            and date(o.create_time) = curdate()
+            and apr.activity_id = #{activityId}
+            and o.is_pay = 1
+            <if test="orderId != null">
+                and o.order_id != #{orderId}
+            </if>
+    </select>
+
 </mapper>