stanley-king vor 4 Jahren
Ursprung
Commit
0a1880b927

+ 1 - 1
conf/nginx/nginx-debug.conf

@@ -29,7 +29,7 @@ http
     {
     	listen       80;
         set  $folder_name /var/www/html;
-        server_name www.xyzshops.cn;
+        server_name 192.168.1.200;
         root $folder_name;
         index index.html index.php; 
     	client_max_body_size 100m;

+ 9 - 6
data/config/dev/vgoods.ini.php

@@ -2,14 +2,17 @@
 declare(strict_types=0);
 
 
-$vorder_handlers = [];
+$handlers = [];
 #type:虚拟商品类型,order_method下午单后的自动操作函数,
 #paid_oper 支付完成后的操作类型,auto 表示自动,manual 表示人工点击,paid_method表示点击调用的方法
 #input_params 表示输入必须带的参数。
 
-$vorder_handlers[] =['6217' => ['type' => 'member_card', 'order_method' => '',                 'paid_oper' => 'auto',   'paid_method' => 'OnMCardOrderSuccess', 'input_params' => []],
-                     '6218' => ['type' => 'oil_card',    'order_method' => 'OnAssignOilCard',  'paid_oper' => 'manual', 'paid_method' => 'OnOilOrderSuccess',   'input_params' => ['card_id']],
-                     '6219' => ['type' => 'phone_card',  'order_method' => 'OnAssignPhoneCard','paid_oper' => 'manual', 'paid_method' => 'OnPhoneOrderSuccess', 'input_params' => ['card_id']],
-                    ];
+$handlers[6217] = ['type' => 'member_card',
+                    'order_method' => '',
+                    'paid_oper' => 'auto',   'paid_method' => 'OnMCardPaidSuccess',
+                    'input_params' => [],'additional' => ['card_type' => 'year']];
 
-$config['vgoods_handlers'] = $vorder_handlers;
+$handlers[6218] = ['type' => 'oil_card',    'order_method' => 'OnAssignOilCard',  'paid_oper' => 'manual', 'paid_method' => 'OnOilPaidSuccess',   'input_params' => ['card_id']];
+$handlers[6219] = ['type' => 'phone_card',  'order_method' => 'OnAssignPhoneCard','paid_oper' => 'manual', 'paid_method' => 'OnPhonePaidSuccess', 'input_params' => ['card_id']];
+
+$config['vgoods_handlers'] = $handlers;

+ 64 - 17
data/logic/queue.logic.php

@@ -10,23 +10,25 @@
  */
 defined('InShopNC') or exit('Access Invalid!');
 
-require_once (BASE_ROOT_PATH . '/helper/push_sender.php');
-require_once (BASE_ROOT_PATH . '/helper/sms_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/kdn_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/statistics_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/member_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/fcode/generator.php');
-require_once (BASE_ROOT_PATH . '/helper/memsg/message_sender.php');
-require_once (BASE_ROOT_PATH . '/helper/login_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/fcode/mfcode.php');
-require_once (BASE_ROOT_PATH . '/helper/fcode/operator.php');
-require_once (BASE_ROOT_PATH . '/helper/user_session/fcode.php');
-require_once (BASE_ROOT_PATH . '/helper/stat_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/message/publisher.php');
-require_once (BASE_ROOT_PATH . '/helper/search/tcp_client.php');
-require_once (BASE_ROOT_PATH . '/helper/ugc_helper.php');
-require_once (BASE_ROOT_PATH . '/helper/room_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/push_sender.php');
+require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/kdn_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/statistics_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/member_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/account_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/fcode/generator.php');
+require_once(BASE_ROOT_PATH . '/helper/memsg/message_sender.php');
+require_once(BASE_ROOT_PATH . '/helper/login_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/fcode/mfcode.php');
+require_once(BASE_ROOT_PATH . '/helper/fcode/operator.php');
+require_once(BASE_ROOT_PATH . '/helper/user_session/fcode.php');
+require_once(BASE_ROOT_PATH . '/helper/stat_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/message/publisher.php');
+require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
+require_once(BASE_ROOT_PATH . '/helper/ugc_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/room_helper.php');
+require_once(BASE_HELPER_PATH . '/mcard/mcard.php');
+
 
 class queueLogic
 {
@@ -884,6 +886,51 @@ class queueLogic
             return callback(true);
         }
     }
