From b112ab5f420bed4fe40e72821d46e346b487999b Mon Sep 17 00:00:00 2001 From: yaooo <272523191@qq.com> Date: Fri, 8 Sep 2023 11:43:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=94=AF=E4=BB=98=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/order/StoreOrderRepository.php | 6 +- crmeb/jobs/SendGoodsCodeJob.php | 119 ++++++++++++++++++ 2 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 crmeb/jobs/SendGoodsCodeJob.php diff --git a/app/common/repositories/store/order/StoreOrderRepository.php b/app/common/repositories/store/order/StoreOrderRepository.php index db8f870c..d66c2279 100644 --- a/app/common/repositories/store/order/StoreOrderRepository.php +++ b/app/common/repositories/store/order/StoreOrderRepository.php @@ -42,6 +42,7 @@ use app\common\repositories\user\UserRepository; use crmeb\jobs\PayGiveCouponJob; use crmeb\jobs\ProductImportJob; use crmeb\jobs\SendSmsJob; +use crmeb\jobs\SendGoodsCodeJob; use crmeb\jobs\UserBrokerageLevelJob; use crmeb\services\CombinePayService; use crmeb\services\CrmebServeServices; @@ -271,8 +272,9 @@ class StoreOrderRepository extends BaseRepository $flag = false; } } - //发起物流信息处理 - event('order.sendGoodsCode', $order); + //发起队列物流信息处理 + //event('order.sendGoodsCode', $order); + Queue::push(SendGoodsCodeJob::class, $order); // 商户流水账单数据 $finance[] = [ diff --git a/crmeb/jobs/SendGoodsCodeJob.php b/crmeb/jobs/SendGoodsCodeJob.php new file mode 100644 index 00000000..269b37a8 --- /dev/null +++ b/crmeb/jobs/SendGoodsCodeJob.php @@ -0,0 +1,119 @@ + +// +---------------------------------------------------------------------- + + +namespace crmeb\jobs; + + +use crmeb\interfaces\JobInterface; +use think\facade\Log; +use think\facade\Db; +use think\queue\Job; + +class SendGoodsCodeJob implements JobInterface +{ + + public $event; + + public function fire($job, $data) + { + $this->event = $data; + Log::info("sendGoodsCodeJob ============= handle监听order_id " . $this->event['order_id']); + if ($this->event['activity_type'] == 0) { + //发起物流信息返回快递员手机 + $logisticsPhone = $this->sendLogistics($this->event['order_id'], $this->event['order_sn']); + //生成用户的收货码 + $this->generateLogisticsCode($this->event['uid'], $this->event['order_id'], $this->event['order_sn'], $logisticsPhone); + //记录订单收货地址记录 + $this->recordOrderAddr($this->event); + } + + $job->delete(); + } + + //订单收货记录 + public function recordOrderAddr($order) { + //province_code . city_code . district_code . street_code . village_code . brigade_id; + //设置地址信息 + $addressInfo = explode(',', $order['user_address_code'] ?? ''); + $productOrder = [ + 'uid' => $order['uid'] ?? 0, + 'order_id' => $order['order_id'] ?? 0, + 'province_code' => $addressInfo[0] ?? '', + 'city_code' => $addressInfo[1] ?? '', + 'district_code' => $addressInfo[2] ?? '', + 'street_code' => $addressInfo[3] ?? '', + 'village_code' => $addressInfo[4] ?? '', + 'brigade_id' => $addressInfo[5] ?? 0, + 'status' => 1, + 'create_time' => date('Y-m-d H:i:s') + ]; + //商品信息 + $productInfo = Db::name('store_order_product')->where('order_id', $order['order_id'] ?? 0)->find(); + if ($productInfo) { + $productOrder['product_id'] = $productInfo['product_id'] ?? 0; + $productOrder['product_price'] = $productInfo['product_price'] ?? 0; + $productOrder['total_price'] = $productInfo['total_price'] ?? 0; + $productOrder['product_num'] = $productInfo['product_num'] ?? 0; + } + //商户信息 + $merchantInfo = Db::name('merchant')->where('mer_id', $order['mer_id'] ?? 0)->find(); + if ($merchantInfo) { + $productOrder['mer_id'] = $merchantInfo['mer_id'] ?? 0; + $productOrder['mer_category_id'] = $merchantInfo['category_id'] ?? 0; + $productOrder['mer_type_id'] = $merchantInfo['type_id'] ?? 0; + $productOrder['is_trader'] = $merchantInfo['is_trader'] ?? 0; + } + Db::name('ProductOrderLog')->insert($productOrder); + } + + //用户收货码 + public function generateLogisticsCode($uid, $orderId, $orderSn, $logisticsPhone) { + $code = random_int(1000, 9999); + app()->make(StoreOrderRepository::class)->update($orderId, [ + 'logistics_code' => $code, + 'logistics_phone' => $logisticsPhone + ]); + } + + //发送物流 + public function sendLogistics($orderId, $orderSn) + { + $postUrl = env('LOGISTICS_HOST_URL') . '/api/lstSet'; + Log::info("物流HOST: {$postUrl}"); + Log::info("发送物流信息 orderId: {$orderId}, orderSn: {$orderSn}"); + $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; + } + + public function failed($data) + { + // TODO: Implement failed() method. + } +}