setName('BookCollectSum')->setDescription('BookCollect数据汇总'); } protected function execute(Input $input, Output $output) { Request::instance()->module('admin'); //cli模式下无法获取到当前的项目模块,手动指定一下 $redis = Redis::instance(); $yesterday = date('Ymd', strtotime('-1 days')); Log::info('BookCollectSum: 渠道列表RedisKey:' . "BC-CL:" . $yesterday); try { //获取渠道列表 if (!$channel_list = $redis->smembers("BC-CL:" . $yesterday)) { Log::info("BookCollectSum: RedisKey:BC-CL:{$yesterday} Date:{$yesterday} 渠道列表为空"); $output->info("BookCollectSum: RedisKey:BC-CL:{$yesterday} Date:{$yesterday} 渠道列表为空"); return; } foreach ($channel_list as $channel_id) { //获取渠道书籍列表 Log::info('BookCollectSum: 渠道书籍列表RedisKey:' . "BC-BL:{$channel_id}:" . $yesterday); $output->info('BookCollectSum: 渠道书籍列表RedisKey:' . "BC-BL:{$channel_id}:" . $yesterday); if (!$book_list = $redis->smembers("BC-BL:{$channel_id}:" . $yesterday)) { Log::info("BookCollectSum: RedisKey:BC-BL:{$channel_id}:{$yesterday} Date:{$yesterday} ChannelID:{$channel_id} 书籍列表为空,跳过统计"); $output->info("BookCollectSum: RedisKey:BC-BL:{$channel_id}:{$yesterday} Date:{$yesterday} ChannelID:{$channel_id} 书籍列表为空,跳过统计"); continue; } foreach ($book_list as $book_id) { Log::info('BookCollectSum: 书籍RedisKey:' . "BC:{$book_id}:{$channel_id}:{$yesterday}"); $output->info('BookCollectSum: 书籍RedisKey:' . "BC:{$book_id}:{$channel_id}:{$yesterday}"); $data = json_decode($redis->get("BC:{$book_id}:{$channel_id}:{$yesterday}"), true); Log::info('BookCollectSum: 书籍统计正文 key:' . "BC:{$book_id}:{$channel_id}:{$yesterday} data:" . json_encode($data)); $output->info('BookCollectSum: 书籍统计正文 key:' . "BC:{$book_id}:{$channel_id}:{$yesterday} data:" . json_encode($data)); $count_map = [ 'type' => '3', 'admin_id' => $channel_id, 'book_id' => $book_id, ]; $count_data = model('BookCollect')->where($count_map)->find(); if ($count_data) { Log::info("BookCollect Source Data: admin_id:{$channel_id} book_id:{$book_id} data:" . json_encode($count_data->toArray())); $output->info("BookCollect Source Data: admin_id:{$channel_id} book_id:{$book_id} data:" . json_encode($count_data->toArray())); $update_data['uv'] = $count_data['uv']; $update_data['pv'] = $count_data['pv']; $update_data['recharge_suc_users'] = $count_data['recharge_suc_users']; $update_data['recharge_users'] = $count_data['recharge_users']; $update_data['recharge_money'] = $count_data['recharge_money'] + ($data['recharge_money'] ?? 0) * 1 / 100; $update_data['recharge_num'] = $count_data['recharge_num'] + ($data['recharge_num'] ?? 0); $update_data['spending_count_kandian'] = $count_data['spending_count_kandian'] + ($data['spending_count_kandian'] ?? 0); $update_data['spending_recharge_kandian'] = $count_data['spending_recharge_kandian'] + ($data['spending_recharge_kandian'] ?? 0); $update_data['spending_free_kandian'] = $count_data['spending_free_kandian'] + ($data['spending_free_kandian'] ?? 0); $update_data['spending_users'] = $count_data['spending_users'] + ($data['spending_users'] ?? 0); $update_data['spending_num'] = $count_data['spending_num'] + ($data['spending_num'] ?? 0); Log::info("BookCollect Update Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($update_data)); $output->info("BookCollect Update Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($update_data)); if ($is_update = $count_data->where($count_map)->update($update_data)) { Log::info('BookCollect update sql success'); $output->info('BookCollect update sql success'); } else { Log::error('BookCollect update sql failed'); $output->error('BookCollect update sql failed'); } } else { $insert_data = [ 'type' => '3', 'admin_id' => $channel_id, 'book_id' => $book_id, 'createdate' => '20180101', 'uv' => 0, 'pv' => 0, 'recharge_users' => 0, 'recharge_suc_users' => 0, 'recharge_money' => ($data['recharge_money'] ?? 0) * 1 / 100, 'recharge_num' => ($data['recharge_num'] ?? 0), 'spending_count_kandian' => ($data['spending_count_kandian'] ?? 0), 'spending_recharge_kandian' => ($data['spending_recharge_kandian'] ?? 0), 'spending_free_kandian' => ($data['spending_free_kandian'] ?? 0), 'spending_users' => ($data['spending_users'] ?? 0), 'spending_num' => ($data['spending_num'] ?? 0), 'createtime' => time(), 'updatetime' => time() ]; Log::info("BookCollect Source Insert Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($insert_data)); $output->error("BookCollect Source Insert Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($insert_data)); if ($is_insert = model('BookCollect')->insert($insert_data)) { Log::info('BookCollect insert sql success'); $output->info('BookCollect insert sql success'); } else { Log::error('BookCollect insert sql failed'); $output->error('BookCollect insert sql failed'); } } } } } catch (\Exception $exception) { $msg = 'BookCollect '.json_encode([ "code" => $exception->getCode(), "file" => $exception->getFile(), "line" => $exception->getLine(), "msg" => $exception->getMessage(), "trace" => $exception->getTraceAsString(), ], JSON_UNESCAPED_UNICODE); Log::error($msg); $output->error($msg); } Log::info('BookCollect over'); $output->info('BookCollect over'); } }