FundLogController.php 7.1 KB

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