瀏覽代碼

Merge branch 'rcore' into mh

stanley-king 1 年之前
父節點
當前提交
419db1a369

+ 28 - 43
data/config/xyz/refill.ini.php

@@ -10107,33 +10107,33 @@ $weisanhuo_phone = ['name' => 'weisanhuo', 'store_id' => 384, 'qualitys' => '1',
 //            ['goods_id' => 9010, 'price' => 18.8, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9010, 'price' => 19.14, 'quality' => 1, 'card_type' => 'chinatelecom']
 //        ],
-//        30 => [
+        30 => [
 //            ['goods_id' => 9011, 'price' => 29.04, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9011, 'price' => 28.2, 'quality' => 1, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9011, 'price' => 28.26, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9011, 'price' => 28.71, 'quality' => 1, 'card_type' => 'chinatelecom']
-//        ],
-//        50 => [
+        ],
+        50 => [
 //            ['goods_id' => 9012, 'price' => 47.5, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9012, 'price' => 47, 'quality' => 1, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9012, 'price' => 47.1, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9012, 'price' => 47.5, 'quality' => 1, 'card_type' => 'chinatelecom']
-//        ],
+        ],
         100 => [
-            ['goods_id' => 9013, 'price' => 95.2, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9013, 'price' => 94, 'quality' => 1, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9013, 'price' => 96.5, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 9013, 'price' => 94.2, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9013, 'price' => 95, 'quality' => 1, 'card_type' => 'chinatelecom']
         ],
         200 => [
-            ['goods_id' => 9014, 'price' => 190.4, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9014, 'price' => 188, 'quality' => 1, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9014, 'price' => 193, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 9014, 'price' => 188.4, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9014, 'price' => 190, 'quality' => 1, 'card_type' => 'chinatelecom']
         ],
         300 => [
-            ['goods_id' => 9015, 'price' => 285.6, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 9015, 'price' => 289.5, 'quality' => 1, 'card_type' => 'chinamobile'],
 //            ['goods_id' => 9015, 'price' => 282, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9015, 'price' => 287.1, 'quality' => 1, 'card_type' => 'chinatelecom']
         ],
         500 => [
-            ['goods_id' => 9016, 'price' => 476, 'quality' => 1, 'card_type' => 'chinamobile'],
+            ['goods_id' => 9016, 'price' => 482.5, 'quality' => 1, 'card_type' => 'chinamobile'],
 //            ['goods_id' => 9016, 'price' => 470, 'quality' => 1, 'card_type' => 'chinaunicom'],
 //            ['goods_id' => 9016, 'price' => 478.5, 'quality' => 1, 'card_type' => 'chinatelecom']
         ]
@@ -10198,47 +10198,32 @@ $miaoxt_fs_three_phone = ['name' => 'miaoxt_fs_three', 'store_id' => 386, 'quali
     ],
     'official_sn' => true, 'refill_type' => 'api'];
 
