stanley-king 3 vuotta sitten
vanhempi
commit
72c4c7f176

+ 1 - 1
admin/control/merchant.php

@@ -7,7 +7,7 @@
 defined('InShopNC') or exit('Access Invalid!');
 
 require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
-require_once(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
+include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
 require_once(BASE_ROOT_PATH . '/core/framework/function/http.php');
 require_once(BASE_HELPER_PATH . '/stat_helper.php');
 

+ 1 - 1
admin/control/provider.php

@@ -1,6 +1,6 @@
 <?php
 
-require_once(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
+include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
 class providerControl extends SystemControl
 {
     public function __construct()

+ 1 - 1
admin/control/provider_group.php

@@ -1,5 +1,5 @@
 <?php
-require_once(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
+include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
 require_once(BASE_HELPER_PATH . '/mtopcard/mtopcard.php');
 require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
 

+ 1 - 1
admin/control/refill_stock.php

@@ -1,7 +1,7 @@
 <?php
 
 require_once(BASE_HELPER_PATH . '/refill/policy/rlock.php');
-require_once(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
+include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
 require_once(BASE_HELPER_PATH . '/mtopcard/mtopcard.php');
 
 class refill_stockControl extends SystemControl

+ 1 - 1
admin/control/refill_successful.php

@@ -1,5 +1,5 @@
 <?php
-require_once(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
+include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
 require_once(BASE_ROOT_PATH . '/core/framework/function/http.php');
 require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
 class refill_successfulControl extends SystemControl

+ 1 - 2
data/config/dev/refill.ini.php

@@ -1,7 +1,6 @@
 <?php
 
 global $config;
-
 $config['refill_oil_specs'] = [100, 200, 500, 1000, 2000];
 $config['refill_phone_specs'] = [10, 20, 30, 50, 100, 200, 300, 500];
 
@@ -42,5 +41,5 @@ $config['third_providers'] = $third_providers;
 
 $config['auto_find_channels'] = true;
 
-$config['cancel_retry_time'] = [1092 => [9,10,11]];
+$config['cancel_retry_time'] = [1092 => ["9:00",'10:00','11:00','18:50']];
 

+ 2 - 0
helper/refill/LZRefillFactory.php

@@ -7,6 +7,7 @@ require_once(BASE_HELPER_PATH . '/refill/ProviderManager.php');
 
 require_once(BASE_HELPER_PATH . '/refill/policy/IPolicy.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/lingzh/policy.php');
+require_once(BASE_HELPER_PATH . '/refill/policy/try_judge.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/chctl.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/ctl_item.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/mchctl.php');
@@ -18,6 +19,7 @@ require_once(BASE_HELPER_PATH . '/refill/policy/merchant_price.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/mgroup.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/lingzh/quality_ploy.php');
 
+
 use Log;
 use StatesHelper;
 

+ 1 - 1
helper/refill/XYZRefillFactory.php

@@ -6,9 +6,9 @@ namespace refill;
 require_once(BASE_HELPER_PATH . '/refill/RefillBase.php');
 require_once(BASE_HELPER_PATH . '/refill/ProviderManager.php');
 require_once(BASE_HELPER_PATH . '/rbridge/RBridgeFactory.php');
-
 require_once(BASE_HELPER_PATH . '/refill/policy/IPolicy.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/xyz/policy.php');
+require_once(BASE_HELPER_PATH . '/refill/policy/try_judge.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/chctl.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/ctl_item.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/mchctl.php');

+ 26 - 3
helper/refill/policy/quaility.php

@@ -43,17 +43,20 @@ class Quality
     protected $mMchoilctl;
     protected $mSpeeds;
     protected $mQualities;
+    protected $mTryAdjuster;
 
     public function __construct()
     {
         $this->mMchPhonectl = new mchctl();
         $this->mMchoilctl = new mchoilctl();
+        $this->mTryAdjuster = new try_judge();
     }
 
     public function load()
     {
         $this->mMchPhonectl->load();
         $this->mMchoilctl->load();
+        $this->mTryAdjuster->load();
     }
 
     public function find_quality($mchid, $card_type, $quality, $times, $used_time, $caller): array
@@ -168,13 +171,13 @@ class Quality
         }
 
         $max_times = $this->mSpeeds[$org]['retry_times'];
-        $qualities = $this->calc_phone_quality($qualities,$times,$used_time,$time_out,$max_times);
+        $qualities = $this->calc_phone_quality($qualities,$times,$used_time,$time_out,$max_times,$mchid);
 
         return [$org,$qualities];
     }
 
     //通过每种类型通道耗时,倒推当前可用通道,并优先走推荐通道.
-    private function calc_phone_quality($qualities, $times, $used_time, $time_out, $max_times)
+    private function calc_phone_quality($qualities, $times, $used_time, $time_out, $max_times,$mchid)
     {
         $left_time = $time_out - $used_time;
         if($left_time <= 0 || $max_times <= $times) return [];
@@ -214,11 +217,31 @@ class Quality
             return $result;
         };
 
-        if($times > 0) {
+        $pTryAdjuster = $this->mTryAdjuster;
+        $timeing_checker = function ($qualities) use($pTryAdjuster,$mchid)
+        {
+            foreach ($qualities as $quality)
+            {
+                $ret = $pTryAdjuster->can_try($mchid,$quality);
+                if($ret == false) {
+                    return false;
+                }
+            }
+
+            return true;
+        };
+
+        if($times > 0)
+        {
             $qualities = $times_checker($qualities,$times);
             Log::record("calc_quality times_checker result = " . implode($qualities),Log::DEBUG);
             $qualities = $timeout_checker($qualities,$left_time);
             Log::record("calc_quality timeout_checker result = " . implode($qualities),Log::DEBUG);
+
+            if(!$timeing_checker($qualities)) {
+                $qualities = [];
+                Log::record("calc_quality timeing_checker result is empty", Log::DEBUG);
+            }
         }
 
         return $qualities;

+ 64 - 0
helper/refill/policy/try_judge.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace refill;
+
+class try_judge
+{
+    private $mReloadTime;
+    private $mMchTimeings;
+
+    const MAX_LEFT_SECS = 600;
+
+    public function __construct()
+    {
+        $this->load();
+    }
+
+    public function load()
+    {
+        global $config;
+        $mch_times = $config['cancel_retry_time'];
+
+        $date = date('Y-m-d',time());
+        $this->mReloadTime = strtotime($date) + 86400;
+        $this->mMchTimeings = [];
+
+        if(empty($mch_times)) return;
+        foreach ($mch_times as $mchid => $timings)
+        {
+            $tstamps = [];
+            foreach ($timings as $timing) {
+                $tstamps[] = strtotime("{$date} {$timing}");
+            }
+            rsort($tstamps);
+            if(!empty($tstamps)) {
+                $this->mMchTimeings[$mchid] = $tstamps;
+            }
+        }
+    }
+
+    public function can_try($mchid,$quality)
+    {
+        if($quality != Quality::Normal) {
+            return true;
+        }
+
+        if(time() >= $this->mReloadTime) {
+            $this->load();
+        }
+
+        if(array_key_exists($mchid,$this->mMchTimeings))
+        {
+            $tstamps = $this->mMchTimeings[$mchid];
+            $cursec = time();
+            foreach ($tstamps as $tstamp)
+            {
+                if($cursec < $tstamp && $cursec + try_judge::MAX_LEFT_SECS > $tstamp) {
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    }
+}

+ 4 - 5
test/TestRedis.php

@@ -13,9 +13,6 @@ require_once(BASE_HELPER_PATH . '/refill/RefillFactory.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/rlock.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/rstorage.php');
 
-use refill;
-
-
 function sub_callback($redis, $chan, $msg)
 {
     switch($chan) {
@@ -340,9 +337,11 @@ class TestRedis extends TestCase
 
     public function testMonitor()
     {
-        global $config;
-        $mch_times = $config['cancel_retry_time'];
+        include(BASE_CONFIG_PATH . CONFIG_PREFIX . '/refill.ini.php');
+        require_once(BASE_HELPER_PATH . '/refill/policy/try_judge.php');
 
+        $canceller = new refill\try_judge();
+        $canceller->can_try(1092,1);
     }
 
     ////docker-compose run phpcli php /var/www/html/phpunit-9.2.5.phar --filter "/(TestRedis::testCancel)( .*)?$/" --test-suffix TestRedis.php /var/www/html/test