<?php
|
|
namespace app\api\service\order\checkpay;
|
|
use app\api\model\product\ProductSku as ProductSkuModel;
|
use app\api\model\user\ActivationCode;
|
use app\common\enum\product\DeductStockTypeEnum;
|
|
/**
|
* 主订单支付检查服务类
|
*/
|
class MasterCheckPayService extends CheckPayService
|
{
|
/**
|
* 判断订单是否允许付款
|
*/
|
public function checkOrderStatus($order,$params=[])
|
{
|
// 判断订单状态
|
if (!$this->checkOrderStatusCommon($order)) {
|
return false;
|
}
|
// 判断商品状态、库存
|
if (!$this->checkProductStatus($order['product'], $params)) {
|
return false;
|
}
|
return true;
|
}
|
|
/**
|
* 判断商品状态、库存 (未付款订单)
|
*/
|
protected function checkProductStatus($productList, $params = [])
|
{
|
$is_params=false;
|
if (!empty($params)){
|
if ($params['activation_code']!=''){
|
$is_params=true;
|
if (count($productList)>1){
|
$this->error = "一个激活码只能兑换一个商品";
|
return false;
|
}
|
if ($productList[0]['total_num']>1){
|
$this->error = "一个激活码只能兑换一个商品";
|
return false;
|
}
|
if((new ActivationCode())->getActivationCode($params['activation_code'])){
|
$this->error = "很抱歉,未找到激活码请确认激活码是否正确";
|
return false;
|
}
|
if((new ActivationCode())->checkCodeStatus($params['activation_code'])){
|
$this->error = "很抱歉,激活码已使用";
|
return false;
|
}
|
}
|
}
|
foreach ($productList as $product) {
|
// 判断商品是否下架
|
if (
|
empty($product['product'])
|
|| $product['product']['product_status']['value'] != 10
|
) {
|
$this->error = "很抱歉,商品 [{$product['product_name']}] 已下架";
|
return false;
|
}
|
if ($is_params){
|
if ($product['activation_code_exchange']==0){
|
$this->error = "很抱歉,商品 [{$product['product_name']}] 不可使用激活码兑换";
|
return false;
|
}
|
}
|
// 获取商品的sku信息
|
$productSku = $this->getOrderProductSku($product['product_id'], $product['spec_sku_id']);
|
// sku已不存在
|
if (empty($productSku)) {
|
$this->error = "很抱歉,商品 [{$product['product_name']}] sku已不存在,请重新下单";
|
return false;
|
}
|
// 付款减库存
|
if ($product['deduct_stock_type'] == DeductStockTypeEnum::PAYMENT && $product['total_num'] > $productSku['stock_num']) {
|
$this->error = "很抱歉,商品 [{$product['product_name']}] 库存不足";
|
return false;
|
}
|
}
|
return true;
|
}
|
|
/**
|
* 获取指定的商品sku信息
|
*/
|
private function getOrderProductSku($productId, $specSkuId)
|
{
|
return ProductSkuModel::detail($productId, $specSkuId);
|
}
|
|
}
|