-$yuntian_trd_phone = ['name' => 'yuntian_trd', 'store_id' => 387, 'qualitys' => '2',
+$yuntian_trd_phone = ['name' => 'yuntian_trd', 'store_id' => 387, 'qualitys' => '3',
     'amount' => [
-//        10 => [
-//            ['goods_id' => 9033, 'price' => 9.7, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9033, 'price' => 9.48, 'quality' => 1, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 9033, 'price' => 9.65, 'quality' => 1, 'card_type' => 'chinatelecom']
-//        ],
-//        20 => [
-//            ['goods_id' => 9034, 'price' => 19.4, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9034, 'price' => 18.96, 'quality' => 1, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 9034, 'price' => 19.3, 'quality' => 1, 'card_type' => 'chinatelecom']
-//        ],
-//        30 => [
-//            ['goods_id' => 9035, 'price' => 29.1, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9035, 'price' => 28.44, 'quality' => 1, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 9035, 'price' => 28.95, 'quality' => 1, 'card_type' => 'chinatelecom']
-//        ],
         50 => [
-            ['goods_id' => 9036, 'price' => 49.5, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9036, 'price' => 47.4, 'quality' => 1, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 9036, 'price' => 49.955, 'quality' => 1, 'card_type' => 'chinatelecom']
+            ['goods_id' => 9036, 'price' => 49.55, 'quality' => 3, 'card_type' => 'chinamobile'],
+//            ['goods_id' => 9036, 'price' => 47.4, 'quality' => 3, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9036, 'price' => 49.8, 'quality' => 3, 'card_type' => 'chinatelecom']
         ],
         100 => [
-            ['goods_id' => 9037, 'price' => 99, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9037, 'price' => 94.8, 'quality' => 1, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 9037, 'price' => 99.91, 'quality' => 1, 'card_type' => 'chinatelecom']
+            ['goods_id' => 9037, 'price' => 99.1, 'quality' => 3, 'card_type' => 'chinamobile'],
+//            ['goods_id' => 9037, 'price' => 94.8, 'quality' => 3, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9037, 'price' => 99.6, 'quality' => 3, 'card_type' => 'chinatelecom']
         ],
         200 => [
-            ['goods_id' => 9038, 'price' => 198, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9038, 'price' => 189.6, 'quality' => 1, 'card_type' => 'chinaunicom'],
-            ['goods_id' => 9038, 'price' => 199.82, 'quality' => 1, 'card_type' => 'chinatelecom']
+            ['goods_id' => 9038, 'price' => 198.2, 'quality' => 3, 'card_type' => 'chinamobile'],
+//            ['goods_id' => 9038, 'price' => 189.6, 'quality' => 3, 'card_type' => 'chinaunicom'],
+            ['goods_id' => 9038, 'price' => 199.2, 'quality' => 3, 'card_type' => 'chinatelecom']
         ],
 //        300 => [
-//            ['goods_id' => 9039, 'price' => 291, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9039, 'price' => 284.4, 'quality' => 1, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 9039, 'price' => 289.5, 'quality' => 1, 'card_type' => 'chinatelecom']
+//            ['goods_id' => 9039, 'price' => 291, 'quality' => 3, 'card_type' => 'chinamobile'],
+//            ['goods_id' => 9039, 'price' => 284.4, 'quality' => 3, 'card_type' => 'chinaunicom'],
+//            ['goods_id' => 9039, 'price' => 289.5, 'quality' => 3, 'card_type' => 'chinatelecom']
 //        ],
 //        500 => [
-//            ['goods_id' => 9040, 'price' => 485, 'quality' => 1, 'card_type' => 'chinamobile'],
-//            ['goods_id' => 9040, 'price' => 474, 'quality' => 1, 'card_type' => 'chinaunicom'],
-//            ['goods_id' => 9040, 'price' => 482.5, 'quality' => 1, 'card_type' => 'chinatelecom']
+//            ['goods_id' => 9040, 'price' => 485, 'quality' => 3, 'card_type' => 'chinamobile'],
+//            ['goods_id' => 9040, 'price' => 474, 'quality' => 3, 'card_type' => 'chinaunicom'],
+//            ['goods_id' => 9040, 'price' => 482.5, 'quality' => 3, 'card_type' => 'chinatelecom']
 //        ]
     ],
     'official_sn' => true, 'refill_type' => 'api'];

+ 8 - 1
helper/refill/RefillBase.php

@@ -497,9 +497,16 @@ class RefillBase
                         continue;
                     }
                 }
-                elseif(!PolicyUtil::mixed_quality($org_quality)) {
+                elseif(PolicyUtil::mixed_quality($org_quality))
+                {
+                    if(!$order->can_over_price()) {
+                        continue;
+                    }
+                }
+                else {
                     continue;
                 }
+
             }
 
             $mod_refill = Model('refill_order');

+ 52 - 0
helper/refill/order.php

@@ -38,12 +38,17 @@ class order
     private $mThirdExtes = [];  //三方扩展参数
     private $mChannelFilter = null;
 
+    private $mFirstQuality;
+    private $mOverPriceFlag;
+
     public function __construct()
     {
         $this->mProductCode = '';
         $this->mThirdPorductType = 0;
         $this->mMatchRatio = false;
         $this->mMchCardTypes = [];
+        $this->mFirstQuality = 0;
+        $this->mOverPriceFlag = 0;
     }
 
     public function mchid()
@@ -111,6 +116,53 @@ class order
         return $this->mCurQuality;
     }
 
