stanley-king 3 éve
szülő
commit
6a99520c4c

+ 82 - 2
data/model/card_info.model.php

@@ -11,6 +11,8 @@ class card_infoModel extends Model
         parent::__construct('card_info');
     }
 
+    //导入的数据次序按照时间倒序插入的。
+    //插入的数据,必须小于
     public function import_old($info)
     {
         //'card_no,order_time,card_type,regin_no,is_transfer,cardno_state'
@@ -22,7 +24,8 @@ class card_infoModel extends Model
             $data['card_no'] = $card_no;
             $data['add_time'] = $info['order_time'];
             $data['update_time'] = $info['order_time'];
-            $data['using_times'] = 1;
+
+            $data['using_times'] = 0;
             $data['update_times'] = 1;
 
             $data['orgin_type'] = $info['card_type'];
@@ -35,16 +38,93 @@ class card_infoModel extends Model
         }
         else {
             $item['add_time'] = $info['order_time'];
-            $item['using_times'] = $item['using_times'] + 1;
             $item['update_times'] = $item['update_times'] + 1;
 
             return $this->where(['card_no' => $card_no])->update($item);
         }
     }
 
+    public function import_new($info)
+    {
+        //'card_no,order_time,card_type,regin_no,is_transfer,cardno_state'
+        $card_no = $info['card_no'];
+        if(strlen($card_no) != 11) return false;
+
+        $item = $this->getCard($card_no);
+        if(empty($item)) {
+            $data['card_no'] = $card_no;
+            $data['add_time'] = $info['order_time'];
+            $data['update_time'] = $info['order_time'];
+
+            $data['using_times'] = 0;
+            $data['update_times'] = 1;
+
+            $data['orgin_type'] = $info['card_type'];
+            $data['card_type'] = $info['card_type'];
+            $data['regin'] = $info['regin_no'];
+            $data['transfer'] = $info['is_transfer'];
+            $data['card_state'] = $info['cardno_state'];
+
+            return $this->insert($data);
+        }
+        else {
+            $data['update_time'] = $info['order_time'];
+            $item['update_times'] = $item['update_times'] + 1;
+
+            $data['orgin_type'] = $info['card_type'];
+            $data['card_type'] = $info['card_type'];
+            $data['regin'] = $info['regin_no'];
+            $data['transfer'] = $info['is_transfer'];
+            $data['card_state'] = $info['cardno_state'];
+
+            return $this->where(['card_no' => $card_no])->update($item);
+        }
+    }
+
+    public function replace_card($card_no,$card_type,$org_type,$region_no,$transfer,$status)
+    {
+        if(strlen($card_no) != 11) return false;
+        $item = $this->getCard($card_no);
+
+        if(empty($item)) {
+            $data['card_no'] = $card_no;
+            $data['add_time'] = time();
+            $data['update_time'] = time();
+
+            $data['using_times'] = 0;
+            $data['update_times'] = 1;
+
+            $data['orgin_type'] = $org_type;
+            $data['card_type'] = $card_type;
+            $data['regin'] = $region_no;
+            $data['transfer'] = $transfer;
+            $data['card_state'] = $status;
+
+            return $this->insert($data);
+        }
+        else {
+            $data['update_time'] = time();
+            $item['update_times'] = $item['update_times'] + 1;
+
+            $data['orgin_type'] = $org_type;
+            $data['card_type'] = $card_type;
+            $data['regin'] = $region_no;
+            $data['transfer'] = $transfer;
+            $data['card_state'] = $status;
+
+            return $this->where(['card_no' => $card_no])->update($item);
+        }
+    }
+
     private function getCard($card_no)
     {
         $card_no = intval($card_no);
         return $this->field('*')->where(['card_no' => $card_no])->master(true)->find();
     }
+
+    public function getCardInfo($card_no)
+    {
+        $card_no = intval($card_no);
+        return $this->field('*')->where(['card_no' => $card_no])->find();
+    }
 }

