123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace app\admin\command;
- use app\common\library\Redis;
- use app\main\constants\AdminConstants;
- use app\main\service\PvuvCollectService;
- use think\console\Command;
- use think\console\Input;
- use think\console\Output;
- use think\Exception;
- use think\Log;
- use think\Request;
- class UpdateChannelPvUv extends Command
- {
- protected function configure()
- {
- $this->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);
- }
- }
- }
|