Sfoglia il codice sorgente

修复Mex挂单验证器物品数量检查逻辑

- 问题:MexOrderValidator使用总物品数量验证,但Logic层使用可用数量冻结,导致验证通过但冻结失败
- 修复:将validateUserItemQuantity方法改为检查可用数量(排除已冻结物品)
- 影响:物品数量不足错误现在在Validation层正确处理,返回VALIDATE_ERROR而非系统异常
- 测试:使用debug:reproduce-error验证修复效果,错误信息从系统异常变为验证错误
AI Assistant 6 mesi fa
parent
commit
fdae9cf476
1 ha cambiato i file con 5 aggiunte e 4 eliminazioni
  1. 5 4
      app/Module/Mex/Validators/MexOrderValidator.php

+ 5 - 4
app/Module/Mex/Validators/MexOrderValidator.php

@@ -123,7 +123,7 @@ class MexOrderValidator extends Validator
     }
 
     /**
-     * 验证用户物品数量
+     * 验证用户物品数量(检查可用数量,排除已冻结的物品)
      *
      * @param int $userId 用户ID
      * @param int $itemId 物品ID
@@ -132,10 +132,11 @@ class MexOrderValidator extends Validator
      */
     private function validateUserItemQuantity(int $userId, int $itemId, int $requiredQuantity): bool
     {
-        $userQuantity = ItemQuantity::getUserItemQuantity($userId, $itemId);
+        // 使用ItemService获取可用数量(排除已冻结的物品)
+        $availableQuantity = \App\Module\GameItems\Services\ItemService::getAvailableQuantity($userId, $itemId);
 
-        if ($userQuantity < $requiredQuantity) {
-            $this->addError("物品数量不足,当前拥有 {$userQuantity} 个,需要 {$requiredQuantity} 个");
+        if ($availableQuantity < $requiredQuantity) {
+            $this->addError("可用物品数量不足,当前可用 {$availableQuantity} 个,需要 {$requiredQuantity} 个");
             return false;
         }