From 37e334426289a74d2219532b823e6df819dfbe31 Mon Sep 17 00:00:00 2001 From: Gosowong <1329847115@qq.com> Date: Tue, 16 May 2023 09:07:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E8=AE=A2=E5=8D=95=E6=8E=A8=E9=80=81=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crmeb/app/dao/order/StoreOrderDao.php | 5 ++ .../listener/order/OrderShippingListener.php | 69 +++++++++++++++++++ .../app/services/order/StoreOrderServices.php | 10 +++ 3 files changed, 84 insertions(+) create mode 100644 crmeb/app/listener/order/OrderShippingListener.php diff --git a/crmeb/app/dao/order/StoreOrderDao.php b/crmeb/app/dao/order/StoreOrderDao.php index c8a62c478..066fc0389 100644 --- a/crmeb/app/dao/order/StoreOrderDao.php +++ b/crmeb/app/dao/order/StoreOrderDao.php @@ -977,4 +977,9 @@ class StoreOrderDao extends BaseDao $query->page($page, $limit); })->field(['uid', 'order_id', 'real_name', 'status', 'pay_price', 'total_num', 'add_time', 'pay_time', 'paid'])->order('add_time desc')->select()->toArray(); } + + public function getSubOrderNotSend(int $pid, int $order_id) + { + return $this->getModel()->where('id', $pid)->where('status', '0')->where('id', '<>', $order_id)->count(); + } } diff --git a/crmeb/app/listener/order/OrderShippingListener.php b/crmeb/app/listener/order/OrderShippingListener.php new file mode 100644 index 000000000..79177e83f --- /dev/null +++ b/crmeb/app/listener/order/OrderShippingListener.php @@ -0,0 +1,69 @@ + 0) { + $order = ''; + $delivery_mode = 2; + // 判断订单是否全部发货 + /** @var StoreOrderServices $orderServices */ + $orderServices = app()->make(StoreOrderServices::class); + $is_all_delivered = $orderServices->checkSubOrderNotSend((int)$order['pid'], (int)$order['id']); + } + + // 整理商品信息 + /** @var StoreOrderCartInfoServices $orderInfoServices */ + $orderInfoServices = app()->make(StoreOrderCartInfoServices::class); + $item_desc = $orderInfoServices->getCarIdByProductTitle((int)$order['id'], true); + $shipping_list = [ + 'item_desc' => $item_desc + ]; + //判断订单物流模式 + if ($order['shipping_type'] == 1) { + if ($delivery_type == 1) { + $shipping_list = [ + 'tracking_no' => $delivery_id ?? '', + 'express_company' => $delivery_name ?? '', + 'item_desc' => $item_desc, + 'contact' => [ + 'receiver_contact' => $order['user_phone'] + ] + ]; + } + $logistics_type = $delivery_type; + } else { + $logistics_type = 4; + } + //查找支付者openid + /** @var WechatUserServices $wechatUserService */ + $wechatUserService = app()->make(WechatUserServices::class); + $payer_openid = $wechatUserService->uidToOpenid($order['pay_uid'], 'routine'); + if (empty($payer_openid)) { + throw new AdminException('订单支付人异常'); + } + MiniOrderService::shippingByTradeNo($out_trade_no, $logistics_type, $shipping_list, $payer_openid, $delivery_mode, $is_all_delivered); + } + } + } +} diff --git a/crmeb/app/services/order/StoreOrderServices.php b/crmeb/app/services/order/StoreOrderServices.php index c2d03577c..a316bd0bf 100644 --- a/crmeb/app/services/order/StoreOrderServices.php +++ b/crmeb/app/services/order/StoreOrderServices.php @@ -2697,4 +2697,14 @@ HTML; return $res; } + + public function checkSubOrderNotSend(int $pid, int $order_id) + { + $order_count = $this->dao->getSubOrderNotSend($pid, $order_id); + if ($order_count > 0) { + return false; + } else { + return true; + } + } }