|
|
@ -112,7 +112,7 @@ class OrderController extends Controller |
|
|
public function create(Request $request) |
|
|
public function create(Request $request) |
|
|
{ |
|
|
{ |
|
|
$formData = $request->input(); |
|
|
$formData = $request->input(); |
|
|
$formData = array_map(fn($v) => trim($v), $formData); //过滤,删除首尾空
|
|
|
|
|
|
|
|
|
$formData = array_map(fn($v) => is_string($v) ? trim($v) : $v, $formData); //过滤,删除首尾空
|
|
|
|
|
|
|
|
|
//表单验证
|
|
|
//表单验证
|
|
|
$pay_type_values = join(',', array_keys(PayType::array())); |
|
|
$pay_type_values = join(',', array_keys(PayType::array())); |
|
|
@ -122,7 +122,7 @@ class OrderController extends Controller |
|
|
'mobile' => ['required', 'regex:/^1[3-9]\d{9}$/'], |
|
|
'mobile' => ['required', 'regex:/^1[3-9]\d{9}$/'], |
|
|
'pay_type' => ['required', 'in:' . $pay_type_values], |
|
|
'pay_type' => ['required', 'in:' . $pay_type_values], |
|
|
'num' => ['required', 'min:1'], |
|
|
'num' => ['required', 'min:1'], |
|
|
'spec_id' => ['required', 'min:1', 'integer'], |
|
|
|
|
|
|
|
|
'spec_id' => ['required', 'array'], |
|
|
'id_card' => ['regex:/^\d{17}[\dXx]$/'], |
|
|
'id_card' => ['regex:/^\d{17}[\dXx]$/'], |
|
|
], [ |
|
|
], [ |
|
|
'id.required' => '未指定产品ID', |
|
|
'id.required' => '未指定产品ID', |
|
|
@ -135,7 +135,8 @@ class OrderController extends Controller |
|
|
'pay_type.in' => '不存在此支付方式', |
|
|
'pay_type.in' => '不存在此支付方式', |
|
|
'num.required' => '请输入购买数量', |
|
|
'num.required' => '请输入购买数量', |
|
|
'num.min' => '购买数量输入错误', |
|
|
'num.min' => '购买数量输入错误', |
|
|
'spec_id.*' => '请选择产品规格', |
|
|
|
|
|
|
|
|
'spec_id.required' => '请选择产品规格', |
|
|
|
|
|
'spec_id.array' => '产品规格必须是数组', |
|
|
'id_card.regex' => '身份证号输入不正确', |
|
|
'id_card.regex' => '身份证号输入不正确', |
|
|
]); |
|
|
]); |
|
|
|
|
|
|
|
|
@ -158,15 +159,27 @@ class OrderController extends Controller |
|
|
if ($ap->type == 0) { |
|
|
if ($ap->type == 0) { |
|
|
$spec = AgentProductSpec::with('productSpec') |
|
|
$spec = AgentProductSpec::with('productSpec') |
|
|
->where('agent_product_id', $formData['id']) |
|
|
->where('agent_product_id', $formData['id']) |
|
|
->find($formData['spec_id']); |
|
|
|
|
|
if (!$spec) { |
|
|
|
|
|
|
|
|
->whereIn('id', $formData['spec_id']) |
|
|
|
|
|
->get(); |
|
|
|
|
|
if ($spec->isEmpty()) { |
|
|
return $this->error('你选择的产品规格不存在'); |
|
|
return $this->error('你选择的产品规格不存在'); |
|
|
} |
|
|
} |
|
|
$order_price = $spec->price * $formData['num']; //订单总价
|
|
|
|
|
|
|
|
|
$spec = $spec->toArray(); |
|
|
|
|
|
$spec = array_map(function ($v) { |
|
|
|
|
|
$v = array_merge($v['product_spec'] ?? [], $v); |
|
|
|
|
|
unset($v['product_spec']); |
|
|
|
|
|
return $v; |
|
|
|
|
|
}, $spec); |
|
|
|
|
|
|
|
|
|
|
|
$order_price = 0; //订单总价
|
|
|
|
|
|
foreach ($spec as $v) { |
|
|
|
|
|
$order_price += $v['price'] * $formData['num']; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//0:旅游线路、1:酒店、2:景区、3:餐厅、4:车队、5:单项 => admin_trans('product.options.publish_type')
|
|
|
//0:旅游线路、1:酒店、2:景区、3:餐厅、4:车队、5:单项 => admin_trans('product.options.publish_type')
|
|
|
switch ($ap->product->type) { |
|
|
switch ($ap->product->type) { |
|
|
case 0: |
|
|
case 0: |
|
|
|
|
|
case 2: |
|
|
case 3: |
|
|
case 3: |
|
|
case 4: |
|
|
case 4: |
|
|
case 5: |
|
|
case 5: |
|
|
@ -198,25 +211,13 @@ class OrderController extends Controller |
|
|
if (empty($formData['id_card'])) { |
|
|
if (empty($formData['id_card'])) { |
|
|
return $this->error('请输入身份证号'); |
|
|
return $this->error('请输入身份证号'); |
|
|
} |
|
|
} |
|
|
$order_info['check_in_time'] = $formData['departure_time']; //入住时间
|
|
|
|
|
|
$order_info['check_out_time'] = $formData['return_time']; //离店时间
|
|
|
|
|
|
|
|
|
$order_info['check_in_time'] = $formData['check_in_time']; //入住时间
|
|
|
|
|
|
$order_info['check_out_time'] = $formData['check_out_time']; //离店时间
|
|
|
$order_info['arrival_time'] = $formData['arrival_time']; //到店时间
|
|
|
$order_info['arrival_time'] = $formData['arrival_time']; //到店时间
|
|
|
$order_info['id_card'] = $formData['id_card']; //身份证号
|
|
|
$order_info['id_card'] = $formData['id_card']; //身份证号
|
|
|
$order_info['sex'] = $formData['sex'] ?? 0; //性别
|
|
|
$order_info['sex'] = $formData['sex'] ?? 0; //性别
|
|
|
$order_info['age'] = $formData['age'] ?? 0; //年龄
|
|
|
$order_info['age'] = $formData['age'] ?? 0; //年龄
|
|
|
break; |
|
|
break; |
|
|
case 2: |
|
|
|
|
|
if (empty($formData['enter_time']) || !strtotime($formData['enter_time'])) { |
|
|
|
|
|
return $this->error('请选择入园时间'); |
|
|
|
|
|
} |
|
|
|
|
|
if (empty($formData['id_card'])) { |
|
|
|
|
|
return $this->error('请输入身份证号'); |
|
|
|
|
|
} |
|
|
|
|
|
$order_info['enter_time'] = $formData['enter_time']; //到店时间
|
|
|
|
|
|
$order_info['id_card'] = $formData['id_card']; //身份证号
|
|
|
|
|
|
$order_info['sex'] = $formData['sex'] ?? 0; //性别
|
|
|
|
|
|
$order_info['age'] = $formData['age'] ?? 0; //年龄
|
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
return $this->error('不存在此类型产品'); |
|
|
return $this->error('不存在此类型产品'); |
|
|
@ -247,11 +248,12 @@ class OrderController extends Controller |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//供应商产品规格减表减库存
|
|
|
//供应商产品规格减表减库存
|
|
|
|
|
|
$product_spec_ids = array_column($spec, 'product_spec_id'); |
|
|
$affect_row = ProductSpec::query() |
|
|
$affect_row = ProductSpec::query() |
|
|
->where('stock', '>=', $formData['num']) //乐观锁
|
|
|
->where('stock', '>=', $formData['num']) //乐观锁
|
|
|
->where('id', $spec['product_spec_id']) |
|
|
|
|
|
|
|
|
->whereIn('id', $product_spec_ids) |
|
|
->decrement('stock', $formData['num']); |
|
|
->decrement('stock', $formData['num']); |
|
|
if (!$affect_row) { |
|
|
|
|
|
|
|
|
if ($affect_row != count($product_spec_ids)) { |
|
|
throw new \Exception('你选择的供应产品规格库存不足'); |
|
|
throw new \Exception('你选择的供应产品规格库存不足'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -265,11 +267,12 @@ class OrderController extends Controller |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//代理商产品规格表减库存
|
|
|
//代理商产品规格表减库存
|
|
|
|
|
|
$agent_product_spec_ids = array_column($spec, 'id'); |
|
|
$affect_row = AgentProductSpec::query() |
|
|
$affect_row = AgentProductSpec::query() |
|
|
->where('stock', '>=', $formData['num']) //乐观锁
|
|
|
->where('stock', '>=', $formData['num']) //乐观锁
|
|
|
->where('id', $spec['id']) |
|
|
|
|
|
|
|
|
->whereIn('id', $agent_product_spec_ids) |
|
|
->decrement('stock', $formData['num']); |
|
|
->decrement('stock', $formData['num']); |
|
|
if (!$affect_row) { |
|
|
|
|
|
|
|
|
if ($affect_row != count($agent_product_spec_ids)) { |
|
|
throw new \Exception('你选择的商户产品规格库存不足'); |
|
|
throw new \Exception('你选择的商户产品规格库存不足'); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -325,9 +328,9 @@ class OrderController extends Controller |
|
|
'product_id' => $ap->product->id, |
|
|
'product_id' => $ap->product->id, |
|
|
'num' => $formData['num'], |
|
|
'num' => $formData['num'], |
|
|
'price' => $ap->product->price, |
|
|
'price' => $ap->product->price, |
|
|
'agent_product_spec_id' => $formData['spec_id'], |
|
|
|
|
|
|
|
|
'agent_product_spec_id' => json_encode($agent_product_spec_ids), |
|
|
'product_type' => $ap->product->type, |
|
|
'product_type' => $ap->product->type, |
|
|
'product_spec_id' => $spec->productSpec->id, |
|
|
|
|
|
|
|
|
'product_spec_id' => json_encode($product_spec_ids), |
|
|
'service_persons' => $ap->product->service_persons, |
|
|
'service_persons' => $ap->product->service_persons, |
|
|
]); |
|
|
]); |
|
|
|
|
|
|
|
|
|