|
|
@@ -2,95 +2,68 @@
|
|
|
|
|
|
namespace App\Module\UrsPromotion\AdminControllers;
|
|
|
|
|
|
+use UCore\DcatAdmin\AdminController;
|
|
|
+use Spatie\RouteAttributes\Attributes\Resource;
|
|
|
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"
|
|
|
- * )
|
|
|
+ *
|
|
|
+ * @route /admin/urs-promotion/partner-dividend
|
|
|
*/
|
|
|
+#[Resource('urs-promotion/partner-dividend')]
|
|
|
class UrsPartnerDividendController extends AdminController
|
|
|
{
|
|
|
/**
|
|
|
- * 仓库实例
|
|
|
+ * 页面标题
|
|
|
*/
|
|
|
- protected UrsPartnerDividendRepository $repository;
|
|
|
+ protected $title = '合伙人分红管理';
|
|
|
|
|
|
/**
|
|
|
- * 构造函数
|
|
|
+ * 模型类
|
|
|
*/
|
|
|
- public function __construct()
|
|
|
- {
|
|
|
- $this->repository = new UrsPartnerDividendRepository();
|
|
|
- }
|
|
|
+ protected $model = UrsPartnerDividendRecord::class;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 仓库类
|
|
|
+ */
|
|
|
+ protected $repository = UrsPartnerDividendRepository::class;
|
|
|
|
|
|
/**
|
|
|
* 列表页面
|
|
|
*/
|
|
|
protected function grid(): Grid
|
|
|
{
|
|
|
- return Grid::make($this->repository, function (Grid $grid) {
|
|
|
- // 基础配置
|
|
|
+ return Grid::make(new UrsPartnerDividendRepository(), function (Grid $grid) {
|
|
|
+ // 基础列配置
|
|
|
$grid->column('id', 'ID')->sortable();
|
|
|
$grid->column('dividend_date', '分红日期')->sortable();
|
|
|
- $grid->column('total_fee_amount', '总手续费')->display(function ($value) {
|
|
|
+ $grid->column('total_fee_amount', '总手续费')->sortable()->display(function ($value) {
|
|
|
return number_format($value, 4) . ' 钻石';
|
|
|
- })->sortable();
|
|
|
- $grid->column('dividend_amount', '分红金额')->display(function ($value) {
|
|
|
+ });
|
|
|
+ $grid->column('dividend_amount', '分红金额')->sortable()->display(function ($value) {
|
|
|
return number_format($value, 4) . ' 钻石';
|
|
|
- })->sortable();
|
|
|
+ });
|
|
|
$grid->column('partner_count', '合伙人数')->sortable();
|
|
|
- $grid->column('per_partner_amount', '人均分红')->display(function ($value) {
|
|
|
+ $grid->column('per_partner_amount', '人均分红')->sortable()->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->column('status', '状态')->using([
|
|
|
+ 'pending' => '待处理',
|
|
|
+ 'processing' => '处理中',
|
|
|
+ 'completed' => '已完成',
|
|
|
+ 'failed' => '失败'
|
|
|
+ ])->label([
|
|
|
+ 'pending' => 'warning',
|
|
|
+ 'processing' => 'info',
|
|
|
+ 'completed' => 'success',
|
|
|
+ 'failed' => 'danger'
|
|
|
+ ]);
|
|
|
+ $grid->column('created_at', '创建时间')->sortable();
|
|
|
|
|
|
// 操作配置
|
|
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
|
|
@@ -101,17 +74,7 @@ class UrsPartnerDividendController extends AdminController
|
|
|
$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');
|
|
|
});
|
|
|
}
|
|
|
@@ -121,7 +84,7 @@ class UrsPartnerDividendController extends AdminController
|
|
|
*/
|
|
|
protected function detail($id): Show
|
|
|
{
|
|
|
- return Show::make($id, $this->repository, function (Show $show) {
|
|
|
+ return Show::make($id, new UrsPartnerDividendRepository(), function (Show $show) {
|
|
|
// 基础信息
|
|
|
$show->field('id', 'ID');
|
|
|
$show->field('dividend_date', '分红日期');
|
|
|
@@ -136,106 +99,17 @@ class UrsPartnerDividendController extends AdminController
|
|
|
return number_format($value, 4) . ' 钻石';
|
|
|
});
|
|
|
$show->field('status', '状态')->as(function ($status) {
|
|
|
- return UrsPartnerDividendRecord::getStatuses()[$status] ?? '未知';
|
|
|
+ $statuses = [
|
|
|
+ 'pending' => '待处理',
|
|
|
+ 'processing' => '处理中',
|
|
|
+ 'completed' => '已完成',
|
|
|
+ 'failed' => '失败'
|
|
|
+ ];
|
|
|
+ return $statuses[$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;
|
|
|
- });
|
|
|
+ $show->field('created_at', '创建时间');
|
|
|
+ $show->field('updated_at', '更新时间');
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
- /**
|
|
|
- * 执行分红页面
|
|
|
- */
|
|
|
- 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;
|
|
|
- }
|
|
|
}
|