123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- <?php
- namespace app\common\model;
- use app\main\service\UrlService;
- use think\Model;
- use app\common\library\Redis;
- class Guide extends Model
- {
- // 表名
- protected $table = 'guide';
- // 自动写入时间戳字段
- protected $autoWriteTimestamp = 'int';
- // 定义时间戳字段名
- protected $createTime = 'createtime';
- protected $updateTime = 'updatetime';
- // 追加属性
- protected $append = [
- ];
- /*
- * 是否导粉
- * @param admin_id
- * @param book_id
- * @param chapter_idx 当前章节序号
- * @return 导粉返回 1 当前章待导粉 2 导粉章及以后 3 无需强制关注不需要导粉[渠道配置] 4 正常阅读[未到导粉章节] 5 已关注跳出导粉
- * *******************防止COOKIE超出限制************************************
- */
- public function isguide($admin_id, $book_id, $chapter_idx,$is_subscribe =0,$referral_id=0,$urlChannelId)
- {
- if(empty($admin_id)){
- $admin_id = $urlChannelId;
- }
- //如果关注则跳出导粉
- if($is_subscribe){
- return false;
- }
- //链接导粉
- if ($referral_id) {
- $guide = model('Referral')->getone($referral_id);
- //检查内推外派,内推不导粉
- $ref_info = UrlService::instance()->getReferralModel()->getone($referral_id,false);
- if(isset($ref_info['push']) && $ref_info['push']){
- $df_config['clear_data'] = 3;
- return $df_config;
- }
- if($guide){
- $df_config['clear_data'] = $this->chapter_clear_data($chapter_idx, $guide);
- return $df_config;
- }
- }
- $redis = Redis::instance();
- $df_config = model('AdminConfig')->getAdminInfoAll($urlChannelId);
- $df_config['clear_data'] = '';
- if ($df_config['subscribe_method'] == 3) {//subscribe_method 1 强关 2 引导 3 不关注
- $df_config['clear_data'] = 3;
- return $df_config;
- }
- if(empty($admin_id)){
- //网站全局导粉章节数
- $web_guide = config('site.book_guide_chapter_idx');
- if ($web_guide) {
- $df_config['clear_data'] = $this->chapter_clear_data($chapter_idx, $web_guide);
- return $df_config;
- }
- // $df_config;
- }
- if ($admin_id != $urlChannelId) { //判断代理商还是渠道商
- $guide = 0;
- //guide表导粉章节数 代理商导粉
- $key = 'GUIDE:' . $admin_id;
- if ($redis->exists($key)) {
- $guide = (int)$redis->hget($key, $book_id);
- } else {
- if($admin_id){
- $db_data = collection($this->field('book_id,chapter_idx')->where('admin_id=' . $admin_id)->select())->toArray();
- if(empty($db_data)){
- $redis->hset($key, 1, 1);
- }else {
- $redis->hdel($key, 1);
- foreach ($db_data as $value) {
- if ($value['book_id'] == $book_id) {
- $guide = $value['chapter_idx'];
- }
- $redis->hset($key, $value['book_id'], $value['chapter_idx']);
- }
- }
- $redis->expire($key, 86400);
- }
- }
- if ($guide) {
- $df_config['clear_data'] = $this->chapter_clear_data($chapter_idx, $guide);
- return $df_config;
- }
- }
- $guidechannel = 0;
- //渠道商guide
- $key = 'GUIDE:' . $urlChannelId;
- if($redis->exists($key)){
- $guidechannel = (int)$redis->hget($key, $book_id);
- } else {
- if($urlChannelId){
- $db_data = collection($this->field('book_id,chapter_idx')->where('admin_id=' . $urlChannelId)->select())->toArray();
- if(empty($db_data)){
- $redis->hset($key, 1, 1);
- }else{
- $redis->hdel($key, 1);
- foreach ($db_data as $value) {
- if($value['book_id'] == $book_id){
- $guidechannel = $value['chapter_idx'];
- }
- $redis->hset($key, $value['book_id'], $value['chapter_idx']);
- }
- }
- $redis->expire($key,86400);
- }
- }
- if ($guidechannel) {
- $df_config['clear_data'] = $this->chapter_clear_data($chapter_idx, $guidechannel);
- return $df_config;
- }
- //渠道商全局导粉章节数
- if ($df_config['book_guide_chapter_idx']) {
- $df_config['clear_data'] = $this->chapter_clear_data($chapter_idx, $df_config['book_guide_chapter_idx']);
- return $df_config;
- }
- //网站全局导粉章节数
- $web_guide = config('site.book_guide_chapter_idx');
- if ($web_guide) {
- $df_config['clear_data'] = $this->chapter_clear_data($chapter_idx, $web_guide);
- return $df_config;
- }
- // $df_config;
- }
- /*
- * 返回第几章导粉
- * @param admin_id
- * @param book_id
- * @return
- */
- public function getGuideChapter($admin_id, $book_id,$referral_id=0,$urlChannelId)
- {
- if(empty($admin_id)){
- $admin_id = $urlChannelId;
- }
- $redis = Redis::instance();
- $df_config = model('AdminConfig')->getAdminInfoAll($urlChannelId);
- if(empty($admin_id)){
- //网站全局导粉章节数
- $web_guide = config('site.book_guide_chapter_idx');
- if ($web_guide) return $web_guide;
- }
- //链接导粉
- if ($referral_id) {
- $guide = model('Referral')->getone($referral_id);
- if($guide) return $guide;
- }
- if ($admin_id != $urlChannelId) { //判断代理商还是渠道商
- $guide = 0;
- //guide表导粉章节数 代理商导粉
- $key = 'GUIDE:' . $admin_id;
- if ($redis->exists($key)) {
- $guide = (int)$redis->hget($key, $book_id);
- } else {
- if($admin_id){
- $db_data = collection($this->field('book_id,chapter_idx')->where('admin_id=' . $admin_id)->select())->toArray();
- if(empty($db_data)){
- $redis->hset($key, 1, 1);
- }else {
- $redis->hdel($key, 1);
- foreach ($db_data as $value) {
- if ($value['book_id'] == $book_id) {
- $guide = $value['chapter_idx'];
- }
- $redis->hset($key, $value['book_id'], $value['chapter_idx']);
- }
- }
- $redis->expire($key, 86400);
- }
- }
- if ($guide) return $guide;
- }
- $guidechannel = 0;
- //渠道商guide
- $key = 'GUIDE:' . $urlChannelId;
- if($redis->exists($key)){
- $guidechannel = (int)$redis->hget($key, $book_id);
- } else {
- if($urlChannelId){
- $db_data = collection($this->field('book_id,chapter_idx')->where('admin_id=' . $urlChannelId)->select())->toArray();
- if(empty($db_data)){
- $redis->hset($key, 1, 1);
- }else{
- $redis->hdel($key, 1);
- foreach ($db_data as $value) {
- if($value['book_id'] == $book_id){
- $guidechannel = $value['chapter_idx'];
- }
- $redis->hset($key, $value['book_id'], $value['chapter_idx']);
- }
- }
- $redis->expire($key,86400);
- }
- }
- if ($guidechannel) return $guidechannel;
- //渠道商全局导粉章节数
- if ($df_config['book_guide_chapter_idx']) return $df_config['book_guide_chapter_idx'];
- //网站全局导粉章节数
- $web_guide = config('site.book_guide_chapter_idx');
- if ($web_guide) return $web_guide;
- }
- public function chapter_clear_data($chapter_idx, $guide)
- {
- //未导粉章
- if ($chapter_idx < $guide) {
- $clear_data = 4;
- }
- //如果是当前章
- if ($guide - $chapter_idx == 1) {
- $clear_data = 1;
- }
- //导粉后
- if ($chapter_idx >= $guide) {
- $clear_data = 2;
- }
- return $clear_data;
- }
- }
|