+ 65 - 12
helper/mtopcard/mtopcard.php

@@ -242,6 +242,7 @@ function oil_type($cardno)
     }
 }
 
+//[$validate,$card_type,$region_no,$isTransfer,$status,$black]
 function valid_phone($card_no)
 {
     $type_checker = function ($channel)
@@ -371,10 +372,10 @@ function valid_phone($card_no)
 
         $net_err = 0;
         $resp = http_request($url, $data, 'GET',false, [],$net_err);
-        if ($resp == false) return false;
+        if ($resp == false) return [false,UnknownCard,UnknownCard,false];
 
         $resp = json_decode($resp, true);
-        if ($resp == false) return false;
+        if ($resp == false) return [false,UnknownCard,UnknownCard,false];
 
         if ($resp['code'] == 200)
         {
@@ -384,26 +385,74 @@ function valid_phone($card_no)
             Log::record("tianyan_transfer phone:{$card_no} ispType:{$ispType} newIspType:{$newIspType}", Log::DEBUG);
 
             $card_type = $type_checker($newIspType);
-            $isTransfer = $ispType != $newIspType;
+            $org_type = $type_checker($ispType);
+            $isTransfer = $org_type != $card_type;
+
 
-            return [true,$card_type,$isTransfer];
+            return [true,$card_type,$org_type,$isTransfer];
         } else {
             Log::record("tianyan_transfer phone:{$card_no} return msg:{$resp['msg']}", Log::DEBUG);
-            return [false,UnknownCard,false];
+            return [false,UnknownCard,UnknownCard,false];
         }
     };
 
+    $time_checker = function ($update_time)
+    {
+        //90 天以内数据有效
+        $delta = time() - intval($update_time);
+        return $delta < 90 * 86400 && $delta >= 0;
+    };
+
+    $pinfo_getter = function ($card_no) use ($validate_checker,$time_checker)
+    {
+        $mod_card = Model('card_info');
+        $info = $mod_card->getCardInfo($card_no);
+
+        if(empty($info)) {
+            return [false,[]];
+        }
+        elseif($time_checker($info['update_time'])) {
+            $mod_card->where(['card_no' => $card_no])->update(['using_times' => $info['using_times'] + 1]);
+
+            $card_type = intval($info['card_type']);
+            $region_no = intval($info['regin']);
+            $isTransfer = intval($info['transfer']) == 0 ? false : true;
+            $status = intval($info['card_state']);
+            $black = intval($info['black']);
+            $validate = $validate_checker($status);
+
+            $result = [$validate,$card_type,$region_no,$isTransfer,$status,$black];
+            return [true,$result];
+        }
+        else {
+            return [false,[]];
+        }
+    };
+
+    $pinfo_updator = function ($card_no,$card_type,$org_type,$region_no,$isTransfer,$status)
+    {
+        $mod_card = Model('card_info');
+        $transfer = $isTransfer == true ? 1 : 0;
+        $mod_card->replace_card($card_no,$card_type,$org_type,$region_no,$transfer,$status);
+    };
+
     $validate = true;
+    $black = 0;
+
     $card_type = card_type($card_no,$region_no);
     $region_no = -1;
 
     if($card_type == PetroChinaCard || $card_type == SinopecCard) {
-        return [$validate,$card_type,$region_no,false,1];
+        return [$validate,$card_type,$region_no,false,1,$black];
     }
 
