| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- <?php
- namespace App\Module\UrsPromotion\AdminControllers;
- use App\Module\UrsPromotion\Models\UrsPartnerDividendRecord;
- use App\Module\UrsPromotion\Models\UrsPartnerDividendDetail;
- use App\Module\UrsPromotion\Repositories\UrsPartnerDividendRepository;
- use App\Module\UrsPromotion\Services\UrsPartnerDividendService;
- use UCore\DcatAdmin\AdminController;
- use UCore\DcatAdmin\Helper\GridHelper;
- use UCore\DcatAdmin\Helper\ShowHelper;
- use UCore\DcatAdmin\Helper\FilterHelper;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use Dcat\Admin\Http\Controllers\AdminController as BaseAdminController;
- use Illuminate\Http\Request;
- /**
- * URS合伙人分红管理控制器
- *
- * @AdminController(
- * title="合伙人分红管理",
- * permission="urs-promotion.partner-dividend"
- * )
- *
- * @AdminRoute(
- * uri="urs-promotion/partner-dividend",
- * name="urs-promotion.partner-dividend"
- * )
- */
- class UrsPartnerDividendController extends AdminController
- {
- /**
- * 仓库实例
- */
- protected UrsPartnerDividendRepository $repository;
- /**
- * 构造函数
- */
- public function __construct()
- {
- $this->repository = new UrsPartnerDividendRepository();
- }
- /**
- * 列表页面
- */
- protected function grid(): Grid
- {
- return Grid::make($this->repository, function (Grid $grid) {
- // 基础配置
- $grid->column('id', 'ID')->sortable();
- $grid->column('dividend_date', '分红日期')->sortable();
- $grid->column('total_fee_amount', '总手续费')->display(function ($value) {
- return number_format($value, 4) . ' 钻石';
- })->sortable();
- $grid->column('dividend_amount', '分红金额')->display(function ($value) {
- return number_format($value, 4) . ' 钻石';
- })->sortable();
- $grid->column('partner_count', '合伙人数')->sortable();
- $grid->column('per_partner_amount', '人均分红')->display(function ($value) {
- return number_format($value, 4) . ' 钻石';
- });
-
- // 状态显示
- $grid->column('status', '状态')->display(function ($status) {
- $colors = [
- 'pending' => 'warning',
- 'processing' => 'info',
- 'completed' => 'success',
- 'failed' => 'danger'
- ];
- $names = UrsPartnerDividendRecord::getStatuses();
- $color = $colors[$status] ?? 'secondary';
- $name = $names[$status] ?? '未知';
- return "<span class='badge badge-{$color}'>{$name}</span>";
- });
- // 转账应用
- $grid->column('transferApp.title', '转账应用');
-
- // 时间显示
- GridHelper::dateTimeColumns($grid, ['created_at']);
- // 筛选器
- $grid->filter(function (Grid\Filter $filter) {
- FilterHelper::dateRangeFilter($filter, 'dividend_date', '分红日期');
- $filter->equal('status', '状态')->select(UrsPartnerDividendRecord::getStatuses());
- $filter->equal('transfer_app_id', '转账应用')->select(
- \App\Module\Transfer\Models\TransferApp::pluck('title', 'id')->toArray()
- );
- });
- // 操作配置
- $grid->actions(function (Grid\Displayers\Actions $actions) {
- $actions->disableEdit();
- $actions->disableDelete();
- });
- $grid->disableCreateButton();
- $grid->disableBatchActions();
- // 工具栏
- $grid->tools(function (Grid\Tools $tools) {
- $tools->append('<a href="' . admin_route('urs-promotion.partner-dividend.execute') . '" class="btn btn-primary btn-sm">
- <i class="fa fa-play"></i> 执行分红
- </a>');
- $tools->append('<a href="' . admin_route('urs-promotion.partner-dividend.statistics') . '" class="btn btn-info btn-sm">
- <i class="fa fa-chart-bar"></i> 分红统计
- </a>');
- });
- // 排序
- $grid->model()->orderBy('dividend_date', 'desc');
- });
- }
- /**
- * 详情页面
- */
- protected function detail($id): Show
- {
- return Show::make($id, $this->repository, function (Show $show) {
- // 基础信息
- $show->field('id', 'ID');
- $show->field('dividend_date', '分红日期');
- $show->field('total_fee_amount', '总手续费')->as(function ($value) {
- return number_format($value, 4) . ' 钻石';
- });
- $show->field('dividend_amount', '分红金额')->as(function ($value) {
- return number_format($value, 4) . ' 钻石';
- });
- $show->field('partner_count', '合伙人数');
- $show->field('per_partner_amount', '人均分红')->as(function ($value) {
- return number_format($value, 4) . ' 钻石';
- });
- $show->field('status', '状态')->as(function ($status) {
- return UrsPartnerDividendRecord::getStatuses()[$status] ?? '未知';
- });
- $show->field('transferApp.title', '转账应用');
- $show->field('error_message', '错误信息');
-
- ShowHelper::dateTimeFields($show, ['created_at', 'updated_at']);
- // 分红详情
- $show->relation('details', '分红详情', function ($model) {
- $grid = new Grid(new UrsPartnerDividendDetail());
- $grid->setResource('urs-promotion/partner-dividend-details');
-
- $grid->column('user_id', '用户ID');
- $grid->column('user.username', '用户名');
- $grid->column('urs_user_id', 'URS用户ID');
- $grid->column('talent_level_name', '达人等级');
- $grid->column('dividend_amount', '分红金额')->display(function ($value) {
- return number_format($value, 4) . ' 钻石';
- });
- $grid->column('status', '状态')->display(function ($status) {
- $colors = [
- 'pending' => 'warning',
- 'completed' => 'success',
- 'failed' => 'danger'
- ];
- $names = UrsPartnerDividendDetail::getStatuses();
- $color = $colors[$status] ?? 'secondary';
- $name = $names[$status] ?? '未知';
- return "<span class='badge badge-{$color}'>{$name}</span>";
- });
- $grid->column('transfer_order_id', '转账订单ID');
- $grid->column('error_message', '错误信息');
- GridHelper::dateTimeColumns($grid, ['created_at']);
- $grid->model()->where('dividend_record_id', $model->id);
- $grid->disableActions();
- $grid->disableCreateButton();
- $grid->disableBatchActions();
- $grid->disableFilter();
- return $grid;
- });
- });
- }
- /**
- * 执行分红页面
- */
- public function execute(Request $request)
- {
- if ($request->isMethod('post')) {
- $date = $request->input('date');
- $force = $request->input('force', false);
- // 验证日期
- if (!$date || !strtotime($date)) {
- return response()->json([
- 'status' => false,
- 'message' => '请选择有效的分红日期'
- ]);
- }
- // 检查是否已经分红
- if (!$force && UrsPartnerDividendRecord::isDividendProcessed($date)) {
- return response()->json([
- 'status' => false,
- 'message' => "日期 {$date} 的分红已经处理过了"
- ]);
- }
- // 执行分红
- $result = UrsPartnerDividendService::executeDailyDividend($date);
- return response()->json([
- 'status' => $result['success'],
- 'message' => $result['message'],
- 'data' => $result['data'] ?? null
- ]);
- }
- // 显示执行页面
- $content = admin_view('urs-promotion::partner-dividend.execute');
- return $content;
- }
- /**
- * 分红统计页面
- */
- public function statistics()
- {
- $stats = UrsPartnerDividendService::getDividendStatistics();
- $partnerList = UrsPartnerDividendService::getPartnerList();
- $recentHistory = UrsPartnerDividendService::getDividendHistory(null, null, 10);
- $content = admin_view('urs-promotion::partner-dividend.statistics', [
- 'stats' => $stats['data'] ?? [],
- 'partners' => $partnerList['data'] ?? [],
- 'history' => $recentHistory['data'] ?? []
- ]);
- return $content;
- }
- }
|