BookCollectSum.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace app\admin\command;
  3. use app\common\library\Redis;
  4. use think\console\Command;
  5. use think\console\Input;
  6. use think\console\Output;
  7. use think\Log;
  8. use think\Request;
  9. class BookCollectSum extends BaseCommand
  10. {
  11. protected function configure()
  12. {
  13. $this->setName('BookCollectSum')->setDescription('BookCollect数据汇总');
  14. }
  15. protected function execute(Input $input, Output $output)
  16. {
  17. Request::instance()->module('admin'); //cli模式下无法获取到当前的项目模块,手动指定一下
  18. $redis = Redis::instance();
  19. $yesterday = date('Ymd', strtotime('-1 days'));
  20. Log::info('BookCollectSum: 渠道列表RedisKey:' . "BC-CL:" . $yesterday);
  21. try {
  22. //获取渠道列表
  23. if (!$channel_list = $redis->smembers("BC-CL:" . $yesterday)) {
  24. Log::info("BookCollectSum: RedisKey:BC-CL:{$yesterday} Date:{$yesterday} 渠道列表为空");
  25. $output->info("BookCollectSum: RedisKey:BC-CL:{$yesterday} Date:{$yesterday} 渠道列表为空");
  26. return;
  27. }
  28. foreach ($channel_list as $channel_id) {
  29. //获取渠道书籍列表
  30. Log::info('BookCollectSum: 渠道书籍列表RedisKey:' . "BC-BL:{$channel_id}:" . $yesterday);
  31. $output->info('BookCollectSum: 渠道书籍列表RedisKey:' . "BC-BL:{$channel_id}:" . $yesterday);
  32. if (!$book_list = $redis->smembers("BC-BL:{$channel_id}:" . $yesterday)) {
  33. Log::info("BookCollectSum: RedisKey:BC-BL:{$channel_id}:{$yesterday} Date:{$yesterday} ChannelID:{$channel_id} 书籍列表为空,跳过统计");
  34. $output->info("BookCollectSum: RedisKey:BC-BL:{$channel_id}:{$yesterday} Date:{$yesterday} ChannelID:{$channel_id} 书籍列表为空,跳过统计");
  35. continue;
  36. }
  37. foreach ($book_list as $book_id) {
  38. Log::info('BookCollectSum: 书籍RedisKey:' . "BC:{$book_id}:{$channel_id}:{$yesterday}");
  39. $output->info('BookCollectSum: 书籍RedisKey:' . "BC:{$book_id}:{$channel_id}:{$yesterday}");
  40. $data = json_decode($redis->get("BC:{$book_id}:{$channel_id}:{$yesterday}"), true);
  41. Log::info('BookCollectSum: 书籍统计正文 key:' . "BC:{$book_id}:{$channel_id}:{$yesterday} data:" . json_encode($data));
  42. $output->info('BookCollectSum: 书籍统计正文 key:' . "BC:{$book_id}:{$channel_id}:{$yesterday} data:" . json_encode($data));
  43. $count_map = [
  44. 'type' => '3',
  45. 'admin_id' => $channel_id,
  46. 'book_id' => $book_id,
  47. ];
  48. $count_data = model('BookCollect')->where($count_map)->find();
  49. if ($count_data) {
  50. Log::info("BookCollect Source Data: admin_id:{$channel_id} book_id:{$book_id} data:" . json_encode($count_data->toArray()));
  51. $output->info("BookCollect Source Data: admin_id:{$channel_id} book_id:{$book_id} data:" . json_encode($count_data->toArray()));
  52. $update_data['uv'] = $count_data['uv'];
  53. $update_data['pv'] = $count_data['pv'];
  54. $update_data['recharge_suc_users'] = $count_data['recharge_suc_users'];
  55. $update_data['recharge_users'] = $count_data['recharge_users'];
  56. $update_data['recharge_money'] = $count_data['recharge_money'] + ($data['recharge_money'] ?? 0) * 1 / 100;
  57. $update_data['recharge_num'] = $count_data['recharge_num'] + ($data['recharge_num'] ?? 0);
  58. $update_data['spending_count_kandian'] = $count_data['spending_count_kandian'] + ($data['spending_count_kandian'] ?? 0);
  59. $update_data['spending_recharge_kandian'] = $count_data['spending_recharge_kandian'] + ($data['spending_recharge_kandian'] ?? 0);
  60. $update_data['spending_free_kandian'] = $count_data['spending_free_kandian'] + ($data['spending_free_kandian'] ?? 0);
  61. $update_data['spending_users'] = $count_data['spending_users'] + ($data['spending_users'] ?? 0);
  62. $update_data['spending_num'] = $count_data['spending_num'] + ($data['spending_num'] ?? 0);
  63. Log::info("BookCollect Update Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($update_data));
  64. $output->info("BookCollect Update Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($update_data));
  65. if ($is_update = $count_data->where($count_map)->update($update_data)) {
  66. Log::info('BookCollect update sql success');
  67. $output->info('BookCollect update sql success');
  68. } else {
  69. Log::error('BookCollect update sql failed');
  70. $output->error('BookCollect update sql failed');
  71. }
  72. } else {
  73. $insert_data = [
  74. 'type' => '3',
  75. 'admin_id' => $channel_id,
  76. 'book_id' => $book_id,
  77. 'createdate' => '20180101',
  78. 'uv' => 0,
  79. 'pv' => 0,
  80. 'recharge_users' => 0,
  81. 'recharge_suc_users' => 0,
  82. 'recharge_money' => ($data['recharge_money'] ?? 0) * 1 / 100,
  83. 'recharge_num' => ($data['recharge_num'] ?? 0),
  84. 'spending_count_kandian' => ($data['spending_count_kandian'] ?? 0),
  85. 'spending_recharge_kandian' => ($data['spending_recharge_kandian'] ?? 0),
  86. 'spending_free_kandian' => ($data['spending_free_kandian'] ?? 0),
  87. 'spending_users' => ($data['spending_users'] ?? 0),
  88. 'spending_num' => ($data['spending_num'] ?? 0),
  89. 'createtime' => time(),
  90. 'updatetime' => time()
  91. ];
  92. Log::info("BookCollect Source Insert Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($insert_data));
  93. $output->error("BookCollect Source Insert Data: AdminId:{$channel_id} BookId:{$book_id} Data:" . json_encode($insert_data));
  94. if ($is_insert = model('BookCollect')->insert($insert_data)) {
  95. Log::info('BookCollect insert sql success');
  96. $output->info('BookCollect insert sql success');
  97. } else {
  98. Log::error('BookCollect insert sql failed');
  99. $output->error('BookCollect insert sql failed');
  100. }
  101. }
  102. }
  103. }
  104. } catch (\Exception $exception) {
  105. $msg = 'BookCollect '.json_encode([
  106. "code" => $exception->getCode(),
  107. "file" => $exception->getFile(),
  108. "line" => $exception->getLine(),
  109. "msg" => $exception->getMessage(),
  110. "trace" => $exception->getTraceAsString(),
  111. ], JSON_UNESCAPED_UNICODE);
  112. Log::error($msg);
  113. $output->error($msg);
  114. }
  115. Log::info('BookCollect over');
  116. $output->info('BookCollect over');
  117. }
  118. }