|
@@ -16,6 +16,7 @@ use App\Models\Project;
|
|
|
use App\Models\SysConfig;
|
|
|
use App\Models\User;
|
|
|
use App\Models\WalletRefundRecord;
|
|
|
+use Carbon\Carbon;
|
|
|
use Exception;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
@@ -116,24 +117,6 @@ class OrderService
|
|
|
->where('state', 'enable')
|
|
|
->firstOrFail();
|
|
|
|
|
|
- $address = $user->addresses()
|
|
|
- ->where('id', $data['address_id'])
|
|
|
- ->firstOrFail();
|
|
|
-
|
|
|
- // 查询技师及其认证状态
|
|
|
- $coach = CoachUser::where('id', $data['coach_id'])
|
|
|
- ->where('state', 'enable')
|
|
|
- ->whereHas('info', function ($query) {
|
|
|
- $query->where('state', 'approved');
|
|
|
- })
|
|
|
- ->whereHas('qual', function ($query) {
|
|
|
- $query->where('state', 'approved');
|
|
|
- })
|
|
|
- ->whereHas('real', function ($query) {
|
|
|
- $query->where('state', 'approved');
|
|
|
- })
|
|
|
- ->firstOrFail();
|
|
|
-
|
|
|
$project = Project::where('id', $data['project_id'])
|
|
|
->where('state', 'enable')
|
|
|
->firstOrFail();
|
|
@@ -141,6 +124,48 @@ class OrderService
|
|
|
// 2. 创建订单
|
|
|
$orderType = isset($data['order_id']) ? 'add_time' : 'normal';
|
|
|
|
|
|
+ if ($orderType == 'normal') {
|
|
|
+
|
|
|
+ // 查询技师及其认证状态
|
|
|
+ $coach = CoachUser::where('id', $data['coach_id'])
|
|
|
+ ->where('state', 'enable')
|
|
|
+ ->whereHas('info', function ($query) {
|
|
|
+ $query->where('state', 'approved');
|
|
|
+ })
|
|
|
+ ->whereHas('qual', function ($query) {
|
|
|
+ $query->where('state', 'approved');
|
|
|
+ })
|
|
|
+ ->whereHas('real', function ($query) {
|
|
|
+ $query->where('state', 'approved');
|
|
|
+ })
|
|
|
+ ->firstOrFail();
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 1. 检查原订单
|
|
|
+ $originalOrder = $user->orders->where('id', $data['order_id'])
|
|
|
+ ->whereIn('state', ['service_ing', 'service_end']) // 只有服务中和服务结束的订单可以加钟
|
|
|
+ ->firstOrFail();
|
|
|
+
|
|
|
+ // 2. 设置加钟订单的服务时间
|
|
|
+ if ($originalOrder->state == 'service_ing') {
|
|
|
+ // 服务中订单,加钟开始时间为原订单结束时间
|
|
|
+ $startTime = now(); // Carbon::parse($originalOrder->service_time)->addMinutes($originalOrder->project->duration);
|
|
|
+ } else {
|
|
|
+ // 服务结束订单,加钟开始时间为当前时间
|
|
|
+ $startTime = now();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 构建加钟订单数据
|
|
|
+ $data['order_id'] = $data['order_id']; // 关联原订单ID
|
|
|
+ $data['address_id'] = $originalOrder->address_id;
|
|
|
+ $data['service_time'] = $startTime;
|
|
|
+ $data['coach_id'] = $originalOrder->coach_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ $address = $user->addresses()
|
|
|
+ ->where('id', $data['address_id'])
|
|
|
+ ->firstOrFail();
|
|
|
+
|
|
|
// 计算订单金额
|
|
|
$amounts = $this->calculateOrderAmount(
|
|
|
$userId,
|
|
@@ -152,6 +177,7 @@ class OrderService
|
|
|
);
|
|
|
|
|
|
$order = new Order;
|
|
|
+
|
|
|
$order->user_id = $userId;
|
|
|
$order->project_id = $data['project_id'];
|
|
|
$order->coach_id = $data['coach_id'];
|
|
@@ -164,9 +190,11 @@ class OrderService
|
|
|
$order->project_amount = $amounts['project_amount'];
|
|
|
$order->traffic_amount = $orderType == 'add_time' ? 0 : $amounts['delivery_fee'];
|
|
|
$order->payment_type = ($data['use_balance'] && $amounts['pay_amount'] == 0) ? 'balance' : null;
|
|
|
+
|
|
|
$order->service_time = $data['service_time'];
|
|
|
|
|
|
// 从用户地址获取位置信息
|
|
|
+ $order->address_id = $data['address_id'];
|
|
|
$order->longitude = $address->longitude; // 经度
|
|
|
$order->latitude = $address->latitude; // 纬度
|
|
|
$order->location = $address->location; // 定位地址
|
|
@@ -186,7 +214,7 @@ class OrderService
|
|
|
|
|
|
// 4. 余额支付处理
|
|
|
if ($order->payment_type == 'balance') {
|
|
|
- $order->state = 'wait_receive';
|
|
|
+ $order->state = $orderType == 'normal' ? 'wait_receive' : 'service_ing';
|
|
|
$order->save();
|
|
|
|
|
|
// 创建订单支付记录
|
|
@@ -446,7 +474,7 @@ class OrderService
|
|
|
'remark' => '技师已离开',
|
|
|
]);
|
|
|
|
|
|
- // 3. 修改订单状态为撤离
|
|
|
+ // 3. 修��订单状态为撤离
|
|
|
$order->state = 'leave';
|
|
|
$order->save();
|
|
|
|
|
@@ -749,18 +777,6 @@ class OrderService
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 加钟
|
|
|
- */
|
|
|
- public function addTime($userId, $orderId)
|
|
|
- {
|
|
|
- $order = Order::where('id', $orderId)
|
|
|
- ->where('user_id', $userId)
|
|
|
- ->firstOrFail();
|
|
|
-
|
|
|
- return $this->createOrder($userId, $order->project_id, $order->address_id, $order->coach_id, 0, $orderId);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 指定技师
|
|
|
*/
|