+    public function set_first_quality($quality)
+    {
+        $this->mFirstQuality = $quality;
+    }
+    public function set_can_overprice($match_ratio, $can_last)
+    {
+        if($match_ratio) //能匹配成功率
+        {
+            if($can_last) {
+                $value = 11;//能匹配成功率,能匹配利润率 -> 不要溢价补充
+            }
+            else {
+                $value = 12; //能匹配成功率,不能匹配利润率 -> 不要溢价补充
+            }
+        }
+        elseif($can_last) {
+            $value = 1;//不能匹配成功率,但能匹配利润率 -> 需要溢价补充
+        }
+        else {
+            $value = 2;//不能匹配成功率,也不能匹配利润率 -> 不需要溢价补充
+        }
+
+        $this->mOverPriceFlag = $value;
+    }
+
+    public function can_over_price()
+    {
+        //尚未设置初始值,不可溢价
+        if($this->mFirstQuality === 0) {
+            return false;
+        }
+
+        if($this->mFirstQuality === $this->mCurQuality) {
+            return false;
+        }
+        else
+        {
+            $value = $this->mOverPriceFlag;
+            if ($value === 1 or $value === 0) {
+                return true;
+            }
+            else {
+                return false;
+            }
+        }
+    }
+
     public function set_quality($org_quality, $quality)
     {
         $this->mOriginQuality = $org_quality;

+ 0 - 1
helper/refill/policy/chctlex.php

@@ -151,7 +151,6 @@ class chctlex
                     $inPrice = $item->price();
                     if ($max_inprice !== false && $inPrice > $max_inprice) {
                         Log::record("skip channel=$name",Log::DEBUG);
-                        continue;
                     } else {
                         $ctls[] = $item;
                     }

+ 14 - 44
helper/refill/policy/quaility.php

@@ -158,6 +158,7 @@ class Quality
 
         Log::record("oil_quality find qualities = " . implode(',', $qualities), Log::DEBUG);
         $qualities = $this->calc_oil_quality($qualities,$times,$used_time,$caller);
+        $order->set_can_overprice(true, false);
 
         return [$org,$qualities];
     }
@@ -223,6 +224,10 @@ class Quality
         $qualities = $this->qualities($org_quality);
         $max_times = $this->max_times($mchid, $org_quality, $qualities);
 
+        if(!empty($qualities)) {
+            $order->set_first_quality($qualities[0]);
+        }
+
         //有成功率控制,需要用大数据计算的
         if ($this->mRatioCtl->exist($mchid)) {
             Log::record("ratio_phone_quality exist=true",Log::DEBUG);
@@ -235,13 +240,12 @@ class Quality
         }
     }
 
-    private function time_checker(order $order, $qualities, $match_ratio)
+    private function time_checker(order $order, $qualities)
     {
         $mchid = $order->mchid();
         $commit_times  = $order->commit_times();
         $used_time   = $order->elapse_secs();
         $ch_filter   = $order->filter();
-        $cur_quality = $order->cur_quality();
 
         //用于计算
         $calc_steps = function ($mchid,$qualities)
@@ -269,40 +273,9 @@ class Quality
             return $steps;
         };
 
