时间: 2025年07月04日 11:11:11
任务: 修复农场土地状态和作物收获的逻辑问题
用户反馈:部分土地状态为灾害,但是其作物已经可以'成熟期'可以收获了。
经过分析发现,实际问题是:作物成熟时土地状态正确变为"可收获",但当用户尝试清理灾害时,系统会强制将土地状态修正回"灾害",导致无法收获。
在 CropLogic::clearDisaster 方法中存在两个问题:
强制状态修正逻辑(第622-637行):
清理完灾害后的状态设置(第649-654行):
正确的业务逻辑应该是:
app/Module/Farm/Logics/CropLogic.php移除强制状态修正逻辑:
// 原来的逻辑:强制修正土地状态
if ($land->status !== LAND_STATUS::DISASTER->value) {
$land->status = LAND_STATUS::DISASTER->value;
$land->save();
}
// 修改后:仅记录日志,不修改状态
Log::info('清理灾害时的土地状态', [
'user_id' => $userId,
'land_id' => $landId,
'land_status' => $land->status,
'crop_growth_stage' => $crop->growth_stage,
// ...
]);
优化清理完灾害后的状态设置:
// 原来的逻辑:固定设置为种植中
if (!$hasActiveDisaster) {
$land->status = LAND_STATUS::PLANTING->value;
}
// 修改后:根据作物生长阶段设置状态
if (!$hasActiveDisaster) {
if ($crop->growth_stage === GROWTH_STAGE::MATURE->value) {
$land->status = LAND_STATUS::HARVESTABLE->value;
} elseif ($crop->growth_stage === GROWTH_STAGE::WITHERED->value) {
$land->status = LAND_STATUS::WITHERED->value;
} else {
$land->status = LAND_STATUS::PLANTING->value;
}
}
通过数据库查询验证修复效果:
修复农场灾害清理时的土地状态问题
- 移除clearDisaster方法中强制修正土地状态为灾害的逻辑
- 修改清理完所有灾害后的土地状态更新逻辑,根据作物生长阶段设置正确的土地状态
- 确保作物成熟时即使有灾害也能保持可收获状态
- 清理灾害后如果作物已成熟,土地状态应为可收获而不是种植中