SwitchRemainDataLogic.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. /**
  3. * RemainDataLogic.php UTF-8
  4. * 切量留存逻辑处理
  5. *
  6. * @date : 2018/5/21 18:55
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : chenbingling <cbl@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huoAgentSwitch\logic;
  13. use huo\model\common\CommonModel;
  14. use huo\model\data\DayAgentModel;
  15. use huo\model\data\DayGameAgentModel;
  16. use huo\model\data\DayGameModel;
  17. use huo\model\data\DayModel;
  18. use huoAgentSwitch\model\DayAgentSwitchModel;
  19. use huoAgentSwitch\model\DayGameSwitchModel;
  20. use huoAgentSwitch\model\DaySwitchModel;
  21. use huoAgentSwitch\model\DgaSwitchModel;
  22. class SwitchRemainDataLogic extends CommonModel {
  23. private $base_field
  24. = [
  25. 'date',
  26. 'reg_cnt',
  27. 'day2',
  28. 'day3',
  29. 'day4',
  30. 'day5',
  31. 'day6',
  32. 'day7',
  33. 'day15',
  34. 'day30'
  35. ];
  36. private $sum_field
  37. = [
  38. 'date' => 'date',
  39. 'sum(reg_cnt)' => 'reg_cnt',
  40. 'sum(day2)' => 'day2',
  41. 'sum(day3)' => 'day3',
  42. 'sum(day4)' => 'day4',
  43. 'sum(day5)' => 'day5',
  44. 'sum(day6)' => 'day6',
  45. 'sum(day7)' => 'day7',
  46. 'sum(day15)' => 'day15',
  47. 'sum(day30)' => 'day30',
  48. ];
  49. /**
  50. * @param array $param
  51. *
  52. * @return array
  53. */
  54. protected function getWhere($param = []) {
  55. $_map = [];
  56. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  57. $_map['date'] = ['between', [$param['start_time'], $param['end_time']]];
  58. } elseif (!empty($param['start_time'])) {
  59. $_map['date'] = ['egt', $param['start_time']];
  60. } elseif (!empty($param['end_time'])) {
  61. $_map['date'] = ['elt', $param['end_time']];
  62. }
  63. if (!empty($param['agent_id'])) {
  64. $_map['agent_id'] = $param['agent_id'];
  65. }
  66. if (!empty($param['app_id'])) {
  67. $_map['app_id'] = $param['app_id'];
  68. }
  69. return $_map;
  70. }
  71. public function main($param, $order = '-date') {
  72. $_map = $this->getWhere($param);
  73. $_filed = $this->sum_field;
  74. $_model = new DayModel();
  75. $_order = $this->orderFilter($order);
  76. $_items = $_model->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  77. $_count = $_items->count();
  78. if (!empty($_count)) {
  79. $_switch_items = (new DaySwitchModel())->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  80. $_count = $_switch_items->count();
  81. if (!empty($_count)) {
  82. foreach ($_items as $_k => $_v) {
  83. foreach ($_switch_items as $_sk => $_sv) {
  84. if ($_v->date == $_sv->date) {
  85. $_items[$_k]->reg_cnt -= $_sv->reg_cnt;
  86. $_items[$_k]->day2 -= $_sv->day2;
  87. $_items[$_k]->day3 -= $_sv->day3;
  88. $_items[$_k]->day4 -= $_sv->day4;
  89. $_items[$_k]->day5 -= $_sv->day5;
  90. $_items[$_k]->day6 -= $_sv->day6;
  91. $_items[$_k]->day7 -= $_sv->day7;
  92. $_items[$_k]->day15 -= $_sv->day15;
  93. $_items[$_k]->day30 -= $_sv->day30;
  94. }
  95. }
  96. }
  97. }
  98. }
  99. return $_items;
  100. }
  101. public function game($param, $order = '-date') {
  102. $_map = $this->getWhere($param);
  103. $_filed = $this->sum_field;
  104. $_filed['app_id'] = 'app_id';
  105. $_model = new DayGameModel();
  106. $_order = $this->orderFilter($order);
  107. $_items = $_model->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  108. $_count = $_items->count();
  109. if (!empty($_count)) {
  110. $_switch_items = (new DayGameSwitchModel())->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  111. $_count = $_switch_items->count();
  112. if (!empty($_count)) {
  113. foreach ($_items as $_k => $_v) {
  114. foreach ($_switch_items as $_sk => $_sv) {
  115. if ($_v->date == $_sv->date) {
  116. $_items[$_k]->reg_cnt -= $_sv->reg_cnt;
  117. $_items[$_k]->day2 -= $_sv->day2;
  118. $_items[$_k]->day3 -= $_sv->day3;
  119. $_items[$_k]->day4 -= $_sv->day4;
  120. $_items[$_k]->day5 -= $_sv->day5;
  121. $_items[$_k]->day6 -= $_sv->day6;
  122. $_items[$_k]->day7 -= $_sv->day7;
  123. $_items[$_k]->day15 -= $_sv->day15;
  124. $_items[$_k]->day30 -= $_sv->day30;
  125. }
  126. }
  127. }
  128. }
  129. }
  130. return $_items;
  131. }
  132. public function agent($param, $order = '-date') {
  133. $_map = $this->getWhere($param);
  134. $_filed = $this->sum_field;
  135. $_filed['agent_id'] = 'agent_id';
  136. $_model = new DayAgentModel();
  137. $_order = $this->orderFilter($order);
  138. if (isset($_map['agent_id']) && -1 == $_map['agent_id']) {
  139. $_map['agent_id'] = 0;
  140. }
  141. $_items = $_model->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  142. $_count = $_items->count();
  143. if (!empty($_count)) {
  144. $_switch_items = (new DayAgentSwitchModel())->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  145. $_count = $_switch_items->count();
  146. if (!empty($_count)) {
  147. foreach ($_items as $_k => $_v) {
  148. foreach ($_switch_items as $_sk => $_sv) {
  149. if ($_v->date == $_sv->date) {
  150. $_items[$_k]->reg_cnt -= $_sv->reg_cnt;
  151. $_items[$_k]->day2 -= $_sv->day2;
  152. $_items[$_k]->day3 -= $_sv->day3;
  153. $_items[$_k]->day4 -= $_sv->day4;
  154. $_items[$_k]->day5 -= $_sv->day5;
  155. $_items[$_k]->day6 -= $_sv->day6;
  156. $_items[$_k]->day7 -= $_sv->day7;
  157. $_items[$_k]->day15 -= $_sv->day15;
  158. $_items[$_k]->day30 -= $_sv->day30;
  159. }
  160. }
  161. }
  162. }
  163. }
  164. return $_items;
  165. }
  166. public function gameAgent($param, $order = '-date') {
  167. $_map = $this->getWhere($param);
  168. $_filed = $this->sum_field;
  169. $_filed['agent_id'] = 'agent_id';
  170. $_filed['app_id'] = 'app_id';
  171. if (isset($_map['agent_id']) && -1 == $_map['agent_id']) {
  172. $_map['agent_id'] = 0;
  173. }
  174. $_model = new DayGameAgentModel();
  175. $_order = $this->orderFilter($order);
  176. $_items = $_model->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  177. $_count = $_items->count();
  178. if (!empty($_count)) {
  179. $_switch_items = (new DgaSwitchModel())->field($_filed)->where($_map)->group('date')->order($_order)->paginate();
  180. $_count = $_switch_items->count();
  181. if (!empty($_count)) {
  182. foreach ($_items as $_k => $_v) {
  183. foreach ($_switch_items as $_sk => $_sv) {
  184. if ($_v->date == $_sv->date) {
  185. $_items[$_k]->reg_cnt -= $_sv->reg_cnt;
  186. $_items[$_k]->day2 -= $_sv->day2;
  187. $_items[$_k]->day3 -= $_sv->day3;
  188. $_items[$_k]->day4 -= $_sv->day4;
  189. $_items[$_k]->day5 -= $_sv->day5;
  190. $_items[$_k]->day6 -= $_sv->day6;
  191. $_items[$_k]->day7 -= $_sv->day7;
  192. $_items[$_k]->day15 -= $_sv->day15;
  193. $_items[$_k]->day30 -= $_sv->day30;
  194. }
  195. }
  196. }
  197. }
  198. }
  199. return $_items;
  200. }
  201. }