RetainedLogic.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. <?php
  2. /**
  3. * DayDataLogic.php UTF-8
  4. * 留存 #13831
  5. *
  6. * @date : 2020/12/16 10:08
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : chenbingling <cbl@huosdk.com>
  10. * @version : HUOSDK-MP
  11. */
  12. namespace huomp\logic\data;
  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 huo\model\user\UserModel;
  19. use huolib\constant\AgentConst;
  20. use huolib\constant\CommonConst;
  21. class RetainedLogic extends CommonModel {
  22. private $base_field
  23. = [
  24. 'date',
  25. 'reg_cnt',
  26. 'day2',
  27. 'day3',
  28. 'day4',
  29. 'day5',
  30. 'day6',
  31. 'day7',
  32. 'day15',
  33. 'day30',
  34. ];
  35. private $sum_field
  36. = [
  37. 'date' => 'date',
  38. 'sum(reg_cnt)' => 'reg_cnt',
  39. 'sum(day2)' => 'day2',
  40. 'sum(day3)' => 'day3',
  41. 'sum(day4)' => 'day4',
  42. 'sum(day5)' => 'day5',
  43. 'sum(day6)' => 'day6',
  44. 'sum(day7)' => 'day7',
  45. 'sum(day15)' => 'day15',
  46. 'sum(day30)' => 'day30',
  47. ];
  48. private $pay_base_field
  49. = [
  50. 'date',
  51. 'reg_cnt',
  52. 'reg_pay_cnt',
  53. 'pay_day2',
  54. 'pay_day3',
  55. 'pay_day4',
  56. 'pay_day5',
  57. 'pay_day6',
  58. 'pay_day7',
  59. 'pay_day15',
  60. 'pay_day30',
  61. ];
  62. private $pay_sum_field
  63. = [
  64. 'date' => 'date',
  65. 'sum(reg_cnt)' => 'reg_cnt',
  66. 'sum(reg_pay_cnt)' => 'reg_pay_cnt',
  67. 'sum(pay_day2)' => 'pay_day2',
  68. 'sum(pay_day3)' => 'pay_day3',
  69. 'sum(pay_day4)' => 'pay_day4',
  70. 'sum(pay_day5)' => 'pay_day5',
  71. 'sum(pay_day6)' => 'pay_day6',
  72. 'sum(pay_day7)' => 'pay_day7',
  73. 'sum(pay_day15)' => 'pay_day15',
  74. 'sum(pay_day30)' => 'pay_day30',
  75. ];
  76. /**
  77. * @param array $param
  78. *
  79. * @return array
  80. */
  81. protected function getWhere($param = []) {
  82. $_map = [];
  83. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  84. $_map['date'] = ['between', [$param['start_time'], $param['end_time']]];
  85. } elseif (!empty($param['start_time'])) {
  86. $_map['date'] = ['egt', $param['start_time']];
  87. } elseif (!empty($param['end_time'])) {
  88. $_map['date'] = ['elt', $param['end_time']];
  89. }
  90. $_agent_model = new UserModel();
  91. if (!empty($param['cp_id'])) {
  92. $_ids = $_agent_model->getIdsByCpId(
  93. $param['cp_id'], ['in', [AgentConst::AGENT_ROLE_MP_AGENT, AgentConst::AGENT_ROLE_MP_AD]]
  94. );
  95. if (empty($_ids)) {
  96. $_ids = [-1];
  97. }
  98. $_map['agent_id'] = ['in', $_ids];
  99. }
  100. if (!empty($param['agent_level_1_id'])) {
  101. $_agent_map = [
  102. 'role_id' => ['in', [AgentConst::AGENT_ROLE_MP_AGENT, AgentConst::AGENT_ROLE_MP_AD]]
  103. ];
  104. $_ids = $_agent_model->getIdsByParentId($param['agent_level_1_id'], $_agent_map);
  105. $_ids[] = $param['agent_level_1_id'];
  106. $_map['agent_id'] = ['in', $_ids];
  107. }
  108. if (!empty($param['agent_level_2_id'])) {
  109. $_map['agent_id'] = $param['agent_level_2_id'];
  110. }
  111. if (!empty($param['agent_id'])) {
  112. $_map['agent_id'] = $param['agent_id'];
  113. }
  114. if (!empty($param['sub_agent_id'])) {
  115. $_map['agent_id'] = $param['sub_agent_id'];
  116. }
  117. if (!empty($param['game_id'])) {
  118. $_map['app_id'] = $param['game_id'];
  119. }
  120. if (!empty($param['app_id'])) {
  121. $_map['app_id'] = $param['app_id'];
  122. }
  123. /* Modified by wuyonghong BEGIN 2020/10/7 ISSUES:13308 小游戏后台cp功能开发 */
  124. $_class = '\\huosdk\\auth\\controller\\Auth';
  125. if (class_exists($_class)) {
  126. $_map = (new $_class())->getAgentIdBySearch(
  127. get_val($_map, 'agent_id', 0), $_map, cmf_get_current_admin_id()
  128. );
  129. $_map = (new $_class())->getAppIdBySearch(get_val($_map, 'app_id', 0), $_map, cmf_get_current_admin_id());
  130. }
  131. /* END 2020/10/7 ISSUES:13308 */
  132. return $_map;
  133. }
  134. /**
  135. * @param array $where
  136. *
  137. * @return DayAgentModel|DayGameAgentModel|DayGameModel|DayModel|null|\think\Model
  138. */
  139. public function getDataModel($where) {
  140. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  141. return new DayGameAgentModel();
  142. } elseif (!empty($where['agent_id'])) {
  143. return new DayAgentModel();
  144. } elseif (!empty($where['app_id'])) {
  145. return new DayGameModel();
  146. } else {
  147. return new DayModel();
  148. }
  149. }
  150. /**
  151. * 获取字段
  152. *
  153. * @param $where
  154. *
  155. * @param int $is_summary
  156. *
  157. * @return array
  158. */
  159. public function getField($where, $is_summary = 0) {
  160. if (CommonConst::STATUS_YES == $is_summary) {
  161. $_field = $this->sum_field;
  162. $_field['date'] = 'date';
  163. } else {
  164. $_field = $this->base_field;
  165. }
  166. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  167. $_field['agent_id'] = 'agent_id';
  168. $_field['app_id'] = 'app_id';
  169. } elseif (!empty($where['agent_id'])) {
  170. $_field['agent_id'] = 'agent_id';
  171. } elseif (!empty($where['app_id'])) {
  172. $_field['app_id'] = 'app_id';
  173. }
  174. return $_field;
  175. }
  176. /**
  177. * 获取字段
  178. *
  179. * @param $where
  180. *
  181. * @param int $is_summary
  182. *
  183. * @return array
  184. */
  185. public function getPayField($where, $is_summary = 0) {
  186. if (CommonConst::STATUS_YES == $is_summary) {
  187. $_field = $this->pay_sum_field;
  188. $_field['date'] = 'date';
  189. } else {
  190. $_field = $this->pay_base_field;
  191. }
  192. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  193. $_field['agent_id'] = 'agent_id';
  194. $_field['app_id'] = 'app_id';
  195. } elseif (!empty($where['agent_id'])) {
  196. $_field['agent_id'] = 'agent_id';
  197. } elseif (!empty($where['app_id'])) {
  198. $_field['app_id'] = 'app_id';
  199. }
  200. return $_field;
  201. }
  202. /**
  203. * 获取字段
  204. *
  205. * @param $where
  206. *
  207. * @return array
  208. */
  209. public function getSumField($where) {
  210. $_field = $this->sum_field;
  211. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  212. $_field['agent_id'] = 'agent_id';
  213. $_field['app_id'] = 'app_id';
  214. } elseif (!empty($where['agent_id'])) {
  215. $_field['agent_id'] = 'agent_id';
  216. } elseif (!empty($where['app_id'])) {
  217. $_field['app_id'] = 'app_id';
  218. }
  219. return $_field;
  220. }
  221. /**
  222. * 获取字段
  223. *
  224. * @param $where
  225. *
  226. * @return array
  227. */
  228. public function getPaySumField($where) {
  229. $_field = $this->pay_sum_field;
  230. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  231. $_field['agent_id'] = 'agent_id';
  232. $_field['app_id'] = 'app_id';
  233. } elseif (!empty($where['agent_id'])) {
  234. $_field['agent_id'] = 'agent_id';
  235. } elseif (!empty($where['app_id'])) {
  236. $_field['app_id'] = 'app_id';
  237. }
  238. return $_field;
  239. }
  240. /**
  241. * 获取with
  242. *
  243. * @param $where
  244. *
  245. * @return string
  246. */
  247. public function getWith($where) {
  248. $_with = '';
  249. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  250. $_with = 'agent,game';
  251. } elseif (!empty($where['agent_id'])) {
  252. $_with = 'agent';
  253. $_field['agent_id'] = 'agent_id';
  254. } elseif (!empty($where['app_id'])) {
  255. $_with = 'game';
  256. }
  257. return $_with;
  258. }
  259. /**
  260. * 获取列表底层函数
  261. *
  262. * @param array $where 搜索条件
  263. * @param string $page 列表个数
  264. * @param string $order 排序
  265. * @param array $field 附加字段
  266. * @param string $group 归类
  267. * @param string $with
  268. *
  269. * @return array ['count'=>0,'list'=>[]]
  270. */
  271. public function getList($where = [], $page = '1,10', $order = '-date', $field = [], $group = '', $with = '') {
  272. $_map = $where;
  273. $_field = $field;
  274. $_model = $this->getDataModel($_map);
  275. if (!empty($group)) {
  276. $_count = $_model->where($_map)->group($group)->count();
  277. } else {
  278. $_count = $_model->where($_map)->count();
  279. }
  280. if (empty($_count)) {
  281. return [
  282. 'count' => 0,
  283. 'list' => []
  284. ];
  285. }
  286. $_order = $this->orderFilter($order);
  287. if (!empty($group)) {
  288. $_datas = $_model->with($with)
  289. ->field($_field)
  290. ->where($_map)
  291. ->order($_order)
  292. ->group($group)
  293. ->page($page)
  294. ->select();
  295. } else {
  296. $_datas = $_model->with($with)
  297. ->field($_field)
  298. ->where($_map)
  299. ->order($_order)
  300. ->page($page)
  301. ->select();
  302. }
  303. if (is_object($_datas)) {
  304. $_datas = $_datas->toArray();
  305. }
  306. return [
  307. 'count' => $_count,
  308. 'list' => $_datas
  309. ];
  310. }
  311. /**
  312. * 获取汇总数据
  313. *
  314. * @param $where
  315. * @param $sum_file
  316. * @param $group
  317. *
  318. * @return array
  319. */
  320. public function getSumData($where, $sum_file, $group = '') {
  321. $_map = $this->getWhere($where);
  322. $_model = $this->getDataModel($_map);
  323. $_sum_field = $sum_file;
  324. $_sum_data = $_model
  325. ->field($_sum_field)
  326. ->where($_map)
  327. ->group($group)
  328. ->find();
  329. if (is_object($_sum_data)) {
  330. $_sum_data = $_sum_data->toArray();
  331. }
  332. return $_sum_data;
  333. }
  334. /**
  335. * 获取后台列表
  336. *
  337. * @param array $where 搜索条件
  338. * @param string $page 列表个数
  339. * @param string $order 排序
  340. * @param array $field 附加字段
  341. *
  342. * @return array ['count'=>0,'list'=>[]]
  343. */
  344. public function getAdminList($where = [], $page = '1,10', $order = '-date', $field = []) {
  345. $_map = $this->getWhere($where);
  346. $_field = $this->getField($_map);
  347. $_with = $this->getWith($where);
  348. if (!empty($field)) {
  349. $_field = array_merge($_field, $field);/* 获取后台字段 */
  350. }
  351. $_group = '';
  352. if (isset($where['include_agent']) && 2 == $where['include_agent']
  353. || isset($where['is_summary'])
  354. && 2 == $where['is_summary']) {
  355. $_group = 'date';
  356. }
  357. $_rdata = $this->getList($_map, $page, $order, $_field, $_group, $_with);
  358. if (empty($_rdata['count'])) {
  359. $_sum_data = [];
  360. foreach ($this->sum_field as $_v) {
  361. $_sum_data[$_v] = 0;
  362. }
  363. $_rdata['sum'] = $_sum_data;
  364. return $_rdata;
  365. }
  366. $_datas = $_rdata['list'];
  367. foreach ($_datas as $_k => $_v) {
  368. $_datas[$_k]['game_name'] = '';
  369. $_datas[$_k]['game_icon'] = '';
  370. $_datas[$_k]['classify'] = 0;
  371. if (!empty($_v['game'])) {
  372. $_datas[$_k]['game_name'] = get_val($_v['game'], 'name', '');
  373. $_datas[$_k]['game_icon'] = get_val($_v['game'], 'icon', '');
  374. $_datas[$_k]['classify'] = get_val($_v['game'], 'classify', '');
  375. unset($_datas[$_k]['game']);
  376. }
  377. $_datas[$_k]['agent_nickname'] = '';
  378. $_datas[$_k]['agent_name'] = '';
  379. if (!empty($_v['agent'])) {
  380. $_datas[$_k]['agent_nickname'] = get_val($_v['agent'], 'user_nicename', '');
  381. $_datas[$_k]['agent_name'] = get_val($_v['agent'], 'user_login', '');
  382. unset($_datas[$_k]['agent']);
  383. }
  384. }
  385. $_rdata['list'] = $_datas;
  386. $_sum_filed = $this->getSumField($where);
  387. $_rdata['sum'] = $this->getSumData($where, $_sum_filed, $_group);
  388. return $_rdata;
  389. }
  390. /**
  391. * 获取后台列表
  392. *
  393. * @param array $where 搜索条件
  394. * @param string $page 列表个数
  395. * @param string $order 排序
  396. * @param array $field 附加字段
  397. *
  398. * @return array ['count'=>0,'list'=>[]]
  399. */
  400. public function getPayAdminList($where = [], $page = '1,10', $order = '-date', $field = []) {
  401. $_map = $this->getWhere($where);
  402. $_field = $this->getPayField($_map);
  403. $_with = $this->getWith($where);
  404. if (!empty($field)) {
  405. $_field = array_merge($_field, $field);/* 获取后台字段 */
  406. }
  407. $_group = '';
  408. if (isset($where['include_agent']) && 2 == $where['include_agent']
  409. || isset($where['is_summary'])
  410. && 2 == $where['is_summary']) {
  411. $_group = 'date';
  412. }
  413. $_rdata = $this->getList($_map, $page, $order, $_field, $_group, $_with);
  414. if (empty($_rdata['count'])) {
  415. $_sum_data = [];
  416. foreach ($this->pay_sum_field as $_v) {
  417. $_sum_data[$_v] = 0;
  418. }
  419. $_rdata['sum'] = $_sum_data;
  420. return $_rdata;
  421. }
  422. $_datas = $_rdata['list'];
  423. foreach ($_datas as $_k => $_v) {
  424. $_datas[$_k]['game_name'] = '';
  425. $_datas[$_k]['game_icon'] = '';
  426. $_datas[$_k]['classify'] = 0;
  427. if (!empty($_v['game'])) {
  428. $_datas[$_k]['game_name'] = get_val($_v['game'], 'name', '');
  429. $_datas[$_k]['game_icon'] = get_val($_v['game'], 'icon', '');
  430. $_datas[$_k]['classify'] = get_val($_v['game'], 'classify', '');
  431. unset($_datas[$_k]['game']);
  432. }
  433. $_datas[$_k]['agent_nickname'] = '';
  434. $_datas[$_k]['agent_name'] = '';
  435. if (!empty($_v['agent'])) {
  436. $_datas[$_k]['agent_nickname'] = get_val($_v['agent'], 'user_nicename', '');
  437. $_datas[$_k]['agent_name'] = get_val($_v['agent'], 'user_login', '');
  438. unset($_datas[$_k]['agent']);
  439. }
  440. }
  441. $_rdata['list'] = $_datas;
  442. $_sum_filed = $this->getPaySumField($where);
  443. $_rdata['sum'] = $this->getSumData($where, $_sum_filed, $_group);
  444. return $_rdata;
  445. }
  446. }