setPlantId($cropInfoDto->id); // 设置种子物品ID(需要从种子配置中获取对应的物品ID) $seedItemId = self::getSeedItemId($cropInfoDto->seedId); $dataLand->setSeedId($seedItemId); // 设置果实ID(发芽期确定的最终产出果实ID) if ($cropInfoDto->finalOutputItemId) { $dataLand->setFruitId($cropInfoDto->finalOutputItemId); } // 设置种植时间 if (!empty($cropInfoDto->plantTime)) { // 如果plantTime是字符串格式的日期时间,转换为时间戳 if (is_string($cropInfoDto->plantTime)) { $plantTime = strtotime($cropInfoDto->plantTime); $dataLand->setSeedPlantingTimes($plantTime); } // 如果已经是时间戳,直接使用 else if (is_numeric($cropInfoDto->plantTime)) { $dataLand->setSeedPlantingTimes($cropInfoDto->plantTime); } } // 当前阶段开始时间 if (!empty($cropInfoDto->stageStartTime)) { // 如果 stageStartTime 是字符串格式的日期时间,转换为时间戳 if (is_string($cropInfoDto->stageStartTime)) { $stageStartTime = strtotime($cropInfoDto->stageEndTime); $dataLand->setStageNextTimes($stageStartTime); } // 如果已经是时间戳,直接使用 else if (is_numeric($cropInfoDto->stageStartTime)) { $dataLand->setStageNextTimes($cropInfoDto->stageStartTime); } } // 下一个阶段的时间 if (!empty($cropInfoDto->stageEndTime)) { // 如果stageEndTime是字符串格式的日期时间,转换为时间戳 if (is_string($cropInfoDto->stageEndTime)) { $stageEndTime = strtotime($cropInfoDto->stageEndTime); $dataLand->setStageNextTimes($stageEndTime); } // 如果已经是时间戳,直接使用 else if (is_numeric($cropInfoDto->stageEndTime)) { $dataLand->setStageNextTimes($cropInfoDto->stageEndTime); } } // 设置种子状态,这里需要将Farm模块的生长阶段映射到Proto的种子状态 // 假设我们有一个映射关系,这里简单地直接使用生长阶段值 $dataLand->setSeedStatus($cropInfoDto->growthStage); // 处理灾害信息 DisasterConverter::processDisasters($dataLand, $cropInfoDto->disasters ?? []); // 检查是否可以施肥 $dataLand->setCanFertilization(!$cropInfoDto->fertilized); return $dataLand; } /** * 根据种子配置ID获取对应的物品ID * * @param int $seedId 种子配置ID * @return int 物品ID */ private static function getSeedItemId(int $seedId): int { try { $seed = \App\Module\Farm\Models\FarmSeed::find($seedId); return $seed ? $seed->item_id : 0; } catch (\Exception $e) { \Illuminate\Support\Facades\Log::error('获取种子物品ID失败', [ 'seed_id' => $seedId, 'error' => $e->getMessage() ]); return 0; } } }