Ver Fonte

refactor(AppGame): 优化种植操作的事务处理和异常处理

- 将消耗种子物品的操作移到种植作物之后,以确保种植成功后再扣减库存
- 优化了事务的开启和回滚逻辑,确保在出现异常时正确回滚事务
- 移除了冗余的事务回滚判断条件
- 增加了'sow_id'字段到消耗物品的日志详情中
notfff há 7 meses atrás
pai
commit
5b4b9bb781
1 ficheiros alterados com 15 adições e 24 exclusões
  1. 15 24
      app/Module/AppGame/Handler/Land/SowHandler.php

+ 15 - 24
app/Module/AppGame/Handler/Land/SowHandler.php

@@ -68,18 +68,23 @@ class SowHandler extends BaseHandler
             // 开启数据库事务
             DB::beginTransaction();
 
-            // 消耗种子物品
-            ItemService::consumeItem($userId, $itemId, $itemInstanceId, 1, [
-                'source_type' => 'land_sow',
-                'source_id' => $landId,
-                'details' => ['land_id' => $landId]
-            ]);
+           
 
             // 调用Farm模块的CropService种植作物
             $plantResult = CropService::plantCrop($userId, $landId, $itemId);
             if (!$plantResult) {
                 throw new LogicException("种植失败,请检查土地状态");
             }
+            
+             // 消耗种子物品
+            ItemService::consumeItem($userId, $itemId, $itemInstanceId, 1, [
+                'source_type' => 'land_sow',
+                'source_id' => $landId,
+                'details' => [
+                    'land_id' => $landId,
+                    'sow_id'=>$sow_log_id
+                    ]
+            ]);
 
             // 设置响应状态
             $this->response->setCode(0);
@@ -98,9 +103,9 @@ class SowHandler extends BaseHandler
 
         } catch (LogicException $e) {
             // 回滚事务
-            if (DB::transactionLevel() > 0) {
-                DB::rollBack();
-            }
+
+            DB::rollBack();
+            
 
             // 设置错误响应
             $this->response->setCode(400);
@@ -111,21 +116,7 @@ class SowHandler extends BaseHandler
                 'error' => $e->getMessage(),
                 'trace' => $e->getTraceAsString()
             ]);
-        } catch (\Exception $e) {
-            // 回滚事务
-            if (DB::transactionLevel() > 0) {
-                DB::rollBack();
-            }
-
-            // 设置错误响应
-            $this->response->setCode(500);
-            $this->response->setMsg('系统错误,请稍后再试');
-
-            Log::error('种植操作异常', [
-                'user_id' => $this->user_id,
-                'error' => $e->getMessage(),
-                'trace' => $e->getTraceAsString()
-            ]);
+   
         }
 
         return $response;