Ltv.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. /**
  3. * Ltv.php UTF-8
  4. * LTV计算
  5. *
  6. * @date : 2018/3/26 13:47
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace ltv;
  13. use huo\model\member\MemberModel;
  14. use huo\model\order\OrderModel;
  15. use huolib\constant\CommonConst;
  16. use huolib\constant\OrderConst;
  17. class Ltv {
  18. private $ltv_model;
  19. public function __construct() {
  20. $this->ltv_model = new LtvModel();
  21. }
  22. /**
  23. * 注册
  24. *
  25. * @param int $reg_app_id
  26. * @param int $reg_agent_id
  27. * @param int $reg_time
  28. * @param bool $new_device
  29. * @param int $mem_cnt 注册人数
  30. */
  31. public function reg($reg_app_id, $reg_agent_id, $reg_time = 0, $new_device = true, $mem_cnt = 1) {
  32. return true;
  33. $_reg_time = $reg_time;
  34. if (empty($reg_time)) {
  35. $_reg_time = time();
  36. }
  37. $_date = date('Y-m-d', $_reg_time);
  38. $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_date, $reg_app_id, $reg_agent_id);
  39. $_is_new = false;
  40. if (empty($_data)) {
  41. $_is_new = true;
  42. $_data['reg_cnt'] = $mem_cnt;
  43. if (true == $new_device) {
  44. $_data['reg_device_cnt'] = $mem_cnt;
  45. }
  46. } else {
  47. $_data['reg_cnt'] += 1;
  48. if (true == $new_device) {
  49. $_data['reg_device_cnt'] += $mem_cnt;
  50. }
  51. }
  52. $_data['date'] = $_date;
  53. $_data['app_id'] = $reg_app_id;
  54. $_data['agent_id'] = $reg_agent_id;
  55. $this->ltv_model->saveData($_date, $reg_app_id, $reg_agent_id, $_data, $_is_new);
  56. }
  57. /**
  58. * 充值插入
  59. *
  60. * @param int $reg_app_id 注册游戏ID
  61. * @param int $reg_agent_id 注册渠道ID
  62. * @param int $pay_app_id 充值游戏ID
  63. * @param double $money 充值金额
  64. * @param int $pay_time 充值时间
  65. * @param int $reg_time 注册时间
  66. *
  67. * @return bool
  68. */
  69. public function charge($reg_app_id, $reg_agent_id, $pay_app_id, $money, $pay_time = 0, $reg_time = 0) {
  70. return true;
  71. if ($money < 0.01) {
  72. return false;
  73. }
  74. if ($reg_app_id != $pay_app_id) {
  75. // // TODO: chenbingling 2019/5/27 不计算其他游戏收益
  76. // return true;
  77. $reg_app_id=$pay_app_id;
  78. }
  79. $_reg_time = $reg_time;
  80. if (empty($reg_time)) {
  81. $_reg_time = time();
  82. }
  83. $_reg_date = date('Y-m-d', $_reg_time);
  84. $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id);
  85. if (empty($_data)) {
  86. /* 查询 $_reg_date 注册人数 */
  87. $_start_time = strtotime($_reg_date);
  88. $_end_time = $_start_time;
  89. // $_map['create_time'] = ['egt', $_start_time];
  90. // $_map['create_time'] = ['lt', $_end_time];
  91. // $_map['agent_id'] = $reg_agent_id;
  92. // $_map['app_id'] = $reg_app_id;
  93. // $_history_mem_cnt = (new MemberModel())->getCnt($_map);
  94. // $this->reg($reg_app_id, $reg_agent_id, $_reg_time, true, $_history_mem_cnt);
  95. /* 查询充值数据 */
  96. $_pay_map['create_time'] = ['egt', $_start_time];
  97. $_pay_map['create_time'] = ['lt', $_end_time];
  98. // $_pay_map['create_time'] = ['BETWEEN',[$_start_time,$_end_time]];
  99. $_pay_map['status'] = OrderConst::PAY_STATUS_SUC;
  100. $_pay_map['agent_id'] = $reg_agent_id;
  101. $_pay_map['app_id'] = $reg_app_id;
  102. $_history_money = (new OrderModel())->totalMoney($_pay_map);
  103. $money = $_history_money;
  104. $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id);
  105. }
  106. $_diff_day = $this->time_diff(strtotime($_reg_date), $pay_time);
  107. isset($_data['sum_money']) ? $_data['sum_money'] += $money : $_data['sum_money'] = $money;
  108. // if ($_diff_day <= 360) {
  109. // isset($_data['day360']) ? $_data['day360'] += $money : $_data['day360'] = $money;
  110. // }
  111. // if ($_diff_day <= 270) {
  112. // isset($_data['day270']) ? $_data['day270'] += $money : $_data['day270'] = $money;
  113. // }
  114. if ($_diff_day <= 180) {
  115. isset($_data['day180']) ? $_data['day180'] += $money : $_data['day180'] = $money;
  116. }
  117. if ($_diff_day <= 120) {
  118. isset($_data['day120']) ? $_data['day120'] += $money : $_data['day120'] = $money;
  119. }
  120. if ($_diff_day <= 90) {
  121. isset($_data['day90']) ? $_data['day90'] += $money : $_data['day90'] = $money;
  122. }
  123. for ($_i = 60; $_i > 0; $_i--) {
  124. /* 记录60天以下 */
  125. if ($_diff_day > $_i) {
  126. break;
  127. }
  128. $_day_key = 'day'.$_i;
  129. isset($_data[$_day_key]) ? $_data[$_day_key] += $money : $_data[$_day_key] = $money;
  130. }
  131. return $this->ltv_model->saveData($_reg_date, $reg_app_id, $reg_agent_id, $_data);
  132. }
  133. /**
  134. * 计算时间差
  135. *
  136. * @param int $reg_time
  137. * @param int $pay_time
  138. *
  139. * @return int
  140. */
  141. public function time_diff($reg_time, $pay_time) {
  142. return ceil(($pay_time - $reg_time) / CommonConst::CONST_DAY_SECONDS);
  143. }
  144. public function admincharge($reg_app_id, $reg_agent_id, $pay_app_id, $money, $pay_time = 0, $reg_time = 0) {
  145. if ($money < 0.01) {
  146. return false;
  147. }
  148. if ($reg_app_id != $pay_app_id) {
  149. // // TODO: chenbingling 2019/5/27 不计算其他游戏收益
  150. return true;
  151. // $reg_app_id = $pay_app_id;
  152. }
  153. $_reg_time = $reg_time;
  154. if (empty($reg_time)) {
  155. $_reg_time = time();
  156. }
  157. $_reg_date = date('Y-m-d', $_reg_time);
  158. $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id);
  159. if (empty($_data)) {
  160. /* 查询 $_reg_date 注册人数 */
  161. $_start_time = strtotime($_reg_date);
  162. $_end_time = $_start_time + 86400;
  163. // $_map['create_time'] = ['egt', $_start_time];
  164. // $_map['create_time'] = ['lt', $_end_time];
  165. $_map['create_time'] = ['BETWEEN',[$_start_time,$_end_time]];
  166. $_map['agent_id'] = $reg_agent_id;
  167. $_map['app_id'] = $reg_app_id;
  168. $_history_mem_cnt = (new MemberModel())->getCnt($_map);
  169. $this->reg($reg_app_id, $reg_agent_id, $_reg_time, true, $_history_mem_cnt);
  170. /* 查询充值数据 */
  171. // $_pay_map['create_time'] = ['egt', $_start_time];
  172. // $_pay_map['create_time'] = ['lt', $pay_time];
  173. //// $_pay_map['create_time'] = ['BETWEEN',[$_start_time,$_end_time]];
  174. // $_pay_map['status'] = OrderConst::PAY_STATUS_SUC;
  175. // $_pay_map['agent_id'] = $reg_agent_id;
  176. // $_pay_map['app_id'] = $reg_app_id;
  177. // $_history_money = (new OrderModel())->totalMoney($_pay_map);
  178. // $money = $_history_money;
  179. $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id);
  180. }
  181. $_diff_day = $this->time_diff(strtotime($_reg_date), $pay_time);
  182. isset($_data['sum_money']) ? $_data['sum_money'] += $money : $_data['sum_money'] = $money;
  183. // if ($_diff_day <= 360) {
  184. // isset($_data['day360']) ? $_data['day360'] += $money : $_data['day360'] = $money;
  185. // }
  186. // if ($_diff_day <= 270) {
  187. // isset($_data['day270']) ? $_data['day270'] += $money : $_data['day270'] = $money;
  188. // }
  189. if ($_diff_day <= 180) {
  190. isset($_data['day180']) ? $_data['day180'] += $money : $_data['day180'] = $money;
  191. }
  192. if ($_diff_day <= 120) {
  193. isset($_data['day120']) ? $_data['day120'] += $money : $_data['day120'] = $money;
  194. }
  195. if ($_diff_day <= 90) {
  196. isset($_data['day90']) ? $_data['day90'] += $money : $_data['day90'] = $money;
  197. }
  198. for ($_i = 60; $_i > 0; $_i--) {
  199. /* 记录60天以下 */
  200. if ($_diff_day > $_i) {
  201. break;
  202. }
  203. $_day_key = 'day'.$_i;
  204. isset($_data[$_day_key]) ? $_data[$_day_key] += $money : $_data[$_day_key] = $money;
  205. }
  206. return $this->ltv_model->saveData($_reg_date, $reg_app_id, $reg_agent_id, $_data);
  207. }
  208. }