|
@@ -871,7 +871,7 @@ class OrderService
|
|
|
public function calculateOrderAmount(
|
|
|
int $userId,
|
|
|
int $addressId,
|
|
|
- int $coachId,
|
|
|
+ ?int $coachId,
|
|
|
int $projectId,
|
|
|
?int $agentId = null,
|
|
|
bool $useBalance = false,
|
|
@@ -886,15 +886,13 @@ class OrderService
|
|
|
abort_if(! $user || $user->state != UserStatus::OPEN->value, 404, '用户不存在或状态异常');
|
|
|
|
|
|
// 2. 查询技师项目
|
|
|
- $coach = $this->validateCoach($coachId);
|
|
|
+ $coach = $coachId ? $this->validateCoach($coachId) : null;
|
|
|
|
|
|
- abort_if(! $coach, 404, '技师不存在或状态异常');
|
|
|
- $coachProject = $coach->projects()
|
|
|
+ $coachProject = $coach ? $coach->projects()
|
|
|
->where('state', ProjectStatus::OPEN->value)
|
|
|
->where('project_id', $projectId)
|
|
|
- ->first();
|
|
|
+ ->first() : null;
|
|
|
|
|
|
- abort_if(! $coachProject, 404, '技师项目不存在');
|
|
|
// 3. 查询基础项目
|
|
|
$project = Project::where('id', $projectId)
|
|
|
->where('state', ProjectStatus::OPEN->value())
|
|
@@ -903,7 +901,7 @@ class OrderService
|
|
|
abort_if(! $project, 404, '项目不存在或状态异常');
|
|
|
|
|
|
// 4. 计算距离
|
|
|
- if (floatval($distance) <= 0) {
|
|
|
+ if (floatval($distance) <= 0 && $coachId) {
|
|
|
|
|
|
$address = $user->addresses()->find($addressId) ?? ['latitude' => $lat, 'longitude' => $lng];
|
|
|
|
|
@@ -917,7 +915,7 @@ class OrderService
|
|
|
$projectAmount = $this->getProjectPrice($project, $agentId, $projectId);
|
|
|
|
|
|
// 6. 计算路费
|
|
|
- $deliveryFee = $this->calculateDeliveryFee($coachId, $projectId, $agentId, $distance);
|
|
|
+ $deliveryFee = $coachId ? $this->calculateDeliveryFee($coachId, $projectId, $agentId, $distance) : 0;
|
|
|
|
|
|
// 7. 计算优惠券金额
|
|
|
$couponAmount = $this->calculateCouponAmount();
|