企微短剧业务系统

OperateDataService.php 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace App\Service;
  3. use App\Log;
  4. use App\Models\Es\OperateDataTrend;
  5. use App\Models\System\Users;
  6. use App\Models\TencentAdAuth;
  7. use App\Service\Admin\AdminService;
  8. class OperateDataService
  9. {
  10. /**
  11. * 运营公众号数据
  12. * */
  13. public static function getAccountData($params, $sortField, $sortType, $page, $pageSize)
  14. {
  15. $sortField = self::getSortField($sortField);
  16. # 表头处理
  17. $header = config('operateDataHeader.list');
  18. # 数据权限
  19. $params['is_super_user'] = AdminService::isSuperUser($params['is_system_admin'], $params['sys_group_id'], $params['admin_id']);
  20. if($params['is_super_user']) {
  21. $params['user_list'] = Users::getCorpUserList($params['sys_group_id']);
  22. if(empty($params['user_list'])) return [[], 0, $header];
  23. }
  24. list($list, $count) = OperateDataTrend::getOperateAccountList($params, $sortField, $sortType, $page, $pageSize);
  25. if(empty($list)) return [$list, $count, $header];
  26. # 获取列表中涉及的公众号和运营人员
  27. $appidList = array_column($list, 'app_id');
  28. $operatorIds = array_column($list, 'operate_uid');
  29. $mpAccountData = TencentAdAuth::selectRaw('wechat_account_id, account_name')
  30. ->where('enable', 1)
  31. ->whereIn('wechat_account_id', $appidList)
  32. ->get();
  33. $sysUserData = Users::select('id', 'name')->whereIn('id', $operatorIds)->get();
  34. foreach ($list as &$item) {
  35. $accountInfo = $mpAccountData->where('wechat_account_id', $item['app_id'])->first();
  36. $item['account_name'] = $accountInfo['account_name'] ?? null;
  37. $operatorInfo = $sysUserData->where('id', $item['operate_uid'])->first();
  38. $item['operator_name'] = $operatorInfo['name'] ?? null;
  39. $item['paid'] = $item['paid'] / 100;
  40. $item['follow_cost'] = round($item['follow_cost'] / 100, 1);
  41. $item['pay_rate'] = round($item['pay_rate'], 4) * 100 . '%';
  42. $item['seven_days_paid_rate'] = round($item['seven_days_paid_rate'], 4) * 100 . '%';
  43. $item['pay_money_total'] = $item['pay_money_total'] / 100;
  44. $item['gross_profit_rate'] = round($item['gross_profit_rate'], 5) * 100 . '%';
  45. $item['cost_cover_rate'] = round($item['cost_cover_rate'], 4) * 100 . '%';
  46. }
  47. return [$list, $count, $header];
  48. }
  49. /**
  50. * 获取运营公众号数据汇总
  51. * */
  52. public static function getAccountDataSummary($params)
  53. {
  54. # 表头处理
  55. $header = config('operateDataHeader.summary');
  56. # 数据权限
  57. $params['is_super_user'] = AdminService::isSuperUser($params['is_system_admin'], $params['sys_group_id'], $params['admin_id']);
  58. if($params['is_super_user']) {
  59. $params['user_list'] = Users::getCorpUserList($params['sys_group_id']);
  60. if(empty($params['user_list'])) return [[], $header];
  61. }
  62. $data = OperateDataTrend::getAccountDataCollect($params);
  63. if(empty($data)) return [[], $header];
  64. $data['paid'] = $data['paid'] / 100;
  65. $data['follow_cost'] = round($data['follow_cost'] / 100, 1);
  66. $data['pay_rate'] = round($data['pay_rate'], 4) * 100 . '%';
  67. $data['seven_days_paid_rate'] = round($data['seven_days_paid_rate'], 4) * 100 . '%';
  68. $data['pay_money_total'] = $data['pay_money_total'] / 100;
  69. $data['gross_profit_rate'] = round($data['gross_profit_rate'], 5) * 100 . '%';
  70. $data['cost_cover_rate'] = round($data['cost_cover_rate'], 4) * 100 . '%';
  71. return [$data, $header];
  72. }
  73. /**
  74. * 获取运营数据
  75. * */
  76. public static function getOperateData($params, $sortField, $sortType, $page, $pageSize)
  77. {
  78. $sortField = self::getSortField($sortField);
  79. # 表头处理
  80. $header = config('operateDataHeader.operate_list');
  81. # 数据权限
  82. $params['is_super_user'] = AdminService::isSuperUser($params['is_system_admin'], $params['sys_group_id'], $params['admin_id']);
  83. if($params['is_super_user']) {
  84. $params['user_list'] = Users::getCorpUserList($params['sys_group_id']);
  85. if(empty($params['user_list'])) return [[], 0, $header];
  86. }
  87. list($list, $count) = OperateDataTrend::getOperateDataList($params, $sortField, $sortType, $page, $pageSize);
  88. if(empty($list)) return [$list, $count, $header];
  89. # 获取列表中涉及的公众号和运营人员
  90. $operatorIds = array_column($list, 'operate_uid');
  91. $sysUserData = Users::select('id', 'name')->whereIn('id', $operatorIds)->get();
  92. foreach ($list as &$item) {
  93. $operatorInfo = $sysUserData->where('id', $item['operate_uid'])->first();
  94. $item['operator_name'] = $operatorInfo['name'] ?? null;
  95. $item['paid'] = $item['paid'] / 100;
  96. $item['follow_cost'] = round($item['follow_cost'] / 100, 1);
  97. $item['pay_rate'] = round($item['pay_rate'], 4) * 100 . '%';
  98. $item['seven_days_paid_rate'] = round($item['seven_days_paid_rate'], 4) * 100 . '%';
  99. $item['pay_money_total'] = $item['pay_money_total'] / 100;
  100. $item['gross_profit_rate'] = round($item['gross_profit_rate'], 5) * 100 . '%';
  101. $item['cost_cover_rate'] = round($item['cost_cover_rate'], 4) * 100 . '%';
  102. }
  103. return [$list, $count, $header];
  104. }
  105. /**
  106. * 获取运营数据汇总
  107. * */
  108. public static function getOperateDataSummary($params)
  109. {
  110. # 表头处理
  111. $header = config('operateDataHeader.operate_summary');
  112. # 数据权限
  113. $params['is_super_user'] = AdminService::isSuperUser($params['is_system_admin'], $params['sys_group_id'], $params['admin_id']);
  114. if($params['is_super_user']) {
  115. $params['user_list'] = Users::getCorpUserList($params['sys_group_id']);
  116. if(empty($params['user_list'])) return [[], $header];
  117. }
  118. $data = OperateDataTrend::getOperateDataCollect($params);
  119. if(empty($data)) return [[], $header];
  120. $data['paid'] = $data['paid'] / 100;
  121. $data['follow_cost'] = round($data['follow_cost'] / 100, 1);
  122. $data['pay_rate'] = round($data['pay_rate'], 4) * 100 . '%';
  123. $data['seven_days_paid_rate'] = round($data['seven_days_paid_rate'], 4) * 100 . '%';
  124. $data['pay_money_total'] = $data['pay_money_total'] / 100;
  125. $data['gross_profit_rate'] = round($data['gross_profit_rate'], 5) * 100 . '%';
  126. $data['cost_cover_rate'] = round($data['cost_cover_rate'], 4) * 100 . '%';
  127. return [$data, $header];
  128. }
  129. /**
  130. * 总表排序字段处理
  131. * */
  132. public static function getSortField($field)
  133. {
  134. $data = [
  135. 'paid' => 'day_paid_bucket > day_paid',
  136. 'operate_days' => 'operate_days_bucket > operate_days',
  137. 'follow_cost' => 'follow_cost',
  138. 'pay_user_total' => 'pay_user_total',
  139. 'pay_rate' => 'pay_rate',
  140. 'seven_days_paid_rate' => 'seven_days_paid_rate',
  141. 'pay_money_total' => 'pay_money_total',
  142. 'gross_profit_rate' => 'gross_profit_rate',
  143. 'cost_cover_rate' => 'cost_cover_rate',
  144. ];
  145. return isset($data[$field]) ? $data[$field] : 'day_paid_bucket > day_paid';
  146. }
  147. }