GenerateCpBookStatService.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace App\Modules\CP\Services;
  3. use App\Modules\CpSub\Models\CpSub;
  4. use App\Modules\CpSub\Models\CpCalculate;
  5. use App\Modules\CpSub\Models\CpBookCalculate;
  6. use App\Modules\Book\Models\BookConfig;
  7. use App\Modules\CpUser\Services\CpUserService;
  8. class GenerateCpBookStatService
  9. {
  10. /**
  11. * 生成每日统计
  12. */
  13. public static function generateCpBookDailyStat($date) {
  14. if(empty($date)) $data = date('Y-m-d');
  15. $result = array();
  16. $all_cp_list = BookConfig::getAllCps();
  17. \Log::info($all_cp_list);
  18. $special_cps = array('17k','wangyi');
  19. $today = date('Y-m-d');
  20. // $today = date('Y-m-01');
  21. // 只算昨天
  22. $month_start_date = date('Y-m-01');
  23. $yestoday = $start_date = $end_date = $date;
  24. $month = date('Y-m');
  25. $calculate_date = date('Y-m-d');
  26. // 每个月1号算上个月的
  27. if($today == $month_start_date){
  28. // $start_date = date('Y-m-01',strtotime(' -1 month'));
  29. $month = date('Y-m',strtotime(' -1 month'));
  30. }
  31. \Log::info('generateCpBookDailyStat,start_date:'.$start_date.' end_date:'.$end_date.' month:'.$month.' calculate_date:'.$calculate_date);
  32. $all_data_list = BookConfig::getAllCpBookConsume($start_date,$end_date,$all_cp_list,$yestoday);
  33. self::insert_daily_stat($all_data_list,$month,$calculate_date);
  34. return $result;
  35. }
  36. /**
  37. * 生成每日统计
  38. */
  39. public static function fixCpBookDailyStat($date) {
  40. $result = array();
  41. $all_cp_list = BookConfig::getAllCps();
  42. \Log::info($all_cp_list);
  43. $today = $date;
  44. $month_start_date = date('Y-m-01');
  45. $yestoday = $start_date = $end_date = $date;
  46. $month = date('Y-m');
  47. $calculate_date = date('Y-m-d',strtotime('+1 day',strtotime($date)));
  48. // 每个月1号算上个月的
  49. if($today == $month_start_date){
  50. $month = date('Y-m',strtotime(' -1 month'));
  51. }
  52. \Log::info('fixCpBookDailyStat,start_date:'.$start_date.' end_date:'.$end_date.' month:'.$month.' calculate_date:'.$calculate_date);
  53. $all_data_list = BookConfig::getAllCpBookConsume($start_date,$end_date,$all_cp_list,$yestoday);
  54. self::insert_daily_stat($all_data_list,$month,$calculate_date);
  55. return $result;
  56. }
  57. /**
  58. * 生成指定月份数据
  59. */
  60. public static function generateCpBookBetweenStat($start_date,$end_date,$month,$calculate_date) {
  61. \Log::info('generateCpBookBetweenStat_start,start_date:'.$start_date.' end_date:'.$end_date.' month:'.$month.' calculate_date:'.$calculate_date);
  62. if(empty($start_date) || empty($end_date) || empty($month) || empty($calculate_date)) {
  63. \Log::info('generateCpBookBetweenStat isnull,start_date:'.$start_date.' end_date:'.$end_date.' month:'.$month.' calculate_date:'.$calculate_date);
  64. return false;
  65. }
  66. $result = array();
  67. $all_cp_list = BookConfig::getAllCps();
  68. \Log::info($all_cp_list);
  69. $all_data_list = BookConfig::getAllCpBookConsume($start_date,$end_date,$all_cp_list);
  70. self::insert_daily_stat($all_data_list,$month,$calculate_date);
  71. return $result;
  72. }
  73. /**
  74. * 生成汇总数据
  75. */
  76. public static function insert_daily_stat($item_list,$month,$calculate_date) {
  77. \Log::info('insert_daily_stat_start');
  78. $cp_book_calculate_bids = CpBookCalculate::getAllCpBookCalculateBids();
  79. foreach($item_list as $key=>$item){
  80. try{
  81. // 算当天
  82. // 单本书指定date的充值数据
  83. $insert_data = array();
  84. $insert_data['month'] = empty($month)?date('Y-m'):$month;
  85. $insert_data['calculate_date'] = empty($calculate_date)?date('Y-m-d'):$calculate_date;
  86. $cp_user = CpUserService::getCpUser($item['cp_source']);
  87. $insert_data['cp_user_id'] = isset($cp_user->id)?$cp_user->id:'0';
  88. $insert_data['cp_source'] = $item['cp_source'];
  89. $insert_data['bid'] = $item['bid'];
  90. $insert_data['book_name'] = $item['book_name'];
  91. \Log::info('insert_daily_stat_cp_source:'.$insert_data['cp_source'].' cp_user_id:'.$insert_data['cp_user_id'].' calculate_date:'.$insert_data['calculate_date'].' bid:'.$insert_data['bid']);
  92. // 计算公式从数据库拿
  93. $cp_calculate = CpCalculate::getCpCalculate($item['cp_source']);
  94. $insert_data['yestoday_charge_balance'] = $item['yestoday_charge_balance'];// 昨天书币数量
  95. // 某些书籍特殊结算
  96. // 昨天
  97. if(in_array($insert_data['bid'],$cp_book_calculate_bids)){
  98. $cp_book_calculate = CpBookCalculate::getCpBookCalculate($insert_data['cp_source'], $insert_data['bid']);
  99. $insert_data['yestoday_available_amount'] = $item['yestoday_charge_balance']*$cp_book_calculate['available_amount_ratio'];
  100. $insert_data['yestoday_last_amount'] = $item['yestoday_charge_balance']*$cp_book_calculate['last_amount_ratio'];
  101. $insert_data['yestoday_total_amount'] = $item['yestoday_charge_balance']*$cp_book_calculate['total_amount_ratio'];
  102. }else{
  103. $insert_data['yestoday_available_amount'] = $item['yestoday_charge_balance']*$cp_calculate['available_amount_ratio'];
  104. $insert_data['yestoday_last_amount'] = $item['yestoday_charge_balance']*$cp_calculate['last_amount_ratio'];
  105. $insert_data['yestoday_total_amount'] = $item['yestoday_charge_balance']*$cp_calculate['total_amount_ratio'];
  106. }
  107. $current_cp_sub = CpSub::getCpSub($insert_data['cp_source'],$insert_data['calculate_date'],$insert_data['bid']);
  108. if(empty($current_cp_sub)){
  109. \Log::info('insert:'.$insert_data['bid']);
  110. CpSub::firstOrcreate($insert_data);
  111. }else{
  112. \Log::info('not_insert:'.$insert_data['bid']);
  113. }
  114. }catch(\Exception $e){
  115. \Log::info($e->getMessage());
  116. }
  117. }
  118. }
  119. /**
  120. * 生成每日统计
  121. */
  122. public static function generateCpBookDailyStat2($date) {
  123. if(empty($date)) return '';
  124. //$result = array();
  125. $all_cp_list = BookConfig::getAllCps();
  126. $start_date = date('Y-m-01');
  127. $end_date = date('Y-m-d',time()-86400);
  128. $month = date('Y-m');
  129. //$calculate_date = date('Y-m-d');
  130. //\Log::info('generateCpBookDailyStat,start_date:'.$start_date.' end_date:'.$end_date.' month:'.$month.' calculate_date:'.$calculate_date);
  131. $all_data_list = BookConfig::getAllCpBookConsume($start_date,$end_date,$all_cp_list);
  132. self::insert_daily_stat($all_data_list,$month,$date);
  133. //return $result;
  134. }
  135. }