浏览代码

fix first_order

stanley-king 4 年之前
父节点
当前提交
627ac756d5

+ 1 - 3
admin/control/vr_order.php

@@ -157,9 +157,7 @@ class vr_orderControl extends SystemControl{
 
         //显示系统自动取消订单日期
         if ($order_info['order_state'] == ORDER_STATE_NEW) {
-            //$order_info['order_cancel_day'] = $order_info['add_time'] + ORDER_AUTO_CANCEL_DAY * 24 * 3600;
-			// by abc.com
-			$order_info['order_cancel_day'] = $order_info['add_time'] + ORDER_AUTO_CANCEL_DAY + 3 * 24 * 3600;
+			$order_info['order_cancel_day'] = $order_info['add_time'] + VRORDER_AUTO_CANCEL_MINUTE * 60;
         }
 
 		Tpl::output('order_info',$order_info);

+ 3 - 3
crontab/control/minutes.php

@@ -32,9 +32,9 @@ class minutesControl extends BaseCronControl
         $_break = false;
         $model_order = Model('order');
         $logic_order = Logic('order');
-        $condition = array();
+        $condition = [];
         $condition['order_state'] = ORDER_STATE_NEW;
-        $condition['add_time'] = array('lt',time() - ORDER_AUTO_CANCEL_DAY * 86400);
+        $condition['add_time'] = ['lt',time() - ORDER_AUTO_CANCEL_DAY * 86400];
 
         //分批,每批处理100个订单,最多处理5W个订单
         for ($i = 0; $i < 500; $i++)
@@ -66,7 +66,7 @@ class minutesControl extends BaseCronControl
         $logic_vr_order = Logic('vr_order');
         $condition = [];
         $condition['order_state'] = ORDER_STATE_NEW;
-        $condition['add_time'] = ['lt',time() - ORDER_AUTO_CANCEL_DAY * 86400];
+        $condition['add_time'] = ['lt',time() - VRORDER_AUTO_CANCEL_MINUTE * 60];
 
         //分批,每批处理100个订单,最多处理5W个订单
         for ($i = 0; $i < 500; $i++)

+ 2 - 0
global.php

@@ -117,6 +117,8 @@ define('ORDER_STATE_SEND', 30);
 //已收货,交易成功
 define('ORDER_STATE_SUCCESS', 40);
 
+//未付款订单,自动取消的分钟
+define('VRORDER_AUTO_CANCEL_MINUTE', 10); //
 //未付款订单,自动取消的天数
 define('ORDER_AUTO_CANCEL_DAY', 1); //
 //已发货订单,自动确认收货的天数

+ 39 - 14
helper/calc_helper.php

@@ -26,6 +26,7 @@ class CalcPrice implements ICalc
     private $mUserCards = null;
     private $mMemberInfo = null;
     private $mInvitees = 0;
+    private $mOrderCount = 0;
 
     private $mUsedInvitees = false;
     private $mUsedInviteesNum = 0;
@@ -37,6 +38,7 @@ class CalcPrice implements ICalc
             $this->mUserCards = new user_mcards($userid);
             $this->mMemberInfo = new member_info($userid);
             $this->mInvitees = $this->invitees();
+            $this->mOrderCount = $this->order_num() + $this->vrorder_num();
         }
     }
 
@@ -49,17 +51,40 @@ class CalcPrice implements ICalc
             return false;
         }
     }
