更新快递员事件

This commit is contained in:
yaooo 2023-08-11 21:29:40 +08:00
parent 5873ed6ccd
commit 2e1b2344bb
5 changed files with 97 additions and 54 deletions

View File

@ -2642,15 +2642,26 @@ class StoreOrderRepository extends BaseRepository
* @param $orderSn
* 更新扫描发货状态
*/
public function deliveryGoods($orderId, $orderSn)
public function deliveryGoods($orderId, $orderSn, $logisticsCode='')
{
$order = $this->dao->search([], null)->where('order_sn', $orderSn)->where('order_id', $orderId)->where('StoreOrder.is_del', 0)->find();
if ($logisticsCode) {
$order = $this->dao->search([], null)->where('order_sn', $orderSn)->where('order_id', $orderId)->where('logistics_code', $logisticsCode)->where('StoreOrder.status', 1)->where('StoreOrder.is_del', 0)->find();
} else {
$order = $this->dao->search([], null)->where('order_sn', $orderSn)->where('order_id', $orderId)->where('StoreOrder.status', 0)->where('StoreOrder.is_del', 0)->find();
}
if (!$order)
throw new ValidateException('订单不存在');
if ($order['status'] != 0 || $order['order_type'])
throw new ValidateException('订单不存在或编码code错误');
if ($order['order_type'])
throw new ValidateException('订单状态有误');
$order->status = 1;
$order->mark = '快递员扫描取件';
if ($logisticsCode) {
$order->status = 2;
$order->mark = '快递员已完成送货';
} else {
$order->status = 1;
$order->mark = '快递员已扫描取件';
event('product.delivery', compact('order'));
}
$order->save();
}

View File

@ -885,11 +885,18 @@ class Auth extends BaseController
public function deliveryGoods($id)
{
$orderSn = $this->request->param('order_sn');
$logisticsCode = $this->request->param('logistics_code') ?? '';
if (empty($orderSn)) {
return app('json')->fail('参数order_sn不能为空');
}
app()->make(StoreOrderRepository::class)->deliveryGoods($id, $orderSn);
return app('json')->success('快递员扫描取件成功');
if (empty($logisticsCode)) {
app()->make(StoreOrderRepository::class)->deliveryGoods($id, $orderSn);
return app('json')->success('快递员扫描取件成功');
} else {
app()->make(StoreOrderRepository::class)->deliveryGoods($id, $orderSn, $logisticsCode);
return app('json')->success('快递员已完成送货');
}
}
}

View File

@ -67,6 +67,7 @@ return [
// 'community_address'=>[\app\listener\CommunityAddress::class],
'order.paySuccessOrder'=>[\app\listener\paySuccessOrder::class],
'product.create'=>[\app\listener\ProductCreate::class],
'product.delivery'=>[\app\listener\DeliveryGoods::class],
'product.sell'=>[\app\listener\CloudProduct::class], //商品上下架
'refund.after'=>[\app\listener\AfterRefund::class],
'order.create'=>[\app\listener\OrderCreate::class],

View File

@ -0,0 +1,70 @@
<?php
declare (strict_types=1);
namespace app\listener;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\model\store\order\StoreOrder;
use crmeb\services\SmsService;
use crmeb\utils\DingTalk;
use think\facade\Db;
use think\facade\Log;
class DeliveryGoods
{
public $event;
public function handle($event)
{
$this->event = $event;
Log::info("============= handle监听order_id " . $this->event['order']['order_id']);
$this->event = $event;
//发起物流信息返回快递员手机
$logisticsPhone = $this->sendLogistics($this->event['order']['order_id'], $this->event['order']['order_sn']);
//生成用户的收货码、发生短信包含收货码
$this->generateLogisticsCode($this->event['order']['uid'], $this->event['order']['order_id'], $this->event['order']['order_sn'], $logisticsPhone);
}
//用户收货码
public function generateLogisticsCode($uid, $orderId, $orderSn, $logisticsPhone) {
$code = random_int(1000, 9999);
$res = app()->make(StoreOrderRepository::class)->update($orderId, [
'logistics_code' => $code
]);
if ($res) {
//收货人短信
$phone = StoreOrder::where('order_id', $orderId)->value('user_phone');
if ($phone) {
Log::info("发送短信 {$phone}, orderId: {$orderId}");
SmsService::create()->send($phone, 'TAKEGOOD_CODE', ['number' => substr($orderSn, -6), 'number2' => $code, 'phone' => $logisticsPhone]);
}
}
}
//发送物流
public function sendLogistics($orderId, $orderSn)
{
Log::info("发送物流信息 orderId: {$orderId}, orderSn: {$orderSn}");
$postUrl = 'http://logistics.lihaink.cn/api/lstSet';
$curlPost = [
'order_id' => $orderId,
'order_sn' => $orderSn,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);
curl_close($ch);
$phone = '';
if (!empty($data) && is_string($data)) {
$logisticsInfo = json_decode($data, true);
$phone = $logisticsInfo['data']['phone'];
Log::info("物流联系信息" . json_encode($logisticsInfo));
}
return $phone;
}
}

View File

@ -9,8 +9,6 @@ use app\common\model\system\merchant\Merchant;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\system\merchant\FinancialRecordRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use app\common\model\store\order\StoreOrder;
use crmeb\services\SmsService;
use crmeb\utils\DingTalk;
use think\facade\Db;
use think\facade\Log;
@ -28,7 +26,6 @@ class paySuccessOrder
public function handle($event)
{
Log::info("============= handle监听");
$this->event = $event;
$this->finance = [];
$this->index = 1;
@ -140,49 +137,6 @@ class paySuccessOrder
Log::error('订单分润出错', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'trace' => $e->getTraceAsString()]);
DingTalk::exception($e, '订单分润出错');
}
//发起物流信息返回快递员手机
$logisticsPhone = $this->sendLogistics($this->event['order']['order_id'], $this->event['order']['order_sn']);
//生成用户的收货码、发生短信包含收货码
$this->generateLogisticsCode($this->event['order']['uid'], $this->event['order']['order_id'], $this->event['order']['order_sn'], $logisticsPhone);
}
//用户收货码
public function generateLogisticsCode($uid, $orderId, $orderSn, $logisticsPhone) {
$code = random_int(1000, 9999);
$res = app()->make(StoreOrderRepository::class)->update($orderId, [
'logistics_code' => $code
]);
if ($res) {
//收货人短信
$phone = StoreOrder::where('order_id', $orderId)->value('user_phone');
if ($phone) {
Log::info("发送短信 {$phone}, orderId: {$orderId}");
SmsService::create()->send($phone, 'TAKEGOOD_CODE', ['number' => substr($orderSn, -6), 'number2' => $code, 'phone' => $logisticsPhone]);
}
}
}
//发送物流
public function sendLogistics($orderId, $orderSn)
{
$postUrl = 'http://logistics.lihaink.cn/api/lstSet';
$curlPost = [
'order_id' => $orderId,
'order_sn' => $orderSn,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);
curl_close($ch);
$logisticsInfo = json_decode($data, true);
$phone = $logisticsInfo['data']['phone'] ?? '';
Log::info("发送物流信息 orderId: {$orderId}, orderSn: {$orderSn}");
Log::info("物流联系信息" . json_encode($logisticsInfo));
return $phone;
}
public function calculate($type, $field)