123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- namespace app\admin\command;
- use app\common\library\Redis;
- use app\common\service\CardFlipService;
- use app\main\constants\ActivityConstants;
- use think\console\Command;
- use think\console\Input;
- use think\console\Output;
- use think\Exception;
- use think\Log;
- use think\Request;
- class UpdateCardFlipPvUv extends Command
- {
- protected function configure()
- {
- $this->setName('UpdateCardFlipPvUv')
- ->setDescription('将翻牌活动的缓存数据存储到数据库');
- }
- protected function execute(Input $input, Output $output)
- {
- Request::instance()->module('admin'); //cli模式下无法获取到当前的项目模块,手动指定一下
- try {
- $list = Redis::instance()->sMembers(ActivityConstants::CARD_FLIP_LISTS);
- if (empty($list)) {
- Log::info('没有翻牌活动,程序结束');
- return;
- }
- $cardFlipIds = [];
- foreach ($list as $v) {
- $temp = json_decode($v, true);
- $cardFlipIds[] = $temp['id'];
- }
- $channelIds = $this->getChannelIds();
- foreach ($cardFlipIds as $cardFlipId) {
- $this->pvuvCollect(0, $cardFlipId);
- foreach ($channelIds as $channelId) {
- if (empty($channelId)) {
- continue;
- }
- $this->pvuvCollect($channelId, $cardFlipId);
- }
- }
- if (time() < strtotime(date('Y-m-d 01:30:00'))) {
- $yesterdayDate = date('Ymd', strtotime('-1 day'));
- if ($pvCount = Redis::instance()->get(CardFlipService::instance()->getCardFlipPvKey($cardFlipId, 0, $yesterdayDate))) {
- foreach ($cardFlipIds as $cardFlipId) {
- $this->pvuvCollect(0, $cardFlipId, $yesterdayDate);
- foreach ($channelIds as $channelId) {
- $this->pvuvCollect($channelId, $cardFlipId, $yesterdayDate);
- }
- }
- Redis::instance()->del(CardFlipService::instance()->getCardFlipPvKey($cardFlipId, 0, $yesterdayDate));
- }
- }
- } catch (Exception $e) {
- $output->error('程序异常:' . $e->getMessage() . ' line:' . $e->getTraceAsString());
- }
- }
- /**
- * @return array|bool|false|string|string[]
- * @throws Exception
- */
- private function getChannelIds()
- {
- $dbRow = model('ChannelSpecialManage')->where('rule_name', 'cardflip')->find();
- if (empty($dbRow)) {
- return [];
- }
- $data = $dbRow->toArray();
- $channelIdsRow = model("ChannelMenuList")->where('id', $data['channel_id'])->find();
- $data['channel_id'] = $channelIdsRow['channel_id'] ?: '';
- $channelIds = [];
- if (strrpos($data['channel_id'], '*') !== false) {
- $channelIds = model('admin')->join('auth_group_access', 'auth_group_access.uid = admin.id')
- ->where('auth_group_access.group_id', 3)
- ->where('admin.status', 'normal')
- ->column('admin.id');
- } else if (strlen($data['channel_id']) > 0) {
- $channelIds = explode(',', $data['channel_id']);
- }
- return $channelIds;
- }
- private function pvuvCollect($adminId, $cardFlipId, $date = null)
- {
- $createDate = empty($date) ? date('Ymd', time()) : $date;
- if ($pvCount = Redis::instance()->get(CardFlipService::instance()->getCardFlipPvKey($cardFlipId, $adminId))) {
- $uvCount = Redis::instance()->pfCount(CardFlipService::instance()->getCardFlipUvKey($cardFlipId, $adminId));
- $pvDrawsCount = Redis::instance()->get(CardFlipService::instance()->getCardFlipDrawsPvKey($cardFlipId, $adminId));
- $uvDrawsCount = Redis::instance()->pfCount(CardFlipService::instance()->getCardFlipDrawsUvKey($cardFlipId, $adminId));
- $kandianCount = Redis::instance()->get(CardFlipService::instance()->getCardFlipKandianKey($cardFlipId, $adminId));
- $cardDayCollect = model('CardDayCollect')
- ->where('channel_id', $adminId)
- ->where('createdate', $createDate)
- ->where('c_id', $cardFlipId)
- ->field('id')
- ->find();
- if ($cardDayCollect) {
- model('CardDayCollect')->where('id', $cardDayCollect['id'])
- ->update([
- 'pv' => $pvCount,
- 'uv' => $uvCount,
- 'draws_pv' => $pvDrawsCount,
- 'draws_uv' => $uvDrawsCount,
- 'kandian' => $kandianCount,
- 'updatetime' => date('Y-m-d H:i:s'),
- ]);
- } else {
- $mapDay = [
- 'channel_id' => $adminId,
- 'createdate' => $createDate,
- 'c_id' => $cardFlipId,
- 'pv' => $pvCount,
- 'uv' => $uvCount,
- 'draws_pv' => $pvDrawsCount,
- 'draws_uv' => $uvDrawsCount,
- 'kandian' => $kandianCount,
- 'createtime' => date('Y-m-d H:i:s'),
- 'updatetime' => date('Y-m-d H:i:s'),
- ];
- model('CardDayCollect')->insert($mapDay);
- }
- }
- }
- }
|