From 084e49ab53dff4d1fb921206edb638074dc20799 Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq,com> Date: Tue, 20 Jun 2023 16:03:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/command/passengerFlow.php | 89 +++++++++++++++++++++++++++++++++++ app/common.php | 25 ++++++++++ app/controller/Index.php | 68 ++++++++++++++++++-------- config/console.php | 2 + route/app.php | 1 + 5 files changed, 166 insertions(+), 19 deletions(-) create mode 100644 app/command/passengerFlow.php diff --git a/app/command/passengerFlow.php b/app/command/passengerFlow.php new file mode 100644 index 0000000..e630af8 --- /dev/null +++ b/app/command/passengerFlow.php @@ -0,0 +1,89 @@ +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' // --- --- // + ]; + + $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']; diff --git a/app/common.php b/app/common.php index 0471d9d..8e606b3 100644 --- a/app/common.php +++ b/app/common.php @@ -1,6 +1,7 @@ + * @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' // --- --- // ]; + $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); + } } diff --git a/config/console.php b/config/console.php index a818a98..8462723 100644 --- a/config/console.php +++ b/config/console.php @@ -5,5 +5,7 @@ return [ // 指令定义 'commands' => [ + 'passengerFlow' => 'app\command\passengerFlow', + 'passengerFlowAll' => 'app\command\passengerFlowAll', ], ]; diff --git a/route/app.php b/route/app.php index 99f86af..be06b0d 100644 --- a/route/app.php +++ b/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');