_valid([ "order.require" => "请求参数错误", ]); if (!is_array($param)) return error($param); $order = (new SaasOrderLife)->where("order_id",$param['order'])->findOrEmpty(); if ($order->isEmpty()) return error("订单数据已失效"); return success("ok",$order->toArray()); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 来客订单详情 * @param Request $request * @return Response */ #[Route(path: "life",methods: "post")] public function getLifeOrder(Request $request): Response { try { $param = $request->post(); $sessionKey = (new Crypt)->config($this->getDyConfig())->getSessionKey($param['auth']); if (empty($sessionKey)) return error("授权登录失败"); if (!isset($sessionKey['openid'])) return error("获取数据失败"); $openId = $sessionKey['openid']; $userIn = [ 'open_id' => $openId, "create_ip" => $request->getRealIp(), "nickname" => "用户_".strtoupper(CodeExtend::random(3,5)), "avatar" => "https://img.inmei.cc/logo.png" ]; $user = (new SaasMember)->where("open_id",$openId)->findOrEmpty(); $userIn['id'] = $user['id']; if ($user->isEmpty()) { $userIn['id'] = $user->insertGetId($userIn); } // 同步已经下单的订单 if (!empty($param['account_id'])) { $this->asyncDyOrder($param['account_id'],$openId); } $order = (new SaasOrderLife)->where("open_id",$openId)->where('order_id',$param['order_id'])->with(['goods' => function($query){ $query->field("out_id,product_img"); },'store' => function($query){ $query->field("store_id,service_mobile"); }])->append(['expire_at'])->withAttr(['expire_at' => function($data,$resp){ return date("Y-m-d",strtotime($resp['expire_at'])); }])->findOrEmpty(); if ($order->isEmpty()) return error("订单尚未同步"); $order['order'] = (new SaasOrder)->where("order_id",$param['order_id'])->where("status","in",[1,2,4])->field("order_sn,order_id")->findOrEmpty(); return successTrans("success.data",[ "user" => get_object_vars((new AuthMode)->guard("member")->login($userIn)), "order" => $order ]); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 获取门店 * @param Request $request * @return Response */ #[Route(path: "store",methods: "post")] public function getLocationStore(Request $request): Response { try { $param = $this->_valid([ "order.require" => "请求参数错误", "location.require" => "请求参数错误", "keyword.default" => "" ],'post'); if (!is_array($param)) return error($param); $order = (new SaasOrderLife)->where("order_id",$param['order'])->where("open_id",$request->user['open_id'])->findOrEmpty(); if ($order->isEmpty()) return error("订单尚未同步"); $location = explode(",",$param['location']); $where = "store_id={$order['store_id']} and agent_id={$order['agent_id']}"; if (!empty($param['keyword'])) { $where .= " and poi_name like '%".$param['keyword']."%'"; } $resp = store_region($location[1],$location[0],2,$where); foreach ($resp as $key=>$val) { $resp[$key] = $val; $resp[$key]['poi_id'] = (string) $val['poi_id']; $resp[$key]['juli'] = format_money($val['juli']/1000); } $store = (new SaasStore)->where("store_id",$order['store_id'])->where("agent_id",$order['agent_id'])->findOrEmpty(); return success("ok",[ "data" => $resp, "store" => $store->toArray() ]); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 订单列表 * @param Request $request * @return Response */ #[Route(path: "data",methods: "get")] public function getOrderList(Request $request): Response { try { $param = $this->_valid([ "page.default" => 1, "size.default" => 10, "status.default" => 0 ]); if (!is_array($param)) return error($param); $param['open_id'] = $request->user['open_id']; $list = (new OrderService)->getDataListMini($param); return successTrans(100010,pageFormat($list)); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 订单列表 * @param Request $request * @return Response */ #[Route(path: "detail",methods: "get")] public function getOrderDetail(Request $request): Response { try { $param = $this->_valid([ "order.require" => "参数错误" ]); if (!is_array($param)) return error($param); $order = (new SaasOrder)->where("order_sn",$param['order'])->with(['goods' => function($query){ $query->field("out_id,product_name,product_img,product_price"); },'poi' => function ($query) { $query->field("poi_id,poi_name,poi_address,longitude,latitude"); },'parent' => function($query){ $query->field("order_id,pay_amount,expire_at,order_amount"); },"store" => function($query){ $query->field("store_id,service_mobile"); }])->findOrEmpty(); if ($order->isEmpty()) return error("订单数据异常"); if ($order['open_id'] <> $request->user['open_id']) return error("订单数据异常"); return successTrans("success.data",$order->toArray()); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 取消预约/服务 * @param Request $request * @return Response */ #[Route(path: "cancel",methods: "post")] public function cancelOrder(Request $request): Response { try { $param = $this->_valid([ "order.require" => "参数错误", "type.default" => 1 // 1无需审核 2需要审核 ],"post"); if (!is_array($param)) return error($param); $order = (new SaasOrder)->where("order_sn",$param['order'])->with(['goods' => function($query){ $query->field("out_id,product_name,product_img,product_price"); },'poi' => function ($query) { $query->field("poi_id,poi_name,poi_address"); }])->findOrEmpty(); if ($order->isEmpty()) return error("订单数据异常"); if ($order['open_id'] <> $request->user['open_id']) return error("订单数据异常"); if (empty($order['certificate_id'])) { $orderDetail = (new DouyinOrder)->config($this->getDyConfig())->token()->getOrderDetail([$order['order_id']]); if (!isset($orderDetail['data']['certificate_info_list'][0]['certificate_id'])) return error("订单数据异常"); $order->certificate_id = $orderDetail['data']['certificate_info_list'][0]['certificate_id']; $order['certificate_id'] = $orderDetail['data']['certificate_info_list'][0]['certificate_id']; } $resp = (new DouyinOrder)->config($this->getDyConfig())->token()->orderLock(1,$order['order_id'],$order['certificate_id'],$order['lock_key']); if ($resp['err_no'] <> 0) return error("取消失败,请重试"); $order->status = 3; if ($param['type'] == 1) { $order->express_status = 3; } else { $order->express_status = 4; } $order->save(); (new SaasOrderLife)->where("order_id",$order['order_id'])->update(['status' => 1]); (new SaasOrderLog)->insertGetId([ 'order_id' => $param['order'], "title" => "取消订单", "remark" => "用户取消核销信息" ]); return successTrans("success.data",$order->toArray()); } catch (\Throwable $throwable) { echo $throwable->getLine()."\n"; echo $throwable->getFile()."\n"; return error($throwable->getMessage()); } } /** * 删除预约订单 * @param Request $request * @return Response */ #[Route(path: "del",methods: "post")] public function delOrder(Request $request): Response { try { $param = $this->_valid([ "order.require" => "参数错误" ], "post"); if (!is_array($param)) return error($param); $order = (new SaasOrder)->where("order_sn",$param['order'])->findOrEmpty(); if ($order->isEmpty()) return error("订单数据异常"); if ($order['open_id'] <> $request->user['open_id']) return error("订单数据异常"); $state = $order->delete(); if (!$state) return error("删除失败"); return success("删除成功"); } catch (\Throwable $throwable) { echo $throwable->getLine()."\n"; echo $throwable->getFile()."\n"; return error($throwable->getMessage()); } } }