+    public function onVrOrderPaidSuccess($params)
+    {
+        $order_sn = $params['order_sn'];
+        $model_order = Model('vr_order');
+        $order = $model_order->getOrderInfo(['order_sn' => $order_sn]);
+
+    }
+    //支付成功完成会员卡操作.
+    public function OnMCardPaidSuccess($params)
+    {
+        $order_sn = $params['order_sn'];
+        $model_order = Model('vr_order');
+        $order = $model_order->getOrderInfo(['order_sn' => $order_sn]);
+        if($order['order_state'] != ORDER_STATE_PAY) {
+            Log::record("OnMCardOrderSuccess order_sn:{$order_sn} 状态错误",Log::ERR);
+            return callback(false);
+        }
+        $extra_info = json_decode($order['extra_info'],true);
+        $card_type = $extra_info['additional']['card_type'];
+
+        if(empty($card_type)) {
+            Log::record("OnMCardOrderSuccess order_sn:{$order_sn} 失败",Log::ERR);
+            return callback(false);
+        }
+        else
+        {
+            $params = mcard\getConfig($card_type);
+            if(empty($params)) {
+                Log::record("OnMCardOrderSuccess order_sn:{$order_sn} card_type = {$card_type} 失败",Log::ERR);
+                return callback(false);
+            }
+            $member_id = intval($order['member_id']);
+
+            $usercards = new mcard\user_mcards($member_id);
+            $ret = $usercards->addCard($params);
+            if($ret) {
+                $vrLogic = Logic('vr_order');
+                $vrLogic->changeOrderStateSuccess($order['order_id']);
+                return callback(false);
+            } else {
+                Log::record("OnMCardOrderSuccess order_sn:{$order_sn} addCard 失败",Log::ERR);
+                return callback(false);
+            }
+        }
+    }
 
     public function OnAssignOilCard($params)
     {

+ 43 - 0
data/model/card_key.model.php

@@ -0,0 +1,43 @@
+<?php
+declare(strict_types=0);
+
+defined('InShopNC') or exit('Access Invalid!');
+
+use const mtopcard\UnusedCard;
+use const mtopcard\ReserveCard;
+use const mtopcard\AssignedCard;
+
+class card_keyModel extends Model
+{
+    public function __construct()
+    {
+        parent::__construct('card_key');
+    }
+
+    public function addCard($params)
+    {
+        return $this->insert($params);
+    }
+
+    public function getUsable($card_type, $amount)
+    {
+        return $this->where(['card_state' => UnusedCard, 'card_type' => $card_type, 'amount' => $amount])->find();
+    }
+
+    public function reserve($card_id)
+    {
+        return $this->where(['card_id' => $card_id, 'card_state' => UnusedCard])->update(['card_state' => ReserveCard]);
+    }
+
+    public function assign($card_id, $oper)
+    {
+        return $this->where(['card_id' => $card_id, 'card_state' => ReserveCard])
+                    ->update(['card_state' => AssignedCard, 'allocator' => $oper,'assigned_time' => time()]);
+    }
+
+    public function reuse($card_id)
+    {
+        //只有已经预留了的卡才可以重新回收使用。
+        return $this->where(['card_id' => $card_id, 'card_state' => ReserveCard])->update(['card_state' => UnusedCard]);
+    }
+}

+ 11 - 1
helper/mcard/mcard.php

@@ -18,4 +18,14 @@ require_once(BASE_HELPER_PATH . '/mcard/card.php');
 require_once(BASE_HELPER_PATH . '/mcard/user_mcards.php');
 require_once(BASE_HELPER_PATH . '/mcard/amount_card.php');
 require_once(BASE_HELPER_PATH . '/mcard/amount_period_card.php');
-require_once(BASE_HELPER_PATH . '/mcard/period_card.php');
+require_once(BASE_HELPER_PATH . '/mcard/period_card.php');
+
+function getConfig($type)
+{
+    if($type == 'year') {
+        return ['card_type' => BothType, 'total_amount' => 10000, 'discount' => 0.05, 'package_type' => 'year'];
+    }
+    else {
+        return [];
+    }
+}

+ 53 - 0
helper/mtopcard/CardPaper.php

@@ -0,0 +1,53 @@
+<?php
+declare(strict_types=1);
+
+
+namespace mtopcard;
+
+
+#cardno 和 key 配套管理对象。
+class CardPaper
+{
+    private $mParams;
+    public function __construct($params)
+    {
+        $this->mParams = $params;
+    }
+    public function card_id()
+    {
+        return intval($this->mParams['card_id']);
+    }
+    public function member_id()
+    {
+        return intval($this->mParams['member_id']);
+    }
+    public function card_no()
+    {
+        return trim($this->mParams['card_no']);
+    }
+    public function card_type()
+    {
+        return intval($this->mParams['card_type']);
+    }
+    public function card_key()
+    {
+        return trim($this->mParams['card_key']);
+    }
+    public function card_amount()
+    {
+        return intval($this->mParams['card_amount']);
+    }
+
+    public function car_state()
+    {
+        return intval($this->mParams['card_state']);
+    }
+    public function receive_card_no()
+    {
+        return trim($this->mParams['receive_card_no']);
+    }
+    public function receive_card_type()
+    {
+        return intval($this->mParams['receive_card_type']);
+    }
+}

+ 73 - 0
helper/mtopcard/cards_helper.php

@@ -0,0 +1,73 @@
+<?php declare(strict_types=1);
+
+
+namespace mtopcard;
+
+use trans_wapper;
+use Exception;
+use Log;
+
+
+class cards_helper
+{
+    static public function reserve($card_type, $amount, $userid, $user_card_no, $user_card_type)
+    {
+        try {
+            $model = Model('card_key');
+            $trans = new trans_wapper($model, __METHOD__);
+            $info = $model->getUsable($card_type, $amount);
+            if (empty($info)) {
+                Log::record("cards_helper::reserve 找不到可用的卡了", Log::ERR);
+                return false;
+            }
+            $card = new CardPaper($info);
+            $card_id = $card->card_id();
+            $model->reserve($card_id);
+
+            $ret = $model->where(['card_id' => $card_id])
+                         ->update(['member_id' => $userid,
+                                   'receive_card_no' => $user_card_no,
+                                   'receive_card_type' => $user_card_type,
+                                   'reserved_time' => time()]);
+            $trans->commit();
+
+            return $ret;
+        } catch (Exception $e) {
+            $trans->rollback();
+            Log::record("cards_helper::reserve exception {$e}", Log::ERR);
+            return false;
+        }
+    }
+
+    static public function assign($card_id, $oper_name)
+    {
+        try {
+            $model = Model('card_key');
+            $trans = new trans_wapper($model, __METHOD__);
+            $ret = $model->assign($card_id, $oper_name);
+            $trans->commit();
+
+            return $ret;
+        } catch (Exception $e) {
+            $trans->rollback();
+            Log::record("cards_helper::assign exception {$e}", Log::ERR);
+            return false;
+        }
+    }
+
+    static public function reuse($card_id)
+    {
+        try {
+            $model = Model('card_key');
+            $trans = new trans_wapper($model, __METHOD__);
+            $ret = $model->reuse($card_id);
+            $trans->commit();
+
+            return $ret;
+        } catch (Exception $e) {
+            $trans->rollback();
+            Log::record("cards_helper::reuse exception {$e}", Log::ERR);
+            return false;
+        }
+    }
+}

+ 12 - 3
helper/mtopcard/mtopcard.php

@@ -2,7 +2,7 @@
 
 namespace mtopcard;
 
-#卡的类型
+#用户卡的类型
 const PetroChinaCard = 1;   //中石油
 const SinopecCard = 2;      //中石化
 const PhoneCard = 3;        //手机卡
@@ -15,6 +15,14 @@ const CardDeled  = 2;
 const UserMaxCards = 10;
 const CardMaxUsers = 5;
 
+#card_key参数设置
+const UnusedCard   = 0;
+const ReserveCard  = 1;
+const AssignedCard = 2;
+
+#充值卡类型
+const OilCardPaper   = 1;
+const PhoneCardPaper = 2;
 
 function month_stamp() : int {
     $date = getdate();
@@ -23,6 +31,7 @@ function month_stamp() : int {
     return $stamp;
 }
 
-
 require_once(BASE_HELPER_PATH . '/mtopcard/topcard.php');
-require_once(BASE_HELPER_PATH . '/mtopcard/user_topcards.php');
+require_once(BASE_HELPER_PATH . '/mtopcard/user_topcards.php');
+require_once(BASE_HELPER_PATH . '/mtopcard/CardPaper.php');
+require_once(BASE_HELPER_PATH . '/mtopcard/cards_helper.php');

+ 3 - 0
helper/pay_helper.php

@@ -343,6 +343,9 @@ class pay_helper
             }
 
             $result = $this->mPaymentLogic->updateVrOrder($paysn, $payment, $result['data'], $trade_no);
+            if($result['state']) {
+                QueueClient::push('onVrOrderPaidSuccess', ['order_sn' => $result['order_sn']]);
+            }
         }
 
         return $result;

