123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- <?php
- /**
- * Created by PhpStorm.
- * User: wanggb
- * Date: 2018/11/29
- * Time: 15:32
- */
- namespace app\main\service;
- use app\common\library\Redis;
- use app\main\constants\CacheConstants;
- use app\main\constants\MqConstants;
- use app\main\model\object\DotObject;
- use think\Log;
- use function GuzzleHttp\Psr7\parse_query;
- class UserdotService extends BaseService
- {
- const exchangename='cps.ex.topic';
- /**
- * @var UserdotService
- */
- protected static $self = null;
- /**
- * @return BaseService|UserdotService
- */
- public static function instance()
- {
- if (self::$self == NULL) {
- self::$self = new self();
- }
- return self::$self;
- }
- /**
- * 映射关系维护
- *
- * @param DotObject $dotObject array
- */
- public function handleTask(DotObject $dotObject)
- {
- Log::info('handleTask:: Start');
- Log::info('handleTask::'.print_r($dotObject, true));
- try{
- switch ($dotObject->action_type){
- case MqConstants::ROUTING_KEY_COLLECT_CHANNEL_PAY:
- //渠道付费用户统计
- $this->transferCollectUserSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_SUBSCRIBE_REFERER:
- //主服务号关注带推广ID
- $this->transferCollectReferralSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_UNSUBSCRIBE_REFERRAL:
- $this->transferCollectReferralSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_SUBSCRIBE:
- //主服务号关注无推广ID
- $this->transferCollectUserSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_UNSUBSCRIBE:
- //主服务号取消关注
- $this->transferCollectUserSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_SUBSCRIBE_OBSCURE_REFERER:
- //模糊关注带推广ID
- //$this->transferCollectReferralPv($dotObject);
- $this->transferCollectReferralSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_SUBSCRIBE_OBSCURE:
- //模糊关注无推广ID
- $this->transferCollectUserSub($dotObject);
- break;
- case MqConstants::ROUTING_KEY_REFERRAL_UV:
- //推广链接uv
- $this->transferCollectReferralPv($dotObject);
- break;
- case MqConstants::ROUTING_KEY_APP_REGISTER:
- //APP用户注册
- $this->transferCollectAppRegister($dotObject);
- break;
- case MqConstants::ROUTING_KEY_APP_BIND:
- //APP用户绑定手机号
- $this->transferCollectAppRegister($dotObject);
- break;
- case MqConstants::ROUTING_KEY_APP_BIND_CODE:
- //APP用户绑定动态码
- $this->transferCollectAppRegister($dotObject);
- break;
- case MqConstants::ROUTING_KEY_APP_GUIDE_UV:
- //app 引导位uv统计
- $this->transferCollectAppGuideUv($dotObject);
- break;
- }
- } catch (\Exception $exception){
- LogService::error(' handleTask error '. $exception->getMessage());
- }
- Log::info('handleTask:: END');
- }
- /**
- * 用户关注
- * @param DotObject $dotObject array
- */
- public function transferCollectUserSub(DotObject $dotObject)
- {
- $mq = MqService::instance()->getDotMqInstance();
- $exchangname = self::exchangename;
- $data = $this->orgDataCollectUserSub($dotObject);
- $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_USER_SUBSCRIBE, 'topic');
- }
- /**
- * 推广连接 关注
- * @param DotObject $dotObject array
- */
- public function transferCollectReferralSub(DotObject $dotObject)
- {
- $mq = MqService::instance()->getDotMqInstance();
- $exchangname = self::exchangename;
- $data = $this->orgDataCollectReferralSub($dotObject);
- $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_REFERRAL_SUBSCRIBE, 'topic');
- }
- /**
- *
- * 推广连接 pv
- * @param DotObject $dotObject array
- */
- public function transferCollectReferralPv(DotObject $dotObject)
- {
- $mq = MqService::instance()->getDotMqInstance();
- $exchangname = self::exchangename;
- $data = $this->orgDataCollectReferralPv($dotObject);
- $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_REFERRAL_PV, 'topic');
- }
- /**
- * APP用户注册 pv
- * @param DotObject $dotObject array
- */
- public function transferCollectAppRegister(DotObject $dotObject)
- {
- $mq = MqService::instance()->getDotMqInstance();
- $exchangname = self::exchangename;
- $data = $this->orgDataCollectAppUserRegister($dotObject);
- $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_USER_APP_REGISTER, 'topic');
- }
- /**
- * APP 引导位uv统计
- * @param DotObject $dotObject array
- */
- public function transferCollectAppGuideUv(DotObject $dotObject)
- {
- $mq = MqService::instance()->getDotMqInstance();
- $exchangname = self::exchangename;
- $data = $this->orgDataCollectAppGuideUv($dotObject);
- $mq->transferExchange($data, $exchangname, MqConstants::COLLECT_USER_APP_GUIDE_UV, 'topic');
- }
- /**
- * 构建:统计.用户.关注 数据
- * @param DotObject $dotObject array
- * @return array
- */
- public function orgDataCollectUserSub(DotObject $dotObject)
- {
- if ($dotObject->type == MqConstants::MSG_TYPE_FOLLOW) {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'user_id' => $dotObject->user_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- } elseif ($dotObject->type == MqConstants::MSG_TYPE_UNFOLLOW) {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'user_id' => $dotObject->user_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- } elseif ($dotObject->type == MqConstants::MSG_TYPE_INCREASE) {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'sex' => $dotObject->sex,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- } elseif ($dotObject->type == MqConstants::MSG_TYPE_GUIDE_FOLLOW) {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- } elseif ($dotObject->type == MqConstants::MSG_TYPE_SEX) {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'sex' => $dotObject->sex,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- }elseif ($dotObject->type == MqConstants::MSG_TYPE_PAY){
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'sex' => $dotObject->sex,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- } else if ($dotObject->type == MqConstants::MSG_TYPE_NEW_USER_RECHARGE) {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0,
- 'user_id' => $dotObject->user_id,
- 'money' => $dotObject->money,
- ];
- } else {
- $data = [
- 'admin_id' => $dotObject->channel_id,
- 'sex' => $dotObject->sex,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time(),
- 'business_line' => $dotObject->business_line ?? 0
- ];
- }
- return $data;
- }
- /**
- * 构建:统计.推广.关注 数据
- * @param DotObject $dotObject array
- * @return array
- */
- public function orgDataCollectReferralSub(DotObject $dotObject)
- {
- if($dotObject->type == MqConstants::MSG_TYPE_FOLLOW){
- $data = [
- 'referral_id' => $dotObject->referral_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time()
- ];
- }elseif($dotObject->type == MqConstants::MSG_TYPE_UNFOLLOW){
- $data = [
- 'referral_id' => $dotObject->referral_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time()
- ];
- }else{
- $data = [
- 'referral_id' => $dotObject->referral_id,
- 'type' => $dotObject->type,
- 'event_time' => $dotObject->event_time ?? time()
- ];
- }
- return $data;
- }
- /**
- * 构建:统计.推广.pv 数据
- * @param DotObject $dotObject array
- * @return array
- */
- public function orgDataCollectReferralPv(DotObject $dotObject)
- {
- $data = [
- 'user_id' => $dotObject->user_id,
- 'referral_id' => $dotObject->referral_id,
- 'event_time' => $dotObject->event_time ?? time()
- ];
- return $data;
- }
- /**
- * 构建:统计.app.user 数据
- * @param DotObject $dotObject array
- * @return array
- */
- public function orgDataCollectAppUserRegister(DotObject $dotObject)
- {
- $data = [
- 'user_id' => $dotObject->user_id,
- 'admin_id' => $dotObject->channel_id,
- 'sex' => $dotObject->sex,
- 'type' => $dotObject->type,
- 'action_type' => $dotObject->action_type,
- 'business_line' => $dotObject->business_line,
- 'event_time' => $dotObject->event_time ?? time()
- ];
- return $data;
- }
- /**
- * 构建:统计.app.guide UV 数据
- * @param DotObject $dotObject array
- * @return array
- */
- public function orgDataCollectAppGuideUv(DotObject $dotObject)
- {
- $data = [
- 'user_id' => $dotObject->user_id,
- 'admin_id' => $dotObject->channel_id,
- 'action_type' => $dotObject->action_type,
- 'guide_idx' => $dotObject->guide_idx,
- 'guide_op_type' => $dotObject->guide_op_type,
- 'event_time' => $dotObject->event_time ?? time()
- ];
- return $data;
- }
- public function saveTrackInfo($url, $zone, $adid, $book_id, $track_ids = [])
- {
- $parseUrl = parse_url($url);
- $user_id = UserService::instance()->getUserInfo()->id;
- // $cache_key = $user_id . '_' . $book_id;
- $cache_key = CacheConstants::getTrackCacheKey($user_id, $book_id);
- if (array_key_exists('query', $parseUrl) && $parseUrl['query']) {
- $query = parse_query($parseUrl['query']);
- } else {
- $query = [];
- }
- $query = array_merge($query, $track_ids);
- $data = [
- 'book_id' => $book_id,
- 'page' => $parseUrl['path'],
- 'map' => $query,
- 'zone' => $zone,
- 'adid' => $adid,
- ];
- $expire = CacheConstants::getTrackCacheTime();
- Redis::instance()->set($cache_key, json_encode($data), $expire);
- return json($data);
- }
- public function getTrackCache($user_id, $book_id)
- {
- $newCacheKey = CacheConstants::getTrackCacheKey($user_id, $book_id);
- $cache = Redis::instance()->get($newCacheKey);
- return $cache;
- }
- }
|