Browse Source

refactor(farm): 优化作物生长状态更新逻辑和表格展示- 移除 FarmLandController 中的生长阶段展示逻辑,使用新的枚举展示方法
- 在 GridHelper 中添加 columnUseingEnmu 方法,用于枚举类型的列展示
- 优化 UpdateCropGrowthCommand 中的作物生长状态更新逻辑
- 格式化命令行输出,提高可读性

notfff 7 months ago
parent
commit
3d09a1153c

+ 26 - 0
UCore/DcatAdmin/GridHelper.php

@@ -215,6 +215,32 @@ class GridHelper
         return $this;
     }
 
+    /**
+     * 使用枚举展示
+     *
+     * @param $field
+     * @param $enmu
+     * @param $label
+     * @return Grid\Column
+     */
+    public function columnUseingEnmu($field, $enmuClass, $label = ''): Grid\Column
+    {
+        $option= $enmuClass::getValueDescription();
+        $default = '';
+//        dump($option);
+        return  $this->grid->column($field, $label)->display(function ($value) use ($option, $default) {
+            if (is_null($value)) {
+                return $default;
+            }
+            if ($value instanceof \UnitEnum) {
+                $value = $value->value();
+            }
+
+            return Arr::get($option, $value, $default);
+        });
+    }
+
+
     public function columnUsingVk($field, $enmu, $label = '')
     {
         $res = array_flip($enmu);

+ 1 - 4
app/Module/Farm/AdminControllers/FarmLandController.php

@@ -58,10 +58,7 @@ class FarmLandController extends AdminController
                 return $name ?: '-';
             });
 
-            $grid->column('crop.growth_stage', '生长阶段')->display(function ($stage) {
-                if (!$stage) return '-';
-                return \App\Module\Farm\Enums\GROWTH_STAGE::getName($stage);
-            });
+            $helper->columnUseingEnmu('crop.growth_stage', \App\Module\Farm\Enums\GROWTH_STAGE::class,'生长阶段');
 
             $grid->column('crop.stage_end_time', '阶段结束时间')->display(function ($time) {
                 if (!$time) return '-';

+ 33 - 29
app/Module/Farm/Commands/UpdateCropGrowthCommand.php

@@ -35,62 +35,66 @@ class UpdateCropGrowthCommand extends Command
     public function handle()
     {
         $this->info('开始更新作物生长状态...');
-        
+
         try {
             // 获取需要更新生长阶段的作物
+            /**
+             * @var FarmCrop[] $crops
+             *
+             */
             $crops = FarmCrop::whereNotNull('stage_end_time')
                 ->where('stage_end_time', '<=', now())
                 ->where('growth_stage', '<', GROWTH_STAGE::WITHERED)
                 ->get();
-            
+
             $this->info("找到 {$crops->count()} 个需要更新的作物");
-            
+
             $updatedCount = 0;
-            
+
             foreach ($crops as $crop) {
                 $userId = $crop->user_id;
                 $oldStage = $crop->growth_stage;
-                
+
                 // 计算新的生长阶段
                 $newStage = $this->calculateNextStage($crop);
-                
+
                 // 计算新阶段的结束时间
                 $stageEndTime = $this->calculateStageEndTime($crop, $newStage);
-                
+
                 // 更新作物信息
                 $crop->growth_stage = $newStage;
                 $crop->stage_end_time = $stageEndTime;
                 $crop->fertilized = false; // 重置施肥状态
                 $crop->save();
-                
+
                 // 触发生长阶段变更事件
                 event(new CropGrowthStageChangedEvent($userId, $crop, $oldStage, $newStage));
-                
+
                 $updatedCount++;
-                
+
                 $this->info("作物 ID: {$crop->id}, 用户 ID: {$userId}, 阶段: {$oldStage} -> {$newStage}");
             }
-            
+
             $this->info("成功更新 {$updatedCount} 个作物的生长状态");
-            
+
             Log::info('作物生长状态更新成功', [
                 'total' => $crops->count(),
                 'updated' => $updatedCount
             ]);
-            
+
             return 0;
         } catch (\Exception $e) {
             $this->error('作物生长状态更新失败: ' . $e->getMessage());
-            
+
             Log::error('作物生长状态更新失败', [
                 'error' => $e->getMessage(),
                 'trace' => $e->getTraceAsString()
             ]);
-            
+
             return 1;
         }
     }
-    
+
     /**
      * 计算下一个生长阶段
      *
@@ -100,24 +104,24 @@ class UpdateCropGrowthCommand extends Command
     private function calculateNextStage(FarmCrop $crop): int
     {
         $currentStage = $crop->growth_stage;
-        
+
         // 如果当前是成熟期,且超过一定时间,则进入枯萎期
         if ($currentStage === GROWTH_STAGE::MATURE) {
             // 成熟期持续时间,默认为24小时
             $matureDuration = 24 * 60 * 60;
-            
+
             // 如果成熟期已经超过指定时间,则进入枯萎期
             if ($crop->stage_end_time && now()->diffInSeconds($crop->stage_end_time->subSeconds($matureDuration)) > $matureDuration) {
                 return GROWTH_STAGE::WITHERED;
             }
-            
+
             return GROWTH_STAGE::MATURE;
         }
-        
+
         // 正常阶段递增
         return $currentStage + 1;
     }
-    
+
     /**
      * 计算阶段结束时间
      *
@@ -128,31 +132,31 @@ class UpdateCropGrowthCommand extends Command
     private function calculateStageEndTime(FarmCrop $crop, int $stage)
     {
         $seed = $crop->seed;
-        
+
         if (!$seed) {
             return null;
         }
-        
+
         $now = now();
-        
+
         switch ($stage) {
             case GROWTH_STAGE::SEED:
                 return $now->addSeconds($seed->seed_time);
-                
+
             case GROWTH_STAGE::SPROUT:
                 return $now->addSeconds($seed->sprout_time);
-                
+
             case GROWTH_STAGE::GROWTH:
                 return $now->addSeconds($seed->growth_time);
-                
+
             case GROWTH_STAGE::MATURE:
                 // 成熟期持续24小时后进入枯萎期
                 return $now->addHours(24);
-                
+
             case GROWTH_STAGE::WITHERED:
                 // 枯萎期没有结束时间
                 return null;
-                
+
             default:
                 return null;
         }

+ 0 - 0
vendor/aliyuncs/oss-sdk-php/.coveralls.yml