UserdotService.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wanggb
  5. * Date: 2018/11/29
  6. * Time: 15:32
  7. */
  8. namespace app\main\service;
  9. use app\common\library\Redis;
  10. use app\main\constants\CacheConstants;
  11. use app\main\constants\MqConstants;
  12. use app\main\model\object\DotObject;
  13. use think\Log;
  14. use function GuzzleHttp\Psr7\parse_query;
  15. class UserdotService extends BaseService
  16. {
  17. const exchangename='cps.ex.topic';
  18. /**
  19. * @var UserdotService
  20. */
  21. protected static $self = null;
  22. /**
  23. * @return BaseService|UserdotService
  24. */
  25. public static function instance()
  26. {
  27. if (self::$self == NULL) {
  28. self::$self = new self();
  29. }
  30. return self::$self;
  31. }
  32. /**
  33. * 映射关系维护
  34. *
  35. * @param DotObject $dotObject array
  36. */
  37. public function handleTask(DotObject $dotObject)
  38. {
  39. Log::info('handleTask:: Start');
  40. Log::info('handleTask::'.print_r($dotObject, true));
  41. try{
  42. switch ($dotObject->action_type){
  43. case MqConstants::ROUTING_KEY_COLLECT_CHANNEL_PAY:
  44. //渠道付费用户统计
  45. $this->transferCollectUserSub($dotObject);
  46. break;
  47. case MqConstants::ROUTING_KEY_SUBSCRIBE_REFERER:
  48. //主服务号关注带推广ID
  49. $this->transferCollectReferralSub($dotObject);
  50. break;
  51. case MqConstants::ROUTING_KEY_UNSUBSCRIBE_REFERRAL:
  52. $this->transferCollectReferralSub($dotObject);
  53. break;
  54. case MqConstants::ROUTING_KEY_SUBSCRIBE:
  55. //主服务号关注无推广ID
  56. $this->transferCollectUserSub($dotObject);
  57. break;
  58. case MqConstants::ROUTING_KEY_UNSUBSCRIBE:
  59. //主服务号取消关注
  60. $this->transferCollectUserSub($dotObject);
  61. break;
  62. case MqConstants::ROUTING_KEY_SUBSCRIBE_OBSCURE_REFERER:
  63. //模糊关注带推广ID
  64. //$this->transferCollectReferralPv($dotObject);
  65. $this->transferCollectReferralSub($dotObject);
  66. break;
  67. case MqConstants::ROUTING_KEY_SUBSCRIBE_OBSCURE:
  68. //模糊关注无推广ID
  69. $this->transferCollectUserSub($dotObject);
  70. break;
  71. case MqConstants::ROUTING_KEY_REFERRAL_UV:
  72. //推广链接uv
  73. $this->transferCollectReferralPv($dotObject);
  74. break;
  75. case MqConstants::ROUTING_KEY_APP_REGISTER:
  76. //APP用户注册
  77. $this->transferCollectAppRegister($dotObject);
  78. break;
  79. case MqConstants::ROUTING_KEY_APP_BIND:
  80. //APP用户绑定手机号
  81. $this->transferCollectAppRegister($dotObject);
  82. break;
  83. case MqConstants::ROUTING_KEY_APP_BIND_CODE:
  84. //APP用户绑定动态码
  85. $this->transferCollectAppRegister($dotObject);
  86. break;
  87. case MqConstants::ROUTING_KEY_APP_GUIDE_UV:
  88. //app 引导位uv统计
  89. $this->transferCollectAppGuideUv($dotObject);
  90. break;
  91. }
  92. } catch (\Exception $exception){
  93. LogService::error(' handleTask error '. $exception->getMessage());
  94. }
  95. Log::info('handleTask:: END');
  96. }
  97. /**
  98. * 用户关注
  99. * @param DotObject $dotObject array
  100. */
  101. public function transferCollectUserSub(DotObject $dotObject)
  102. {
  103. $mq = MqService::instance()->getDotMqInstance();
  104. $exchangname = self::exchangename;
  105. $data = $this->orgDataCollectUserSub($dotObject);
  106. $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_USER_SUBSCRIBE, 'topic');
  107. }
  108. /**
  109. * 推广连接 关注
  110. * @param DotObject $dotObject array
  111. */
  112. public function transferCollectReferralSub(DotObject $dotObject)
  113. {
  114. $mq = MqService::instance()->getDotMqInstance();
  115. $exchangname = self::exchangename;
  116. $data = $this->orgDataCollectReferralSub($dotObject);
  117. $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_REFERRAL_SUBSCRIBE, 'topic');
  118. }
  119. /**
  120. *
  121. * 推广连接 pv
  122. * @param DotObject $dotObject array
  123. */
  124. public function transferCollectReferralPv(DotObject $dotObject)
  125. {
  126. $mq = MqService::instance()->getDotMqInstance();
  127. $exchangname = self::exchangename;
  128. $data = $this->orgDataCollectReferralPv($dotObject);
  129. $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_REFERRAL_PV, 'topic');
  130. }
  131. /**
  132. * APP用户注册 pv
  133. * @param DotObject $dotObject array
  134. */
  135. public function transferCollectAppRegister(DotObject $dotObject)
  136. {
  137. $mq = MqService::instance()->getDotMqInstance();
  138. $exchangname = self::exchangename;
  139. $data = $this->orgDataCollectAppUserRegister($dotObject);
  140. $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_USER_APP_REGISTER, 'topic');
  141. }
  142. /**
  143. * APP 引导位uv统计
  144. * @param DotObject $dotObject array
  145. */
  146. public function transferCollectAppGuideUv(DotObject $dotObject)
  147. {
  148. $mq = MqService::instance()->getDotMqInstance();
  149. $exchangname = self::exchangename;
  150. $data = $this->orgDataCollectAppGuideUv($dotObject);
  151. $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_USER_APP_GUIDE_UV, 'topic');
  152. }
  153. /**
  154. * 构建:统计.用户.关注 数据
  155. * @param DotObject $dotObject array
  156. * @return array
  157. */
  158. public function orgDataCollectUserSub(DotObject $dotObject)
  159. {
  160. if ($dotObject->type == MqConstants::MSG_TYPE_FOLLOW) {
  161. $data = [
  162. 'admin_id' => $dotObject->channel_id,
  163. 'user_id' => $dotObject->user_id,
  164. 'type' => $dotObject->type,
  165. 'event_time' => $dotObject->event_time ?? time(),
  166. 'business_line' => $dotObject->business_line ?? 0
  167. ];
  168. } elseif ($dotObject->type == MqConstants::MSG_TYPE_UNFOLLOW) {
  169. $data = [
  170. 'admin_id' => $dotObject->channel_id,
  171. 'user_id' => $dotObject->user_id,
  172. 'type' => $dotObject->type,
  173. 'event_time' => $dotObject->event_time ?? time(),
  174. 'business_line' => $dotObject->business_line ?? 0
  175. ];
  176. } elseif ($dotObject->type == MqConstants::MSG_TYPE_INCREASE) {
  177. $data = [
  178. 'admin_id' => $dotObject->channel_id,
  179. 'sex' => $dotObject->sex,
  180. 'type' => $dotObject->type,
  181. 'event_time' => $dotObject->event_time ?? time(),
  182. 'business_line' => $dotObject->business_line ?? 0
  183. ];
  184. } elseif ($dotObject->type == MqConstants::MSG_TYPE_GUIDE_FOLLOW) {
  185. $data = [
  186. 'admin_id' => $dotObject->channel_id,
  187. 'type' => $dotObject->type,
  188. 'event_time' => $dotObject->event_time ?? time(),
  189. 'business_line' => $dotObject->business_line ?? 0
  190. ];
  191. } elseif ($dotObject->type == MqConstants::MSG_TYPE_SEX) {
  192. $data = [
  193. 'admin_id' => $dotObject->channel_id,
  194. 'sex' => $dotObject->sex,
  195. 'type' => $dotObject->type,
  196. 'event_time' => $dotObject->event_time ?? time(),
  197. 'business_line' => $dotObject->business_line ?? 0
  198. ];
  199. }elseif ($dotObject->type == MqConstants::MSG_TYPE_PAY){
  200. $data = [
  201. 'admin_id' => $dotObject->channel_id,
  202. 'sex' => $dotObject->sex,
  203. 'type' => $dotObject->type,
  204. 'event_time' => $dotObject->event_time ?? time(),
  205. 'business_line' => $dotObject->business_line ?? 0
  206. ];
  207. } else if ($dotObject->type == MqConstants::MSG_TYPE_NEW_USER_RECHARGE) {
  208. $data = [
  209. 'admin_id' => $dotObject->channel_id,
  210. 'type' => $dotObject->type,
  211. 'event_time' => $dotObject->event_time ?? time(),
  212. 'business_line' => $dotObject->business_line ?? 0,
  213. 'user_id' => $dotObject->user_id,
  214. 'money' => $dotObject->money,
  215. ];
  216. } else {
  217. $data = [
  218. 'admin_id' => $dotObject->channel_id,
  219. 'sex' => $dotObject->sex,
  220. 'type' => $dotObject->type,
  221. 'event_time' => $dotObject->event_time ?? time(),
  222. 'business_line' => $dotObject->business_line ?? 0
  223. ];
  224. }
  225. return $data;
  226. }
  227. /**
  228. * 构建:统计.推广.关注 数据
  229. * @param DotObject $dotObject array
  230. * @return array
  231. */
  232. public function orgDataCollectReferralSub(DotObject $dotObject)
  233. {
  234. if($dotObject->type == MqConstants::MSG_TYPE_FOLLOW){
  235. $data = [
  236. 'referral_id' => $dotObject->referral_id,
  237. 'type' => $dotObject->type,
  238. 'event_time' => $dotObject->event_time ?? time()
  239. ];
  240. }elseif($dotObject->type == MqConstants::MSG_TYPE_UNFOLLOW){
  241. $data = [
  242. 'referral_id' => $dotObject->referral_id,
  243. 'type' => $dotObject->type,
  244. 'event_time' => $dotObject->event_time ?? time()
  245. ];
  246. }else{
  247. $data = [
  248. 'referral_id' => $dotObject->referral_id,
  249. 'type' => $dotObject->type,
  250. 'event_time' => $dotObject->event_time ?? time()
  251. ];
  252. }
  253. return $data;
  254. }
  255. /**
  256. * 构建:统计.推广.pv 数据
  257. * @param DotObject $dotObject array
  258. * @return array
  259. */
  260. public function orgDataCollectReferralPv(DotObject $dotObject)
  261. {
  262. $data = [
  263. 'user_id' => $dotObject->user_id,
  264. 'referral_id' => $dotObject->referral_id,
  265. 'event_time' => $dotObject->event_time ?? time()
  266. ];
  267. return $data;
  268. }
  269. /**
  270. * 构建:统计.app.user 数据
  271. * @param DotObject $dotObject array
  272. * @return array
  273. */
  274. public function orgDataCollectAppUserRegister(DotObject $dotObject)
  275. {
  276. $data = [
  277. 'user_id' => $dotObject->user_id,
  278. 'admin_id' => $dotObject->channel_id,
  279. 'sex' => $dotObject->sex,
  280. 'type' => $dotObject->type,
  281. 'action_type' => $dotObject->action_type,
  282. 'business_line' => $dotObject->business_line,
  283. 'event_time' => $dotObject->event_time ?? time()
  284. ];
  285. return $data;
  286. }
  287. /**
  288. * 构建:统计.app.guide UV 数据
  289. * @param DotObject $dotObject array
  290. * @return array
  291. */
  292. public function orgDataCollectAppGuideUv(DotObject $dotObject)
  293. {
  294. $data = [
  295. 'user_id' => $dotObject->user_id,
  296. 'admin_id' => $dotObject->channel_id,
  297. 'action_type' => $dotObject->action_type,
  298. 'guide_idx' => $dotObject->guide_idx,
  299. 'guide_op_type' => $dotObject->guide_op_type,
  300. 'event_time' => $dotObject->event_time ?? time()
  301. ];
  302. return $data;
  303. }
  304. public function saveTrackInfo($url, $zone, $adid, $book_id, $track_ids = [])
  305. {
  306. $parseUrl = parse_url($url);
  307. $user_id = UserService::instance()->getUserInfo()->id;
  308. // $cache_key = $user_id . '_' . $book_id;
  309. $cache_key = CacheConstants::getTrackCacheKey($user_id, $book_id);
  310. if (array_key_exists('query', $parseUrl) && $parseUrl['query']) {
  311. $query = parse_query($parseUrl['query']);
  312. } else {
  313. $query = [];
  314. }
  315. $query = array_merge($query, $track_ids);
  316. $data = [
  317. 'book_id' => $book_id,
  318. 'page' => $parseUrl['path'],
  319. 'map' => $query,
  320. 'zone' => $zone,
  321. 'adid' => $adid,
  322. ];
  323. $expire = CacheConstants::getTrackCacheTime();
  324. Redis::instance()->set($cache_key, json_encode($data), $expire);
  325. return json($data);
  326. }
  327. public function getTrackCache($user_id, $book_id)
  328. {
  329. $newCacheKey = CacheConstants::getTrackCacheKey($user_id, $book_id);
  330. $cache = Redis::instance()->get($newCacheKey);
  331. return $cache;
  332. }
  333. }