-
-    private function isFirstorOrder()
+    private function order_num()
     {
-        if($this->mUserId > 0 && $this->mMemberInfo != null) {
-            return $this->mMemberInfo->order_num() == 0;
+        if($this->mUserId <= 0) return 0;
+        $mod_member = Model('order');
+        $items = $mod_member->field('COUNT(*) AS order_num')
+                            ->where(['member_id' => $this->mUserId,'order_state' => ['in',[ORDER_STATE_NEW,ORDER_STATE_PAY,ORDER_STATE_SEND,ORDER_STATE_SUCCESS]]])
+                            ->select();
+
+        if(empty($items)) {
+            return 0;
+        } else {
+            return intval($items[0]['order_num']);
         }
-        else {
-            return true;
+    }
+    private function vrorder_num()
+    {
+        if($this->mUserId <= 0) return 0;
+        $mod_member = Model('vr_order');
+        $items = $mod_member->field('COUNT(*) AS order_num')
+                            ->where(['member_id' => $this->mUserId,'order_state' => ['in',[ORDER_STATE_NEW,ORDER_STATE_PAY,ORDER_STATE_SEND,ORDER_STATE_SUCCESS]]])
+                            ->select();
+
+        if(empty($items)) {
+            return 0;
+        } else {
+            return intval($items[0]['order_num']);
         }
     }
 
+    private function isFirstorOrder()
+    {
+        return ($this->mOrderCount == 0);
+    }
+
     private function select_invitees()
     {
         if($this->mUserId <= 0 || $this->mMemberInfo == null) {
@@ -80,8 +105,10 @@ class CalcPrice implements ICalc
 
     private function invitees()
     {
-        $model = model('member');
-        $ret = $model->field('count(*) inviter_count' )->where(['inviter_id' => $this->mUserId])->select();
+        $mod_member = Model('member');
+        $ret = $mod_member->field('COUNT(*) AS inviter_count')
+                          ->where(['inviter_id' => $this->mUserId])
+                          ->select();
         if(empty($ret)) {
             return 0;
         }
@@ -105,7 +132,7 @@ class CalcPrice implements ICalc
     public function deduct_invitees()
     {
         if($this->mUsedInvitees) {
-            $model = model('member');
+            $model = Model('member');
             $num = $this->mUsedInviteesNum;
             $model->editMember(['member_id' => $this->mUserId], ['used_invitees'=> ['exp', "used_invitees+{$num}"]]);
         }
@@ -122,13 +149,13 @@ class CalcPrice implements ICalc
         $fVip = $this->isVip();
         if($fVip)
         {
-            if(session_helper::first_order()) {
+            if($this->isFirstorOrder()) {
                 $tips = $config['tips']['vip_first_order'];
             } else {
                 $tips = $config['tips']['vip_user'];
             }
         }
-        elseif(session_helper::first_order()) {
+        elseif($this->isFirstorOrder()) {
             $tips = $config['tips']['first_order'];
         } else {
             $tips = $config['tips']['none_vip'];
@@ -178,7 +205,6 @@ class CalcPrice implements ICalc
             return ['price_des' => '首单价', 'accu_price' => round($goods_price * self::FIRST_ORDER_PRICE,2)];
         }
         elseif(!empty($num_dis = $this->select_invitees())) {
-            $num = $num_dis['num'];
             $this->mUsedInvitees = true;
             $discount = $num_dis['discount'];
             return ['price_des' => '邀请价', 'accu_price' => round($goods_price * $discount,2)];
@@ -204,10 +230,9 @@ class CalcPrice implements ICalc
             return round($goods_price * self::FIRST_ORDER_PRICE * $num,2);
         }
         elseif(!empty($num_dis = $this->select_invitees())) {
-            $num = $num_dis['num'];
             $this->mUsedInvitees = true;
             $discount = $num_dis['discount'];
-            return round($goods_price * $discount * $num);
+            return round($goods_price * $discount * $num,2);
         }
         else {
             return round($goods_price * $num * self::DEFAULT_ORDER_PRICE,2);

+ 39 - 30
helper/order_helper.php

@@ -16,14 +16,14 @@ class refund_item
     const REFUND_MONEY = 1;
     const RETURN_GOODS = 2;
 
-    static $seller_state = array(1 => "待审核",2 => "同意", 3 => "不同意");
-    static $refund_state = array(1 => "处理中",2 => "待管理员处理", 3 => "已完成");
-    static $refund_type  = array(1 => "退款",2 => "退货");
-    static $return_type  = array(1 => "不用退货",2 => "需要退货");
-    static $order_goods_type = array(1 => "普通商品",2 => "团购商品",3 => "限时折扣商品",4 => "组合套装");
-    static $goods_state  = array(1 => "待发货",2 => "待收货",3 => "未收到",4 => "已收货");
-    static $payments  = array('bonus' => "红包支付","predeposit" => "红包支付","online" => "在线支付",
-        "alipay" => "支付宝",'wxpay' => "微信支付",'cmbpay' => "一网通支付");
+    static $seller_state = [1 => "待审核",2 => "同意", 3 => "不同意"];
+    static $refund_state = [1 => "处理中",2 => "待管理员处理", 3 => "已完成"];
+    static $refund_type  = [1 => "退款",2 => "退货"];
+    static $return_type  = [1 => "不用退货",2 => "需要退货"];
+    static $order_goods_type = [1 => "普通商品",2 => "团购商品",3 => "限时折扣商品",4 => "组合套装"];
+    static $goods_state  = [1 => "待发货",2 => "待收货",3 => "未收到",4 => "已收货"];
+    static $payments  = ['bonus' => "红包支付","predeposit" => "红包支付","online" => "在线支付",
+        "alipay" => "支付宝",'wxpay' => "微信支付",'cmbpay' => "一网通支付"];
 
     public function __construct()
     {
@@ -37,17 +37,14 @@ class refund_item
         if($goods_id <= 0 || $order_id <= 0) {
             return false;
         }
-        else
+        elseif(isset($goods_info[$order_id]))
         {
-            if(isset($goods_info[$order_id]))
-            {
-                $order_goods = $goods_info[$order_id];
-                if(isset($order_goods[$goods_id])) {
-                    $goods = $order_goods[$goods_id];
-                    $price = doubleval($goods['goods_price']);
-                    $spec = $goods['goods_spec'];
-                    if(empty($spec)) $spec = "";
-                }
+            $order_goods = $goods_info[$order_id];
+            if(isset($order_goods[$goods_id])) {
+                $goods = $order_goods[$goods_id];
+                $price = doubleval($goods['goods_price']);
+                $spec = $goods['goods_spec'];
+                if(empty($spec)) $spec = "";
             }
         }
     }
@@ -57,14 +54,11 @@ class refund_item
         if($order_id <= 0) {
             return "";
         }
-        else
+        elseif(isset($order_infos[$order_id]))
         {
-            if(isset($order_infos[$order_id]))
-            {
-                $order = $order_infos[$order_id];
-                if(isset($order['payment_code'])) {
-                    return self::$payments[$order['payment_code']];
-                }
+            $order = $order_infos[$order_id];
+            if(isset($order['payment_code'])) {
+                return self::$payments[$order['payment_code']];
             }
         }
 
@@ -152,10 +146,7 @@ class refund_item
                 $state = 4;
             }
         }
-        else
-        {
 
-        }
         return $state;
     }
 }
@@ -755,6 +746,7 @@ class order_helper extends order_base
 
     public function __construct($order_list)
     {
+        parent::__construct();
         $this->mod_order = Model('order');
         $this->mod_refund = Model('refund_return');
         $this->mOrders = $this->mod_refund->getGoodsRefundList($order_list);
@@ -775,7 +767,7 @@ class order_helper extends order_base
         $state['if_evaluation'] = $this->mod_order->getOrderOperateState('evaluation', $order);
         //显示删除
         $state['if_delete'] = $this->mod_order->getOrderOperateState('delete', $order);
-
+        //显示锁定
         $state['if_lock'] = $this->mod_order->getOrderOperateState('lock', $order);
 
         $actions = [];
@@ -994,6 +986,7 @@ class vorder_helper extends order_base
 
     public function __construct($order_list)
     {
+        parent::__construct();
         $this->mod_vorder = Model('vr_order');
         $this->mod_refund = Model('refund_return');
         $this->mOrders = $order_list;
@@ -1029,17 +1022,33 @@ class vorder_helper extends order_base
         $result['full_desc'] = '';
 
         if ($result['order_state'] == ORDER_STATE_NEW) {
-            $result['cancel_time'] = $result['add_time'] + ORDER_AUTO_CANCEL_DAY * 24 * 3600;
+            $result['cancel_time'] = $result['add_time'] + VRORDER_AUTO_CANCEL_MINUTE * 60;
         } else {
             $result['cancel_time'] = 0;
         }
 
+        $result['cancel_desc'] = $this->cancle_desc($result['cancel_time']);
         $order['refund_id']     = 0;
         $result["refund_state"] = 0;
 
         return $result;
     }
 
+    private function cancle_desc($cancel_time)
+    {
+        $now = time();
+        if($cancel_time > $now) {
+            $left = $cancel_time - $now;
+            $min = intval($left / 60);
+            $sec = $left % 60;
+            $desc = "{$min}分{$sec}秒";
+        }
+        else {
+            $desc = "";
+        }
+        return $desc;
+    }
+
     public function format()
     {
         $result = [];

+ 1 - 1
helper/session_helper.php

@@ -424,7 +424,7 @@ class session_helper
     {
         if (!array_key_exists('order_num', $_SESSION)) {
             $mod_member = Model('member');
-            $mod_member->editMember(['member_id' => self::memberid()],['order_num' => array('exp', 'order_num+1'),'lastest_order' => time()]);
+            $mod_member->editMember(['member_id' => self::memberid()],['order_num' => ['exp', 'order_num+1'],'lastest_order' => time()]);
             $minfo = $mod_member->getMemberInfoByID(self::memberid());
             $_SESSION['order_num'] = intval($minfo['order_num']);
         } else {

+ 1 - 1
mobile/control/member_vorder.php

@@ -31,7 +31,7 @@ class member_vorderControl extends mbMemberControl
                 ['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'] = ["in", [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]];
         }
 
         $condition['buyer_id'] = session_helper::memberid();

+ 1 - 1
shop/control/member_vr_order.php

@@ -126,7 +126,7 @@ class member_vr_orderControl extends BaseMemberControl {
 
         //显示系统自动取消订单日期
         if ($order_info['order_state'] == ORDER_STATE_NEW) {
-            $order_info['order_cancel_day'] = $order_info['add_time'] + ORDER_AUTO_CANCEL_DAY * 24 * 3600;
+            $order_info['order_cancel_day'] = $order_info['add_time'] + VRORDER_AUTO_CANCEL_MINUTE * 60;
         }
 
         Tpl::output('order_info',$order_info);

+ 1 - 1
shop/control/store_vr_order.php

@@ -102,7 +102,7 @@ class store_vr_orderControl extends BaseSellerControl
 
         //显示系统自动取消订单日期
         if ($order_info['order_state'] == ORDER_STATE_NEW) {
-            $order_info['order_cancel_day'] = $order_info['add_time'] + ORDER_AUTO_CANCEL_DAY * 24 * 3600;
+            $order_info['order_cancel_day'] = $order_info['add_time'] + VRORDER_AUTO_CANCEL_MINUTE * 60;
         }
 
         Tpl::output('order_info',$order_info);

+ 6 - 9
test/TestOrder.php

@@ -97,18 +97,15 @@ class TestOrder extends TestCase
     {
         $items = Model()->table('order')
             ->field('count(*) as order_num,max(payment_time) lastest_time')
-            ->where(['buyer_id' => $member_id,'order_state' => array('in',[20,30,40])])
+            ->where(['buyer_id' => $member_id,'order_state' => ['in',[20,30,40]]])
             ->select();
         if(empty($items)) {
             return false;
         }
-        else
-        {
-            if($items[0]['order_num'] == 0){
-                return false;
-            } else {
-                return $items[0];
-            }
+        elseif($items[0]['order_num'] == 0){
+            return false;
+        } else {
+            return $items[0];
         }
     }
 
@@ -141,7 +138,7 @@ class TestOrder extends TestCase
                 $payment_time = intval($item['payment_time']);
                 if($payment_time <= 0) continue;
 
-                $mod_member->editMember(['member_id' => $member_id],['order_num' => array('exp', 'order_num+1'),'lastest_order' => $payment_time]);
+                $mod_member->editMember(['member_id' => $member_id],['order_num' => ['exp', 'order_num+1'],'lastest_order' => $payment_time]);
             }
         }
     }