OutputDataLogic.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. <?php
  2. /**
  3. * OutputDataLogic.php UTF-8
  4. * 投产数据逻辑 #13630
  5. *
  6. * @date : 2020/12/15 16:34
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : chenbingling <cbl@huosdk.com>
  10. * @version : HUOSDK-Mp 1.0
  11. */
  12. namespace huomp\logic\data;
  13. use DateTime;
  14. use huo\model\common\CommonModel;
  15. use huo\model\game\GameModel;
  16. use huo\model\user\UserModel;
  17. use huolib\constant\AgentConst;
  18. use huolib\constant\CommonConst;
  19. use huolib\tool\StrUtils;
  20. use huoLtv\model\LtvAgentModel;
  21. use huoLtv\model\LtvDayModel;
  22. use huoLtv\model\LtvGameAgentModel;
  23. use huoLtv\model\LtvGameModel;
  24. use huomp\model\agent\AgentGameDateCostModel;
  25. use think\Model;
  26. class OutputDataLogic extends CommonModel {
  27. private $base_field
  28. = [
  29. 'date' => 'date',
  30. 'reg_cnt' => 'reg_cnt',
  31. 'sum_money' => 'sum_money',
  32. 'day1' => 'day1', //1日
  33. 'day2' => 'day2', //2日
  34. 'day3' => 'day3', //3日
  35. 'day4' => 'day4', //4日
  36. 'day5' => 'day5', //5日
  37. 'day6' => 'day6', //6日
  38. 'day7' => 'day7', //7日
  39. 'day8' => 'day8', //8日
  40. 'day9' => 'day9', //9日
  41. 'day10' => 'day10', //10日
  42. 'day11' => 'day11', //11日
  43. 'day12' => 'day12', //12日
  44. 'day13' => 'day13', //13日
  45. 'day14' => 'day14', //14日
  46. 'day15' => 'day15', //15日
  47. 'day16' => 'day16', //16日
  48. 'day17' => 'day17', //17日
  49. 'day18' => 'day18', //18日
  50. 'day19' => 'day19', //19日
  51. 'day20' => 'day20', //20日
  52. 'day21' => 'day21', //21日
  53. 'day22' => 'day22', //22日
  54. 'day23' => 'day23', //23日
  55. 'day24' => 'day24', //24日
  56. 'day25' => 'day25', //25日
  57. 'day26' => 'day26', //26日
  58. 'day27' => 'day27', //27日
  59. 'day28' => 'day28', //28日
  60. 'day29' => 'day29', //29日
  61. 'day30' => 'day30', //30日
  62. 'day31' => 'day31', //31日
  63. 'day32' => 'day32', //32日
  64. 'day33' => 'day33', //33日
  65. 'day34' => 'day34', //34日
  66. 'day35' => 'day35', //35日
  67. 'day36' => 'day36', //36日
  68. 'day37' => 'day37', //37日
  69. 'day38' => 'day38', //38日
  70. 'day39' => 'day39', //39日
  71. 'day40' => 'day40', //40日
  72. 'day41' => 'day41', //41日
  73. 'day42' => 'day42', //42日
  74. 'day43' => 'day43', //43日
  75. 'day44' => 'day44', //44日
  76. 'day45' => 'day45', //45日
  77. 'day46' => 'day46', //46日
  78. 'day47' => 'day47', //47日
  79. 'day48' => 'day48', //48日
  80. 'day49' => 'day49', //49日
  81. 'day50' => 'day50', //50日
  82. 'day51' => 'day51', //51日
  83. 'day52' => 'day52', //52日
  84. 'day53' => 'day53', //53日
  85. 'day54' => 'day54', //54日
  86. 'day55' => 'day55', //55日
  87. 'day56' => 'day56', //56日
  88. 'day57' => 'day57', //57日
  89. 'day58' => 'day58', //58日
  90. 'day59' => 'day59', //59日
  91. 'day60' => 'day60', //60日
  92. 'day90' => 'day90', //90日
  93. 'day120' => 'day120', //120日
  94. 'day180' => 'day180', //180日
  95. ];
  96. private $sum_base_field
  97. = [
  98. 'date' => 'date',
  99. 'sum(reg_cnt)' => 'reg_cnt',
  100. 'sum(sum_money)' => 'sum_money',
  101. 'sum(day1)' => 'day1', //1日
  102. 'sum(day2)' => 'day2', //2日
  103. 'sum(day3)' => 'day3', //3日
  104. 'sum(day4)' => 'day4', //4日
  105. 'sum(day5)' => 'day5', //5日
  106. 'sum(day6)' => 'day6', //6日
  107. 'sum(day7)' => 'day7', //7日
  108. 'sum(day8)' => 'day8', //8日
  109. 'sum(day9)' => 'day9', //9日
  110. 'sum(day10)' => 'day10', //10日
  111. 'sum(day11)' => 'day11', //11日
  112. 'sum(day12)' => 'day12', //12日
  113. 'sum(day13)' => 'day13', //13日
  114. 'sum(day14)' => 'day14', //14日
  115. 'sum(day15)' => 'day15', //15日
  116. 'sum(day16)' => 'day16', //16日
  117. 'sum(day17)' => 'day17', //17日
  118. 'sum(day18)' => 'day18', //18日
  119. 'sum(day19)' => 'day19', //19日
  120. 'sum(day20)' => 'day20', //20日
  121. 'sum(day21)' => 'day21', //21日
  122. 'sum(day22)' => 'day22', //22日
  123. 'sum(day23)' => 'day23', //23日
  124. 'sum(day24)' => 'day24', //24日
  125. 'sum(day25)' => 'day25', //25日
  126. 'sum(day26)' => 'day26', //26日
  127. 'sum(day27)' => 'day27', //27日
  128. 'sum(day28)' => 'day28', //28日
  129. 'sum(day29)' => 'day29', //29日
  130. 'sum(day30)' => 'day30', //30日
  131. 'sum(day31)' => 'day31', //31日
  132. 'sum(day32)' => 'day32', //32日
  133. 'sum(day33)' => 'day33', //33日
  134. 'sum(day34)' => 'day34', //34日
  135. 'sum(day35)' => 'day35', //35日
  136. 'sum(day36)' => 'day36', //36日
  137. 'sum(day37)' => 'day37', //37日
  138. 'sum(day38)' => 'day38', //38日
  139. 'sum(day39)' => 'day39', //39日
  140. 'sum(day40)' => 'day40', //40日
  141. 'sum(day41)' => 'day41', //41日
  142. 'sum(day42)' => 'day42', //42日
  143. 'sum(day43)' => 'day43', //43日
  144. 'sum(day44)' => 'day44', //44日
  145. 'sum(day45)' => 'day45', //45日
  146. 'sum(day46)' => 'day46', //46日
  147. 'sum(day47)' => 'day47', //47日
  148. 'sum(day48)' => 'day48', //48日
  149. 'sum(day49)' => 'day49', //49日
  150. 'sum(day50)' => 'day50', //50日
  151. 'sum(day51)' => 'day51', //51日
  152. 'sum(day52)' => 'day52', //52日
  153. 'sum(day53)' => 'day53', //53日
  154. 'sum(day54)' => 'day54', //54日
  155. 'sum(day55)' => 'day55', //55日
  156. 'sum(day56)' => 'day56', //56日
  157. 'sum(day57)' => 'day57', //57日
  158. 'sum(day58)' => 'day58', //58日
  159. 'sum(day59)' => 'day59', //59日
  160. 'sum(day60)' => 'day60', //60日
  161. 'sum(day90)' => 'day90', //90日
  162. 'sum(day120)' => 'day120', //120日
  163. 'sum(day180)' => 'day180', //180日
  164. ];
  165. /* 后台显示 */
  166. private $show_field
  167. = [
  168. 'day1' => 'day1', //1日
  169. 'day2' => 'day2', //2日
  170. 'day3' => 'day3', //3日
  171. 'day4' => 'day4', //4日
  172. 'day5' => 'day5', //5日
  173. 'day6' => 'day6', //6日
  174. 'day7' => 'day7', //7日
  175. 'day8' => 'day8', //8日
  176. 'day9' => 'day9', //9日
  177. 'day10' => 'day10', //10日
  178. 'day11' => 'day11', //11日
  179. 'day12' => 'day12', //12日
  180. 'day13' => 'day13', //13日
  181. 'day14' => 'day14', //14日
  182. 'day15' => 'day15', //15日
  183. 'day30' => 'day30', //30日
  184. 'day60' => 'day60', //60日
  185. 'day90' => 'day90', //90日
  186. 'day120' => 'day120', //120日
  187. 'day180' => 'day180', //180日
  188. ];
  189. /**
  190. * @param array $param
  191. *
  192. * @return array
  193. */
  194. protected function getWhere($param = []) {
  195. $_map = [];
  196. /* 时间搜索 */
  197. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  198. $_map['date'] = ['between', [$param['start_time'], $param['end_time']]];
  199. } elseif (!empty($param['start_time'])) {
  200. $_map['date'] = ['egt', $param['start_time']];
  201. } elseif (!empty($param['end_time'])) {
  202. $_map['date'] = ['elt', $param['end_time']];
  203. }
  204. $_agent_model = new UserModel();
  205. if (!empty($param['cp_id'])) {
  206. $_ids = $_agent_model->getIdsByCpId(
  207. $param['cp_id'], ['in', [AgentConst::AGENT_ROLE_MP_AGENT, AgentConst::AGENT_ROLE_MP_AD]]
  208. );
  209. if (empty($_ids)) {
  210. $_ids = [-1];
  211. }
  212. $_map['agent_id'] = ['in', $_ids];
  213. }
  214. if (!empty($param['agent_level_1_id'])) {
  215. $_agent_map = [
  216. 'role_id' => ['in', [AgentConst::AGENT_ROLE_MP_AGENT, AgentConst::AGENT_ROLE_MP_AD]]
  217. ];
  218. $_ids = $_agent_model->getIdsByParentId($param['agent_level_1_id'], $_agent_map);
  219. $_ids[] = $param['agent_level_1_id'];
  220. $_map['agent_id'] = ['in', $_ids];
  221. }
  222. if (!empty($param['agent_level_2_id'])) {
  223. $_map['agent_id'] = $param['agent_level_2_id'];
  224. }
  225. if (!empty($param['agent_id'])) {
  226. $_map['agent_id'] = $param['agent_id'];
  227. }
  228. if (!empty($param['agent_id'])) {
  229. if (is_array($param['agent_id'])) {
  230. if (in_array('in', $param['agent_id'])) {
  231. $_map['agent_id'] = $param['agent_id'];
  232. } else {
  233. $_map['agent_id'] = ['in', $param['agent_id']];
  234. }
  235. } else {
  236. $_map['agent_id'] = $param['agent_id'];
  237. }
  238. }
  239. if (!empty($param['game_id'])) {
  240. $_map['app_id'] = $param['game_id'];
  241. }
  242. $_game_model = new GameModel();
  243. if (!empty($param['app_id'])) {
  244. if (is_array($param['app_id'])) {
  245. if (in_array('in', $param['app_id'])) {
  246. $_map['app_id'] = $param['app_id'];
  247. } else {
  248. $_map['app_id'] = ['in', $param['app_id']];
  249. }
  250. } else {
  251. $_ids = $_game_model->getGameIds($param['app_id']);
  252. $_map['app_id'] = ['in', $_ids];
  253. }
  254. }
  255. return $_map;
  256. }
  257. /**
  258. * @param array $where
  259. *
  260. * @return LtvAgentModel|LtvGameAgentModel|LtvGameModel|LtvDayModel|null|Model
  261. */
  262. public function getDataModel($where) {
  263. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  264. return (new LtvGameAgentModel());
  265. } elseif (!empty($where['agent_id'])) {
  266. return (new LtvAgentModel());
  267. } elseif (!empty($where['app_id'])) {
  268. return new LtvGameModel();
  269. } else {
  270. return new LtvDayModel();
  271. }
  272. }
  273. /**
  274. * 获取字段
  275. *
  276. * @param $where
  277. *
  278. * @return array
  279. */
  280. public function getField($where) {
  281. $_field = $this->base_field;
  282. if ((isset($where['include_agent']) && 2 == $where['include_agent'])
  283. || (isset($where['is_summary'])
  284. && 2 == $where['is_summary'])) {
  285. $_field = $this->sum_base_field;
  286. }
  287. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  288. $_field['agent_id'] = 'agent_id';
  289. $_field['app_id'] = 'app_id';
  290. } elseif (!empty($where['agent_id'])) {
  291. $_field['agent_id'] = 'agent_id';
  292. } elseif (!empty($where['app_id'])) {
  293. $_field['app_id'] = 'app_id';
  294. }
  295. return $_field;
  296. }
  297. /**
  298. * 获取with
  299. *
  300. * @param $where
  301. *
  302. * @return string
  303. */
  304. public function getWith($where) {
  305. $_with = '';
  306. if (!empty($where['agent_id']) && !empty($where['app_id'])) {
  307. $_with = 'agent,game';
  308. } elseif (!empty($where['agent_id'])) {
  309. $_with = 'agent';
  310. $_field['agent_id'] = 'agent_id';
  311. } elseif (!empty($where['app_id'])) {
  312. $_with = 'game';
  313. }
  314. return $_with;
  315. }
  316. /**
  317. * 获取列表底层函数
  318. *
  319. * @param array $where 搜索条件
  320. * @param string $page 列表个数
  321. * @param string $order 排序
  322. * @param array $field 附加字段
  323. * @param string $group 归类
  324. *
  325. * @return array ['count'=>0,'list'=>[]]
  326. */
  327. public function getList($where = [], $page = '1,10', $order = '-date', $field = [], $group = '', $with = '') {
  328. $_map = $where;
  329. $_field = $field;
  330. $_model = $this->getDataModel($_map);
  331. if (!empty($group)) {
  332. $_count = $_model->where($_map)->group($group)->count();
  333. } else {
  334. $_count = $_model->where($_map)->count();
  335. }
  336. if (empty($_count)) {
  337. return [
  338. 'count' => 0,
  339. 'list' => []
  340. ];
  341. }
  342. $_order = $this->orderFilter($order);
  343. if (!empty($group)) {
  344. $_datas = $_model->with($with)
  345. ->field($_field)
  346. ->where($_map)
  347. ->order($_order)
  348. ->group($group)
  349. ->page($page)
  350. ->select();
  351. } else {
  352. $_datas = $_model->with($with)
  353. ->field($_field)
  354. ->where($_map)
  355. ->order($_order)
  356. ->page($page)
  357. ->select();
  358. }
  359. if (is_object($_datas)) {
  360. $_datas = $_datas->toArray();
  361. }
  362. $_date = date('Y-m-d');
  363. $_date_end = new DateTime($_date);
  364. foreach ($_datas as $_k => $_v) {
  365. $_datas[$_k]['now_ltv'] = '0.00';
  366. if (!empty($_v['reg_cnt'])) {
  367. $_datas[$_k]['now_ltv'] = bcdiv($_v['sum_money'], $_v['reg_cnt'], 2);
  368. }
  369. $_date_start = new DateTime($_v['date']);
  370. $_days = $_date_start->diff($_date_end)->days; //记录至今相差天数
  371. foreach ($this->show_field as $_day) {
  372. if (strpos($_day, 'day') === false) {
  373. continue;
  374. }
  375. $_day_num = substr($_day, 3);
  376. if ($_days < $_day_num) {
  377. $_datas[$_k][$_day] = '--';
  378. continue;
  379. }
  380. if (empty($_v['reg_cnt'])) {
  381. $_datas[$_k][$_day] = '0.00';
  382. continue;
  383. }
  384. $_day_money = self::getTheDayMoney($_v, $_day_num);
  385. $_datas[$_k][$_day] = $_day_money;
  386. }
  387. if (!empty($_v['game'])) {
  388. $_datas[$_k]['game_name'] = get_val($_v['game'], 'name', '');
  389. $_datas[$_k]['game_icon'] = get_val($_v['game'], 'icon', '');
  390. $_datas[$_k]['classify'] = get_val($_v['game'], 'classify', '');
  391. unset($_datas[$_k]['game']);
  392. }
  393. if (!empty($_v['agent'])) {
  394. $_datas[$_k]['agent_nickname'] = get_val($_v['agent'], 'user_nicename', '');
  395. $_datas[$_k]['agent_name'] = get_val($_v['agent'], 'user_login', '');
  396. unset($_datas[$_k]['agent']);
  397. } else {
  398. $_datas[$_k]['agent_nickname'] = '';
  399. $_datas[$_k]['agent_name'] = '';
  400. }
  401. }
  402. return [
  403. 'count' => $_count,
  404. 'list' => $_datas
  405. ];
  406. }
  407. /**
  408. * 获取汇总数据
  409. *
  410. * @param $model
  411. * @param $map
  412. *
  413. * @return array
  414. */
  415. public function getSumData($model, $map) {
  416. $_sum_field = $this->sum_base_field;
  417. $_sum_data = $model
  418. ->field($_sum_field)
  419. ->where($map)
  420. ->find();
  421. if (is_object($_sum_data)) {
  422. $_sum_data = $_sum_data->toArray();
  423. }
  424. $_new_sum_data = $_sum_data;
  425. foreach ($this->show_field as $_day) {
  426. if (strpos($_day, 'day') === false) {
  427. continue;
  428. }
  429. $_day_num = substr($_day, 3);
  430. $_day_money = self::getTheDayMoney($_sum_data, $_day_num);
  431. $_new_sum_data[$_day] = $_day_money;
  432. }
  433. return $_new_sum_data;
  434. }
  435. /**
  436. * 获取后台列表
  437. *
  438. * @param array $where 搜索条件
  439. * @param string $page 列表个数
  440. * @param string $order 排序
  441. * @param array $field 附加字段
  442. *
  443. * @return array ['count'=>0,'list'=>[]]
  444. */
  445. public function getAdminList($where = [], $page = '1,10', $order = '-date', $field = []) {
  446. $_map = $this->getWhere($where);
  447. $_where = array_merge($where, $_map);
  448. $_field = $this->getField($_where);
  449. $_with = $this->getWith($_where);
  450. if (!empty($field)) {
  451. $_field = array_merge($_field, $field);/* 获取后台字段 */
  452. }
  453. $_group = '';
  454. if ((isset($where['include_agent']) && 2 == $where['include_agent'])
  455. || (isset($where['is_summary'])
  456. && 2 == $where['is_summary'])) {
  457. $_group = 'date';
  458. }
  459. $_rdata = $this->getList($_map, $page, $order, $_field, $_group, $_with);
  460. if (empty($_rdata['count'])) {
  461. $_rdata['sum'] = [];
  462. return $_rdata;
  463. }
  464. $_datas = $_rdata['list'];
  465. $_agdc_model = new AgentGameDateCostModel();
  466. foreach ($_datas as $_k => $_v) {
  467. $_agdc_map = [
  468. 'date' => $_v['date']
  469. ];
  470. if (!empty($_v['app_id'])) {
  471. $_agdc_map['app_id'] = $_v['app_id'];
  472. }
  473. if (CommonConst::STATUS_NO == $where['is_summary'] && !empty($_v['agent_id'])) {
  474. $_agdc_map['agent_id'] = $_v['agent_id'];
  475. } elseif (!empty($_map['agent_id'])) {
  476. $_agdc_map['agent_id'] = $_map['agent_id'];
  477. }
  478. $_datas[$_k]['cost'] = $_agdc_model->getCostByWhere($_agdc_map);
  479. $_datas[$_k]['price'] = StrUtils::getArpu($_datas[$_k]['cost'], $_v['reg_cnt']);
  480. }
  481. $_rdata['list'] = $_datas;
  482. $_model = $this->getDataModel($_map);
  483. $_rdata['sum'] = $this->getSumData($_model, $_map);
  484. $_rdata['sum']['cost'] = $_agdc_model->getCostByWhere($_map);
  485. $_rdata['sum']['price'] = StrUtils::getArpu($_rdata['sum']['cost'], $_rdata['sum']['reg_cnt']);
  486. return $_rdata;
  487. }
  488. /**
  489. * 获取后台列表
  490. *
  491. * @param array $where 搜索条件
  492. * @param string $page 列表个数
  493. * @param string $order 排序
  494. * @param array $field 附加字段
  495. *
  496. * @return array ['count'=>0,'list'=>[]]
  497. */
  498. public function getNewAdminList($_indexData,$where = [], $page = '1,10', $order = '-date', $field = []) {
  499. $_map = $this->getWhere($where);
  500. // 渠道过滤
  501. // if (!empty(request()->default_agent_ids)) {
  502. // $_map['agent_id'] = ['in', request()->default_agent_ids];
  503. // $where['is_summary'] = CommonConst::STATUS_YES;
  504. // }
  505. $_where = array_merge($where, $_map);
  506. $_with = $this->getWith($_where);
  507. $_field = $this->sum_base_field;
  508. $_rdata = $this->getList($_map, $page, $order, $_field, 'date', $_with);
  509. if (empty($_rdata['count'])) {
  510. $_rdata['sum'] = [];
  511. return $_rdata;
  512. }
  513. $_datas = $_rdata['list'];
  514. $_agdc_model = new AgentGameDateCostModel();
  515. $reg_array = array_column($_indexData['list'],'reg_cnt','date');
  516. $user_cnt_array = array_column($_indexData['list'],'user_cnt','date');
  517. $reg_pay_cnt_array = array_column($_indexData['list'],'reg_pay_cnt','date');
  518. $reg_sum_money_array = array_column($_indexData['list'],'reg_sum_money','date');
  519. foreach ($_datas as $_k => $_v) {
  520. $_agdc_map = [
  521. 'date' => $_v['date']
  522. ];
  523. if (isset($_map['app_id'])) $_agdc_map['app_id'] = $_map['app_id'];
  524. if (CommonConst::STATUS_NO == $where['is_summary'] && !empty($_v['agent_id'])) {
  525. $_agdc_map['agent_id'] = $_v['agent_id'];
  526. } elseif (!empty($_map['agent_id'])) {
  527. $_agdc_map['agent_id'] = $_map['agent_id'];
  528. }
  529. $_datas[$_k]['cost'] = $_agdc_model->getCostByWhere($_agdc_map);
  530. //$_datas[$_k]['price'] = StrUtils::getArpu($_datas[$_k]['cost'], $_v['reg_cnt']);
  531. $_datas[$_k]['user_cnt'] = $user_cnt_array[$_v['date']] ?? 0;
  532. $_datas[$_k]['price'] = StrUtils::getArpu($_datas[$_k]['cost'], $reg_array[$_v['date']] ?? 0);
  533. //新增付费人数
  534. $_datas[$_k]['reg_pay_cnt'] = $reg_pay_cnt_array[$_v['date']] ?? 0;
  535. //新增付费金额
  536. $_datas[$_k]['reg_sum_money'] = $reg_sum_money_array[$_v['date']] ?? 0;
  537. //成本/新增付费人数
  538. $_datas[$_k]['agv_price'] = StrUtils::getArpu($_datas[$_k]['cost'], $_datas[$_k]['reg_pay_cnt'] );
  539. }
  540. $_rdata['list'] = $_datas;
  541. $_model = $this->getDataModel($_map);
  542. $_rdata['sum'] = $this->getSumData($_model, $_map);
  543. $_rdata['sum']['cost'] = $_agdc_model->getCostByWhere($_map);
  544. if (!empty(request()->default_agent_ids)) {
  545. $_map['agent_id'] = ['in', request()->default_agent_ids];
  546. $where['is_summary'] = CommonConst::STATUS_YES;
  547. }
  548. $_model = (new DayDataLogic())->getDataModel($_map);
  549. $_sum_data = $_model
  550. ->field(['sum(reg_pay_cnt)'=> 'reg_pay_cnt','sum(reg_sum_money)' => 'reg_sum_money'])
  551. ->where($_map)
  552. ->find();
  553. if (is_object($_sum_data)) {
  554. $_sum_data = $_sum_data->toArray();
  555. }
  556. $_rdata['sum']['reg_pay_cnt'] = $_sum_data['reg_pay_cnt'];
  557. $_rdata['sum']['reg_sum_money'] = $_sum_data['reg_sum_money'];
  558. return $_rdata;
  559. }
  560. /**
  561. * 获取至当日金额
  562. *
  563. * @param array $data 单条数据
  564. * @param int $day 获取日期
  565. *
  566. * @return int|mixed|string
  567. */
  568. private function getTheDayMoney($data, $day) {
  569. $_money = 0;
  570. /* 最大循环60日 */
  571. $_lop_day = $day;
  572. if ($day > 60) {
  573. $_lop_day = 60;
  574. }
  575. for ($_i = 1; $_i <= $_lop_day; $_i++) {
  576. $_field = 'day'.$_i;
  577. $_value = get_val($data, $_field, 0);
  578. $_money += $_value;
  579. }
  580. /* 60日内数据返回 */
  581. if ($day <= 60) {
  582. return $_money;
  583. }
  584. if ($day <= 90) {
  585. $_value90 = get_val($data, 'day90', 0);
  586. $_money += $_value90;
  587. return $_money;
  588. }
  589. if ($day <= 120) {
  590. $_value90 = get_val($data, 'day90', 0);
  591. $_value120 = get_val($data, 'day120', 0);
  592. $_money = $_money + $_value90 + $_value120;
  593. return $_money;
  594. }
  595. if ($day <= 180) {
  596. $_value90 = get_val($data, 'day90', 0);
  597. $_value120 = get_val($data, 'day120', 0);
  598. $_value180 = get_val($data, 'day180', 0);
  599. $_money = $_money + $_value90 + $_value120 + $_value180;
  600. return $_money;
  601. }
  602. if ($day <= 270) {
  603. $_value90 = get_val($data, 'day90', 0);
  604. $_value120 = get_val($data, 'day120', 0);
  605. $_value180 = get_val($data, 'day180', 0);
  606. $_value270 = get_val($data, 'day270', 0);
  607. $_money = $_money + $_value90 + $_value120 + $_value180 + $_value270;
  608. return $_money;
  609. }
  610. if ($day <= 360) {
  611. $_value90 = get_val($data, 'day90', 0);
  612. $_value120 = get_val($data, 'day120', 0);
  613. $_value180 = get_val($data, 'day180', 0);
  614. $_value270 = get_val($data, 'day270', 0);
  615. $_value360 = get_val($data, 'day360', 0);
  616. $_money = $_money + $_value90 + $_value120 + $_value180 + $_value270 + $_value360;
  617. return $_money;
  618. }
  619. return $_money;
  620. }
  621. }