mirror of
https://gitee.com/technical-laohu/mpay.git
synced 2025-11-15 07:03:44 +08:00
1、更新通道统计,可以查看每个通道的收入情况,可以查询指定时间段的通道收入情况
2、账号管理列表交互优化,添加操作下拉框 3、修复二维码图片上传功能可能导致的漏洞
This commit is contained in:
BIN
app/app.zip
Normal file
BIN
app/app.zip
Normal file
Binary file not shown.
@@ -74,4 +74,9 @@ class PayManageController extends BaseController
|
||||
View::assign(['id' => $id]);
|
||||
return View::fetch();
|
||||
}
|
||||
// 收款统计
|
||||
public function payStatistics()
|
||||
{
|
||||
return View::fetch();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ namespace app\controller\api;
|
||||
use app\BaseController;
|
||||
use app\model\PayAccount;
|
||||
use app\model\PayChannel;
|
||||
use app\model\Order;
|
||||
use think\facade\Db;
|
||||
use \think\facade\Log;
|
||||
|
||||
class PayManageController extends BaseController
|
||||
@@ -208,4 +210,73 @@ class PayManageController extends BaseController
|
||||
return json(['code' => 1, 'msg' => $records['msg']]);
|
||||
}
|
||||
}
|
||||
|
||||
public function payStatisticsList()
|
||||
{
|
||||
$query = $this->request->get();
|
||||
$limit = $query['limit'] ?? 10;
|
||||
$page = $query['page'] ?? 1;
|
||||
$start_time = $query['time_start'] ?? date('Y-m-d H:i:s', strtotime('today'));
|
||||
$end_time = $query['time_end'] ?? date('Y-m-d H:i:s', strtotime('tomorrow') - 1);
|
||||
// 确保日期时间格式正确
|
||||
$start_time = date('Y-m-d H:i:s', strtotime($start_time));
|
||||
$end_time = date('Y-m-d H:i:s', strtotime($end_time));
|
||||
|
||||
$accounts = Db::table('mpay_pay_account', 'PayAccount')
|
||||
->alias('PayAccount')
|
||||
->join('mpay_order Order', 'PayAccount.id = Order.aid AND Order.delete_time IS NULL AND Order.state = 1', 'LEFT')
|
||||
->field([
|
||||
'PayAccount.*',
|
||||
'SUM(CASE WHEN DATE(Order.pay_time) = CURDATE() THEN Order.really_price ELSE 0 END) as day',
|
||||
'SUM(CASE WHEN DATE(Order.pay_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN Order.really_price ELSE 0 END) as yesterday',
|
||||
'SUM(CASE WHEN YEARWEEK(Order.pay_time, 1) = YEARWEEK(CURDATE(), 1) THEN Order.really_price ELSE 0 END) as week',
|
||||
'SUM(CASE WHEN DATE_FORMAT(Order.pay_time, "%Y-%m") = DATE_FORMAT(CURDATE(), "%Y-%m") THEN Order.really_price ELSE 0 END) as month',
|
||||
'SUM(CASE WHEN YEAR(Order.pay_time) = YEAR(CURDATE()) THEN Order.really_price ELSE 0 END) as year',
|
||||
'SUM(IFNULL(Order.really_price, 0)) as total',
|
||||
"SUM(CASE WHEN Order.pay_time BETWEEN '$start_time' AND '$end_time' THEN Order.really_price ELSE 0 END) as income"
|
||||
])
|
||||
->where('PayAccount.delete_time IS NULL')
|
||||
->group('PayAccount.id')
|
||||
->order('PayAccount.id', 'DESC')
|
||||
->paginate(['list_rows' => $limit, 'page' => $page]);
|
||||
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => 'OK',
|
||||
'count' => $accounts->total(),
|
||||
'data' => $accounts->items()
|
||||
]);
|
||||
}
|
||||
|
||||
// 收款统计
|
||||
// public function payStatisticsList()
|
||||
// {
|
||||
// $query = $this->request->get();
|
||||
// // 定义统计字段
|
||||
// $fields = [
|
||||
// "SUM(IF(DATE(pay_time) = CURDATE(), really_price, 0)) as day",
|
||||
// "SUM(IF(DATE(pay_time) = CURDATE() - INTERVAL 1 DAY, really_price, 0)) as yesterday",
|
||||
// "SUM(IF(YEARWEEK(pay_time, 1) = YEARWEEK(CURDATE(), 1), really_price, 0)) as week",
|
||||
// "SUM(IF(DATE_FORMAT(pay_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m'), really_price, 0)) as month",
|
||||
// "SUM(IF(YEAR(pay_time) = YEAR(CURDATE()), really_price, 0)) as year",
|
||||
// "SUM(really_price) as total"
|
||||
// ];
|
||||
|
||||
// $where = ['state', 1;
|
||||
|
||||
// // 合并 pay_account 表字段和统计字段
|
||||
// $allFields = array_merge([PayAccount::getTable() . '.*'], $fields);
|
||||
|
||||
// $accounts = PayAccount::hasWhere('order', $where, '*', 'LEFT')
|
||||
// ->field($allFields)
|
||||
// ->group(PayAccount::getTable() . '.id')
|
||||
// ->order('id', 'desc')
|
||||
// ->paginate(['list_rows' => $query['limit'] ?? 10, 'page' => $query['page'] ?? 1]);
|
||||
|
||||
// if ($accounts) {
|
||||
// return json(['code' => 0, 'msg' => PayAccount::getLastSql(), 'count' => $accounts->total(), 'data' => $accounts->items()]);
|
||||
// } else {
|
||||
// return json(['code' => 1, 'msg' => '无数据记录', 'count' => 0, 'data' => []]);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -210,6 +210,6 @@ class Order extends BaseModel
|
||||
// 模型多对一关联
|
||||
public function payAccount()
|
||||
{
|
||||
return $this->belongsTo(PayAccount::class, 'aid', 'id');
|
||||
return $this->belongsTo(PayAccount::class, 'id', 'aid');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,25 @@ class PayAccount extends BaseModel
|
||||
$select[] = [$key, '=', $value];
|
||||
}
|
||||
}
|
||||
return self::withCount(['payChannel' => 'channel'])->where($select);
|
||||
return self::withCount(['payChannel' => 'channel_num'])->withSum(['order' => function ($query, &$alias) {
|
||||
$query->whereDay('pay_time')->where('state', 1);
|
||||
$alias = 'income';
|
||||
}], 'really_price')->where($select);
|
||||
}
|
||||
public static function findAccount($query)
|
||||
{
|
||||
$select = [];
|
||||
$allow_field = ['state', 'platform', 'account', 'pattern'];
|
||||
foreach ($query as $key => $value) {
|
||||
if (in_array($key, $allow_field) && isset($value)) {
|
||||
if ($key === 'account') {
|
||||
$select[] = [$key, 'like', '%' . $value . '%'];
|
||||
continue;
|
||||
}
|
||||
$select[] = [$key, '=', $value];
|
||||
}
|
||||
}
|
||||
return self::where($select);
|
||||
}
|
||||
// 获取账号配置
|
||||
public static function getAccountConfig($aid, $pid = null): array|bool
|
||||
@@ -86,4 +104,9 @@ class PayAccount extends BaseModel
|
||||
{
|
||||
return $this->hasMany(PayChannel::class, 'account_id', 'id');
|
||||
}
|
||||
// 一对多关联
|
||||
public function order()
|
||||
{
|
||||
return $this->hasMany(Order::class, 'aid', 'id');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user