Browse Source

feat(user): 新增数据看板功能模块

- 新增 DataBoardController 控制器,提供各类统计数据接口
- 新增 DataBoardService 服务类,实现具体统计逻辑
- 在路由中注册数据看板相关接口路径及权限控制
- 为在线媒体列表增加名称模糊搜索功能
- 完善数据看板的五个统计维度:数据总量、AI平台问题占比、搜索报表、问题报表、品牌报表
master
zhangf@suq.cn 2 days ago
parent
commit
6d6598816c
  1. 1
      app/controller/admin/OnlineMediasController.php
  2. 34
      app/controller/user/DataBoardController.php
  3. 15
      app/route/route.php
  4. 3
      app/service/admin/OnlineMediasService.php
  5. 117
      app/service/user/DataBoardService.php

1
app/controller/admin/OnlineMediasController.php

@ -12,6 +12,7 @@ class OnlineMediasController
{ {
$params = requestOnly([ $params = requestOnly([
'wheres' => [], 'wheres' => [],
'name' => ''
]); ]);
return success($service->listData($params)); return success($service->listData($params));
} }

34
app/controller/user/DataBoardController.php

@ -0,0 +1,34 @@
<?php
namespace app\controller\user;
use app\service\user\DataBoardService;
class DataBoardController
{
public function countStatistic(DataBoardService $service)
{
return success($service->countStatistic());
}
public function aiStatistic(DataBoardService $service)
{
return success($service->aiStatistic());
}
public function searchStatistic(DataBoardService $service)
{
return success($service->searchStatistic());
}
public function questionStatistic(DataBoardService $service)
{
return success($service->questionStatistic());
}
public function brandStatistic(DataBoardService $service)
{
return success($service->brandStatistic());
}
}

15
app/route/route.php

@ -7,6 +7,7 @@ use app\controller\user\ArticleCategoryController;
use app\controller\user\CreationArticleController; use app\controller\user\CreationArticleController;
use app\controller\user\CreationArticleReceiveRecordsController; use app\controller\user\CreationArticleReceiveRecordsController;
use app\controller\user\CreationTaskController; use app\controller\user\CreationTaskController;
use app\controller\user\DataBoardController;
use app\controller\user\DistillationQuestionsController; use app\controller\user\DistillationQuestionsController;
use app\controller\user\DistillationWordController; use app\controller\user\DistillationWordController;
use app\controller\user\EnterprisePortraitCategoryController; use app\controller\user\EnterprisePortraitCategoryController;
@ -22,6 +23,20 @@ use Webman\Route;
* 用户端定制路由 * 用户端定制路由
*/ */
Route::group('/service/v1', function () { Route::group('/service/v1', function () {
//数据看板
Route::group('/databoard', function () {
//数据总量
Route::get('/count', [DataBoardController::class, 'countStatistic'])->setParams(['perm' => ['databoardCount']]);
//各平台问题占比
Route::get('/ai', [DataBoardController::class, 'aiStatistic'])->setParams(['perm' => ['databoardAi']]);
//搜索报表
Route::get('/search', [DataBoardController::class, 'searchStatistic'])->setParams(['perm' => ['databoardSearch']]);
//问题报表
Route::get('/question', [DataBoardController::class, 'questionStatistic'])->setParams(['perm' => ['databoardQuestion']]);
//品牌报表
Route::get('/brand', [DataBoardController::class, 'brandStatistic'])->setParams(['perm' => ['databoardBrand']]);
});
//控制台 //控制台
Route::group('/statistic', function () { Route::group('/statistic', function () {
//数量统计 //数量统计

3
app/service/admin/OnlineMediasService.php

@ -32,6 +32,9 @@ class OnlineMediasService extends BaseService
} }
} }
} }
if (isNotBlank($params['name'])) {
$query[] = ['name', 'like', "%{$params['name']}%"];
}
$list = $this->dao->getList($query, '*', $page, $limit, "$sortField $sortRule"); $list = $this->dao->getList($query, '*', $page, $limit, "$sortField $sortRule");
$count = $this->dao->getCount($query); $count = $this->dao->getCount($query);
return compact('list', 'count'); return compact('list', 'count');

117
app/service/user/DataBoardService.php

@ -0,0 +1,117 @@
<?php
namespace app\service\user;
use app\dao\user\DistillationExpandWordDao;
use app\dao\user\DistillationWordDao;
use plugin\piadmin\app\base\BaseService;
class DataBoardService extends BaseService
{
protected $distillationWordDao;
protected $distillationWordExtendDao;
public function __construct()
{
$this->distillationWordDao = app()->make(DistillationWordDao::class);
$this->distillationWordExtendDao = app()->make(DistillationExpandWordDao::class);
}
/**
* 数据总量
* 蒸馏词总量, 拓展此总量
* 蒸馏词扩展词数量排名
*/
public function countStatistic()
{
$res = $this->distillationWordDao->getList([], '*', 0, 0, 'expand_count DESC', [], ['expand']);
return [
'word' => sizeof($res),
'extend' => array_sum(array_column($res, 'expand_count')),
'top' => collect($res)->sortByDesc('expand_count')->take(10)->map(function ($item) {
return collect($item)->only(['id', 'name', 'expand_count'])->toArray();
})->toArray(),
];
}
/**
* AI平台问题占比
*/
public function aiStatistic()
{
return [
'deepseek' => 0,
'doubao' => 0,
'yuanbao' => 0,
'tongyiqianwen' => 0,
'wenxinyiyan' => 0,
'nami' => 0,
'kimi' => 0,
'zhipu' => 0
];
}
/**
* 报表明细-搜索报表
*/
public function searchStatistic()
{
return [
'ai' => [
'deepseek' => 0,
'doubao' => 0,
'yuanbao' => 0,
'tongyiqianwen' => 0,
'wenxinyiyan' => 0,
'nami' => 0,
'kimi' => 0,
'zhipu' => 0
],
'list' => [],
'count' => 0,
];
}
/**
* 报表明细-问题报表
*/
public function questionStatistic()
{
return [
'ai' => [
'deepseek' => 0,
'doubao' => 0,
'yuanbao' => 0,
'tongyiqianwen' => 0,
'wenxinyiyan' => 0,
'nami' => 0,
'kimi' => 0,
'zhipu' => 0
],
'list' => [],
'count' => 0,
];
}
/**
* 报表明细-品牌报表
*/
public function brandStatistic()
{
return [
'ai' => [
'deepseek' => 0,
'doubao' => 0,
'yuanbao' => 0,
'tongyiqianwen' => 0,
'wenxinyiyan' => 0,
'nami' => 0,
'kimi' => 0,
'zhipu' => 0
],
'list' => [],
'count' => 0,
];
}
}
Loading…
Cancel
Save