代码片段:检测顺序与服务器性能

\application\api\service\Pay.php中:

use app\api\service\Order as OrderService;

//。。。

public function pay()

{

//1.订单号可能就不存在。

//2.订单号虽然存在,但是订单号和当前用户不匹配。

//3.订单有可能已经被支付过。

//4.进行库存量检测。

$this->checkOrderValid();

$orderService = new OrderService();

$status = $orderService->checkOrderStock($this->orderID);

if (!$status['pass'])

{

return $status;

}

return $this->makeWxPreOrder($status['orderPrice']);

}

//。。。

if ($order->status != OrderStatusEnum::UNPAID)

{

throw new OrderException(

[

'msg' => '订单已支付',

'errorCode' => 80003,

'code' => 400

]);

}

注记:

1、四个检测,其实没有先后顺序。注意两点:第一,把最有可能发生的,放在最前面。如果第一条发生了,后面的就不会执行,可以节约服务器的性能。第二,消耗服务器性能更多的,放在后面。把对数据库、服务器性能消耗小的,放在前面。

2、为了代码的可读性,订单状态一般用枚举。

class OrderStatusEnum

{

// 待支付

const UNPAID = 1;

// 已支付

const PAID = 2;

// 已发货

const DELIVERED = 3;

// 已支付,但库存不足

const PAID_BUT_OUT_OF = 4;

}

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180405G0PX9K00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券