feat: 添加小程序订单推送事件

This commit is contained in:
Gosowong 2023-05-16 09:07:57 +08:00
parent 6668d26567
commit 37e3344262
3 changed files with 84 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -0,0 +1,69 @@
<?php
namespace app\listener\order;
use app\model\order\StoreOrder;
use app\services\order\StoreOrderCartInfoServices;
use app\services\order\StoreOrderServices;
use app\services\wechat\WechatUserServices;
use crmeb\exceptions\AdminException;
use crmeb\interfaces\ListenerInterface;
use crmeb\services\easywechat\orderShipping\MiniOrderService;
class OrderShippingListener implements ListenerInterface
{
public function handle($event): void
{
/** @var StoreOrder $order */
[$order, $delivery_type, $delivery_id, $delivery_name] = $event;
$order_shipping_open = sys_config('order_shipping_open', 0); // 小程序发货信息管理服务开关
if ($order && $order_shipping_open) {
if ($order['channel_type'] = 'routine') {
$out_trade_no = $order['order_id'];
//判断订单是否拆单
$delivery_mode = 1;
$is_all_delivered = true;
if ($order['pid'] > 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);
}
}
}
}

View File

@ -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;
}
}
}