diff --git a/app/Constants/Common/WxMiniCode.php b/app/Constants/Common/WxMiniCode.php index 7d30f1f..9838210 100644 --- a/app/Constants/Common/WxMiniCode.php +++ b/app/Constants/Common/WxMiniCode.php @@ -8,7 +8,7 @@ class WxMiniCode * 发送优惠券订阅消息模板id */ const string SEND_SUB_MESSAGE_GET_COUPON_TEMPLATE_ID = 'akV-wJt0AHWBpzPKvIsa0IRuzrf5yWPaMYvRRioI8XM'; - const string SEND_SUB_MESSAGE_DELIVER_TEMPLATE_ID = 'xxxxxxxxxx'; + const string SEND_SUB_MESSAGE_DELIVER_TEMPLATE_ID = 'DPRuxtI_qS-o513Y2Vr3Q6nifwGTnat6cArJueGzpOU'; /** * @var int 发送消息类型 1=获取优惠券 2=送达 diff --git a/app/Service/Api/Driver/DeliverService.php b/app/Service/Api/Driver/DeliverService.php index fa8a409..db9f5b7 100644 --- a/app/Service/Api/Driver/DeliverService.php +++ b/app/Service/Api/Driver/DeliverService.php @@ -10,12 +10,16 @@ declare(strict_types=1); namespace App\Service\Api\Driver; +use App\Amqp\Producer\WxSubMessageProducer; use App\Constants\Common\DriverCode; use App\Constants\Common\OrderCode; +use App\Constants\Common\WxMiniCode; use App\Exception\ErrException; use App\Model\Order; +use Hyperf\Amqp\Producer; use Hyperf\DbConnection\Db; use Hyperf\Di\Annotation\Inject; +use function Hyperf\Config\config; class DeliverService extends BaseDriverService { @@ -47,14 +51,21 @@ class DeliverService extends BaseDriverService if ($info->status == DriverCode::DESTINATION) throw new ErrException('该点位已送达'); - $orderIds = $this->orderModel - ->where('cycle_id',$this->cycleId) - ->where('status',OrderCode::DEPART) - ->where('site_id',$this->siteId) - ->pluck('id') - ->toArray(); + $orderList = $this->orderModel + ->leftJoin('pickup_code','pickup_code.order_id','=','order.id') + ->where('order.cycle_id',$this->cycleId) + ->where('order.status',OrderCode::DEPART) + ->where('order.site_id',$this->siteId) + ->select(['order.user_id','order.id','pickup_code.pickup_code','order.order_sno']) + ->get(); - Db::transaction(function () use ($info,$orderIds) { + if ($orderList->isEmpty()) { + $orderList = []; + } else { + $orderList = $orderList->toArray(); + } + + Db::transaction(function () use ($info,$orderList) { // $this->orderModel->whereIn('id', $orderIds)->update([ // 'status' => OrderCode::DEPART, // 'set_out_time' => date('Y-m-d H:i:s'), @@ -63,16 +74,55 @@ class DeliverService extends BaseDriverService $info->status = DriverCode::DESTINATION; if (!$info->save()) throw new ErrException('送达失败-01'); - - $dateTime = date('Y-m-d H:i:s'); - foreach (array_chunk($orderIds, 500) as $chunk) { - $this->orderModel->whereIn('id', $chunk)->update([ - 'status' => OrderCode::ARRIVE, - 'delivery_time' => $dateTime, - ]); + if (!empty($orderList)){ + $dateTime = date('Y-m-d H:i:s'); + foreach (array_chunk(array_column($orderList,'id'), 500) as $chunk) { + $this->orderModel->whereIn('id', $chunk)->update([ + 'status' => OrderCode::ARRIVE, + 'delivery_time' => $dateTime, + ]); + } } }); + $this->sendWxSubMessageMq($orderList); + return $this->return->success(); } + + /** + * @var Producer + */ + #[Inject] + protected Producer $producer; + + /** + * @param array $orderList + * @return void + */ + private function sendWxSubMessageMq(array $orderList): void + { + if (empty($orderList)) return; + + $userIds = []; + foreach ($orderList as $oneOrder) { + if (in_array($oneOrder['user_id'], $userIds)) continue; + + $msgData = [ + 'character_string19' => ['value' => $oneOrder['order_sno']], + 'thing27' => ['value' => $oneOrder['pickup_code']], + 'phrase16' => ['value' => '待取餐'], + 'thing20' => ['value' => '您的午餐来了,早点吃饭哈,您的身体最重要'], + ]; + + $message = new WxSubMessageProducer([ + 'type' => WxMiniCode::SEND_MSG_TYPE_DELIVER, + 'user_id' => $oneOrder['user_id'], + 'data' => $msgData, + 'page' => null + ]); + $this->producer->produce($message); + } + + } } \ No newline at end of file