Browse Source

优化接口

master
wanghongjun 3 years ago
parent
commit
084e49ab53
  1. 89
      app/command/passengerFlow.php
  2. 25
      app/common.php
  3. 68
      app/controller/Index.php
  4. 2
      config/console.php
  5. 1
      route/app.php

89
app/command/passengerFlow.php

@ -0,0 +1,89 @@
<?php
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Db;
class passengerFlow extends Command
{
protected function configure()
{
$this->setName('passengerFlow')
->addArgument('name', Argument::OPTIONAL, "your name")
->addOption('city', null, Option::VALUE_REQUIRED, 'city name')
->setDescription('Say Hello');
}
protected function execute(Input $input, Output $output)
{
$config = config('app');
$dateData = getTargetDate();
$token = getAccessToken();
$arr = [
'hourly' => [
'startTime' => $dateData['day']['c_start_time'],
'endTime' => $dateData['day']['c_end_time'],
],
'daily' => [
'startTime' => $dateData['month']['c_start_time'],
'endTime' => $dateData['month']['c_end_time'],
],
'monthly' => [
'startTime' => $dateData['year']['c_start_time'],
'endTime' => date('c'),
]
];
$url = $config['host_url'] . "/api/cfas/v2/passengerFlow/groups";
try {
foreach ($arr as $granularity => $value) {
$dataArr = [
'granularity' => $granularity,
'startTime' => $value['startTime'],
'endTime' => $value['endTime'],
'ids' => '01' // --- <replace> --- //
];
$json_data = json_encode($dataArr);
$result = postToken($url,$json_data,false,[],$token);
$res_data = json_decode($result,true);
if ($res_data['code'] != 0) throw new \Exception('请求失败');
$list = (array)$res_data['data']['list'];
foreach ($list as $val) {
$insert_arr = [
'groupId' => $val['groupId'],
'groupName' => $val['groupName'],
'flowInNum' => $val['flowInNum'],
'flowOutNum' => $val['flowOutNum'],
'noRepeatInNum' => $val['noRepeatInNum'],
'noRepeatOutNum' => $val['noRepeatOutNum'],
'holdValue' => $val['holdValue'],
'createTime' => $val['createTime'],
'updateTime' => $val['updateTime'],
'netValue' => $val['netValue'],
'statTime' => $val['statTime'],
'granularity' => $granularity,
];
Db::table('tp_passenger_flow')->insert($insert_arr);
}
}
$output->writeln('完成');
} catch (\Exception $e) {
$output->writeln($e->getMessage());
}
}
}
//return $res_data['data']['list'];

25
app/common.php