+ 98 - 72
mobile/control/member_buy.php

@@ -34,7 +34,8 @@ class member_buyControl extends mbMemberControl
     public function calc_cashOp()
     {
         $cart_ids = explode(',', urldecode($_POST['cart_id']));
-        if (empty($cart_ids)) {
+        if (empty($cart_ids))
+        {
             return self::outerr(errcode::ErrParamter);
         }
 
@@ -42,16 +43,22 @@ class member_buyControl extends mbMemberControl
         $id_num = $this->pay_goods($cart_ids);
         //得到购买数据
         $result = $logic_buy->buyStep1($id_num, $_POST['ifcart'], $_SESSION['member_id'], $_SESSION['store_id']);
-        if (!$result['state']) {
+        if (!$result['state'])
+        {
             return self::outerr(errcode::ErrOrder, $result['msg']);
-        } else {
+        }
+        else
+        {
             $result = $result['data'];
         }
 
         $buy_helper = new buy_first($result, $this->price_calcer());
-        if ($buy_helper->check_fcode($error) == false) {
+        if ($buy_helper->check_fcode($error) == false)
+        {
             return self::outerr(errcode::ErrPayment, $error);
-        } else {
+        }
+        else
+        {
             $result = $buy_helper->format();
             $cash_amount = $result['payinfo']['pay_car_pred'];
             $total_amonut = $result['payinfo']['pay_car_nopred'];
@@ -63,7 +70,8 @@ class member_buyControl extends mbMemberControl
     public function step_firstOp()
     {
         $cart_ids = explode(',', urldecode($_POST['cart_id']));
-        if (empty($cart_ids)) {
+        if (empty($cart_ids))
+        {
             return self::outerr(errcode::ErrParamter);
         }
 
@@ -73,7 +81,8 @@ class member_buyControl extends mbMemberControl
             $id_num = $this->pay_goods($cart_ids);
             $result = $logic_buy->buyStep1($id_num, $_POST['ifcart'], session_helper::memberid(), $_SESSION['store_id']);
             $fVirual = false;
-        } else {
+        }
+        else {
             #虚拟商品
             $logic_buy = Logic('buy_virtual');
             $result = $logic_buy->getBuyStep2Data($virtual_goods['goods_id'], $virtual_goods['num'], session_helper::memberid());
@@ -82,19 +91,22 @@ class member_buyControl extends mbMemberControl
 
         if (!$result['state']) {
             return self::outerr(errcode::ErrOrder, $result['msg']);
-        } else {
+        }
+        else {
             $result = $result['data'];
         }
 
         if ($fVirual) {
             $buy_helper = new buyv_first($result, $this->price_calcer());
-        } else {
+        }
+        else {
             $buy_helper = new buy_first($result, $this->price_calcer());
         }
 
         if ($buy_helper->check_fcode($error) == false) {
             return self::outerr(errcode::ErrPayment, $error);
-        } else {
+        }
+        else {
             $result = $buy_helper->format();
             return self::outsuccess($result);
         }
@@ -106,9 +118,12 @@ class member_buyControl extends mbMemberControl
 
         //存放所购商品ID和数量组成的键值对
         $buy_items = [];
-        if (is_array($cart_id)) {
-            foreach ($cart_id as $value) {
-                if (preg_match_all('/^(\d{1,10})\|(\d{1,6})$/', $value, $match)) {
+        if (is_array($cart_id))
+        {
+            foreach ($cart_id as $value)
+            {
+                if (preg_match_all('/^(\d{1,10})\|(\d{1,6})$/', $value, $match))
+                {
                     if (intval($match[2][0]) > 0) {
                         $buy_items[$match[1][0]] = $match[2][0];
                     }
@@ -160,16 +175,19 @@ class member_buyControl extends mbMemberControl
         $result = $logic_buy->buyStep2($param, $_SESSION['member_id'], $_SESSION['member_name'], $_SESSION['member_email']);
         if (!$result['state']) {
             return self::outerr(errcode::ErrOrder, $result['msg']);
-        } else {
+        }
+        else
+        {
             $pay_sn = $result['data']['pay_sn'];
             $payment = $_POST['payment'];
 
             $payer = new pay_helper($pay_sn);
             $out_put = $payer->pay($payment, $err);
 
-            if ($out_put == false) {
+            if ($out_put == false)  {
                 return self::outerr($err['code'], $err['msg']);
-            } else {
+            }
+            else {
                 $out_put['payment'] = $payment;
                 $out_put['pay_sn'] = $pay_sn;
 
@@ -178,13 +196,6 @@ class member_buyControl extends mbMemberControl
         }
     }
 
-    private function check_extra($input, $order_info)
-    {
-        global $config;
-        $order_type = $input[''];
-
-    }
-
     public function step_vsecondOp()
     {
         $cart_ids = explode(',', urldecode($_POST['cart_id']));
@@ -200,13 +211,19 @@ class member_buyControl extends mbMemberControl
         $input['buyer_msg'] = $_POST['buyer_msg'] ?? '';
         $city_id = intval($_POST['city_id']);
 
-        [$fExtra, $extra_info,$order_method] = $this->check_extra($input['goods_id'], $_POST);
+        [$fExtra, $extra_info, $order_method] = $this->extra_info($input['goods_id'], $_POST);
+        if (!$fExtra) {
+            Log::record("step_vsecond error", Log::ERR);
+            return self::outerr(errcode::ErrInputParam, '缺少虚拟商品,额外指定参数.');
+        }
 
         $input['order_from'] = 2;
         $result = $logic_buy_virtual->buyStep3($input, session_helper::memberid());
         if (!$result['state']) {
             return self::outerr(errcode::ErrOrder, $result['msg']);
-        } else {
+        }
+        else
+        {
             $payment = $_POST['payment'];
             $order_sn = $result['data']['order_sn'];
 
@@ -215,19 +232,17 @@ class member_buyControl extends mbMemberControl
 
             if ($out_put == false) {
                 return self::outerr($err['code'], $err['msg']);
-            } else {
+            }
+            else
+            {
                 $out_put['payment'] = $payment;
                 $out_put['pay_sn'] = $order_sn;
 
-                if($fExtra)
-                {
-                    if(!empty($extra_info)) {
-                        Model('vr_order')->editOrder(['extra_info' => json_encode($extra_info,JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)],
-                            ['order_sn' => $order_sn]);
-                    }
-                    if(!empty($order_method)) {
-                        QueueClient::push($order_method,['order_sn' => $order_sn]);
-                    }
+                if (!empty($extra_info)) {
+                    Model('vr_order')->editOrder(['extra_info' => json_encode($extra_info, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)], ['order_sn' => $order_sn]);
+                }
+                if (!empty($order_method)) {
+                    QueueClient::push($order_method, ['order_sn' => $order_sn]);
                 }
 
                 return self::outsuccess($out_put);
@@ -239,19 +254,30 @@ class member_buyControl extends mbMemberControl
     {
         global $config;
         $handlers = $config['vgoods_handlers'];
-        if (array_key_exists($goods_id, $handlers)) {
+        if (array_key_exists($goods_id, $handlers))
+        {
             $handler = $handlers[$goods_id];
 
-            $extra_params = [];
+            $extra = [];
             $types = $handler['input_params'];
-            foreach ($types as $item) {
+            foreach ($types as $item)
+            {
                 if (isset($input[$item])) {
-                    $extra_params[$item] = $input[$item];
+                    $extra['input'][$item] = $input[$item];
+                }
+                else {
+                    Log::record("{$goods_id}号商品,在提交订单中,缺少{$item}字段.", Log::ERR);
+                    return [false, [], ''];
                 }
             }
-            return [true, $extra_params, $handler['order_method']];
+
+            if (!empty($handler['additional'])) {
+                $extra['additional'] = $handler['additional'];
+            }
+
+            return [true, $extra, $handler['order_method']];
         }
-        return [false, [], ''];
+        return [true, [], ''];
     }
 
     public function pay_confirmOp()
@@ -265,18 +291,18 @@ class member_buyControl extends mbMemberControl
 
         if ($paied == false) {
             return self::outerr($err['code'], $err['msg']);
-        } else {
+        }
+        else
+        {
             session_helper::add_order();
             if ($fcode_state == 1) {
-                return self::outsuccess(['special_list' => null,
-                    'summary' => null,
-                    'groupbuy' => null,
-                    'limitime' => null,
-                    'bundling' => null,
-                    'mobile_page' => mobile_page(1)]);
-            } else {
+                return self::outsuccess(['special_list' => null, 'summary' => null, 'groupbuy' => null, 'limitime' => null, 'bundling' => null, 'mobile_page' => mobile_page(1)]);
+            }
+            else
+            {
                 $result = fcode\send_manager::instance()->fetch($amount, $pay_sn, session_helper::mobile(), session_helper::session_id());
-                if ($result != false) {
+                if ($result != false)
+                {
                     $order_pay = Model('order_pay');
                     $order_pay->where(['pay_sn' => $pay_sn])->update(['fcode_state' => 1]);
 
@@ -285,7 +311,8 @@ class member_buyControl extends mbMemberControl
 
                     if ($this->mFcodeBannerID > 0) {
                         $blocks = special_manager::instance()->special($this->mFcodeBannerID, $unused_gids);
-                    } else {
+                    }
+                    else {
                         $blocks = [];
                     }
 
@@ -295,7 +322,8 @@ class member_buyControl extends mbMemberControl
 
                     $fcodes = [];
                     $gids = [];
-                    foreach ($result['fcode'] as $item) {
+                    foreach ($result['fcode'] as $item)
+                    {
                         $fcoder = new fcode\mfcode($item);
                         $fcode = $fcoder->format();
                         if ($fcode != false) {
@@ -312,20 +340,11 @@ class member_buyControl extends mbMemberControl
                     $helper = new goods_helper($this->price_calcer(), false);
                     $ret = $helper->cart_summary($gids, $related_goods);
 
-                    return self::outsuccess(['special_list' => $blocks,
-                        'fcodes' => $fcodes,
-                        'summary' => $ret['summary'],
-                        'groupbuy' => $ret['groupbuy'],
-                        'limitime' => $ret['limitime'],
-                        'bundling' => $ret['bundling'],
-                        'mobile_page' => mobile_page(1)]);
-                } else {
-                    return self::outsuccess(['special_list' => null,
-                        'summary' => null,
-                        'groupbuy' => null,
-                        'limitime' => null,
-                        'bundling' => null,
-                        'mobile_page' => mobile_page(1)]);
+                    return self::outsuccess(['special_list' => $blocks, 'fcodes' => $fcodes, 'summary' => $ret['summary'], 'groupbuy' => $ret['groupbuy'], 'limitime' => $ret['limitime'], 'bundling' => $ret['bundling'], 'mobile_page' => mobile_page(1)]);
+                }
+                else
+                {
+                    return self::outsuccess(['special_list' => null, 'summary' => null, 'groupbuy' => null, 'limitime' => null, 'bundling' => null, 'mobile_page' => mobile_page(1)]);
                 }
             }
         }
@@ -334,7 +353,8 @@ class member_buyControl extends mbMemberControl
     private function fcode_blocks($fcodes)
     {
         $blocks = [];
-        foreach ($fcodes as $fcode) {
+        foreach ($fcodes as $fcode)
+        {
             $block = [];
             $block['item_title'] = '';
             $block['item_type'] = 'home1';
@@ -358,7 +378,8 @@ class member_buyControl extends mbMemberControl
     {
         $logic_buy = Logic('buy');
         $data = $logic_buy->changeAddr($_POST['freight_hash'], $_POST['city_id'], $_POST['area_id'], $_SESSION['member_id']);
-        if (!empty($data) && $data['state'] == 'success') {
+        if (!empty($data) && $data['state'] == 'success')
+        {
             $result['offpay_hash'] = $data['offpay_hash'];
             $result['offpay_hash_batch'] = $data['offpay_hash_batch'];
 
@@ -369,14 +390,17 @@ class member_buyControl extends mbMemberControl
             $result['freight'] = $freight;
 
             return self::outsuccess($result);
-        } else {
+        }
+        else
+        {
             return self::outerr(errcode::ErrOrder, '地址修改失败');
         }
     }
 
     private function pay_goods($cart_ids)
     {
-        if (boolval($_POST['ifcart']) == true) {
+        if (boolval($_POST['ifcart']) == true)
+        {
             $mod_cart = Model('cart');
             $items = $mod_cart->listCart('db', ['cart_id' => ['in', $cart_ids]], false);
             $id_num = [];
@@ -386,7 +410,8 @@ class member_buyControl extends mbMemberControl
                 $id_num[] = "{$cart_id}|{$goods_num}";
             }
             return $id_num;
-        } else {
+        }
+        else {
             $id_num = $cart_ids;
             return $id_num;
         }
@@ -403,7 +428,8 @@ class member_buyControl extends mbMemberControl
         $member_info = $model_member->getMemberInfoByID($_SESSION['member_id']);
         if ($member_info['member_paypwd'] == md5($_POST['password'])) {
             return self::outsuccess(['result' => '1']);
-        } else {
+        }
+        else {
             return self::outerr(errcode::ErrOrder, '密码错误');
         }
     }

+ 15 - 14
mobile/control/member_order.php

@@ -25,7 +25,7 @@ class member_orderControl extends mbMemberControl
     public function listOp()
     {
         $model_order = Model('order');
-        $condition = array();
+        $condition = [];
         $condition['buyer_id'] = $_SESSION['member_id'];
         $order_state = intval(trim($_GET['state']));
         if ($order_state >= 10) {
@@ -34,19 +34,19 @@ class member_orderControl extends mbMemberControl
 
         if ($_GET['state_type'] != '') {
             $condition['order_state'] = str_replace(
-                array('state_new','state_pay','state_send','state_success','state_noeval'),
-                array(ORDER_STATE_NEW,ORDER_STATE_PAY,ORDER_STATE_SEND,ORDER_STATE_SUCCESS), $_GET['state_type']);
+                ['state_new','state_pay','state_send','state_success','state_noeval'],
+                [ORDER_STATE_NEW,ORDER_STATE_PAY,ORDER_STATE_SEND,ORDER_STATE_SUCCESS], $_GET['state_type']);
         } else {
-            $condition['order_state'] = array("in",array(ORDER_STATE_NEW,ORDER_STATE_PAY,ORDER_STATE_SEND,ORDER_STATE_SUCCESS,ORDER_STATE_CANCEL));
+            $condition['order_state'] = ["in", [ORDER_STATE_NEW,ORDER_STATE_PAY,ORDER_STATE_SEND,ORDER_STATE_SUCCESS,ORDER_STATE_CANCEL]];
         }
 
-        $order_list_array = $model_order->getNormalOrderList($condition, $this->page_size, '*', 'order_id desc', '', array('order_common','order_address', 'order_goods'));
+        $order_list_array = $model_order->getNormalOrderList($condition, $this->page_size, '*', 'order_id desc', '', ['order_common','order_address', 'order_goods']);
         $page_count = $model_order->gettotalpage();
 
         $order_helper = new order_helper($order_list_array);
         $result = $order_helper->format();
 
-        return self::outsuccess(array('orders' => $result,'mobile_page' =>mobile_page($page_count)));
+        return self::outsuccess(['orders' => $result,'mobile_page' =>mobile_page($page_count)]);
     }
 
     public function infoOp()
@@ -55,11 +55,11 @@ class member_orderControl extends mbMemberControl
         if(empty($pay_sn)) {
             return self::outerr(errcode::ErrParamter);
         }
-        $order = $this->get_order(array("buyer_id" => $_SESSION['member_id'],'pay_sn' => $pay_sn));
+        $order = $this->get_order(["buyer_id" => $_SESSION['member_id'],'pay_sn' => $pay_sn]);
         if($order == false) {
             return self::outerr(errcode::ErrOrder);
         } else {
-            return self::outsuccess(array('order' => $order));
+            return self::outsuccess(['order' => $order]);
         }
     }
 
@@ -69,12 +69,12 @@ class member_orderControl extends mbMemberControl
         if(empty($pay_sn)) {
             return self::outerr(errcode::ErrParamter);
         }
-        $order = $this->get_order(array("buyer_id" => $_SESSION['member_id'],'pay_sn' => $pay_sn));
+        $order = $this->get_order(["buyer_id" => $_SESSION['member_id'],'pay_sn' => $pay_sn]);
         $pay_ments = pay_helper::pay_types();
         if($order == false) {
             return self::outerr(errcode::ErrOrder);
         } else {
-            return self::outsuccess(array('order' => $order,"paytype" => $pay_ments));
+            return self::outsuccess(['order' => $order,"paytype" => $pay_ments]);
         }
     }
 
@@ -93,12 +93,12 @@ class member_orderControl extends mbMemberControl
 
         if($fOk == true)
         {
-            $order = $this->get_order(array("buyer_id" => $_SESSION['member_id'],'order_id' => $order_id));
+            $order = $this->get_order(["buyer_id" => $_SESSION['member_id'],'order_id' => $order_id]);
             if($order == false) {
                 $order = null;
             }
 
-            return self::outsuccess(array("act_type" => $act_type,"order_id" => $order_id, "order" => $order));
+            return self::outsuccess(["act_type" => $act_type,"order_id" => $order_id, "order" => $order]);
         }
         else {
             return self::outerr(errcode::ErrOrder);
@@ -116,7 +116,8 @@ class member_orderControl extends mbMemberControl
     private function get_order($condition)
     {
         $model_order = Model('order');
-        $order_list = $model_order->getNormalOrderList($condition, $this->page_size, '*', 'order_id desc', '', array('order_common','order_address', 'order_goods'));
+        $order_list = $model_order->getNormalOrderList($condition, $this->page_size, '*', 'order_id desc', '',
+            ['order_common','order_address', 'order_goods']);
         $order_helper = new order_helper($order_list);
         $orders = $order_helper->format();
         $model_order->cls();
@@ -215,7 +216,7 @@ class member_orderControl extends mbMemberControl
             if (!empty($payment_list)) 
             {
                 foreach ($payment_list as $value) {
-                    $payment_array[] = array('payment_code' => $value['payment_code'], 'payment_name' => $value['payment_name']);
+                    $payment_array[] = ['payment_code' => $value['payment_code'], 'payment_name' => $value['payment_name']];
                 }
             }
             $array_data['payment_list'] = $payment_array;

+ 1 - 0
mobile/util/errcode.php

@@ -30,6 +30,7 @@ class errcode //extends SplEnum
     const ErrFrequentlyRequest = 10017;//请求频繁
     const ErrUploadFileFailed = 10018; //上传文件失败
     const ErrUnImplements = 10019;
+    const ErrLittleParamter = 10020;
 
     const ErrSpecial = 10100;
 

+ 1 - 1
qwatch.php

@@ -19,4 +19,4 @@ function work_proc()
     Base::run();
 }
 
-event\util::fork_worker('work_proc',10);
+event\util::fork_worker('work_proc',1);

+ 2 - 2
shop/control/store_goods_add.php

@@ -129,9 +129,9 @@ class store_goods_addControl extends BaseSellerControl
         Tpl::output('store_goods_class', $store_goods_class);
 
         // 小时分钟显示
-        $hour_array = array('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23');
+        $hour_array = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];
         Tpl::output('hour_array', $hour_array);
-        $minute_array = array('05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55');
+        $minute_array = ['05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'];
         Tpl::output('minute_array', $minute_array);
 
         // 关联版式

+ 6 - 1
shop/index.php

@@ -5,12 +5,14 @@ declare(strict_types=1);
  *
  *
  * *  */
+
 define('APP_ID','shop');
 define('BASE_ROOT_PATH',str_replace('/shop','',dirname(__FILE__)));
 define('BASE_PATH', BASE_ROOT_PATH . '/shop');
 
+$start = microtime(true);
 if (!@include(dirname(dirname(__FILE__)).'/global.php')) exit('global.php isn\'t exists!');
-if (!@include(BASE_PATH.'/control/control.php')) exit('control.php isn\'t exists!');
+   if (!@include(BASE_PATH.'/control/control.php')) exit('control.php isn\'t exists!');
 if (!@include(BASE_CORE_PATH.'/lrlz.php')) exit('lrlz.php isn\'t exists!');
 
 define('APP_SITE_URL',SHOP_SITE_URL);
@@ -21,3 +23,6 @@ define('SHOP_TEMPLATES_URL',SHOP_SITE_URL.'/templates/'.TPL_NAME);
 define('BASE_TPL_PATH',BASE_PATH.'/templates/'.TPL_NAME);
 
 Base::run();
+
+$time = microtime(true) - $start;
+Log::record("use time = {$time}",Log::DEBUG);

+ 78 - 15
test/TestMemberCard.php

@@ -8,34 +8,38 @@ use PHPUnit\Framework\TestCase;
  * Date: 16/6/27
  * Time: 下午10:27
  */
-define('APP_ID','test');
-define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+define('APP_ID', 'test');
+define('BASE_ROOT_PATH', str_replace('/test', '', dirname(__FILE__)));
 require_once(BASE_ROOT_PATH . '/global.php');
 require_once(BASE_CORE_PATH . '/lrlz.php');
-
+require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_HELPER_PATH . '/mcard/mcard.php');
 require_once(BASE_HELPER_PATH . '/mtopcard/mtopcard.php');
+require_once(BASE_HELPER_PATH . '/util_helper.php');
+require_once(BASE_HELPER_PATH . '/order_helper.php');
 
 class TestMemberCard extends TestCase
 {
     private $member_id = 36490;
-    public static function setUpBeforeClass() : void
+
+    public static function setUpBeforeClass(): void
     {
         Base::run_util();
     }
+
     public function testAddMemberCard()
     {
         $usercards = new mcard\user_mcards($this->member_id);
-        $usercards->addCard(['card_type' => mcard\BothType,'total_amount' => 10000,'discount' => 0.05,'package_type' => 'year']);
+        $usercards->addCard(['card_type' => mcard\BothType, 'total_amount' => 10000, 'discount' => 0.05, 'package_type' => 'year']);
     }
+
     public function testDeduct()
     {
         $usercards = new mcard\user_mcards(36490);
 
-        $amounts = [3000,5000,200,100,200,2000,1000];
-        foreach ($amounts as $amount)
-        {
-            if($usercards->enough($amount)){
+        $amounts = [3000, 5000, 200, 100, 200, 2000, 1000];
+        foreach ($amounts as $amount) {
+            if ($usercards->enough($amount)) {
                 $usercards->deduct($amount);
                 Log::record("Consume {$amount}.");
 
@@ -48,17 +52,76 @@ class TestMemberCard extends TestCase
     public function testAddTopCard()
     {
         $cards = new mtopcard\user_topcards($this->member_id);
-        $cards->addCard('1000111100020445281',mtopcard\PetroChinaCard);
-        $cards->addMoney(0,1000);
-        $cards->addMoney(0,1000);
-        $cards->addMoney(0,1000);
+        $cards->addCard('1000111100020445281', mtopcard\PetroChinaCard);
+        $cards->addMoney(0, 1000);
+        $cards->addMoney(0, 1000);
+        $cards->addMoney(0, 1000);
         $ret = $cards->cards_format();
     }
 
+    public function testAddCardKey()
+    {
+        $items = [
+            ['card_no' => '1900000000418051', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418052', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418053', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418054', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418055', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418056', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418057', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418058', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418059', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418060', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418061', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418062', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418071', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418072', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418073', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418074', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418075', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418076', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418077', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418078', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418079', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100],
+            ['card_no' => '1900000000418080', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PetroChinaCard, 'amount' => 1000],
+            ['card_no' => '1900000000418081', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\SinopecCard, 'amount' => 500],
+            ['card_no' => '1900000000418082', 'card_key' => 'm8i094k4t8n8', 'card_type' => mtopcard\PhoneCard, 'amount' => 100]
+        ];
+
+        $mod_card = Model('card_key');
+        foreach ($items as $item) {
+            $mod_card->addCard($item);
+        }
+    }
+
+    public function testReserve()
+    {
+        $amount = 1000;
+        mtopcard\cards_helper::reserve(mtopcard\OilCardPaper,1000,35268,'xxxyyyzzzkkkdj',mtopcard\PetroChinaCard);
+        mtopcard\cards_helper::assign(1,'xiongmao');
+        mtopcard\cards_helper::reserve(mtopcard\OilCardPaper,1000,35268,'xxxyyyzzzkkkdj',mtopcard\PetroChinaCard);
+        mtopcard\cards_helper::reuse(4);
+    }
+
+    //测试购买会员,成功支付,改变用户会员属性,修改状态.
+    public function testPaidVOrderSuccess()
+    {
+        $order_sn = '580648112029501620';
+        $trade_no = '730510765598547567';
+
+        $payer = new pay_helper($order_sn);
+        $payer->update_order($trade_no,'wxpay');
+    }
+    //测试购买会员
+    public function testMcardOrderSucess()
+    {
+        $logic = Logic('queue');
+        $logic->OnMCardPaidSuccess(['order_sn' => '580648112029501620']);
+    }
+
     public function testStrict()
     {
-        $fun = function (...$ints)
-        {
+        $fun = function (...$ints) {
             return array_sum($ints);
         };
     }