ActEffectStatistics.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace app\store\model;
  3. use app\common\library\helper;
  4. use app\common\model\ActEffectStatistics as ActEffectStatisticsModel;
  5. /**
  6. * 活动效果统计模型
  7. * @package app\store\model
  8. */
  9. class ActEffectStatistics extends ActEffectStatisticsModel
  10. {
  11. public function getList($params = [])
  12. {
  13. $filter = $this->getFilter($params);
  14. $actTable = str_replace([1,2,3,4,5,9],['group_buy_activity','kj_activity','activity_discount','mj_send_activity','full_send_activity','ms_activity'], $params['act_type']);
  15. if($params['act_type']==10){
  16. $actTable = 'group_buy_lb_activity';
  17. }
  18. if ($params['act_type'] == 1) { // 拼团
  19. $query = self::alias('stat')
  20. ->leftJoin("{$actTable} act",'act.id=stat.act_id')
  21. ->leftJoin('group_buy_goods gg','act.id=gg.group_buy_activity_id')
  22. ->leftJoin('goods', 'goods.goods_id=gg.goods_id')
  23. ->where($filter)
  24. ->where('gg.goods_id', '>', 0)
  25. ->field("stat.act_id,act.name as act_name,gg.goods_name,goods.goods_no,act.start_time,act.end_time,stat.act_type,sum(stat.pv) as pv,sum(stat.uv) as uv,sum(stat.uv_new) as uv_new,
  26. sum(stat.pay_order_count) as pay_order_count,sum(stat.pay_user_count) as pay_user_count,
  27. sum(stat.pay_amount) as pay_amount,convert((stat.pay_user_count/stat.uv)*100,decimal(10,2)) as ratio")
  28. ->group('stat.act_id')->order('stat.act_id', 'desc');
  29. } elseif ($params['act_type'] == 10){ //拼团裂变
  30. $query = self::alias('stat')
  31. ->leftJoin("{$actTable} act",'act.id=stat.act_id')
  32. ->leftJoin('group_buy_lb_goods gg','act.id=gg.group_buy_lb_activity_id')
  33. ->leftJoin('goods', 'goods.goods_id=gg.goods_id')
  34. ->where($filter)
  35. ->where('gg.goods_id', '>', 0)
  36. ->field("stat.act_id,act.name as act_name,gg.goods_name,goods.goods_no,act.start_time,act.end_time,stat.act_type,sum(stat.pv) as pv,sum(stat.uv) as uv,sum(stat.uv_new) as uv_new,
  37. sum(stat.pay_order_count) as pay_order_count,sum(stat.pay_user_count) as pay_user_count,
  38. sum(stat.pay_amount) as pay_amount,convert((stat.pay_user_count/stat.uv)*100,decimal(10,2)) as ratio")
  39. ->group('stat.act_id')->order('stat.act_id', 'desc');
  40. } elseif ($params['act_type']==9){ //秒杀
  41. $query = self::alias('stat')
  42. ->leftJoin("{$actTable} act",'act.id=stat.act_id')
  43. // ->leftJoin('ms_activity_goods gg','act.id=gg.ms_activity_id')
  44. // ->leftJoin('goods', 'goods.goods_id=gg.goods_id')
  45. ->where($filter)
  46. // ->where('gg.goods_id', '>', 0)
  47. ->field("stat.act_id,act.name as act_name,act.start_time,act.end_time,stat.act_type,sum(stat.pv) as pv,sum(stat.uv) as uv,sum(stat.uv_new) as uv_new,
  48. sum(stat.pay_order_count) as pay_order_count,sum(stat.pay_user_count) as pay_user_count,
  49. sum(stat.pay_amount) as pay_amount,convert((stat.pay_user_count/stat.uv)*100,decimal(10,2)) as ratio")
  50. ->group('stat.act_id')->order('stat.act_id', 'desc');
  51. }
  52. elseif ($params['act_type'] == 2) { // 砍价
  53. $query = self::alias('stat')
  54. ->leftJoin("{$actTable} act",'act.id=stat.act_id')
  55. ->leftJoin('kj_activity_goods gg','act.id=gg.activity_id')
  56. ->leftJoin('goods', 'goods.goods_id=gg.goods_id')
  57. ->where($filter)
  58. ->where('gg.goods_id', '>', 0)
  59. ->field("stat.act_id,act.name as act_name,goods.goods_name,goods.goods_no,act.start_time,act.end_time,stat.act_type,sum(stat.pv) as pv,sum(stat.uv) as uv,sum(stat.uv_new) as uv_new,
  60. sum(stat.pay_order_count) as pay_order_count,sum(stat.pay_user_count) as pay_user_count,
  61. sum(stat.pay_amount) as pay_amount,convert((stat.pay_user_count/stat.uv)*100,decimal(10,2)) as ratio")
  62. ->group('stat.act_id')->order('stat.act_id', 'desc');
  63. } else { // 其他活动
  64. $query = self::alias('stat')
  65. ->leftJoin("{$actTable} act",'act.id=stat.act_id')
  66. ->where($filter)
  67. ->where('act.id', '>', 0)
  68. ->field("stat.act_id,act.name as act_name,act.start_time,act.end_time,stat.act_type,sum(stat.pv) as pv,sum(stat.uv) as uv,sum(stat.uv_new) as uv_new,
  69. sum(stat.pay_order_count) as pay_order_count,sum(stat.pay_user_count) as pay_user_count,
  70. sum(stat.pay_amount) as pay_amount,convert((stat.pay_user_count/stat.uv)*100,decimal(10,2)) as ratio")
  71. ->group('stat.act_id')->order('stat.act_id', 'desc');
  72. }
  73. return $query->paginate(15)->each(function ($item) {
  74. $item['ratio'] = helper::number2($item['ratio']);
  75. });
  76. }
  77. /**
  78. * 获取查询条件
  79. * @param array $param
  80. * @return array
  81. */
  82. private function getFilter(array $param = [])
  83. {
  84. // 默认查询条件
  85. $params = $this->setQueryDefaultValue($param, [
  86. 'act_type' => 0, // 活动类型
  87. ]);
  88. // 检索查询条件
  89. $filter = [];
  90. $params['act_type'] > 0 && $filter[] = ['stat.act_type', '=', (int)$params['act_type']];
  91. $filter[] = ['stat.act_id', '>', 0];
  92. return $filter;
  93. }
  94. /**
  95. * 新增记录
  96. * @param array $data
  97. * @return bool
  98. */
  99. public function add(array $data)
  100. {
  101. $this->transaction(function () use ($data) {
  102. $this->save($data);
  103. });
  104. return true;
  105. }
  106. /**
  107. * 更新记录
  108. * @param array $data
  109. * @return bool
  110. */
  111. public function edit(array $data)
  112. {
  113. $this->transaction(function () use ($data) {
  114. $this->save($data);
  115. });
  116. return true;
  117. }
  118. }