@ -1,6 +1,7 @@
<?php
// 应用公共文件
use think\facade\Request;
use think\facade\Session;
/**
* 模拟GET请求 HTTPS的页面
* @param string $url 请求地址
@ -140,6 +141,30 @@ function base_url()
return $baseUrl;
}
/**
* 获取 接口 accessToken
* @return mixed
*/
function getAccessToken(){
$token = Session::get('apiAccessToken');
if (empty($token)) {
$config = config('app');
//
$url = $config['host_url']."/oauth/token?client_id=".$config['cid']."&client_secret=".$config['cskey'];
// do post
$ret = post($url);
$res = json_decode($ret,true);
if ($res['access_token']) {
Session::set('apiAccessToken',$res['access_token']);
$token = $res['access_token'];
}
}
return $token;
}
/**
* 获取 天,周,月,年 开始时间~结束时间
* @param $granularity

68
app/controller/Index.php

@ -2,6 +2,7 @@
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
class Index extends BaseController
@ -30,8 +31,11 @@ class Index extends BaseController
protected $token = 'y871T5okLEegC6WrcKN259Mhy4AGDcjm';
/**
* 分时时间段接口
* @return array
* 分时时间段接口 <首页-客流趋势>
* @return false|string
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function allGroupTimeNum() {
@ -43,17 +47,17 @@ class Index extends BaseController
$allTimeData = [];
$groupsData = [];
if ($granularity == 'daily') {
$list = $this->getGroupData('hourly',$dateData['day']['c_start_time'],$dateData['day']['c_end_time']);
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'hourly'])->select()->toArray();
$data = $this->handleGroupData($list);
$allTimeData = $data['allTimeData'];
$groupsData = $data['groupsData'];
} elseif ($granularity == 'monthly') {
$list = $this->getGroupData('daily',$dateData['month']['c_start_time'],$dateData['month']['c_end_time']);
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'daily'])->select()->toArray();
$data = $this->handleGroupData($list,'d');
$allTimeData = $data['allTimeData'];
$groupsData = $data['groupsData'];
} elseif ($granularity == 'yearly') {
$list = $this->getGroupData('monthly',$dateData['year']['c_start_time'],date('c'));
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'monthly'])->select()->toArray();
$data = $this->handleGroupData($list,'m');
$allTimeData = $data['allTimeData'];
$groupsData = $data['groupsData'];
@ -74,6 +78,7 @@ class Index extends BaseController
*/
protected function getGroupData($granularity,$s_time,$e_time) {
$config = config('app');
$token = getAccessToken();
$url = $config['host_url'] . "/api/cfas/v2/passengerFlow/groups";
$dataArr = [
'granularity' => $granularity,
@ -83,7 +88,7 @@ class Index extends BaseController
];
$json_data = json_encode($dataArr);
$result = postToken($url,$json_data,false,[],$this->token);
$result = postToken($url,$json_data,false,[],$token);
$res_data = json_decode($result,true);
if ($res_data['code'] != 0) return json_encode(['code' => 403, 'msg' => $res_data['msg']]);
@ -120,20 +125,20 @@ class Index extends BaseController
$allTimeData[$str] = 0;
}
}
$sumFlowInNum = 0;
$sumNoRepeatInNum = 0;
foreach ($list as $value) {
$sumFlowInNum += $value['flowInNum']; // 进馆总人数
if (!isset($groupsData[$value['groupName']]['flowInNum'])) $groupsData[$value['groupName']]['flowInNum'] = 0;
$groupsData[$value['groupName']]['flowInNum'] += $value['flowInNum']; // 分租进馆人数
$sumNoRepeatInNum += $value['noRepeatInNum']; // 进馆总人数
if (!isset($groupsData[$value['groupName']]['noRepeatInNum'])) $groupsData[$value['groupName']]['noRepeatInNum'] = 0;
$groupsData[$value['groupName']]['noRepeatInNum'] += $value['noRepeatInNum']; // 分租进馆人数
$date = date($date_str,ceil($value['createTime'] / 1000) + (8*3600)); // 各时间端进馆人数
if (!isset($allTimeData[$date])) continue;
$allTimeData[$date] += $value['flowInNum'];
$allTimeData[$date] += $value['noRepeatInNum'];
}
ksort($allTimeData);
// 计算各组占比
foreach ($groupsData as &$val) {
$val['proportion'] = (round($val['flowInNum']/$sumFlowInNum,2) * 100) ."%";
$val['proportion'] = (round($val['noRepeatInNum']/$sumNoRepeatInNum,2) * 100) ."%";
}
return [
@ -143,7 +148,7 @@ class Index extends BaseController
}
/**
* 总览总数据接口
* 总览总数据接口 <首页-中间部分总览>
* @return array|void
*/
public function allGroupNum() {
@ -151,6 +156,7 @@ class Index extends BaseController
$config = config('app');
$dateData = getTargetDate();
$token = getAccessToken();
$dateArr = [
'day' => [
@ -192,7 +198,7 @@ class Index extends BaseController
];
$json_data = json_encode($data);
$result = postToken($url,$json_data,false,[],$this->token);
$result = postToken($url,$json_data,false,[],$token);
$res_data = json_decode($result,true);
if ($res_data['code'] != 0) {
@ -201,16 +207,16 @@ class Index extends BaseController
$list = $res_data['data']['list'];
$returnData[$date]['flowInNum'] = 0;
$returnData[$date]['noRepeatInNum'] = 0;
foreach ($list as $value) {
// $createTime = date("H",$value['createTime'] /1000 + (3600*8));
$returnData[$date]['flowInNum'] += $value['flowInNum'];
$returnData[$date]['noRepeatInNum'] += $value['noRepeatInNum'];
$groupIds[] = $value['groupId'];
}
}
foreach ($returnData as &$val) {
$val['flowInNum'] = formatNumber($val['flowInNum']);
$val['noRepeatInNum'] = formatNumber($val['noRepeatInNum']);
}
$returnArr = [
@ -225,7 +231,7 @@ class Index extends BaseController
}
/**
* 查询最新客流统计组实时数据
* 查询最新客流统计组实时数据 <各场管实施实时进馆人数>
* @return void
*/
public function realTimeData() {
@ -235,8 +241,9 @@ class Index extends BaseController
'01' // --- <replace> --- //
];
$token = getAccessToken();
$json_data = json_encode($dataArr);
$result = postToken($url,$json_data,false,[],$this->token);
$result = postToken($url,$json_data,false,[],$token);
$res_data = json_decode($result,true);
@ -256,4 +263,27 @@ class Index extends BaseController
return json_encode(['code' => 0, 'msg' => '成功', 'data' => $returnData]);
}
/**
* 今日各场馆人数趋势
* @return void
*/
public function toDayGroupsEnterNum()
{
$dateData = getTargetDate();
$list = $this->getGroupData('hourly',$dateData['day']['c_start_time'],$dateData['day']['c_end_time']);
$allTimeData = [];
for ($i = 9; $i < 23; $i++) {
$str = strlen($i) == 1 ? '0'.$i.':00' : $i.':00';
$allTimeData[$str] = 0;
}
$returnData = [];
foreach ($list as $value) {
$date = date('H:00',ceil($value['createTime'] / 1000) + (8*3600)); // 各时间端进馆人数
if (!isset($allTimeData[$date])) continue;
if (!isset($returnData[$value['groupName']][$allTimeData[$date]])) $returnData[$value['groupName']][$date] = 0;
$returnData[$value['groupName']][$date] += $value['flowInNum'];
}
dump($returnData);
}
}

2
config/console.php

@ -5,5 +5,7 @@
return [
// 指令定义
'commands' => [
'passengerFlow' => 'app\command\passengerFlow',
'passengerFlowAll' => 'app\command\passengerFlowAll',
],
];

1
route/app.php

@ -19,3 +19,4 @@ Route::get('getAccessToken', 'index/getAccessToken');
Route::get('allGroupTimeNum', 'index/allGroupTimeNum');
Route::get('allGroupNum', 'index/allGroupNum');
Route::get('realTimeData', 'index/realTimeData');
Route::get('toDayGroupsEnterNum', 'index/toDayGroupsEnterNum');

Loading…
Cancel
Save