高考版优化

审核模式优化
This commit is contained in:
Ghost
2026-04-29 18:01:26 +08:00
parent 59419c4ce9
commit a411bf7b21
134 changed files with 19898 additions and 3371 deletions

View File

@@ -0,0 +1,100 @@
<?php
namespace app\controller\admin;
use app\BaseController;
use app\common\AnalyticsEventLabels;
use think\facade\Db;
use think\facade\Request;
/**
* 小程序埋点(企业/平台管理端,受企业用户范围约束)
*/
class Analytics extends BaseController
{
/**
* 单用户旅程:与 superadmin.Analytics/userJourney 数据结构一致,
* 额外校验目标 userId 属于当前管理员可见企业user_profile
*
* GET /api/v1/admin/analytics/user-journey?userId=&days=30
*/
public function userJourney()
{
$auth = $this->request->user ?? null;
if (!$auth) {
return error('未登录', 401);
}
if (!in_array($auth['role'] ?? '', ['admin', 'enterprise_admin'])) {
return error('无权限访问', 403);
}
$userId = (int) Request::param('userId', 0);
if ($userId <= 0) {
return error('userId 不能为空', 400);
}
$enterpriseId = $auth['enterpriseId'] ?? null;
if (!$enterpriseId) {
$adminRow = Db::name('users')->where('id', $auth['userId'] ?? 0)->find();
$enterpriseId = $adminRow['enterpriseId'] ?? null;
}
if ($enterpriseId) {
$has = Db::name('user_profile')
->where('userId', $userId)
->where('enterpriseId', (int) $enterpriseId)
->find();
if (!$has) {
return error('无权限查看该用户', 403);
}
}
$days = min(180, max(1, (int) Request::param('days', 30)));
$since = date('Y-m-d H:i:s', time() - $days * 86400);
$page = max(1, (int) Request::param('page', 1));
$pageSize = min(100, max(1, (int) Request::param('pageSize', 20)));
$offset = ($page - 1) * $pageSize;
try {
$baseQ = Db::name('analytics_events')
->where('userId', $userId)
->where('createdAt', '>=', $since);
$total = (int) (clone $baseQ)->count();
$rows = (clone $baseQ)
->order('id', 'desc')
->limit($offset, $pageSize)
->select()
->toArray();
foreach ($rows as &$r) {
if (!empty($r['propsJson'])) {
$decoded = json_decode($r['propsJson'], true);
$r['props'] = is_array($decoded) ? $decoded : null;
} else {
$r['props'] = null;
}
unset($r['propsJson']);
}
unset($r);
$rows = AnalyticsEventLabels::withCn($rows);
return success([
'userId' => $userId,
'days' => $days,
'list' => $rows,
'total' => $total,
'page' => $page,
'pageSize' => $pageSize,
]);
} catch (\Throwable $e) {
return success([
'userId' => $userId,
'days' => $days,
'list' => [],
'total' => 0,
'page' => $page,
'pageSize' => $pageSize,
'tableMissing' => true,
]);
}
}
}