Эх сурвалжийг харах

fix: 创建设备订单增加占用互斥,他人使用中的设备拒绝开单

- 原 createOrder 只校验'当前用户'有无未完结订单,不检查设备是否被
  他人占用,可对同一设备同时开两单导致双扣款
- 在僵死单清理之后增加设备维度占用检查:僵死单先结算,
  设备真实运行中(他人未完结订单)则拒绝开单

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 3 долоо хоног өмнө
parent
commit
f977e4aab4

+ 11 - 0
car-wash-service/src/main/java/com/kym/service/impl/WashOrderServiceImpl.java

@@ -110,6 +110,17 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
         // 检查设备是否有僵死订单(设备显示忙碌但订单实际已超时)
         checkAndResolveStaleOrder(params.getProductKey(), params.getDeviceName());
 
+        // 设备占用检查:僵死单清理后设备仍有他人未完结订单,说明设备真实使用中,拒绝开单
+        var occupiedOrder = lambdaQuery()
+                .eq(WashOrder::getProductKey, params.getProductKey())
+                .eq(WashOrder::getDeviceName, params.getDeviceName())
+                .eq(WashOrder::getOrderStatus, WashOrder.ORDER_STATUS_开机)
+                .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
+                .one();
+        if (occupiedOrder != null && !occupiedOrder.getUserId().equals(StpUtil.getLoginIdAsLong())) {
+            throw new BusinessException("设备他人使用中!");
+        }
+
         var memberName = StpUtil.getSession().getString(User.ST_SESSION_KEY_MOBILE);
         var orderId = OrderUtils.getOrderNo();