stanley-king 3 年之前
父節點
當前提交
c54a92d3c4

+ 2 - 2
data/config/dev/base.ini.php

@@ -46,8 +46,8 @@ $config['gip'] 		= 0;
 $config['dbdriver'] = 'mysqli';
 $config['tablepre']	= 'lrlz_';
 
-define('SSH_TUNEL_PROD','local');
-//define('SSH_TUNEL_PROD','xyz');
+//define('SSH_TUNEL_PROD','local');
+define('SSH_TUNEL_PROD','xyz');
 //define('SSH_TUNEL_PROD','lingzh');
 
 if(SSH_TUNEL_PROD ==='local') {

+ 1 - 0
helper/refill/LZRefillFactory.php

@@ -10,6 +10,7 @@ require_once(BASE_HELPER_PATH . '/refill/policy/lingzh/policy.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');
+require_once(BASE_HELPER_PATH . '/refill/policy/mchoilctl.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/quaility.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/merchant_price.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/mgroup.php');

+ 1 - 0
helper/refill/XYZRefillFactory.php

@@ -12,6 +12,7 @@ require_once(BASE_HELPER_PATH . '/refill/policy/xyz/policy.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');
+require_once(BASE_HELPER_PATH . '/refill/policy/mchoilctl.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/quaility.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/merchant_price.php');
 require_once(BASE_HELPER_PATH . '/refill/policy/rlock.php');

+ 56 - 0
helper/refill/policy/mchoilctl.php

@@ -0,0 +1,56 @@
+<?php
+
+
+namespace refill;
+
+class mchoilctl
+{
+    private $mMchidMapCtls;
+    public function __construct()
+    {
+        $this->load();
+    }
+
+    public function load()
+    {
+        $this->update_ctl();
+    }
+
+    private function update_ctl()
+    {
+        $this->mMchidMapCtls = [];
+        $mod_merchant = Model('merchant');
+        $merchants = $mod_merchant->getMerchantList(['merchant.mchid' => ['gt', 0]]);
+
+        foreach ($merchants as $item) {
+            $mchid = $item['mchid'];
+            $quality = intval($item['oil_quality']);
+            $time_out = $item['time_out'];
+
+            if($quality == Quality::SlowNormal || $quality == Quality::ThirdNormal || $quality == Quality::DefSuccess) {
+
+            }
+            elseif ($quality >= Quality::LowestQuality && $quality <= Quality::HighestQuality) {
+
+            }
+            else {
+                $quality = Quality::Normal;
+            }
+
+            $this->mMchidMapCtls[$mchid] = ['quality' => $quality,'time_out' => $time_out];
+        }
+    }
+
+    public function getCtls($mchid)
+    {
+        if(array_key_exists($mchid,$this->mMchidMapCtls)) {
+            $quality = $this->mMchidMapCtls[$mchid]['quality'];
+            $time_out = $this->mMchidMapCtls[$mchid]['time_out'];
+
+            return [true,$quality,$time_out];
+        }
+        else {
+            return [false,0,0];
+        }
+    }
+}

+ 51 - 7
helper/refill/policy/quaility.php

@@ -23,18 +23,21 @@ class Quality
     const DefSuccess = 13;   // 4 -> 3 -> 1 -> 2
     const NormalQuick = 14;
 
-    protected $mMchctl;
+    protected $mMchPhonectl;
+    protected $mMchoilctl;
     protected $mSpeeds;
     protected $mQualities;
 
     public function __construct()
     {
-        $this->mMchctl = new mchctl();
+        $this->mMchPhonectl = new mchctl();
+        $this->mMchoilctl = new mchoilctl();
     }
 
     public function load()
     {
-        $this->mMchctl->load();
+        $this->mMchPhonectl->load();
+        $this->mMchoilctl->load();
     }
 
     public function find_quality($mchid,$card_type,$quality,$times,$used_time): array
@@ -43,21 +46,62 @@ class Quality
             return $this->mobile_quality($mchid, $quality, $times, $used_time);
         }
         elseif($card_type == mtopcard\PetroChinaCard || $card_type == mtopcard\SinopecCard) {
-            return [1, [1]];
+            return $this->oil_quality($mchid, $quality, $times, $used_time);
         }
         else {
             return [0, []];
         }
     }
 
+    private function oil_quality($mchid,$quality,$times,$used_time): array
+    {
+        if($quality == 0)
+        {
+            [$success,$setting_quality,$time_out] = $this->mMchoilctl->getCtls($mchid);
+            if($success)
+            {
+                if(array_key_exists($setting_quality,$this->mQualities)) {
+                    $org = $setting_quality;
+                    $qualities = $this->mQualities[$setting_quality];
+                }
+                else {
+                    $org = $setting_quality;
+                    $qualities = [$setting_quality];
+                }
+            }
+            else {
+                $org = self::ThirdNormal;
+                $qualities = $this->mQualities[$org];
+                $time_out = $this->mSpeeds[$org]['retry_timeout'];
+            }
+        }
+        elseif(array_key_exists($quality,$this->mQualities)) {
+            $org = $quality;
+            $qualities = $this->mQualities[$quality];
+            [$success, $setting_quality, $time_out] = $this->mMchPhonectl->getCtls($mchid);
+        }
+        else {
+            Log::record("find_quality: cannot find any quality",Log::DEBUG);
+            return [0,[]];
+        }
+
+        if($time_out <= 0) {
+            $time_out = $this->mSpeeds[$org]['retry_timeout'];
+        }
+
+        $max_times = $this->mSpeeds[$org]['retry_times'];
+        $qualities = $this->calc_quality($qualities,$times,$used_time,$time_out,$max_times);
+
+        return [$org,$qualities];
+    }
 
 
     private function mobile_quality($mchid,$quality,$times,$used_time): array
     {
         if($quality == 0)
         {
-            [$sucdess,$setting_quality,$time_out] = $this->mMchctl->getCtls($mchid);
-            if($sucdess)
+            [$success,$setting_quality,$time_out] = $this->mMchPhonectl->getCtls($mchid);
+            if($success)
             {
                 if(array_key_exists($setting_quality,$this->mQualities)) {
                     $org = $setting_quality;
@@ -77,7 +121,7 @@ class Quality
         elseif(array_key_exists($quality,$this->mQualities)) {
             $org = $quality;
             $qualities = $this->mQualities[$quality];
-            [$sucdess, $setting_quality, $time_out] = $this->mMchctl->getCtls($mchid);
+            [$success, $setting_quality, $time_out] = $this->mMchPhonectl->getCtls($mchid);
         }
         else {
             Log::record("find_quality: cannot find any quality",Log::DEBUG);