mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-10-30 06:20:50 +00:00
Merge branch 'v5.0.0dev' of https://gitee.com/ZhongBangKeJi/CRMEB into v5.0.0dev
This commit is contained in:
commit
2020678ca3
27
crmeb/app/jobs/MiniOrderJob.php
Normal file
27
crmeb/app/jobs/MiniOrderJob.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace app\jobs;
|
||||
|
||||
use crmeb\basic\BaseJobs;
|
||||
use crmeb\services\easywechat\orderShipping\MiniOrderService;
|
||||
use crmeb\traits\QueueTrait;
|
||||
use EasyWeChat\Core\Exceptions\HttpException;
|
||||
use think\Exception;
|
||||
|
||||
class MiniOrderJob extends BaseJobs
|
||||
{
|
||||
use QueueTrait;
|
||||
|
||||
/**
|
||||
* @throws HttpException
|
||||
*/
|
||||
public function doJob(string $out_trade_no, int $logistics_type, array $shipping_list, string $payer_openid, string $path, int $delivery_mode = 1, bool $is_all_delivered = true)
|
||||
{
|
||||
try {
|
||||
MiniOrderService::shippingByTradeNo($out_trade_no, $logistics_type, $shipping_list, $payer_openid, $path, $delivery_mode, $is_all_delivered);
|
||||
} catch (HttpException $e) {
|
||||
// 订单异常处理
|
||||
throw new HttpException($e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
namespace app\listener\order;
|
||||
|
||||
use app\jobs\MiniOrderJob;
|
||||
use app\model\order\StoreOrder;
|
||||
use app\services\order\StoreOrderCartInfoServices;
|
||||
use app\services\order\StoreOrderServices;
|
||||
@ -15,61 +16,95 @@ class OrderShippingListener implements ListenerInterface
|
||||
public function handle($event): void
|
||||
{
|
||||
/** @var StoreOrder $order */
|
||||
[$order, $delivery_type, $delivery_id, $delivery_name] = $event;
|
||||
[$order_type, $order, $delivery_type, $delivery_id, $delivery_name] = $event;
|
||||
$order_shipping_open = sys_config('order_shipping_open', 0); // 小程序发货信息管理服务开关
|
||||
$secs = 0;
|
||||
if ($order && $order_shipping_open) {
|
||||
if ($order['is_channel'] == 1 && $order['pay_type'] == 'weixin') {
|
||||
$out_trade_no = $order['order_id'];
|
||||
//判断订单是否拆单
|
||||
$delivery_mode = 1;
|
||||
$is_all_delivered = true;
|
||||
if ($order['pid'] > 0) {
|
||||
$delivery_mode = 2;
|
||||
// 判断订单是否全部发货
|
||||
/** @var StoreOrderServices $orderServices */
|
||||
$orderServices = app()->make(StoreOrderServices::class);
|
||||
$is_all_delivered = $orderServices->checkSubOrderNotSend((int)$order['pid'], (int)$order['id']);
|
||||
$p_order = $orderServices->get((int)$order['pid']);
|
||||
if (!$p_order) {
|
||||
throw new AdminException('拆单异常');
|
||||
}
|
||||
$out_trade_no = $p_order['order_id'];
|
||||
}
|
||||
//判断订单是否拆单
|
||||
$delivery_mode = 1;
|
||||
$is_all_delivered = true;
|
||||
if ($order_type == 'product') { // 商品订单
|
||||
if ($order['is_channel'] == 1 && $order['pay_type'] == 'weixin') {
|
||||
$out_trade_no = $order['order_id'];
|
||||
/** @var StoreOrderCartInfoServices $orderInfoServices */
|
||||
$orderInfoServices = app()->make(StoreOrderCartInfoServices::class);
|
||||
$item_desc = $orderInfoServices->getCarIdByProductTitle((int)$order['id'], true);
|
||||
|
||||
// 整理商品信息
|
||||
/** @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']
|
||||
]
|
||||
]
|
||||
];
|
||||
if ($order['pid'] > 0) {
|
||||
$delivery_mode = 2;
|
||||
// 判断订单是否全部发货
|
||||
/** @var StoreOrderServices $orderServices */
|
||||
$orderServices = app()->make(StoreOrderServices::class);
|
||||
$is_all_delivered = $orderServices->checkSubOrderNotSend((int)$order['pid'], (int)$order['id']);
|
||||
$p_order = $orderServices->get((int)$order['pid']);
|
||||
if (!$p_order) {
|
||||
throw new AdminException('拆单异常');
|
||||
}
|
||||
$out_trade_no = $p_order['order_id'];
|
||||
}
|
||||
$logistics_type = $delivery_type;
|
||||
$pay_uid = $order['pay_uid'];
|
||||
$path = 'pages/goods/order_details/index?order_id=' . $out_trade_no;
|
||||
} else {
|
||||
$logistics_type = 4;
|
||||
return;
|
||||
}
|
||||
//查找支付者openid
|
||||
/** @var WechatUserServices $wechatUserService */
|
||||
$wechatUserService = app()->make(WechatUserServices::class);
|
||||
$payer_openid = $wechatUserService->uidToOpenid($order['pay_uid'], 'routine');
|
||||
if (empty($payer_openid)) {
|
||||
throw new AdminException('订单支付人异常');
|
||||
} else if ($order_type == 'recharge') { // 充值订单
|
||||
if ($order['recharge_type'] == 'weixin') {
|
||||
$delivery_type = 3;
|
||||
$item_desc = '用户充值' . $order['price'];
|
||||
$out_trade_no = $order['order_id'];
|
||||
$pay_uid = $order['uid'];
|
||||
$secs = 10;
|
||||
$path = '/pages/users/user_bill/index?type=2';
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
MiniOrderService::shippingByTradeNo($out_trade_no, $logistics_type, $shipping_list, $payer_openid, $delivery_mode, $is_all_delivered);
|
||||
} else if ($order_type == 'member') { // 会员订单
|
||||
if ($order['pay_type'] == 'weixin') {
|
||||
$delivery_type = 3;
|
||||
$item_desc = '用户购买' . $order['member_type'] . '会员卡';
|
||||
$out_trade_no = $order['order_id'];
|
||||
$pay_uid = $order['uid'];
|
||||
$secs = 10;
|
||||
$path = '/pages/annex/vip_paid/index';
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
// 整理商品信息
|
||||
$shipping_list = [
|
||||
['item_desc' => $item_desc]
|
||||
];
|
||||
//判断订单物流模式
|
||||
if (!isset($order['shipping_type']) || $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($pay_uid, 'routine');
|
||||
if (empty($payer_openid)) {
|
||||
throw new AdminException('订单支付人异常');
|
||||
}
|
||||
if ($secs) {
|
||||
sleep($secs);
|
||||
}
|
||||
MiniOrderJob::dispatch('doJob', [$out_trade_no, $logistics_type, $shipping_list, $payer_openid, $path, $delivery_mode, $is_all_delivered]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -346,6 +346,9 @@ class OtherOrderServices extends BaseServices
|
||||
if ($spread_two && $spread_two_price > 0) $this->memberBrokerage($spread_two, $spread_two_price, 'get_two_member_brokerage', $orderInfo);
|
||||
}
|
||||
|
||||
$orderInfo['pay_type'] = $paytype;
|
||||
// 小程序订单服务
|
||||
event('OrderShipping', ['member', $orderInfo, 3, '', '']);
|
||||
return false !== $res;
|
||||
}
|
||||
|
||||
|
||||
@ -463,7 +463,8 @@ class StoreOrderDeliveryServices extends BaseServices
|
||||
if (!$data['delivery_id']) {
|
||||
$data['delivery_id'] = uniqid();
|
||||
}
|
||||
event('OrderShipping', [$orderInfo, $type, $data['delivery_id'], $data['delivery_name']]);
|
||||
// 小程序订单管理
|
||||
event('OrderShipping', ['product', $orderInfo, $type, $data['delivery_id'], $data['delivery_name']]);
|
||||
//到期自动收货
|
||||
event('OrderDeliveryListener', [$orderInfo, $storeName, $data, $type]);
|
||||
return $res;
|
||||
|
||||
@ -100,6 +100,11 @@ class StoreOrderSuccessServices extends BaseServices
|
||||
event('NoticeListener', [$orderInfo, 'admin_pay_success_code']);
|
||||
// 推送订单
|
||||
event('OutPushListener', ['order_pay_push', ['order_id' => (int)$orderInfo['id']]]);
|
||||
|
||||
// 小程序订单管理 (自提商品)
|
||||
if ($orderInfo['shipping_type'] == 2) {
|
||||
event('OrderShipping', ['product', $orderInfo, 4, '', '']);
|
||||
}
|
||||
$res = $res1 && $resPink;
|
||||
return false !== $res;
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ class StoreOrderTakeServices extends BaseServices
|
||||
//查找订单信息
|
||||
$order = $this->dao->getOne(['order_id' => $merchant_trade_no]);
|
||||
if (!$order) {
|
||||
throw new ApiException(410173);
|
||||
return true;
|
||||
}
|
||||
if ($order['pid'] == -1) { // 有子订单
|
||||
// 查找待收货的子订单
|
||||
|
||||
@ -492,6 +492,10 @@ class UserRechargeServices extends BaseServices
|
||||
|
||||
//提醒推送
|
||||
event('NoticeListener', [['order' => $order, 'now_money' => $now_money], 'recharge_success']);
|
||||
|
||||
$order['pay_type'] = $other['pay_type'];
|
||||
// 小程序订单服务
|
||||
event('OrderShipping', ['recharge', $order, 3, '', '']);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -13,6 +13,7 @@ namespace crmeb\services\app;
|
||||
|
||||
use app\services\order\StoreOrderTakeServices;
|
||||
use crmeb\exceptions\AdminException;
|
||||
use crmeb\services\easywechat\orderShipping\MiniOrderService;
|
||||
use crmeb\services\SystemConfigService;
|
||||
use app\services\pay\PayNotifyServices;
|
||||
use crmeb\services\easywechat\Application;
|
||||
@ -887,7 +888,7 @@ class MiniProgramService
|
||||
break;
|
||||
case 'trade_manage_order_settlement': // 订单完成发货时 订单结算时
|
||||
if (isset($message['estimated_settlement_time'])) { //订单完成发货时
|
||||
|
||||
MiniOrderService::notifyConfirmByTradeNo($message['merchant_trade_no'], time());
|
||||
}
|
||||
if (isset($message['confirm_receive_method'])) { // 订单结算时
|
||||
/** @var StoreOrderTakeServices $StoreOrderTakeServices */
|
||||
|
||||
@ -69,9 +69,9 @@ class MiniOrderService
|
||||
* @date 2023/05/09
|
||||
* @author yyw
|
||||
*/
|
||||
public static function shippingByTradeNo(string $out_trade_no, int $logistics_type, array $shipping_list, string $payer_openid, int $delivery_mode = 1, bool $is_all_delivered = true)
|
||||
public static function shippingByTradeNo(string $out_trade_no, int $logistics_type, array $shipping_list, string $payer_openid, string $path, int $delivery_mode = 1, bool $is_all_delivered = true)
|
||||
{
|
||||
return self::order()->shippingByTradeNo($out_trade_no, $logistics_type, $shipping_list, $payer_openid, $delivery_mode, $is_all_delivered);
|
||||
return self::order()->shippingByTradeNo($out_trade_no, $logistics_type, $shipping_list, $payer_openid, $path, $delivery_mode, $is_all_delivered);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -70,7 +70,7 @@ class OrderClient extends BaseOrder
|
||||
* @date 2023/05/10
|
||||
* @author yyw
|
||||
*/
|
||||
public function shippingByTradeNo(string $out_trade_no, int $logistics_type, array $shipping_list, string $payer_openid, int $delivery_mode = 1, bool $is_all_delivered = true)
|
||||
public function shippingByTradeNo(string $out_trade_no, int $logistics_type, array $shipping_list, string $payer_openid, $path, int $delivery_mode = 1, bool $is_all_delivered = true)
|
||||
{
|
||||
if (!$this->checkManaged()) {
|
||||
throw new AdminException('开通小程序订单管理服务后重试');
|
||||
@ -101,9 +101,8 @@ class OrderClient extends BaseOrder
|
||||
'contact' => $contact
|
||||
];
|
||||
}
|
||||
|
||||
// 跳转路径
|
||||
$this->setMesJumpPath(self::PATH . '?order_id=' . $out_trade_no);
|
||||
$this->setMesJumpPath($path);
|
||||
return $this->shipping($params);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user