121 行
5.1 KiB
PHP
121 行
5.1 KiB
PHP
<?php
|
|
|
|
namespace addons\shopro\controller\user;
|
|
|
|
use addons\shopro\controller\Common;
|
|
use app\admin\model\shopro\user\WalletLog as UserWalletLogModel;
|
|
|
|
class WalletLog extends Common
|
|
{
|
|
|
|
protected $noNeedLogin = [];
|
|
protected $noNeedRight = ['*'];
|
|
|
|
|
|
public function index()
|
|
{
|
|
$type = $this->request->param('type', 'money');
|
|
$tab = $this->request->param('tab', 'all');
|
|
$list_rows = $this->request->param('list_rows', 10);
|
|
$date = $this->request->param('date/a');
|
|
$user = auth_user();
|
|
|
|
$rewardEvents = [
|
|
'push3', 'maker_diff', 'maker_peer', 'maker_overtaken',
|
|
'team_venue', 'team_county', 'venue_peer', 'county_peer',
|
|
'venue_share', 'county_share', 'reward_income', 'transfer_by_commission', 'transfer_to_money'
|
|
];
|
|
|
|
$baseQuery = function () use ($user, $type, $rewardEvents) {
|
|
$model = UserWalletLogModel::where('user_id', $user->id);
|
|
if ($type === 'commission') {
|
|
// 收益记录:既包含历史 commission 流水,也对齐直入 money 的收益分成流水
|
|
$model->where(function ($query) use ($rewardEvents) {
|
|
$query->where('type', 'commission')
|
|
->whereOr(function ($sub) use ($rewardEvents) {
|
|
$sub->where('type', 'money')->whereIn('event', $rewardEvents);
|
|
});
|
|
});
|
|
} else {
|
|
$model->where('type', $type);
|
|
}
|
|
return $model;
|
|
};
|
|
|
|
$filterQuery = $baseQuery();
|
|
|
|
if (!empty($date) && is_array($date) && count($date) === 2) {
|
|
$filterQuery->whereTime('createtime', 'between', $date);
|
|
}
|
|
|
|
switch ($tab) {
|
|
case 'reward':
|
|
$filterQuery->where('amount', '>', 0)->whereIn('event', $rewardEvents);
|
|
break;
|
|
case 'income':
|
|
$filterQuery->where('amount', '>', 0);
|
|
break;
|
|
case 'expense':
|
|
$filterQuery->where('amount', '<', 0);
|
|
break;
|
|
}
|
|
|
|
// 统计收入与支出(统一统计口径,避免内部互转重叠统计造成误导)
|
|
$incomeQuery = $baseQuery();
|
|
$expenseQuery = $baseQuery();
|
|
$rewardQuery = $baseQuery();
|
|
|
|
if (!empty($date) && is_array($date) && count($date) === 2) {
|
|
$incomeQuery->whereTime('createtime', 'between', $date);
|
|
$expenseQuery->whereTime('createtime', 'between', $date);
|
|
$rewardQuery->whereTime('createtime', 'between', $date);
|
|
}
|
|
|
|
$actualRewardEvents = [
|
|
'push3', 'maker_diff', 'maker_peer', 'maker_overtaken',
|
|
'team_venue', 'team_county', 'venue_peer', 'county_peer',
|
|
'venue_share', 'county_share', 'reward_income'
|
|
];
|
|
|
|
if ($type === 'commission') {
|
|
// 收益流水统计口径对齐:
|
|
// 1. 真实收益(总收入):排除内部互转入账事件 transfer_by_commission,避免佣金转入余额时重复计入收益
|
|
// 2. 真实扣减(总支出):排除内部结转转出事件 transfer_to_money 与 commission_transfer,避免误导用户认为产生了消费支出
|
|
$income = (float) $incomeQuery->where('amount', '>', 0)
|
|
->where(function ($q) use ($actualRewardEvents) {
|
|
$q->where(function ($sub) use ($actualRewardEvents) {
|
|
$sub->where('type', 'money')->whereIn('event', $actualRewardEvents);
|
|
})->whereOr(function ($sub) {
|
|
$sub->where('type', 'commission')->whereNotIn('event', ['transfer_by_commission']);
|
|
});
|
|
})->sum('amount');
|
|
|
|
$expense = (float) $expenseQuery->where('amount', '<', 0)
|
|
->whereNotIn('event', ['transfer_to_money', 'commission_transfer'])
|
|
->sum('amount');
|
|
|
|
$rewardIncome = (float) $rewardQuery->where('amount', '>', 0)
|
|
->where(function ($q) use ($actualRewardEvents) {
|
|
$q->where(function ($sub) use ($actualRewardEvents) {
|
|
$sub->where('type', 'money')->whereIn('event', $actualRewardEvents);
|
|
})->whereOr(function ($sub) {
|
|
$sub->where('type', 'commission')->whereNotIn('event', ['transfer_by_commission']);
|
|
});
|
|
})->sum('amount');
|
|
} else {
|
|
$income = (float) $incomeQuery->where('amount', '>', 0)->sum('amount');
|
|
$expense = (float) $expenseQuery->where('amount', '<', 0)->sum('amount');
|
|
$rewardIncome = (float) $rewardQuery->where('amount', '>', 0)->whereIn('event', $actualRewardEvents)->sum('amount');
|
|
}
|
|
|
|
$logs = $filterQuery->order('id', 'desc')->paginate($list_rows);
|
|
|
|
$this->success('获取成功', [
|
|
'list' => $logs,
|
|
'income' => $income,
|
|
'expense' => $expense,
|
|
'reward_income' => $rewardIncome,
|
|
]);
|
|
}
|
|
}
|