| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <?php
- namespace app\controller\mini;
- use app\extra\basic\Base;
- use app\extra\douyin\Crypt;
- use app\extra\douyin\Order as DouyinOrder;
- use app\extra\service\saas\OrderService;
- use app\extra\tools\CodeExtend;
- use app\middleware\DyMiddleware;
- use app\model\saas\SaasMember;
- use app\model\saas\SaasOrder;
- use app\model\saas\SaasOrderLife;
- use app\model\saas\SaasOrderLog;
- use app\model\saas\SaasStore;
- use LinFly\Annotation\Route\Controller;
- use LinFly\Annotation\Route\Middleware;
- use LinFly\Annotation\Route\Route;
- use Shopwwi\WebmanAuth\Auth as AuthMode;
- use support\Request;
- use support\Response;
- #[Controller(prefix: "/api/dy/order"),Middleware(DyMiddleware::class)]
- class Order extends Base
- {
- protected array $noNeedLogin = ["getLifeOrder"];
- #[Route(path: "life/detail",methods: "get")]
- public function getOrderLifeDetail(): Response
- {
- try {
- $param = $this->_valid([
- "order.require" => "请求参数错误",
- ]);
- if (!is_array($param)) return error($param);
- $order = (new SaasOrderLife)->where("certificate_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,$param['order_id']);
- }
- $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','order'])->withAttr(['expire_at' => function($data,$resp){
- return date("Y-m-d",strtotime($resp['expire_at']));
- },'order' => function($data,$resp){
- return (new SaasOrder)->where("certificate_id",$resp['certificate_id'])->where("express_status","in",[0,1,2,4])->field("order_sn,order_id")->findOrEmpty();
- }])->select();
- if ($order->isEmpty()) return error("订单尚未同步");
- // $order['order'] = (new SaasOrder)->where("order_id",$param['order_id'])->where("express_status","in",[0,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("certificate_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 ($param['type'] == 1) {
- 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->express_status = 3;
- $lifeState = 1;
- } else {
- $order->express_status = 4;
- $lifeState = 2;
- }
- $order->refund_apply_at = getDateFull();
- $order->status = 3;
- $order->save();
- (new SaasOrderLife)->where("order_id",$order['order_id'])->update(['status' => $lifeState]);
- (new SaasOrderLog)->insertGetId([
- 'order_id' => $param['order'],
- "title" => "取消预约/服务",
- "remark" => ($param['type']==1?'用户取消预约,未发货自动同意解锁':'该订单已发货,需审核通过后才可解锁退款按钮')
- ]);
- 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("订单数据异常");
- if ($order['express_status'] == 4) 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());
- }
- }
- }
|