FarmCropController.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. namespace App\Module\Farm\AdminControllers;
  3. use App\Module\Farm\AdminControllers\Helper\FilterHelper;
  4. use App\Module\Farm\AdminControllers\Helper\FormHelper;
  5. use App\Module\Farm\AdminControllers\Helper\GridHelper;
  6. use App\Module\Farm\AdminControllers\Helper\ShowHelper;
  7. use App\Module\Farm\Enums\GROWTH_STAGE;
  8. use App\Module\Farm\Repositories\FarmCropRepository;
  9. use App\Module\Farm\Repositories\FarmSeedRepository;
  10. use Dcat\Admin\Form;
  11. use Dcat\Admin\Grid;
  12. use Dcat\Admin\Show;
  13. use UCore\DcatAdmin\AdminController;
  14. use Spatie\RouteAttributes\Attributes\Resource;
  15. use Spatie\RouteAttributes\Attributes\Post;
  16. /**
  17. * 作物管理控制器
  18. */
  19. #[Resource('farm-crops', names: 'dcat.admin.farm-crops')]
  20. class FarmCropController extends AdminController
  21. {
  22. /**
  23. * 页面标题
  24. *
  25. * @var string
  26. */
  27. protected $title = '作物管理';
  28. /**
  29. * 页面描述
  30. *
  31. * @var string
  32. */
  33. protected $description = '管理用户种植的作物';
  34. /**
  35. * 构建表格
  36. *
  37. * @return Grid
  38. */
  39. protected function grid()
  40. {
  41. return Grid::make(new FarmCropRepository(), function (Grid $grid) {
  42. $helper = new GridHelper($grid, $this);
  43. $helper->columnId();
  44. $grid->column('land_id', '土地ID')->sortable();
  45. $helper->columnUserId();
  46. $grid->column('seed_id', '种子ID')->sortable();
  47. $grid->column('land_level', '土地等级')->sortable()->display(function ($value) {
  48. $landType = \App\Module\Farm\Models\FarmLandType::find($value);
  49. $typeName = $landType ? $landType->name : '未知';
  50. return "<span class='badge badge-info'>{$typeName}({$value})</span>";
  51. });
  52. $grid->column('plant_time', '种植时间')->sortable();
  53. $helper->columnUseingEnmu('growth_stage', \App\Module\Farm\Enums\GROWTH_STAGE::class,'生长阶段');
  54. $grid->column('stage_end_time', '阶段结束时间')->sortable();
  55. // 添加产出相关字段
  56. $grid->column('final_output_item_id', '产出物品ID')->sortable()->display(function ($value) {
  57. if ($value) {
  58. return "<span class='label label-success'>{$value}</span>";
  59. }
  60. return "<span class='label label-warning'>未确定</span>";
  61. });
  62. $grid->column('final_output_amount', '预定产量')->sortable()->display(function ($value) {
  63. if ($value) {
  64. return "<span class='label label-info'>{$value}</span>";
  65. }
  66. return "<span class='label --warning'>未确定</span>";
  67. });
  68. $helper->columnFertilized();
  69. $helper->columnCreatedAt();
  70. $helper->columnUpdatedAt();
  71. $grid->filter(function (Grid\Filter $filter) {
  72. $filterHelper = new FilterHelper($filter, $this);
  73. $filter->scope('trashed', '回收站')->onlyTrashed();
  74. $filterHelper->equalId();
  75. $filter->equal('land_id', '土地ID');
  76. $filterHelper->equalUserId();
  77. $filter->equal('seed_id', '种子ID');
  78. $filterHelper->equalGrowthStage();
  79. $filterHelper->equalLandType('land_level'); // land_level
  80. $filterHelper->betweenDatetime('plant_time', '种植时间');
  81. $filterHelper->betweenDatetime('stage_end_time', '阶段结束时间');
  82. // 添加产出相关过滤器
  83. $filter->equal('final_output_item_id', '产出物品ID');
  84. $filter->where('output_status', function ($query) {
  85. $value = $this->input;
  86. if ($value == 'has_amount') {
  87. $query->whereNotNull('final_output_amount');
  88. } elseif ($value == 'no_amount') {
  89. $query->whereNull('final_output_amount');
  90. }
  91. }, '产量状态')->select([
  92. 'has_amount' => '已确定产量',
  93. 'no_amount' => '未确定产量'
  94. ]);
  95. $filterHelper->equalFertilized();
  96. $filterHelper->betweenDatetime('created_at', '创建时间');
  97. });
  98. });
  99. }
  100. /**
  101. * 构建详情页
  102. *
  103. * @param mixed $id
  104. * @return Show
  105. */
  106. protected function detail($id)
  107. {
  108. return Show::make($id, new FarmCropRepository(), function (Show $show) {
  109. $helper = new ShowHelper($show, $this);
  110. $show->field('id', 'ID');
  111. $show->field('land_id', '土地ID');
  112. $helper->fieldUserId('user_id', '用户ID');
  113. $show->field('seed_id', '种子ID');
  114. $show->field('land_level', '土地等级')->as(function ($value) {
  115. $landType = \App\Module\Farm\Models\FarmLandType::find($value);
  116. $typeName = $landType ? $landType->name : '未知';
  117. return "<span class='badge badge-info'>{$typeName}({$value})</span>";
  118. });
  119. $show->field('plant_time', '种植时间');
  120. $helper->fieldGrowthStage('growth_stage', '生长阶段');
  121. $show->field('stage_end_time', '阶段结束时间');
  122. // 添加产出相关字段(增强版本)
  123. $show->field('final_output_item_id', '产出物品ID')->as(function ($value) {
  124. return $value ? "<span class='label label-success'>{$value}</span>" : "<span class='label label-warning'>未确定</span>";
  125. });
  126. $show->field('final_output_amount', '预定产量')->as(function ($value) {
  127. return $value ? "<span class='label label-info'>{$value}</span>" : "<span class='label label-warning'>未确定</span>";
  128. });
  129. // 添加数据完整性状态
  130. $show->field('data_status', '数据状态')->as(function () {
  131. $hasItemId = !empty($this->final_output_item_id);
  132. $hasAmount = !empty($this->final_output_amount);
  133. $isMature = $this->growth_stage == GROWTH_STAGE::MATURE->value;
  134. if ($isMature) {
  135. if ($hasItemId && $hasAmount) {
  136. return "<span class='label label-success'>数据完整,可正常收获</span>";
  137. } elseif ($hasItemId) {
  138. return "<span class='label label-warning'>缺少产量,需要修复</span>";
  139. } else {
  140. return "<span class='label label-danger'>缺少产出物品ID,严重错误</span>";
  141. }
  142. } else {
  143. if ($hasItemId) {
  144. return "<span class='label label-info'>已确定产出物品,等待成熟期确定产量</span>";
  145. } else {
  146. return "<span class='label label-default'>等待发芽期确定产出物品</span>";
  147. }
  148. }
  149. });
  150. // 使用新的灾害显示方法
  151. $show->fieldModelCatsJson2('disasters', '灾害情况');
  152. $helper->fieldFertilized('fertilized', '已施肥');
  153. $show->field('created_at', '创建时间');
  154. $show->field('updated_at', '更新时间');
  155. });
  156. }
  157. /**
  158. * 构建表单
  159. *
  160. * @return Form
  161. */
  162. protected function form()
  163. {
  164. return Form::make(new FarmCropRepository(), function (Form $form) {
  165. $helper = new FormHelper($form, $this);
  166. $form->display('id', 'ID');
  167. $form->text('land_id', '土地ID')->required()->rules('required|integer');
  168. $helper->display('user_id', '用户ID');
  169. // 获取所有种子选项
  170. $form->display('seed_id', '种子ID');
  171. // 土地等级字段
  172. $form->select('land_level', '土地等级')
  173. ->options(\App\Module\Farm\Models\FarmLandType::pluck('name', 'id')->toArray())
  174. ->help('种植时记录的土地等级,用于产出计算');
  175. $form->datetime('plant_time', '种植时间')->required();
  176. $helper->selectOptionCast('growth_stage', '生长阶段');
  177. $form->datetime('stage_end_time', '阶段结束时间');
  178. // 添加产出相关字段
  179. $form->number('final_output_item_id', '产出物品ID')
  180. ->help('发芽期自动确定,也可手动设置');
  181. $form->number('final_output_amount', '预定产量')
  182. ->min(1)
  183. ->help('成熟期自动计算,也可手动设置。注意:手动设置后收获时会直接使用此产量');
  184. // 添加数据状态提示
  185. $form->html('<div class="alert alert-info">
  186. <h4>产出数据说明:</h4>
  187. <ul>
  188. <li><strong>产出物品ID</strong>:在发芽期自动确定,决定收获什么物品</li>
  189. <li><strong>预定产量</strong>:在成熟期自动计算,决定收获数量</li>
  190. <li><strong>成熟期作物</strong>:必须有完整的产出数据才能正常收获</li>
  191. <li><strong>修复建议</strong>:如果数据不完整,请运行修复命令:<code>php artisan farm:fix-crop-mature-output</code></li>
  192. </ul>
  193. </div>');
  194. $helper->display('disasters', '灾害情况');
  195. $helper->switchFertilized();
  196. $form->display('created_at', '创建时间');
  197. $form->display('updated_at', '更新时间');
  198. });
  199. }
  200. }