From fbffb4cd3546c7d0bf856f5f6ef6be1b48eb607d Mon Sep 17 00:00:00 2001 From: ztt <835303992@qq.com> Date: Sat, 24 Feb 2024 21:07:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E8=B4=A7=E5=8D=95=E7=89=A9=E6=B5=81?= =?UTF-8?q?=E8=B7=9F=E8=B8=AA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/controller/Order.php | 33 ++--- app/api/service/Order.php | 22 +++- app/api/service/TransferRecord.php | 120 ++++++++++++++++++ .../library/express/provider/driver/Kd100.php | 2 +- app/common/model/TransferRecord.php | 21 ++- app/common/service/Express.php | 46 ++++++- 6 files changed, 212 insertions(+), 32 deletions(-) create mode 100644 app/api/service/TransferRecord.php diff --git a/app/api/controller/Order.php b/app/api/controller/Order.php index 56b8eb1c..aec74b70 100644 --- a/app/api/controller/Order.php +++ b/app/api/controller/Order.php @@ -19,7 +19,8 @@ use app\api\service\User as UserService; use app\api\service\Order as OrderService; use app\common\service\qrcode\Extract as ExtractQRcode; use cores\exception\BaseException; -use app\common\model\TransferRecord; +use app\api\service\TransferRecord; +use app\common\model\TransferRecord as TransferRecordModel; use app\common\model\UploadFile; /** @@ -93,7 +94,7 @@ class Order extends Controller ]); } /** - * 获取物流跟踪信息 + * 获取调货单物流跟踪信息 * @param int $orderId 订单ID * @return Json * @throws BaseException @@ -103,23 +104,11 @@ class Order extends Controller */ public function expressSearch(string $expressNo): Json { - $items = [ - [ - 'time' => "2021-12-15 17:19:28", - "context"=>"【杭州市】您的包裹已存放至【驿站】,记得早点来取它回家!", - "ftime"=>"2021-12-15 17:19:28", - "areaCode"=>"CN330102000000",//本数据元对应的行政区域编码,resultv2=1或者resultv2=4才会展示 - "areaName"=>"浙江,杭州市,上城区",//本数据元对应的行政区域名称,resultv2=1或者resultv2=4才会展示 - "status"=>"投柜或驿站",//本数据元对应的物流状态名称或者高级物流状态名称,resultv2=1或者resultv2=4才会展示 - "location"=>"浙江省 杭州市 上城区", //本数据元对应的快件当前地点,resultv2=4才会展示 - "areaCenter"=>"120.184349,30.25446", //本数据元对应的行政区域经纬度,resultv2=4才会展示 - "areaPinYin"=>"shang cheng qu",//本数据元对应的行政区域拼音,resultv2=4才会展示 - "statusCode"=>"501",//本数据元对应的高级物流状态值,resultv2=4才会展示 - ], - ]; - $express['items'] = $items; - $express['express_name'] = "顺丰"; - $express['express_no'] = "1222222222222"; + $transferRecordService = new TransferRecord(); + $data = $transferRecordService->getExpressByExpressNo($expressNo); + $express['items'] = $data['traces']; + $express['express_name'] = $data['express']['express_name']; + $express['express_no'] = $data['express_no']; return $this->renderSuccess($express); } /** @@ -260,7 +249,7 @@ class Order extends Controller if (!empty($params['search'])) { $where[] = ['goods_sn', 'like', "%{$params["search"]}%"]; } - $list = TransferRecord::where('status',1) + $list = TransferRecordModel::where('status',1) ->where($where) ->order("id desc") ->paginate(10)->each(function ($item, $key) { @@ -303,7 +292,7 @@ class Order extends Controller $params = $this->request->param(); $id = $params['id']??0; unset($params['id']); - TransferRecord::where('id',$id)->update($params); + TransferRecordModel::where('id',$id)->update($params); return $this->renderSuccess('ok'); } @@ -313,7 +302,7 @@ class Order extends Controller $storeid = request()->header()['storeid']; $params['user_id'] = \app\api\service\User::getCurrentLoginUserId(); $params['store_id'] = $storeid; - TransferRecord::create($params); + TransferRecordModel::create($params); return $this->renderSuccess('ok'); } diff --git a/app/api/service/Order.php b/app/api/service/Order.php index 98118066..b5e21a48 100644 --- a/app/api/service/Order.php +++ b/app/api/service/Order.php @@ -41,9 +41,9 @@ class Order extends OrderService // 获取发货单列表 $model = new DeliveryModel; $list = $model->getList($orderId); - // echo "
";
-        // print_r($list);
-        // exit();
+//         echo "
";
+//         print_r($list->toArray());
+//         exit();
         // 整理物流跟踪信息
         return $this->getExpressTraces($orderId, $list);
     }
@@ -65,9 +65,9 @@ class Order extends OrderService
         // 整理物流跟踪信息
         $Express = new ExpressService;
         foreach ($list as $item) {
-            // echo "
";
-            // print_r($item['express']);
-            // exit();
+//             echo "
";
+//             print_r($item['express']);
+//             exit();
             if (!empty($item['express'])) {
                 $item['traces'] = $Express->traces(
                     $item['express'],
@@ -97,4 +97,14 @@ class Order extends OrderService
             ->where('order.is_delete', '=', 0)
             ->sum('order_goods.total_num');
     }
+
+    public static function getExpressByExpressNo($expressNo) {
+        $expressService = new ExpressService();
+//        $Express->traces(
+//            $item['express'],
+//            $item['express_no'],
+//            $address,
+//            $this->getStoreId()
+//        );
+    }
 }
\ No newline at end of file
diff --git a/app/api/service/TransferRecord.php b/app/api/service/TransferRecord.php
new file mode 100644
index 00000000..e92f541a
--- /dev/null
+++ b/app/api/service/TransferRecord.php
@@ -0,0 +1,120 @@
+
+// +----------------------------------------------------------------------
+declare (strict_types=1);
+
+namespace app\api\service;
+
+use app\api\model\Order as OrderModel;
+use app\api\model\order\Delivery as DeliveryModel;
+use app\api\model\OrderAddress as OrderAddressModel;
+use app\common\service\BaseService;
+use app\common\service\Order as OrderService;
+use app\common\service\Express as ExpressService;
+use app\common\enum\order\OrderStatus as OrderStatusEnum;
+use cores\exception\BaseException;
+
+/**
+ * 调货服务类
+ * Class Order
+ * @package app\common\service
+ */
+class TransferRecord extends BaseService
+{
+    /**
+     * 获取物流信息
+     * @param int $orderId 订单ID
+     * @return mixed
+     * @throws BaseException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function express(int $orderId)
+    {
+        // 获取发货单列表
+        $model = new DeliveryModel;
+        $list = $model->getList($orderId);
+//         echo "
";
+//         print_r($list->toArray());
+//         exit();
+        // 整理物流跟踪信息
+        return $this->getExpressTraces($orderId, $list);
+    }
+
+    /**
+     * 整理物流跟踪信息
+     * @param int $orderId 订单ID
+     * @param $list
+     * @return mixed
+     * @throws BaseException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    private function getExpressTraces(int $orderId, $list)
+    {
+        // 订单收货地址
+        $address = OrderAddressModel::detail(['order_id' => $orderId]);
+        // 整理物流跟踪信息
+        $Express = new ExpressService;
+        foreach ($list as $item) {
+            if (!empty($item['express'])) {
+                $item['traces'] = $Express->traces(
+                    $item['express'],
+                    $item['express_no'],
+                    $address,
+                    $this->getStoreId()
+                );
+            }
+        }
+        return $list;
+    }
+
+    /**
+     * 获取某商品的购买件数
+     * @param int $userId 用户ID
+     * @param int $goodsId 商品ID
+     * @param int $orderSource
+     * @return int
+     */
+    public static function getGoodsBuyNum(int $userId, int $goodsId, int $orderSource): int
+    {
+        return (int) (new OrderModel)->setBaseQuery('order', [['order_goods', 'order_id']])
+            ->where('order_goods.user_id', '=', $userId)
+            ->where('order_goods.goods_id', '=', $goodsId)
+            ->where('order.order_source', '=', $orderSource)
+            ->where('order.order_status', '<>', OrderStatusEnum::CANCELLED)
+            ->where('order.is_delete', '=', 0)
+            ->sum('order_goods.total_num');
+    }
+
+    /**
+     * 获取仓库物流信息
+     * @param $expressNo
+     * @return \app\common\model\TransferRecord|array|mixed|\think\Model
+     * @throws BaseException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function getExpressByExpressNo($expressNo) {
+        $expressService = new ExpressService();
+        $transferRecord = \app\common\model\TransferRecord::getList($expressNo);
+        //物流追踪
+        $transferRecord['traces'] = $expressService->traces(
+            $transferRecord->express,
+            $expressNo,
+            $transferRecord['receiver_phone'],
+            $this::getStoreId()
+        );
+        return $transferRecord;
+    }
+}
\ No newline at end of file
diff --git a/app/common/library/express/provider/driver/Kd100.php b/app/common/library/express/provider/driver/Kd100.php
index 1c36b13c..0be6a91f 100644
--- a/app/common/library/express/provider/driver/Kd100.php
+++ b/app/common/library/express/provider/driver/Kd100.php
@@ -52,7 +52,7 @@ class Kd100 extends Driver
         log_record(['name' => '查询物流轨迹', 'provider' => 'kd100', 'param' => $param, 'result' => $data]);
         // 记录错误信息
         if (isset($data['returnCode']) || !isset($data['data'])) {
-            throwError('快递100物流查询API失败:' . $data['message']);
+            throwError('快递100物流查询API失败:' . $data['message']. $data['returnCode']);
         }
         // 格式化返回的数据
         return $this->formatTraces($data['data']);
diff --git a/app/common/model/TransferRecord.php b/app/common/model/TransferRecord.php
index 9b186d19..445a2ce5 100644
--- a/app/common/model/TransferRecord.php
+++ b/app/common/model/TransferRecord.php
@@ -13,9 +13,10 @@ declare (strict_types=1);
 namespace app\common\model;
 
 use cores\BaseModel;
+use think\model\relation\BelongsTo;
 
 /**
- * 模型类:购物车
+ * 模型类:调货记录表
  * Class Cart
  * @package app\common\model
  */
@@ -27,5 +28,23 @@ class TransferRecord extends BaseModel
     // 定义主键
     protected $pk = 'id';
 
+
+    public static function getList($expressNo)
+    {
+        return self::with(['express'])
+            ->where('express_no', '=', $expressNo)
+            ->find();
+    }
+
+    /**
+     * 关联物流公司记录
+     * @return BelongsTo
+     */
+    public function express(): BelongsTo
+    {
+        $module = self::getCalledModule();
+        return $this->belongsTo("app\\{$module}\\model\\Express", 'express_id');
+    }
+
     
 }
\ No newline at end of file
diff --git a/app/common/service/Express.php b/app/common/service/Express.php
index 986bf6a3..05102ebf 100644
--- a/app/common/service/Express.php
+++ b/app/common/service/Express.php
@@ -12,6 +12,7 @@ declare (strict_types=1);
 
 namespace app\common\service;
 
+use http\Encoding\Stream;
 use think\facade\Cache;
 use app\common\enum\Setting as SettingEnum;
 use app\common\model\store\Setting as SettingModel;
@@ -39,6 +40,7 @@ class Express extends BaseService
      */
     public function traces($express, string $expressNo, $address, int $storeId): array
     {
+//        var_dump($expressNo);
         // 获取物流查询API配置项
         $config = $this->getTracesConfig($storeId);
         // 物流公司编码
@@ -57,8 +59,8 @@ class Express extends BaseService
         $result = ExpressFacade::store($config['default'])
             ->setOptions($config['providerConfig'][$config['default']])
             ->query($code, $expressNo);
-            var_dump($result);
-            exit();
+//            var_dump($result);
+//            exit();
         // 记录缓存, 有效期60分钟
         Cache::set($cacheIndex, $result, 60 * 60);
         return $result;
@@ -81,4 +83,44 @@ class Express extends BaseService
         }
         return $config['traces'];
     }
+
+    /**
+     * 仓库物流轨迹查询
+     * @param mixed $express 物流公司记录
+     * @param string $expressNo 物流单号
+     * @param string $receiver_phone 收货人手机号码
+     * @param int $storeId 商城ID
+     * @return array
+     * @throws BaseException
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function transferTraces($express, string $expressNo, string $receiver_phone, int $storeId): array
+    {
+//        var_dump($expressNo);
+        // 获取物流查询API配置项
+        $config = $this->getTracesConfig($storeId);
+        // 物流公司编码
+        $code = $config['default'] === 'kd100' ? $express['kuaidi100_code'] : $express['kdniao_code'];
+        // 获取缓存的数据
+        $cacheIndex = "expressTraces_{$code}_$expressNo";
+        if (Cache::has($cacheIndex)) {
+            return Cache::get($cacheIndex);
+        }
+        // 使用阿里云查询顺丰时 物流单号需要加上手机尾号
+        if ($config['default'] == 'aliyun' && $code === 'SF') {
+            $lastPhoneNumber = mb_substr($receiver_phone, -4);
+            $expressNo = "{$expressNo}:$lastPhoneNumber";
+        }
+        // 请求API查询物流轨迹
+        $result = ExpressFacade::store($config['default'])
+            ->setOptions($config['providerConfig'][$config['default']])
+            ->query($code, $expressNo);
+//            var_dump($result);
+//            exit();
+        // 记录缓存, 有效期60分钟
+        Cache::set($cacheIndex, $result, 60 * 60);
+        return $result;
+    }
 }
\ No newline at end of file