-        $calc_usable_qualities = function ($qualities, $steps, $match_ratio,$cur_quality) use ($commit_times, $used_time, $ch_filter)
+        $calc_usable_qualities = function ($qualities, $steps) use ($commit_times, $used_time, $ch_filter)
         {
             $usable = [];
-
-            if($match_ratio)
-            {
-                if(!empty($steps))
-                {
-                    [$max_times,$max_secs,$qua_times] = end($steps);
-                    if ($max_times > $commit_times and $max_secs > $used_time + 60)
-                    {
-                        if($cur_quality === 0) {
-                            return $qualities;
-                        }
-                        else
-                        {
-                            $start = false;
-                            foreach ($qualities as $quality)
-                            {
-                                if($quality == $cur_quality) {
-                                    $start = true;
-                                }
-
-                                if($start) {
-                                    $usable[] = $quality;
-                                }
-                            }
-                        }
-                    }
-                }
-
-                return $usable;
-            }
-
             foreach ($qualities as $quality)
             {
                 if(!array_key_exists($quality,$steps)) {
@@ -331,7 +304,7 @@ class Quality
         };
 
         $steps = $calc_steps($mchid,$qualities);
-        $matches = $calc_usable_qualities($qualities, $steps, $match_ratio, $cur_quality);
+        $matches = $calc_usable_qualities($qualities, $steps);
 
         return $matches;
     }
@@ -376,7 +349,7 @@ class Quality
         $qualities_log = function ($tag,$qualities)
         {
             $str = implode(',',$qualities);
-            Log::record("{$tag}={$str}", Log::DEBUG);
+            Log::record("$tag=$str", Log::DEBUG);
         };
 
         if($used_times > 0)
@@ -385,7 +358,9 @@ class Quality
             [$match_ratio, $can_last] = $this->mRatioCtl->ratio_match($mchid, $org_quality, $card_type, $spec, $all_qualities);
             Log::record("ratio_phone_quality mchid=$mchid must calc next quality match_ratio=$match_ratio can_last=$can_last", Log::DEBUG);
 
-            $pre_qualities = $this->time_checker($order, $all_qualities, $match_ratio);
+            $order->set_can_overprice($match_ratio,$can_last);
+
+            $pre_qualities = $this->time_checker($order, $all_qualities);
             $qualities_log("ratio_phone_quality $mchid-$card_type-$spec usable_qualities",$pre_qualities);
 
             if (!$timeing_checker($pre_qualities)) {
@@ -395,18 +370,13 @@ class Quality
 
             $qualities_log("ratio_phone_quality $mchid-$card_type-$spec after timeing_checker qualities", $pre_qualities);
             $cur_qualities = $pre_qualities;
-
-            if (!$can_last) {
-                $all = $this->qualities($org_quality);
-                $cur_qualities = PolicyUtil::mixed_remove_last($org_quality, $cur_qualities, $all);
-            }
         }
         else {
             $match_ratio = true;
             $cur_qualities = $all_qualities;
         }
 
-        return [$cur_qualities,$match_ratio];
+        return [$cur_qualities, $match_ratio];
     }
 
     private function max_times($mchid,$quality,$qualities)
@@ -450,7 +420,7 @@ class Quality
 
         if($used_times > 0)
         {
-            $qualities = $this->time_checker($order, $qualities, false);
+            $qualities = $this->time_checker($order, $qualities);
             Log::record("calc_phone_quality times_checker result = " . implode(',', $qualities), Log::DEBUG);
 
             if(!$timeing_checker($qualities)) {

+ 2 - 5
helper/refill/policy/xyz/policy.php

@@ -369,10 +369,7 @@ class policy extends ProviderManager implements IPolicy
         $mchid = $order->mchid();
         $spec  = $order->spec();
         $card_type = $order->card_type();
-        $org_quality = $order->org_quality();
         $cur_quality = $order->cur_quality();
-        $commit_times = $order->commit_times();
-        $elapse_secs = $order->elapse_secs();
         $pcode = $order->pcode();
         $regin_no = $order->region_no();
 
@@ -413,12 +410,12 @@ class policy extends ProviderManager implements IPolicy
 
             $price = $this->mPrices->price($mchid,$card_type,$spec,$quality,$pcode);
             if($price === false) {
-                Log::record("{$mchid} 没有协商 quality = $quality 价格",Log::DEBUG);
+                Log::record("$mchid 没有协商 quality = $quality 价格",Log::DEBUG);
                 continue;
             }
 
             $max_inprice = $this->mPrices->max_inprice($mchid, $card_type, $spec, $quality, $pcode);
-            Log::record("quality = {$quality} max_price={$max_inprice}",Log::DEBUG);
+            Log::record("quality = $quality max_price=$max_inprice",Log::DEBUG);
 
             $providers = parent::get_providers($mchid, $spec, $card_type, $quality, $regin_no);
             if(empty($providers)) {

+ 6 - 0
test/mh/TestRefill.php

@@ -214,4 +214,10 @@ class TestRefill extends TestCase
         $microtime = intval(microtime(true) * 1000);
     }
 
+    public function testLast()
+    {
+        $data = [0, 1, 2, 3, 4];
+        $val = $data[-1];
+    }
+
 }