FarmHouseConfigController.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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\AdminControllers\Tools\RefreshCheckTool;
  8. use App\Module\Farm\AdminControllers\Tools\SyncFarmHouseJsonTool;
  9. use App\Module\Farm\DCache\FarmHouseJsonConfig;
  10. use App\Module\Farm\Repositories\FarmHouseConfigRepository;
  11. use Dcat\Admin\Form;
  12. use Dcat\Admin\Grid;
  13. use Dcat\Admin\Show;
  14. use UCore\DcatAdmin\AdminController;
  15. use Spatie\RouteAttributes\Attributes\Resource;
  16. use Spatie\RouteAttributes\Attributes\Get;
  17. /**
  18. * 房屋等级配置管理控制器
  19. */
  20. #[Resource('farm-house-configs', names: 'dcat.admin.farm-house-configs')]
  21. class FarmHouseConfigController extends AdminController
  22. {
  23. /**
  24. * 生成房屋配置JSON数据
  25. */
  26. #[Get('farm-house-configs/generate-json')]
  27. public function generateJson()
  28. {
  29. try {
  30. // 直接调用命令生成JSON
  31. $process = new \Symfony\Component\Process\Process(['php', 'artisan', 'farm:generate-house-json']);
  32. $process->setWorkingDirectory(base_path());
  33. $process->run();
  34. if (!$process->isSuccessful()) {
  35. return response()->json([
  36. 'status' => 'error',
  37. 'message' => 'JSON生成失败: ' . $process->getErrorOutput()
  38. ]);
  39. }
  40. return response()->json([
  41. 'status' => 'success',
  42. 'message' => 'JSON生成成功'
  43. ]);
  44. } catch (\Exception $e) {
  45. return response()->json([
  46. 'status' => 'error',
  47. 'message' => 'JSON生成失败: ' . $e->getMessage()
  48. ]);
  49. }
  50. }
  51. /**
  52. * 页面标题
  53. *
  54. * @var string
  55. */
  56. protected $title = '房屋等级配置管理';
  57. /**
  58. * 页面描述
  59. *
  60. * @var string
  61. */
  62. protected $description = '管理房屋等级的配置信息';
  63. /**
  64. * 构建表格
  65. *
  66. * @return Grid
  67. */
  68. protected function grid()
  69. {
  70. return Grid::make(new FarmHouseConfigRepository(), function (Grid $grid) {
  71. // 检查配置表状态
  72. $status = RefreshCheckTool::checkSyncStatus();
  73. if ($status['is_synced']) {
  74. admin_success('JSON配置表状态', $status['message']);
  75. } else {
  76. admin_warning('JSON配置表状态', $status['message']);
  77. }
  78. // 添加工具按钮
  79. $grid->tools([
  80. new RefreshCheckTool($status['should_display']),
  81. new SyncFarmHouseJsonTool($status['should_display'])
  82. ]);
  83. $helper = new GridHelper($grid, $this);
  84. $helper->columnId();
  85. $grid->column('level', '等级')->sortable();
  86. $grid->column('output_bonus', '产出加成')->display(function ($value) {
  87. return ($value * 100) . '%';
  88. })->sortable();
  89. $grid->column('special_land_limit', '特殊土地上限')->sortable();
  90. $grid->column('downgrade_days', '降级天数')->sortable();
  91. $helper->columnCreatedAt();
  92. $helper->columnUpdatedAt();
  93. $grid->filter(function (Grid\Filter $filter) {
  94. $filterHelper = new FilterHelper($filter, $this);
  95. $filterHelper->equalId();
  96. $filter->equal('level', '等级');
  97. $filterHelper->betweenDatetime('created_at', '创建时间');
  98. });
  99. $grid->actions(function (Grid\Displayers\Actions $actions) {
  100. $actions->disableDelete();
  101. });
  102. });
  103. }
  104. /**
  105. * 构建详情页
  106. *
  107. * @param mixed $id
  108. * @return Show
  109. */
  110. protected function detail($id)
  111. {
  112. return Show::make($id, new FarmHouseConfigRepository(), function (Show $show) {
  113. $helper = new ShowHelper($show, $this);
  114. $show->field('id', 'ID');
  115. $show->field('level', '等级');
  116. $show->field('output_bonus', '产出加成')->as(function ($value) {
  117. return ($value * 100) . '%';
  118. });
  119. $show->field('special_land_limit', '特殊土地上限');
  120. $helper->fieldModelCatsJson('upgrade_materials', '升级所需材料');
  121. $show->field('downgrade_days', '降级天数');
  122. $show->field('created_at', '创建时间');
  123. $show->field('updated_at', '更新时间');
  124. });
  125. }
  126. /**
  127. * 构建表单
  128. *
  129. * @return Form
  130. */
  131. protected function form()
  132. {
  133. return Form::make(new FarmHouseConfigRepository(), function (Form $form) {
  134. $helper = new FormHelper($form, $this);
  135. $form->display('id', 'ID');
  136. $form->number('level', '等级')->min(1)->max(12)->required();
  137. $form->rate('output_bonus', '产出加成')->max(1)->step(0.05)->required();
  138. $form->number('special_land_limit', '特殊土地上限')->min(0)->default(0)->required();
  139. $helper->tableMaterials('upgrade_materials', '升级所需材料');
  140. $form->number('downgrade_days', '降级天数')->min(1)->help('留空表示不降级');
  141. $form->display('created_at', '创建时间');
  142. $form->display('updated_at', '更新时间');
  143. });
  144. }
  145. }