Browse Source

ip shield 1

zz 2 years ago
parent
commit
df24a8b249

+ 7 - 15
app/Console/Commands/BookTest.php

@@ -4,6 +4,7 @@ namespace App\Console\Commands;
 
 use App\Jobs\QappTikTokUser;
 use App\Jobs\QappTikTokUserCharge;
+use App\Modules\Channel\Services\QappSendOrderContentShieldConfigService;
 use Illuminate\Console\Command;
 use App\Modules\User\Models\QappUser;
 use App\Modules\User\Models\User;
@@ -42,21 +43,12 @@ class BookTest extends Command
      */
     public function handle()
     {
-        $users = QappUser::join('orders', 'orders.uid', 'qapp_users.uid')
-            ->where('qapp_users.created_at', '>=', '2020-08-01')
-            ->where('orders.created_at', '>=', '2020-08-01')
-            ->where('orders.status', 'PAID')
-            ->select('orders.uid', 'orders.price', 'orders.created_at')
-            ->get();
-        foreach ($users as $user) {
-            $this->notify($user);
-        }
-    }
 
-    private function notify($model)
-    {
-        $job = new QappTikTokUserCharge($model->uid, $model->price, $model->created_at, QappTikTokUserCharge::REGISTER_24_CHARGE, '', '');
-        print_r($model->toArray());
-        $job->handle();
+        $sen_order_id = 0;
+        $ip = '112.17.235.74';
+        $result = QappSendOrderContentShieldConfigService::doShied($sen_order_id,$ip);
+        print_r($result);
     }
+
+
 }

BIN
app/Libs/ip2region.db


+ 11 - 0
app/Modules/Channel/Models/QappSendOrderContentShieldConfig.php

@@ -0,0 +1,11 @@
+<?php
+
+
+namespace App\Modules\Channel\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class QappSendOrderContentShieldConfig extends Model
+{
+    protected $table = 'qapp_send_order_content_shield_config';
+}

+ 92 - 0
app/Modules/Channel/Services/QappSendOrderContentShieldConfigService.php

@@ -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();
+    }
+}