Browse Source

代理商自营产品下单及支付回调修改

master
李可松 4 years ago
parent
commit
5c002d03e3
  1. 48
      app/Http/Controllers/Api/OrderController.php
  2. 4
      app/Http/Controllers/Api/WxpayController.php

48
app/Http/Controllers/Api/OrderController.php

@ -15,7 +15,6 @@ use App\Models\Coupon;
use App\Models\OrderProductItem;
use App\Models\Product;
use App\Models\ProductSpec;
use App\Models\SystemSetting;
use App\Models\User;
use App\Models\Order;
use App\Service\OpenPlatform;
@ -141,22 +140,34 @@ class OrderController extends Controller
'info.array' => '订单信息必须是数组',
]);
$ap = AgentProduct::with(['coupon', 'product.diyForm.fields', 'agentCloudProduct:id,price'])
$ap = AgentProduct::with(['coupon', 'product.diyForm.fields', 'diyForm.fields', 'agentCloudProduct:id,price'])
->where('stock', '>=', $formData['num'])
->where(['id' => $formData['id'], 'status' => ProductStatus::ON_SALE, 'agent_id' => $this->agent_id]) //判断agent_id,防止新入驻小程序的演示产品被下单
->whereDoesntHave('agentProductItem', function ($query) {
/*->whereDoesntHave('agentProductItem', function ($query) { 与代理商自营产品冲突,所以注释掉
return $query->whereHas('product', function ($query) {
return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE);
});
})
})*/
->first();
if (!$ap || !$ap->product) {
if (!$ap) {
return $this->error('产品已下架或库存不足');
}
$is_supplier_product = (bool)$ap->product_id; //是否是供应商进货产品,否则是自营产品
$order_info = $formData['info'] ?? [];
$fields = [];
if ($is_supplier_product) { //关联供应商产品
if (!empty($ap->product->diyForm->fields) && !$ap->product->diyForm->fields->isEmpty()) {
$fields = array_column($ap->product->diyForm->fields->toArray(), null, 'field');
$fields = $ap->product->diyForm->fields->toArray();
}
} else { //代理商自营产品
if (!empty($ap->diyForm->fields) && !$ap->diyForm->fields->isEmpty()) {
$fields = $ap->diyForm->fields->toArray();
}
}
if (!empty($fields)) {
$fields = array_column($fields, null, 'field');
foreach ($fields as &$field) {
if ($field['required'] && !isset($order_info[$field['field']])) { //判断是否必填
return $this->error($field['field'] . '不能为空');
@ -167,7 +178,7 @@ class OrderController extends Controller
}
//0:单品销售;1:组合销售
if ($ap->type == 0) {
if ($ap->type == 0 || $ap->type == 3) {
$spec = AgentProductSpec::with('productSpec')
->where('agent_product_id', $formData['id'])
->whereIn('id', $formData['spec_id'])
@ -187,12 +198,15 @@ class OrderController extends Controller
$costPrice = 0; //供应商成本总价
foreach ($spec as $v) {
$order_price = bcadd($order_price, bcmul($v['price'], $formData['num'], 6), 6); //订单总价
if (isset($v['cost_price'])) { //兼容代理商自营产品
$costPrice = bcadd($costPrice, bcmul($v['cost_price'], $formData['num'], 6), 6); //供应商成本总价
}
}
$order_price = round($order_price, 2);
//0:旅游线路、1:酒店、2:景区、3:餐厅、4:车队、5:单项 => admin_trans('product.options.publish_type')
switch ($ap->product->type) {
$product_type = $is_supplier_product ? $ap->product->type : $ap->tpl_type;
switch ($product_type) {
case 0:
case 2:
if (empty($formData['departure_time']) || !strtotime($formData['departure_time'])) {
@ -200,8 +214,8 @@ class OrderController extends Controller
}
//旅游线路->出发时间;景区->入园时间
$key = [0 => '出发时间', 2 => '入园时间'];
if (isset($key[$ap->product->type])) {
$order_info[$key[$ap->product->type]] = $formData['departure_time'];
if (isset($key[$product_type])) {
$order_info[$key[$product_type]] = $formData['departure_time'];
}
break;
case 1:
@ -237,6 +251,7 @@ class OrderController extends Controller
DB::beginTransaction();
try {
if ($is_supplier_product) {
//供应商产品表减库存
$product_ids = explode(',', $ap->product_ids);
$affect_row = Product::query()
@ -256,6 +271,7 @@ class OrderController extends Controller
if ($affect_row != count($product_spec_ids)) {
throw new \Exception('你选择的供应产品规格库存不足');
}
}
//代理商产品表减库存
$affect_row = AgentProduct::query()
@ -316,7 +332,7 @@ class OrderController extends Controller
'agent_cloud_price' => $ap->agentCloudProduct->price ?? 0,
'prepay_price' => $prepayPrice ?? 0,
'prepay_timeout' => $prepayTimeout ?? 0,
'single_price' => SystemSetting::val('single', 'price'),
'single_price' => 0, //单人头交易费,已废弃
'info' => $order_info,
]);
@ -325,14 +341,14 @@ class OrderController extends Controller
'order_id' => $order->id,
'agent_id' => $this->agent_id,
'agent_product_id' => $ap->id,
'supplier_id' => $ap->product->supplier_id,
'product_id' => $ap->product->id,
'supplier_id' => $ap->product->supplier_id ?? 0,
'product_id' => $ap->product->id ?? 0,
'num' => $formData['num'],
'price' => $costPrice,
'agent_product_spec_id' => json_encode($agent_product_spec_ids),
'product_type' => $ap->product->type,
'product_spec_id' => json_encode($product_spec_ids),
'single_deposit' => $ap->product->single_deposit,
'product_type' => $product_type,
'product_spec_id' => $is_supplier_product ? json_encode($product_spec_ids) : '[]',
'single_deposit' => $is_supplier_product ? $ap->product->single_deposit : $ap->single_deposit,
]);
//订单超时

4
app/Http/Controllers/Api/WxpayController.php

@ -85,9 +85,11 @@ class WxpayController
$agent_product = AgentProduct::find($order->agent_product_id);
$agent_product->increment('sale', $order->num);
if ($order->product_id) { //兼容代理商自营产品
Product::query()
->where('id', $order->product_id)
->increment('sale', $order->num);
}
$status = $order->status;
$pay_type = $order->pay_type;
@ -237,9 +239,11 @@ class WxpayController
]);
// 退库存
if ($order->product_id) {
Product::query()
->where('id', $order->product_id)
->increment('stock', $order->num);
}
DB::commit();
return true;

Loading…
Cancel
Save