MaterialLogic.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. // 素材数据总览
  3. namespace app\v1\logic\dataReport;
  4. use plugin\saiadmin\basic\BaseLogic;
  5. use support\think\Db;
  6. class MaterialLogic extends BaseLogic
  7. {
  8. public function getMaterialList($params)
  9. {
  10. $params = $this->searchByAuth($params);
  11. $field = "
  12. material_name,
  13. material_id,
  14. author_id,
  15. auth_id,
  16. media_id,
  17. tdate,
  18. SUM(money) as cost,
  19. SUM(ad_show) as ad_show,
  20. SUM(click) as click,
  21. SUM(active) as active,
  22. SUM(register) as register,
  23. SUM(pay_count) as pay_count,
  24. SUM(pay_amount) as pay_amount
  25. ";
  26. // 基础筛选
  27. $whereRaw = $this->getCommonWhereRaw($params);
  28. // 作者筛选
  29. if (!empty($params['author_id'])) {
  30. $whereRaw .= " AND author_id = {$params['author_id']}";
  31. }
  32. // 消耗筛选
  33. if (!empty($params['cost_type'])) {
  34. switch ($params['cost_type']) {
  35. case '1':
  36. $whereRaw .= " AND ori_money >= 2000";
  37. break;
  38. case '2':
  39. $whereRaw .= " AND ori_money < 2000";
  40. break;
  41. }
  42. }
  43. // 素材名称筛选
  44. if (!empty($params['material_name'])) {
  45. $whereRaw .= " AND material_name LIKE '%{$params['material_name']}%'";
  46. }
  47. // 素材id筛选
  48. if (!empty($params['material_id'])) {
  49. $whereRaw .= " AND material_id = {$params['material_id']}";
  50. }
  51. // 分组筛选
  52. // $group = 'material_id';
  53. switch ($params['group']) {
  54. case 1:
  55. $group = 'material_id';
  56. break;
  57. case 2:
  58. $group = 'author_id';
  59. break;
  60. default:
  61. $group = 'material_id,author_id';
  62. break;
  63. }
  64. $data = Db::connect('db_advert')->table("media_cost_material")->field($field)->whereRaw($whereRaw)->group($group)->select();
  65. if(empty($data)){
  66. return [
  67. 'data' => [],
  68. 'totalRow' => []
  69. ];
  70. }
  71. $totalData = [];
  72. foreach ($data as &$row) {
  73. if ($params['group'] == 2) {
  74. $row['material_name'] = '';
  75. $row['material_id'] = '';
  76. }
  77. $row['cost'] = round($row['cost'], 2);
  78. $row['ad_click_rate'] = getPercent($row['click'], $row['ad_show'], 2);
  79. $row['reg_cost'] = getRound($row['cost'], $row['register'], 2);
  80. $row['pay_cost'] = getRound($row['cost'], (int)$row['pay_count'], 2);
  81. $totalData['cost'] = !empty($totalData['cost']) ? round($totalData['cost'] + $row['cost'], 2) : $row['cost'];
  82. $totalData['ad_show'] = !empty($totalData['ad_show']) ? $totalData['ad_show'] + $row['ad_show'] : $row['ad_show'];
  83. $totalData['click'] = !empty($totalData['click']) ? $totalData['click'] + $row['click'] : $row['click'];
  84. $totalData['active'] = !empty($totalData['active']) ? $totalData['active'] + $row['active'] : $row['active'];
  85. $totalData['register'] = !empty($totalData['register']) ? $totalData['register'] + $row['register'] : $row['register'];
  86. $totalData['pay_count'] = !empty($totalData['pay_count']) ? $totalData['pay_count'] + $row['pay_count'] : $row['pay_count'];
  87. $totalData['pay_amount'] = !empty($totalData['pay_amount']) ? $totalData['pay_amount'] + $row['pay_amount'] : $row['pay_amount'];
  88. }
  89. $totalData['ad_click_rate'] = getPercent($totalData['click']??0, $totalData['ad_show']??0, 2);
  90. $totalData['reg_cost'] = getRound($totalData['cost']??0, $totalData['register']??0, 2);
  91. $totalData['pay_cost'] = getRound($totalData['cost']??0, (int)$totalData['pay_count']??0, 2);
  92. return [
  93. 'data' => $data,
  94. 'totalRow' => $totalData
  95. ];
  96. }
  97. }