LtvModel.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. /**
  3. * LtvModel.php UTF-8
  4. *
  5. *
  6. * @date : 2018/3/26 14:02
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace ltv;
  13. use huolib\constant\CacheConst;
  14. use think\Exception;
  15. use think\Log;
  16. use think\Model;
  17. class LtvModel extends Model {
  18. protected $table = 'h_ltv_game_agent';
  19. protected $cache_key = CacheConst::CACHE_LTV_INFO_BY_DAA_PREFIX; //通过date-app_id-agent_id 获取ltv缓存key
  20. /**
  21. * 通过date-app_id-agent_id 获取ltv缓存key
  22. *
  23. * @param string $date 日期
  24. * @param int $app_id 应用id
  25. * @param int $agent_id 渠道id
  26. *
  27. * @return string
  28. */
  29. protected function getCacheKeyByDateAppIdAgentId($date, $app_id, $agent_id) {
  30. return $this->cache_key.$date.'_'.$app_id.'_'.$agent_id;
  31. }
  32. /**
  33. * 获取单挑记录
  34. *
  35. * @param string $date 日期
  36. * @param int $app_id 应用id
  37. * @param int $agent_id 渠道id
  38. *
  39. * @return bool|array
  40. */
  41. public function getInfoByDateAppIdAgentId($date, $app_id, $agent_id) {
  42. $_rs = $this->checkTable();
  43. if (false == $_rs) {
  44. return false;
  45. }
  46. // $_key = $this->getCacheKeyByDateAppIdAgentId($date, $app_id, $agent_id);
  47. $_map['date'] = $date;
  48. $_map['app_id'] = $app_id;
  49. $_map['agent_id'] = $agent_id;
  50. try {
  51. $_data = $this->where($_map)->find();//->cache($_key)
  52. if (is_object($_data)) {
  53. $_data = $_data->toArray();
  54. }
  55. return $_data;
  56. } catch (Exception $_e) {
  57. Log::write(
  58. 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'&param='.json_encode(
  59. array($date, $app_id, $agent_id)
  60. ).'&msg=ltv getData error '.$_e->getMessage(), Log::ERROR
  61. );
  62. return false;
  63. }
  64. }
  65. /**
  66. * 更新数据
  67. *
  68. * @param string $date
  69. * @param int $app_id
  70. * @param int $agent_id
  71. * @param array $data
  72. * @param bool $is_new
  73. *
  74. * @return bool
  75. */
  76. public function saveData($date, $app_id, $agent_id, $data, $is_new = false) {
  77. $_rs = $this->checkTable();
  78. if (false == $_rs) {
  79. return false;
  80. }
  81. $_map['date'] = $date;
  82. $_map['app_id'] = $app_id;
  83. $_map['agent_id'] = $agent_id;
  84. // $_key = $this->getCacheKeyByDateAppIdAgentId($date, $app_id, $agent_id);
  85. try {
  86. if ($is_new) {
  87. /* 新增表示插入 */
  88. $_rs = $this->insert($data);//->cache($_key)
  89. } else {
  90. /* 更新 */
  91. $_rs = $this->update($data, $_map);//->cache($_key)
  92. }
  93. if (false === $_rs) {
  94. return false;
  95. }
  96. return true;
  97. } catch (Exception $_e) {
  98. Log::write(
  99. 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__.'&param='.json_encode(
  100. array($date, $app_id, $agent_id, $data, $is_new)
  101. ).'&msg=ltv savData error '.$_e->getMessage(), Log::ERROR
  102. );
  103. return false;
  104. }
  105. }
  106. /**
  107. * @return bool
  108. */
  109. private function checkTable() {
  110. $_table_name = $this->table;
  111. $_sql = '';
  112. $_sql .= "CREATE TABLE IF NOT EXISTS `".$_table_name."` (";
  113. $_sql .= " `id` int(11) NOT NULL AUTO_INCREMENT,";
  114. $_sql .= " `date` date NOT NULL COMMENT '日期',";
  115. $_sql .= " `app_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '游戏ID',";
  116. $_sql .= " `agent_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '渠道ID',";
  117. $_sql .= " `ads_id` smallint(3) unsigned NOT NULL DEFAULT '0' COMMENT '1 CPA 2 CPS 3 CPC',";
  118. $_sql .= " `costs` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '花费', ";
  119. $_sql .= " `reg_cnt` int(11) NOT NULL DEFAULT '0' COMMENT '注册玩家数',";
  120. $_sql .= " `reg_device_cnt` int(11) NOT NULL DEFAULT '0' COMMENT '新增设备数',";
  121. $_sql .= " `sum_money` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '充值金额',";
  122. $_sql .= " `day1` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '1日充值金额',";
  123. $_sql .= " `day2` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '2日充值金额',";
  124. $_sql .= " `day3` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '3日充值金额',";
  125. $_sql .= " `day4` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '4日充值金额',";
  126. $_sql .= " `day5` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '5日充值金额',";
  127. $_sql .= " `day6` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '6日充值金额',";
  128. $_sql .= " `day7` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '7日充值金额',";
  129. $_sql .= " `day8` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '8日充值金额',";
  130. $_sql .= " `day9` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '9日充值金额',";
  131. $_sql .= " `day10` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '10日充值金额',";
  132. $_sql .= " `day11` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '11日充值金额',";
  133. $_sql .= " `day12` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '12日充值金额',";
  134. $_sql .= " `day13` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '13日充值金额',";
  135. $_sql .= " `day14` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '14日充值金额',";
  136. $_sql .= " `day15` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '15日充值金额',";
  137. $_sql .= " `day16` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '16日充值金额',";
  138. $_sql .= " `day17` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '17日充值金额',";
  139. $_sql .= " `day18` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '18日充值金额',";
  140. $_sql .= " `day19` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '19日充值金额',";
  141. $_sql .= " `day20` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '20日充值金额',";
  142. $_sql .= " `day21` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '21日充值金额',";
  143. $_sql .= " `day22` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '22日充值金额',";
  144. $_sql .= " `day23` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '23日充值金额',";
  145. $_sql .= " `day24` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '24日充值金额',";
  146. $_sql .= " `day25` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '25日充值金额',";
  147. $_sql .= " `day26` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '26日充值金额',";
  148. $_sql .= " `day27` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '27日充值金额',";
  149. $_sql .= " `day28` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '28日充值金额',";
  150. $_sql .= " `day29` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '29日充值金额',";
  151. $_sql .= " `day30` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '30日充值金额',";
  152. $_sql .= " `day31` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '31日充值金额',";
  153. $_sql .= " `day32` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '32日充值金额',";
  154. $_sql .= " `day33` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '33日充值金额',";
  155. $_sql .= " `day34` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '34日充值金额',";
  156. $_sql .= " `day35` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '35日充值金额',";
  157. $_sql .= " `day36` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '36日充值金额',";
  158. $_sql .= " `day37` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '37日充值金额',";
  159. $_sql .= " `day38` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '38日充值金额',";
  160. $_sql .= " `day39` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '39日充值金额',";
  161. $_sql .= " `day40` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '40日充值金额',";
  162. $_sql .= " `day41` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '41日充值金额',";
  163. $_sql .= " `day42` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '42日充值金额',";
  164. $_sql .= " `day43` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '43日充值金额',";
  165. $_sql .= " `day44` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '44日充值金额',";
  166. $_sql .= " `day45` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '45日充值金额',";
  167. $_sql .= " `day46` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '46日充值金额',";
  168. $_sql .= " `day47` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '47日充值金额',";
  169. $_sql .= " `day48` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '48日充值金额',";
  170. $_sql .= " `day49` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '49日充值金额',";
  171. $_sql .= " `day50` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '50日充值金额',";
  172. $_sql .= " `day51` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '51日充值金额',";
  173. $_sql .= " `day52` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '52日充值金额',";
  174. $_sql .= " `day53` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '53日充值金额',";
  175. $_sql .= " `day54` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '54日充值金额',";
  176. $_sql .= " `day55` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '55日充值金额',";
  177. $_sql .= " `day56` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '56日充值金额',";
  178. $_sql .= " `day57` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '57日充值金额',";
  179. $_sql .= " `day58` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '58日充值金额',";
  180. $_sql .= " `day59` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '59日充值金额',";
  181. $_sql .= " `day60` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '60日充值金额',";
  182. $_sql .= " `day90` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '90日充值金额',";
  183. $_sql .= " `day120` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '120日充值金额',";
  184. $_sql .= " `day180` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '180日充值金额',";
  185. $_sql .= " `day270` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '270日充值金额',";
  186. $_sql .= " `day360` double(20,2) NOT NULL DEFAULT '0.00' COMMENT '360日充值金额',";
  187. $_sql .= " PRIMARY KEY (`id`),";
  188. $_sql .= " UNIQUE KEY `ldga_dgc_unique` (`date`,`app_id`,`agent_id`),";
  189. $_sql .= " KEY `ldga_game_index` (`app_id`),";
  190. $_sql .= " KEY `ldga_ch_index` (`agent_id`)";
  191. $_sql .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='每日渠道游戏LTV统计表';";
  192. try {
  193. $_rs = db()->execute($_sql);
  194. if (false === $_rs) {
  195. Log::write(
  196. 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__."ltv create table ".$_table_name
  197. ." failed1", Log::ERROR
  198. );
  199. return false;
  200. }
  201. return true;
  202. } catch (Exception $_e) {
  203. Log::write(
  204. 'line='.__LINE__.'&func='.__FUNCTION__.'&class='.__CLASS__."ltv create table ".$_table_name
  205. ." failed2", Log::ERROR
  206. );
  207. return false;
  208. }
  209. }
  210. /***
  211. * 关联渠道
  212. */
  213. public function ch() {
  214. return $this->hasOne('huo\model\user\UserModel', 'id', 'agent_id')
  215. ->field(['id', 'user_login']);
  216. }
  217. /**
  218. * 关联游戏
  219. */
  220. public function game() {
  221. return $this->hasOne('huo\model\game\GameModel', 'id', 'app_id')
  222. ->field(['id', 'name']);
  223. }
  224. }