-    [$succ,$_card_type,$_isTransfer] = $tianyan_cardtyper($card_no);
+    [$succ,$result] = $pinfo_getter($card_no);
+    if($succ) return $result;
+
+    [$succ,$_card_type,$_org_type,$_isTransfer] = $tianyan_cardtyper($card_no);
     if($succ) {
         $card_type = $_card_type;
+        $org_type = $_org_type;
         $isTransfer = $_isTransfer;
     }
     else {
@@ -412,16 +461,20 @@ function valid_phone($card_no)
 
     $status = 6;
     $ret = $tianyan($card_no,$validate,$region_no,$status);
-    if($ret) {
-        return [$validate,$card_type,$region_no,$isTransfer,$status];
+    if($ret)
+    {
+        if($succ) $pinfo_updator($card_no,$card_type,$org_type,$region_no,$isTransfer,$status);
+        return [$validate,$card_type,$region_no,$isTransfer,$status,$black];
     }
 
     $ret = $ali($card_no,$validate,$region_no,$status);
-    if($ret) {
-        return [$validate,$card_type,$region_no,$isTransfer,$status];
+    if($ret)
+    {
+        if($succ) $pinfo_updator($card_no,$card_type,$org_type,$region_no,$isTransfer,$status);
+        return [$validate,$card_type,$region_no,$isTransfer,$status,$black];
     }
 
-    return [true,$card_type,-1,false,$status];
+    return [true,$card_type,-1,false,$status,$black];
 }
 
 function is_validate($status)

+ 7 - 1
helper/refill/order.php

@@ -24,6 +24,7 @@ class order
     private $mRegionNo;
     private $mIsTransfer;
     private $mCardState;
+    private $mBlack = 0;
     private $mIsValidate;
     private $mFirstCommit;
 
@@ -114,6 +115,10 @@ class order
         return $this->mIsTransfer;
     }
 
+    public function is_black() {
+        return $this->mBlack == 1;
+    }
+
     public static function from_parameters($params)
     {
         $order = new order();
@@ -205,13 +210,14 @@ class order
             if($card_type == 0)
             {
                 $this->mFirstCommit = true;
-                [$validate,$card_type,$regin_no,$isTransfer,$card_state] = mtopcard\valid_phone($this->mCardNo);
+                [$validate,$card_type,$regin_no,$isTransfer,$card_state,$black] = mtopcard\valid_phone($this->mCardNo);
 
                 $this->mIsValidate = $validate;
                 $this->mCardType = $card_type;
                 $this->mRegionNo = $regin_no;
                 $this->mIsTransfer = $isTransfer;
                 $this->mCardState = $card_state;
+                $this->mBlack = $black;
             }
             else {
                 $this->mFirstCommit = false;

+ 4 - 4
test/TestCardInfo.php

@@ -40,11 +40,11 @@ class TestCardInfo extends TestCase
             $i = 0;
             while (true)
             {
-                $start = $i * 1000;
+                $start = $i * 10000;
                 $items = Model()->table('refill_order')
                     ->field('card_no,order_time,card_type,regin_no,is_transfer,cardno_state')
                     ->where($cond)
-                    ->order('order_time desc')->limit("{$start},1000")->select();
+                    ->order('order_time desc')->limit("{$start},10000")->select();
                 $i++;
 
                 if(empty($items)) break;
@@ -69,8 +69,8 @@ class TestCardInfo extends TestCase
             }
         };
 
-        $start_date = strtotime('2021-12-01');
-        $end_date = strtotime('2021-12-07');
+        $start_date = strtotime('2021-11-16');
+        $end_date = strtotime('2021-12-01');
         $import_days($start_date,$end_date);
     }
 }

+ 2 - 1
test/TestCardNo.php

@@ -41,7 +41,8 @@ class TestCardNo extends TestCase
 
     public function testTianYanValidPhone()
     {
-        [$validate,$card_type,$region_no,$isTransfer] = mtopcard\valid_phone('15975503200');
+        [$validate,$card_type,$region_no,$isTransfer,$status,$black] = mtopcard\valid_phone('15975503200');
+        [$validate,$card_type,$region_no,$isTransfer,$status,$black] = mtopcard\valid_phone('13911129867');
         Log::record("validate={$validate} card_type={$card_type} region_no={$region_no}",Log::DEBUG);
     }