問題說明:用戶收貨或核銷后系統(tǒng)處理收貨記錄時間過長,影響后面問題處理
修改文件:app\listener\order\Take
use app\jobs\order\OrderStatusJob;
public function handle($event): void
{
[$orderInfo, $storeTitle, $isRecord] = $event;
try {
//修改收貨狀態(tài)
/** @var UserBrokerageServices $userBrokerageServices */
$userBrokerageServices = app()->make(UserBrokerageServices::class);
$userBrokerageServices->takeUpdate((int)$orderInfo['uid'], (int)$orderInfo['id']);
/** @var StoreOrderStatusServices $statusService */
$statusService = app()->make(StoreOrderStatusServices::class);
//增加收貨訂單狀態(tài)
OrderStatusJob::dispatch(['take', $orderInfo['id']]);
//配送員送貨 用戶自己點確認(rèn)收貨 寫入核銷記錄
if (isset($orderInfo['delivery_type']) && $orderInfo['delivery_type'] == 'send' && isset($orderInfo['verify_code']) && $orderInfo['verify_code'] && $isRecord) {
OrderWriteoffJob::dispatch([(int)$orderInfo['id'], [], [], $orderInfo]);
}
//更新完成時間
/** @var StoreOrderServices $orderServices */
$orderServices = app()->make(StoreOrderServices::class);
$order = $orderServices->get((int)$orderInfo['id']);
if ($order['store_id']) {
StoreFinanceJob::dispatchDo('takeDoJob', [$order, time()]);
} else if ($order['supplier_id']) {
SupplierFinanceJob::dispatchDo('takeDoJob', [$order, time()]);
}
//收貨給用戶發(fā)送消息
event('notice.notice', [['order' => $orderInfo, 'storeTitle' => $storeTitle], 'order_takever']);
//收貨給客服發(fā)送消息
event('notice.notice', [['order' => $orderInfo, 'storeTitle' => $storeTitle], 'send_admin_confirm_take_over']);
//發(fā)送短信
// $storeOrderTake->smsSend($orderInfo, $storeTitle);
// $storeOrderTake->smsSendTake($orderInfo);
//檢測主訂單 是否全部收貨
if ($orderInfo['pid']) {
$id = (int)$orderInfo['pid'];
/** @var StoreOrderServices $orderServices */
$orderServices = app()->make(StoreOrderServices::class);
//默認(rèn)部分收貨
$take_data = ['status' => '5'];
$status_data = ['oid' => $id, 'change_time' => time()];
if ($orderServices->count(['pid' => $id]) == $orderServices->count(['pid' => $id, 'status' => 3])) {
$take_data = ['status' => 2];
$status_data['change_type'] = 'take_split';
$status_data['change_message'] = '已拆分收貨';
} else {
$status_data['change_type'] = 'take_part_split';
$status_data['change_message'] = '已拆分部分收貨';
}
//改變主訂單狀態(tài)
$orderServices->update($id, $take_data);
//記錄主訂單狀態(tài)
$statusService->save($status_data);
}
} catch (\Throwable $e) {
}
//銷毀鎖
$key = md5('lock_order_take_' . $orderInfo['id']);
CacheService::unLock($key);
}
修改文件:app\services\order\StoreOrderStatusServices
修改方法:saveStatus()
public function saveStatus(string $type, int $orderId, array $data = [])
{
if (!$type || !$orderId) {
return true;
}
$statusData = ['oid' => $orderId, 'change_time' => time(), 'change_type' => ''];
switch ($type) {
case 'create'://創(chuàng)建
$statusData['change_type'] = 'cache_key_create_order';
$statusData['change_message'] = '訂單生成';
if (isset($data['changePrice']) && $data['changePrice'] > 0) {//有改價
$this->saveStatus('edit', $orderId, $data);
}
break;
case 'edit'://改價
$statusData['change_type'] = 'order_edit';
$statusData['change_message'] = '商品總價為:' . ($data['totalPrice'] ?? 0) . ' 修改實際支付金額為:' . ($data['payPrice'] ?? 0);
break;
case 'pay'://支付
$statusData['change_type'] = 'pay_success';
$statusData['change_message'] = '用戶付款成功';
break;
case 'delivery'://發(fā)貨
break;
case 'take'://收貨
if (!$this->dao->count(['oid' => $orderId, 'change_type' => ['take_delivery', 'user_take_delivery']])) {//是否已經(jīng)寫入收貨消息
$statusData['change_type'] = 'take_delivery';
$statusData['change_message'] = '已收貨';
}
break;
case 'reply'://評價
break;
default:
throw new ValidateException('未知訂單類型記錄');
break;
}
$this->dao->save($statusData);
return true;
}