Преглед изворни кода

每天每个人在每个店铺的订单不能超过10个

liu пре 2 месеци
родитељ
комит
14ca1cc677

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

@@ -121,4 +121,19 @@ public interface AppOrderDao extends BaseMapper<TbOrder> {
      * @return 店铺id-订单数量映射列表
      */
     List<Map<String, Object>> countFinishGroupByShopId();
+
+    /**
+     * 查询用户在指定店铺当天特定状态的订单数量
+     * @param userId 用户id
+     * @param shopId 店铺id
+     * @param startTime 当天开始时间
+     * @param endTime 当天结束时间
+     * @param statusList 订单状态列表
+     * @return 订单数量
+     */
+    int countByUserIdAndShopIdAndStatusListAndTimeRange(@Param("userId") Long userId,
+                                                        @Param("shopId") Long shopId,
+                                                        @Param("startTime") String startTime,
+                                                        @Param("endTime") String endTime,
+                                                        @Param("statusList") List<Integer> statusList);
 }

+ 25 - 0
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -2933,6 +2933,31 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
     @Override
     public PayTransactionsVO getTransactionsParam(Long userId, PayOrderDTO payOrderDTO) {
         TbOrder order = prepareOrder(userId, payOrderDTO);
+
+        //        查找该用户在这家店有几个订单
+        Long shopId = order.getShopId();
+
+        // 查询用户在当天该店铺内状态为 7、6、3、4 的订单数量
+        String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+        String startTime = currentDate + " 00:00:00";
+        String endTime = currentDate + " 23:59:59";
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(7);  // 商家待接单
+        statusList.add(6);  // 制作中
+        statusList.add(3);  // 待取餐/派送中
+        statusList.add(4);  // 已完成
+
+        int orderCount = appOrderDao.countByUserIdAndShopIdAndStatusListAndTimeRange(
+                userId, shopId, startTime, endTime, statusList);
+
+        log.info("getTransactionsParam==>[userId:{}, shopId:{}],当天状态为7、6、3、4的订单数量:{}",
+                userId, shopId, orderCount);
+
+        if (orderCount>=10) {
+            throw new SqxException("该商户当天的订单量已超过当前限额!");
+        }
+
+
         Integer status = order.getStatus();
         if (status == 0) {
             //            获取超时时间

+ 25 - 3
src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java

@@ -8,6 +8,7 @@ import com.github.wxpay.sdk.WXPay;
 import com.github.wxpay.sdk.WXPayConstants;
 import com.github.wxpay.sdk.WXPayUtil;
 import com.sqx.common.constant.RedisKey;
+import com.sqx.common.exception.SqxException;
 import com.sqx.common.utils.RedisUtils;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.app.bo.UpdateMoneyBO;
@@ -53,9 +54,7 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author fang
@@ -110,6 +109,29 @@ public class WxServiceImpl implements WxService {
     public Result balanceOrder(Long userId, PayOrderDTO payOrderDTO) {
         TbOrder tbOrder = appOrderService.prepareOrder(userId, payOrderDTO);
 
+        //        查找该用户在这家店有几个订单
+        Long shopId = tbOrder.getShopId();
+
+        // 查询用户在当天该店铺内状态为 7、6、3、4 的订单数量
+        String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+        String startTime = currentDate + " 00:00:00";
+        String endTime = currentDate + " 23:59:59";
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(7);  // 商家待接单
+        statusList.add(6);  // 制作中
+        statusList.add(3);  // 待取餐/派送中
+        statusList.add(4);  // 已完成
+
+        int orderCount = appOrderDao.countByUserIdAndShopIdAndStatusListAndTimeRange(
+                userId, shopId, startTime, endTime, statusList);
+
+        log.info("getTransactionsParam==>[userId:{}, shopId:{}],当天状态为7、6、3、4的订单数量:{}",
+                userId, shopId, orderCount);
+
+        if (orderCount>=10) {
+            throw new SqxException("该商户当天的订单量已超过当前限额!");
+        }
+
         RLock lock = redissonClient.getLock(String.format(RedisKey.INSERT_ORDER_LOCK, tbOrder.getOrderId(), tbOrder.getShopId()));
         lock.lock();
         try{

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

@@ -821,4 +821,20 @@
             shop_id
     </select>
 
+    <select id="countByUserIdAndShopIdAndStatusListAndTimeRange" resultType="java.lang.Integer">
+        SELECT
+        COUNT(*)
+        FROM
+        tb_order
+        WHERE
+        user_id = #{userId}
+        AND shop_id = #{shopId}
+        AND status IN
+        <foreach collection="statusList" item="status" open="(" separator="," close=")">
+            #{status}
+        </foreach>
+        AND create_time >= #{startTime}
+        AND create_time <![CDATA[ <= ]]> #{endTime}
+    </select>
+
 </mapper>