FundLogController.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. namespace App\Module\Fund\AdminControllers;
  3. use App\Module\Fund\AdminControllers\Helper\FilterHelper;
  4. use App\Module\Fund\AdminControllers\Helper\FormHelper;
  5. use App\Module\Fund\AdminControllers\Helper\GridHelper;
  6. use App\Module\Fund\AdminControllers\Helper\ShowHelper;
  7. use App\Module\Fund\Services\AccountService;
  8. use App\Module\Fund\Services\LogService;
  9. use Spatie\RouteAttributes\Attributes\Resource;
  10. use UCore\DcatAdmin\AdminController;
  11. use Dcat\Admin\Form;
  12. use Dcat\Admin\Grid;
  13. use Dcat\Admin\Show;
  14. use App\Module\Fund\Repositorys\FundLogRepository as FundLog;
  15. use UCore\DcatAdmin\Metrics\Examples\Link;
  16. /**
  17. * 资金日志
  18. */
  19. #[Resource('fund-logs', names: 'dcat.admin.fund-logs')]
  20. class FundLogController extends AdminController
  21. {
  22. /**
  23. * 页面标题
  24. *
  25. * @var string
  26. */
  27. protected $title = '资金日志';
  28. /**
  29. * 日志服务
  30. *
  31. * @var LogService
  32. */
  33. protected $service;
  34. /**
  35. * 构造函数
  36. */
  37. public function __construct()
  38. {
  39. $this->service = new LogService();
  40. }
  41. /**
  42. * 列表页面
  43. *
  44. * @return Grid
  45. */
  46. protected function grid()
  47. {
  48. return Grid::make(new FundLog(['user']), function (Grid $grid) {
  49. // 使用GridHelper
  50. $helper = new GridHelper($grid, $this);
  51. // 使用高复用价值的列方法
  52. $grid->column('id', 'ID')->sortable();
  53. $helper->columnUserFund(); // 组合列,显示用户ID和资金账户
  54. $helper->columnAmount(); // 格式化金额显示,带颜色
  55. $helper->columnMoney('before_balance', '之前余额'); // 格式化金额显示
  56. $helper->columnMoney('later_balance', '之后余额'); // 格式化金额显示
  57. $grid->column('remark', '备注')->limit(30);
  58. $helper->columnTimestamp('create_time', '操作时间'); // 格式化时间戳
  59. // 关联操作列
  60. $grid->column('operate_type', '关联')->expand(function() {
  61. $url = admin_url('404');
  62. $title = '未知';
  63. if($this->operate_type == 'Circulation'){
  64. $url = admin_route('fund_circulation.index',['id'=>$this->operate_id]);
  65. $title = '流转';
  66. }
  67. if($this->operate_type == 'Trade'){
  68. if(substr($this->operate_id,0,5) == 'order'){
  69. // 订单
  70. $url = admin_route('order.index',['id'=>substr($this->operate_id,6) ]);
  71. $title = '订单';
  72. }
  73. if(substr($this->operate_id,0,8) == 'Transfer'){
  74. // 订单
  75. $url = admin_route('transfer.index',['id'=>substr($this->operate_id,9) ]);
  76. $title = '划转';
  77. }
  78. }
  79. $link = new Link($title,$url);
  80. return $link;
  81. });
  82. // 禁用不需要的功能
  83. $grid->disableCreateButton();
  84. $grid->disableDeleteButton();
  85. // 筛选器
  86. $grid->filter(function (Grid\Filter $filter) {
  87. // 使用FilterHelper
  88. $helper = new FilterHelper($filter, $this);
  89. // 直接实现资金日志筛选组
  90. $filter->equal('user_id', '用户ID');
  91. $helper->equalFundId();
  92. $helper->equalOperateType();
  93. $helper->betweenAmount();
  94. $filter->like('remark', '备注');
  95. $helper->betweenTimestamp('create_time', '创建时间');
  96. });
  97. // 操作按钮
  98. $grid->actions(function (Grid\Displayers\Actions $actions) {
  99. $actions->disableEdit();
  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 FundLog(), function (Show $show) {
  113. // 使用ShowHelper
  114. $helper = new ShowHelper($show, $this);
  115. // 直接实现资金日志详情面板
  116. $show->divider('操作信息');
  117. $show->field('user_id', '用户ID');
  118. $helper->fieldFundId();
  119. $helper->fieldAmount();
  120. $helper->fieldOperateType();
  121. $show->field('remark', '备注');
  122. $helper->fieldTimestamp('create_time', '创建时间');
  123. // 显示关联的资金账户
  124. $show->relation('account', '资金账户', function ($model) {
  125. $show = Show::make($model, new \App\Module\Fund\Models\FundAccount());
  126. // 在关联显示中也使用ShowHelper
  127. $helper = new ShowHelper($show, $this);
  128. // 直接实现资金账户详情面板
  129. $show->divider('账户信息');
  130. $show->field('user_id', '用户ID');
  131. $helper->fieldFundId();
  132. $helper->fieldBalance();
  133. $helper->fieldStatus();
  134. $show->field('fund_type', '资金类型')->as(function ($value) {
  135. return \App\Module\Fund\Enums\FUND_TYPE::getName($value);
  136. });
  137. $helper->fieldTimestamp('create_time', '创建时间');
  138. $helper->fieldTimestamp('update_time', '更新时间');
  139. return $show;
  140. });
  141. });
  142. }
  143. /**
  144. * 表单页面
  145. *
  146. * @return Form
  147. */
  148. protected function form()
  149. {
  150. return Form::make(new FundLog(), function (Form $form) {
  151. // 使用FormHelper
  152. $helper = new FormHelper($form, $this);
  153. $form->display('id', 'ID');
  154. // 使用高复用价值的表单方法组
  155. $helper->addFundOperationFields(); // 添加完整的资金操作表单组
  156. $form->display('create_time', '创建时间');
  157. // 保存前回调
  158. $form->saving(function (Form $form) {
  159. // 检查用户和资金账户是否存在
  160. if ($form->isCreating()) {
  161. $userId = $form->user_id;
  162. $fundId = $form->fund_id;
  163. $user = \App\Module\User\Models\User::find($userId);
  164. if (!$user) {
  165. return $form->response()->error('用户ID不存在');
  166. }
  167. $account = \App\Module\Fund\Models\FundAccount::where('user_id', $userId)
  168. ->where('fund_id', $fundId)
  169. ->first();
  170. if (!$account) {
  171. return $form->response()->error('资金账户不存在');
  172. }
  173. }
  174. });
  175. // 保存后回调
  176. $form->saved(function (Form $form) {
  177. // 更新资金账户余额
  178. if ($form->isCreating()) {
  179. $this->service->updateAccountBalance($form->user_id, $form->fund_id, $form->amount);
  180. return $form->response()->success('保存成功,资金账户余额已更新');
  181. }
  182. });
  183. });
  184. }
  185. }