問題:多商戶自動確認收貨后發送短信問題,會導致以前的舊數據也會發送短信,造成短信損失以及對客戶造成騷擾,針對此問題做出一下優化調整;
一、修改邏輯:
調整自動確認收貨功能處理的訂單時間范圍為,發貨的前15天即:
/**
* 設置自動確認收獲的時間默認為 15
* 查詢確認收貨 15 天前發貨,再向前查詢15天;
* 超過這個時間未處理的訂單將不做處理,
* 比如:發貨時間 10-1 ; 自動確認時間:15天,當10-15日查詢的范圍:9-15 ~ 10-15 期間未處理訂單,9-15日以前訂單不做處理
*/
二、具體代碼修改
1. 修改監聽文件 :crmeb\listens\AuthTakeOrderListen.php
$timer = ((int)systemConfig('auto_take_order_timer')) ?: 15;
$end = date('Y-m-d H:i:s', strtotime("- $timer day"));
$start = date('Y-m-d H:i:s', strtotime("- 15 day",strtotime($end)));
$ids = app()->make(StoreOrderStatusRepository::class)->getTimeoutDeliveryOrder($start,$end);
2. 修改:app\common\dao\store\order\StoreOrderStatusDao.php
public function getTimeoutDeliveryOrder($start,$end){
return StoreOrderStatus::getDB()->alias('A')->leftJoin('StoreOrder B', 'A.order_id = B.order_id')
->whereIn('A.change_type', ['delivery_0', 'delivery_1','delivery_2'])
->where('A.type','order')
->whereBetweenTime('A.change_time',$start,$end)
->where('B.paid', 1)->where('B.status', 1)
->column('A.order_id');
}
修改完畢后,重啟swoole服務即可。