setId($landInfoDto->id); $dataLand->setIndex($landInfoDto->position); // 使用position作为index $dataLand->setLevel($landInfoDto->landType); // 使用landType作为level $dataLand->setStatus($landInfoDto->status); // 默认设置灾害和施肥状态 $dataLand->setNeedWeed(false); $dataLand->setNeedPestControl(false); $dataLand->setNeedWatering(false); $dataLand->setCanFertilization(false); // 如果有作物信息,设置作物相关字段 if ($landInfoDto->crop) { // 设置种子配置ID(这是种子表的主键ID) $dataLand->setSeedId($landInfoDto->crop->seedId); $dataLand->setPlantId($landInfoDto->crop->id); // 设置最终产出果实ID(发芽期确定的主果实) if ($landInfoDto->crop->finalOutputItemId) { $dataLand->setFruitId($landInfoDto->crop->finalOutputItemId); } // 设置种植时间 if (!empty($landInfoDto->crop->plantTime)) { // 如果plantTime是字符串格式的日期时间,转换为时间戳 if (is_string($landInfoDto->crop->plantTime)) { $plantTime = strtotime($landInfoDto->crop->plantTime); $dataLand->setSeedPlantingTimes($plantTime); } // 如果已经是时间戳,直接使用 else if (is_numeric($landInfoDto->crop->plantTime)) { $dataLand->setSeedPlantingTimes($landInfoDto->crop->plantTime); } } // 阶段开始时间 if (!empty($landInfoDto->crop->stageStartTime)) { $dataLand->setStageStartTimes($landInfoDto->crop->stageStartTime->timestamp); } // 下一阶段的时间 if (!empty($landInfoDto->crop->stageEndTime)) { $dataLand->setStageNextTimes($landInfoDto->crop->stageEndTime->timestamp); } // 设置种子状态,这里需要将Farm模块的生长阶段映射到Proto的种子状态 // 假设我们有一个映射关系,这里简单地直接使用生长阶段值 $dataLand->setSeedStatus((int)$landInfoDto->crop->growthStage); // 处理灾害信息 DisasterConverter::processDisasters($dataLand, $landInfoDto->crop->disasters ?? []); // 检查是否可以施肥 $dataLand->setCanFertilization(!$landInfoDto->crop->fertilized); } return $dataLand; } }