|
|
@@ -15,6 +15,7 @@ use App\Module\Farm\Models\FarmHarvestLog;
|
|
|
use App\Module\Farm\Models\FarmLand;
|
|
|
use App\Module\Farm\Models\FarmSeed;
|
|
|
use App\Module\Farm\Models\FarmSeedOutput;
|
|
|
+use App\Module\Farm\Models\FarmSowLog;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
use UCore\Db\Helper;
|
|
|
@@ -84,13 +85,14 @@ class CropLogic
|
|
|
* @param int $userId
|
|
|
* @param int $landId
|
|
|
* @param int $seedId
|
|
|
- * @return CropInfoDto|null
|
|
|
+ * @return array|null 返回包含CropInfoDto和日志ID的数组,格式为['crop' => CropInfoDto, 'log_id' => int]
|
|
|
+ * @throws \Exception
|
|
|
*/
|
|
|
- public function plantCrop(int $userId, int $landId, int $seedId): ?CropInfoDto
|
|
|
+ public function plantCrop(int $userId, int $landId, int $seedId): ?array
|
|
|
{
|
|
|
try {
|
|
|
- // 开启事务
|
|
|
- DB::beginTransaction();
|
|
|
+ // 检查是否已开启事务
|
|
|
+ \UCore\Db\Helper::check_tr();
|
|
|
|
|
|
// 获取土地信息
|
|
|
$land = FarmLand::where('id', $landId)
|
|
|
@@ -126,13 +128,19 @@ class CropLogic
|
|
|
$crop->fertilized = false;
|
|
|
$crop->save();
|
|
|
|
|
|
+ // 创建种植日志
|
|
|
+ $sowLog = new FarmSowLog();
|
|
|
+ $sowLog->user_id = $userId;
|
|
|
+ $sowLog->land_id = $landId;
|
|
|
+ $sowLog->crop_id = $crop->id;
|
|
|
+ $sowLog->seed_id = $seedId;
|
|
|
+ $sowLog->sow_time = now();
|
|
|
+ $sowLog->save();
|
|
|
+
|
|
|
// 更新土地状态
|
|
|
$land->status = LAND_STATUS::PLANTING->value;
|
|
|
$land->save();
|
|
|
|
|
|
- // 提交事务
|
|
|
- DB::commit();
|
|
|
-
|
|
|
// 触发作物种植事件
|
|
|
event(new CropPlantedEvent($userId, $land, $crop));
|
|
|
|
|
|
@@ -140,10 +148,14 @@ class CropLogic
|
|
|
'user_id' => $userId,
|
|
|
'land_id' => $landId,
|
|
|
'seed_id' => $seedId,
|
|
|
- 'crop_id' => $crop->id
|
|
|
+ 'crop_id' => $crop->id,
|
|
|
+ 'sow_log_id' => $sowLog->id
|
|
|
]);
|
|
|
|
|
|
- return CropInfoDto::fromModel($crop);
|
|
|
+ return [
|
|
|
+ 'crop' => CropInfoDto::fromModel($crop),
|
|
|
+ 'log_id' => $sowLog->id
|
|
|
+ ];
|
|
|
} catch (\Exception $e) {
|
|
|
// 回滚事务
|
|
|
DB::rollBack();
|