|
|
@@ -552,8 +552,8 @@ class CropLogic
|
|
|
public function removeCrop(int $userId, int $landId): bool
|
|
|
{
|
|
|
try {
|
|
|
- // 开启事务
|
|
|
- DB::beginTransaction();
|
|
|
+ // 检查是否已开启事务
|
|
|
+ \UCore\Db\Helper::check_tr();
|
|
|
|
|
|
// 获取土地信息
|
|
|
$land = FarmLand::where('id', $landId)
|
|
|
@@ -574,34 +574,43 @@ class CropLogic
|
|
|
|
|
|
if (!$crop) {
|
|
|
// 如果没有作物但土地状态不是空闲,修正土地状态
|
|
|
+ $oldLandStatus = $land->status;
|
|
|
$land->status = LAND_STATUS::IDLE->value;
|
|
|
$land->save();
|
|
|
|
|
|
- DB::commit();
|
|
|
+ // 记录状态变更信息,由调用方处理事件触发
|
|
|
+ Log::info('土地状态已修正', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'land_id' => $landId,
|
|
|
+ 'old_status' => $oldLandStatus,
|
|
|
+ 'new_status' => $land->status
|
|
|
+ ]);
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
// 删除作物记录
|
|
|
$crop->delete();
|
|
|
|
|
|
+ // 记录旧状态
|
|
|
+ $oldLandStatus = $land->status;
|
|
|
+
|
|
|
// 更新土地状态
|
|
|
$land->status = LAND_STATUS::IDLE->value;
|
|
|
$land->save();
|
|
|
|
|
|
- // 提交事务
|
|
|
- DB::commit();
|
|
|
+ // 记录状态变更信息,由调用方处理事件触发和事务提交
|
|
|
|
|
|
Log::info('铲除作物成功', [
|
|
|
'user_id' => $userId,
|
|
|
'land_id' => $landId,
|
|
|
- 'crop_id' => $crop->id
|
|
|
+ 'crop_id' => $crop->id,
|
|
|
+ 'old_status' => $oldLandStatus,
|
|
|
+ 'new_status' => $land->status
|
|
|
]);
|
|
|
|
|
|
return true;
|
|
|
} catch (\Exception $e) {
|
|
|
- // 回滚事务
|
|
|
- DB::rollBack();
|
|
|
-
|
|
|
Log::error('铲除作物失败', [
|
|
|
'user_id' => $userId,
|
|
|
'land_id' => $landId,
|
|
|
@@ -609,7 +618,7 @@ class CropLogic
|
|
|
'trace' => $e->getTraceAsString()
|
|
|
]);
|
|
|
|
|
|
- return false;
|
|
|
+ throw $e; // 重新抛出异常,由调用方处理事务回滚
|
|
|
}
|
|
|
}
|
|
|
|