order('id','desc') ->append(['order_distance_desc','dispatch_btn','pay_way_desc','appoint_time','appoint_date','order_status_desc','order_cancel_time']) ->with(['order_goods' => function($query){ $query->field('order_id,goods_id,goods_num,goods_snap,duration,goods_image,goods_name,goods_price')->hidden(['goods_snap']); },'order_gap','order_append','coach_info']) ->where(['id'=>$id]) ->findOrEmpty() ->toArray(); if(!isset($detail['address_snap']['house_number'])){ $detail['address_snap']['house_number'] = ''; } $orderLog = OrderLog::where(['order_id'=>$id,'type'=>OrderLogEnum::TYPE_COACH]) ->field('content,location,extra,create_time') ->select()->toArray(); $logLists = []; foreach ($orderLog as $key => $log){ $date = date('Y-m-d',strtotime($log['create_time'])); if($log['extra']){ foreach ($log['extra'] as $key => $extra){ $log['extra'][$key] = FileService::getFileUrl($extra); } } $logLists[$date][] = $log; } // $logLists = $orderLog; $settleOrder = []; if($detail['is_settle']){ $settleOrder = SettleOrder::where(['order_id'=>$detail['id']])->findOrEmpty(); } $shopCommission = $settleOrder['shop_commission'] ?? 0; $shopCarAmount = $settleOrder['shop_car_amount'] ?? 0; $coachCommission = $settleOrder['coach_commission'] ?? 0; $coachCarAmount = $settleOrder['coach_car_amount'] ?? 0; // $totalOrderAmount = $settleOrder['order_amount'] ?? 0; // $carAmount = $settleOrder['car_amount'] ?? 0; $detail['settle_info'] = [ 'status' => $detail['is_settle'], 'order_amount' => $settleOrder['order_amount'] ?? 0, 'refund_amount' => $detail['total_refund_amount'], 'settle_car' => $settleOrder['car_amount'] ?? 0, 'settle_amount' => $settleOrder['total_commission'] ?? 0, 'coach_settle' => $settleOrder['coach_commission'] ?? 0, 'shop_settle' => $settleOrder['shop_commission'] ?? 0, // 'total_settle_amount'=> round($totalOrderAmount + $carAmount ,2), ]; $detail['server_log_lists'] = $logLists; return $detail; } /** * @notes 订单更换技师时获取技师列表 * @param $params * @return array|bool * @author cjhao * @date 2024/10/9 16:30 */ public function coachLists($params,$shopId) { try { $id = $params['id'] ?? ''; $keyword = $params['keyword'] ?? ''; if(empty($id)){ throw new Exception('请选择订单'); } $order = Order::where(['id'=>$id])->findOrEmpty(); if(OrderEnum::ORDER_STATUS_WAIT_PAY == $order->order_status || OrderEnum::ORDER_STATUS_DEPART < $order->order_status){ throw new Exception('当前订单不可更改技师'); } $startTime = $order->getData('appoint_time'); $serverFinishTime = $order->getData('server_finish_time'); $coachLists = CoachLogic::getLeisureCoach($order['coach_id'],$startTime,$serverFinishTime,$order,$keyword); return $coachLists; }catch (Exception $e){ self::$error = $e->getMessage(); return false; } } /** * @notes 指派技师 * @param array $params * @return bool * @author cjhao * @date 2024/11/6 14:36 */ public function dispatchCoach(array $params) { try { Db::startTrans(); $id = $params['id'] ?? ''; $coachId = $params['coach_id'] ?? ''; if(empty($id)){ throw new Exception('请选择订单'); } if(empty($coachId)){ throw new Exception('请选择技师'); } $order = Order::where(['id'=>$id]) ->findOrEmpty(); if(OrderEnum::ORDER_STATUS_WAIT_PAY == $order->order_status || OrderEnum::ORDER_STATUS_DEPART < $order->order_status){ throw new Exception('当前订单不可更改技师'); } $startTime = $order->getData('appoint_time'); $serverFinishTime = $order->getData('server_finish_time'); $coachLists = CoachLogic::getLeisureCoach($order['coach_id'],$startTime,$serverFinishTime,$order); $coachIds = array_column($coachLists,'id'); if(!in_array($coachId,$coachIds)){ throw new Exception('该技师该时间段忙'); } //技师更换 $order->coach_id = $coachId; $order->save(); $originalCoachId = $order['coach_id']; $extra = [ 'original_coach_id' => $originalCoachId, 'coach_id' => $coachId ]; (new OrderLogLogic()) ->record(OrderLogEnum::TYPE_SHOP,OrderLogEnum::SHOP_CHANGE_COACH,$order['id'],$params['shop_id'],'','',$extra); Db::commit(); return true; }catch (Exception $e){ Db::rollback(); self::$error = $e->getMessage(); return false; } } }