setName('UpdateChannelPvUv') ->setDescription('更新渠道商PvUv数据'); } protected function execute(Input $input, Output $output) { Request::instance()->module('admin'); //cli模式下无法获取到当前的项目模块,手动指定一下 try { $pageSize = 1000; $lastAdminId = 0; $this->makeAdminCollect(['id' => 0, 'group_id' => AdminConstants::ADMIN_GROUP_ID_CHANNEL]); while (true) { Log::info('beginAdminId:' . $lastAdminId); $adminInfos = model('Admin')->join('auth_group_access', 'admin.id = auth_group_access.uid') ->field(['admin.id', 'auth_group_access.group_id']) ->where('admin.status', 'normal') ->whereIn('auth_group_access.group_id', [AdminConstants::ADMIN_GROUP_ID_CHANNEL, AdminConstants::ADMIN_GROUP_ID_AGENT]) ->where('admin.id', '>', $lastAdminId) ->limit($pageSize) ->select(); if (empty($adminInfos)) { Log::info('没有找到渠道商,程序结束'); break; } foreach ($adminInfos as $adminInfo) { $this->makeAdminCollect($adminInfo); } $lastAdminInfo = end($adminInfos); $lastAdminId = $lastAdminInfo['id']; } if (time() < strtotime(date('Y-m-d 01:30:00'))) { $yesterdayDate = date('Ymd', strtotime('-1 day')); $wholePvKey = PvuvCollectService::instance()->getPvKey(['id' => 0, 'group_id' => AdminConstants::ADMIN_GROUP_ID_CHANNEL], $yesterdayDate); if (Redis::instance()->exists($wholePvKey)) { $lastAdminId = 0; $this->makeAdminCollect(0, $yesterdayDate); while (true) { Log::info('yesterday collect beginAdminId:' . $lastAdminId); $adminInfos = model('Admin')->join('auth_group_access', 'admin.id = auth_group_access.uid') ->field(['admin.id', 'auth_group_access.group_id']) ->where('admin.status', 'normal') ->whereIn('auth_group_access.group_id', [AdminConstants::ADMIN_GROUP_ID_CHANNEL, AdminConstants::ADMIN_GROUP_ID_AGENT]) ->where('admin.id', '>', $lastAdminId) ->limit($pageSize) ->select(); if (empty($adminIds)) { Log::info('没有找到渠道商,程序结束'); break; } foreach ($adminInfos as $adminInfo) { $this->makeAdminCollect($adminInfo, $yesterdayDate); } $lastAdminInfo = end($adminInfos); $lastAdminId = $lastAdminInfo['id']; } Redis::instance()->del($wholePvKey); } } } catch (Exception $e) { $output->error('程序异常:' . $e->getMessage() . ' line:' . $e->getTraceAsString()); } $output->writeln("UpdateChannelPvUv 结束"); } private function makeAdminCollect($adminInfo, $date = null) { $adminId = $adminInfo['id']; $groupId = $adminInfo['group_id']; $pvKey = PvuvCollectService::instance()->getPvKey($adminId, $date); $uvKey = PvuvCollectService::instance()->getUvKey($adminId, $date); $pvCount = Redis::instance()->get($pvKey); $uvCount = Redis::instance()->pfCount($uvKey); Log::info(sprintf('makeAdminCollect,adminId:%s,groupId:%s,date:%s,pv:%s,uv:%s', $adminId, $groupId, $date, $pvCount, $uvCount)); if ($pvCount > 0 || $uvCount > 0) { if ($adminId == 0) { $this->pvuvCollect($adminId, $pvCount, $uvCount, '2', $date); } elseif ($groupId == AdminConstants::ADMIN_GROUP_ID_CHANNEL) { $this->pvuvCollect($adminId, $pvCount, $uvCount, '3', $date); } elseif ($groupId == AdminConstants::ADMIN_GROUP_ID_AGENT) { $this->pvuvCollect($adminId, $pvCount, $uvCount, '1', $date); } } } /** * 将pvuv数据存入数据库 * @param $adminId * @param $pv * @param $uv * @param $flag * @param null $date */ private function pvuvCollect($adminId, $pv, $uv, $flag, $date = null) { $createDate = empty($date) ? date('Ymd', time()) : $date; $selfCollect = model('OrdersCollect') ->where('admin_id', $adminId) ->where('createdate', $createDate) ->where('type', '1') ->where('flag', $flag) ->field('id') ->find(); if ($selfCollect) { model('OrdersCollect')->where('id', $selfCollect['id']) ->update(['pv' => $pv, 'uv' => $uv, 'updatetime' => time()]); } else { $map_day = [ 'admin_id' => $adminId, 'type' => '1', 'flag' => $flag, 'createdate' => $createDate, 'business_line' => '0', 'pv' => $pv, 'uv' => $uv, 'createtime' => time(), 'updatetime' => time(), ]; model('OrdersCollect')->insert($map_day); } } }