|
@@ -0,0 +1,92 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+
|
|
|
+namespace App\Modules\Channel\Services;
|
|
|
+
|
|
|
+use App\Libs\Ip2Region;
|
|
|
+use App\Modules\Book\Services\ChapterService;
|
|
|
+use App\Modules\Channel\Models\QappSendOrderContentShieldConfig;
|
|
|
+
|
|
|
+class QappSendOrderContentShieldConfigService
|
|
|
+{
|
|
|
+ public static function doShied($sen_order_id,$ip)
|
|
|
+ {
|
|
|
+ $config = self::getShieldConfig($sen_order_id);
|
|
|
+ if(!$config || (!$config->area && !$config->ip_text) || !$config->bid){
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ $chapter_info = ChapterService::getChapterInfoByBidAndSeq($config->bid,1);
|
|
|
+ if(!$chapter_info){
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ if($config->area && !self::doShiedArea($config,$ip)){
|
|
|
+ return [
|
|
|
+ 'bid'=>$config->bid,
|
|
|
+ 'cid'=>$chapter_info->id
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if($config->ip_text && !self::doShiedAreaIp($config,$ip)){
|
|
|
+ return [
|
|
|
+ 'bid'=>$config->bid,
|
|
|
+ 'cid'=>$chapter_info->id
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private static function doShiedArea($config,$ip)
|
|
|
+ {
|
|
|
+ $area_list = explode(',',$config->area);
|
|
|
+ $ip2Region = new Ip2Region();
|
|
|
+ $area = $ip2Region->binarySearch($ip);
|
|
|
+ $area_info = explode('|',$area['region']);
|
|
|
+ if(!isset($area_info[2]) || !$area_info[2] || !isset($area_info[3]) || !$area_info[3]){
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ $province = $area_info[2];
|
|
|
+ $city = $area_info[3];
|
|
|
+ $access = true;
|
|
|
+ foreach ($area_list as $area_item){
|
|
|
+ $area_item_list = explode('/',$area_item);
|
|
|
+ $item = [
|
|
|
+ 'province'=>$area_item_list[0],
|
|
|
+ 'city'=>isset($area_item_list[1]) ? $area_item_list[1]:''
|
|
|
+ ];
|
|
|
+ $item_province = str_replace('省','',$item['province']);
|
|
|
+ $item_province = str_replace('市','',$item_province);
|
|
|
+ if($item_province == str_replace('省','',$province)){
|
|
|
+ if(!$item['city']){$access = false;break;}
|
|
|
+ if(str_replace('市','',$item['city']) == str_replace('市','',$city)){
|
|
|
+ $access = false;break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $access;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static function doShiedAreaIp($config, $ip)
|
|
|
+ {
|
|
|
+ $ip_list = explode(',',$config->ip_text);
|
|
|
+ $access = true;
|
|
|
+ foreach ($ip_list as $item_ip){
|
|
|
+ if($item_ip == $ip){
|
|
|
+ $access = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $access;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function getShieldConfig($send_order_id)
|
|
|
+ {
|
|
|
+ return QappSendOrderContentShieldConfig::join('qapp_send_orders','qapp_send_orders.account','=','qapp_send_order_content_shield_config.qapp_account')
|
|
|
+ ->where('qapp_send_orders.send_order_id',$send_order_id)
|
|
|
+ ->where('qapp_send_order_content_shield_config.is_enable',1)
|
|
|
+ ->select('qapp_send_order_content_shield_config.area',
|
|
|
+ 'qapp_send_order_content_shield_config.ip_text',
|
|
|
+ 'qapp_send_order_content_shield_config.bid'
|
|
|
+ )
|
|
|
+ ->first();
|
|
|
+ }
|
|
|
+}
|