From 0f7794f9d6628e26c61cff670e878347d2124326 Mon Sep 17 00:00:00 2001 From: wangxiaowei Date: Thu, 18 Jul 2024 15:27:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=90=8E=E7=AB=AF=E7=89=A9?= =?UTF-8?q?=E6=B5=81=E7=8A=B6=E6=80=81=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/logic/expressage/Kd100Logic.php | 48 ++++++++ .../model/expressage/Kd100Expressage.php | 10 ++ app/shop/logic/order/OrderLogic.php | 114 ++++++++++-------- app/shop/view/order/order/express.html | 4 +- extend/expressage/Expressage.php | 13 ++ extend/expressage/Kd100.php | 2 +- 6 files changed, 142 insertions(+), 49 deletions(-) create mode 100644 app/common/logic/expressage/Kd100Logic.php create mode 100644 app/common/model/expressage/Kd100Expressage.php diff --git a/app/common/logic/expressage/Kd100Logic.php b/app/common/logic/expressage/Kd100Logic.php new file mode 100644 index 00000000..0e9d2d18 --- /dev/null +++ b/app/common/logic/expressage/Kd100Logic.php @@ -0,0 +1,48 @@ + '在途', + 1 => '揽收', + 2 => '疑难', + 3 => '签收', + 4 => '退签', + 5 => '派件', + 8 => '清关', + 14 => '拒签', + ); + /* + * 添加或更新快递信息 + * */ + public static function save($order_id, $data) + { + $express['order_id'] = $order_id; + $express['state'] = $data['state']; + $express['com'] = $data['com']; + $express['nu'] = $data['nu']; + $express['data'] = json_encode($data['data'], JSON_UNESCAPED_UNICODE); + $express['sel_time'] = time() + self::$SEL_TIME; + + $kd100 = self::detail($order_id); + if ($kd100) { + Kd100Expressage::where(['order_id' => $order_id])->update($express); + } else { + Kd100Expressage::create($express); + } + } + + /* + * 获取物流详情 + * */ + public static function detail($order_id) + { + return Kd100Expressage::where(['order_id' => $order_id])->find(); + } +} \ No newline at end of file diff --git a/app/common/model/expressage/Kd100Expressage.php b/app/common/model/expressage/Kd100Expressage.php new file mode 100644 index 00000000..5ba49c00 --- /dev/null +++ b/app/common/model/expressage/Kd100Expressage.php @@ -0,0 +1,10 @@ +alias('o') ->Join('shop s', 's.id = o.shop_id') - ->Join('procurement u', 'u.id = o.user_id') + ->Join('user u', 'u.id = o.user_id') ->Join('order_goods g', 'g.order_id = o.id') ->where($where) ->group('o.id') @@ -176,9 +176,9 @@ class OrderLogic extends Logic ->alias('o') ->field($field) ->Join('shop s', 's.id = o.shop_id') - ->Join('procurement u', 'u.id = o.user_id') + ->Join('user u', 'u.id = o.user_id') ->Join('order_goods g', 'g.order_id = o.id') - ->with(['order_goods', 'procurement']) + ->with(['order_goods', 'user']) ->where($where) ->append([ 'delivery_address', 'pay_status_text', 'order_source_text', @@ -194,7 +194,7 @@ class OrderLogic extends Logic foreach ($lists as &$list) { $list['pay_time'] = $list['pay_time'] == '0' ? '未支付' : date('Y-m-d H:i:s', $list['pay_time']); - $list['procurement']['avatar'] = UrlServer::getFileUrl($list['procurement']['avatar']); + $list['user']['avatar'] = UrlServer::getFileUrl($list['user']['avatar']); foreach ($list['order_goods'] as $order_good) { $order_good['image'] = UrlServer::getFileUrl($order_good['image']); } @@ -262,14 +262,14 @@ class OrderLogic extends Logic $order = new Order(); $result = $order - ->with(['procurement', 'order_goods', 'invoice']) + ->with(['user', 'order_goods', 'invoice']) ->where('id', $id) ->append(['delivery_address', 'pay_status_text', 'order_status_text', 'pay_way_text', 'order_type_text', 'verification_status_text']) ->find(); $result['pay_time'] = $result['pay_time'] == 0 ? '未支付' : date('Y-m-d H:i:s', $result['pay_time']); - $user = $result['procurement']; + $user = $result['user']; $user['avatar'] = UrlServer::getFileUrl($user['avatar']); - $result['procurement'] = $user; + $result['user'] = $user; foreach ($result['order_goods'] as &$order_goods) { $order_goods['goods_image'] = empty($order_goods['spec_image']) ? UrlServer::getFileUrl($order_goods['image']) : UrlServer::getFileUrl($order_goods['spec_image']); @@ -329,6 +329,7 @@ class OrderLogic extends Logic */ public static function getShipping($order_id) { + $express_data = array(); $orderModel = new Order(); $order = $orderModel->alias('o') @@ -336,47 +337,66 @@ class OrderLogic extends Logic ->join('delivery d', 'd.order_id = o.id') ->where(['o.id' => $order_id]) ->find(); - $express = ConfigServer::get('express', 'way', '', ''); - $key = ConfigServer::get($express, 'appkey'); - $app = ConfigServer::get($express, 'appsecret'); - if (empty($express) || $order['shipping_status'] != 1 || empty($app) || empty($key)) { - return $traces[] = ['暂无物流信息']; - } - //快递配置设置为快递鸟时 - if ($express === 'kdniao') { - $expressage = (new Kdniao($app, $key, true)); - $shipping_field = 'codebird'; - } else { - $expressage = (new Kd100($app, $key, true)); - $shipping_field = 'code100'; - } + $result = Kd100Logic::detail($order_id); + if (!isset($result) || (time() > $result['sel_time'])) { + // 如果当前时间大于了api接口限制的时间,则调用api接口 + $express = ConfigServer::get('express', 'way'); + $key = ConfigServer::get($express, 'appkey'); + $app = ConfigServer::get($express, 'appsecret'); - //快递编码 - $shipping_code = Db::name('express') - ->where(['id' => $order['shipping_id']]) - ->value($shipping_field); - - //获取物流轨迹 - if ($shipping_code === 'SF' && $express === 'kdniao') { - $expressage->logistics($shipping_code, $order['invoice_no'], substr($order['mobile'],-4)); - }else { - $phone = ''; - if ($shipping_code === 'shunfeng') { - $phone = $order['mobile']; + if (empty($express) || $order['shipping_status'] != 1 || empty($app) || empty($key)) { + return $traces[] = ['暂无物流信息']; + } + //快递配置设置为快递鸟时 + if ($express === 'kdniao') { + $expressage = (new Kdniao($app, $key, true)); + $shipping_field = 'codebird'; + } else { + $expressage = (new Kd100($app, $key, true)); + $shipping_field = 'code100'; } - $expressage->logistics($shipping_code, $order['invoice_no'], $phone); - } - $traces = $expressage->logisticsFormat(); - if ($traces == false) { - $traces[] = [$expressage->getError()]; + //快递编码 + $shipping_code = Db::name('express') + ->where(['id' => $order['shipping_id']]) + ->value($shipping_field); + + //获取物流轨迹 + if ($shipping_code === 'SF' && $express === 'kdniao') { + $expressage->logistics($shipping_code, $order['invoice_no'], substr($order['mobile'],-4)); + }else { + $phone = ''; + if ($shipping_code === 'shunfeng') { + $phone = $order['mobile']; + } + $expressage->logistics($shipping_code, $order['invoice_no'], $phone); + } + + $traces = $expressage->logisticsFormat(); + + $state = 0; + if ($traces == false) { + $traces[] = [$expressage->getError()]; + } else { + $data = $expressage->logisticsFullInfo(); + Kd100Logic::save($order_id, $data); + $state = $data['state']; + + foreach ($traces as &$item) { + $item = array_values(array_unique($item)); + } + } + $express_data['state'] = Kd100Logic::$EXPRESS_STATE[$state]; + $express_data['list'] = $traces; } else { - foreach ($traces as &$item) { + $express_data['state'] = Kd100Logic::$EXPRESS_STATE[$result['state']]; + $express_data['list'] = json_decode($result['data'], true); + foreach ($express_data['list'] as &$item) { $item = array_values(array_unique($item)); } } - return $traces; + return $express_data; } /** @@ -777,7 +797,7 @@ class OrderLogic extends Logic public static function getPrintOrder($id) { return (new Order()) - ->with(['procurement', 'order_goods']) + ->with(['user', 'order_goods']) ->where('id', $id) ->append(['delivery_address']) ->findOrEmpty()->toArray(); @@ -953,7 +973,7 @@ class OrderLogic extends Logic $lists = Order::alias('o') ->leftJoin('shop s', 's.id = o.shop_id') - ->leftJoin('procurement u', 'u.id = o.user_id') + ->leftJoin('user u', 'u.id = o.user_id') ->join('order_goods g', 'g.order_id = o.id') ->with(['order_goods']) ->field($field) diff --git a/app/shop/view/order/order/express.html b/app/shop/view/order/order/express.html index 0d7aa2f8..2a0c5d17 100644 --- a/app/shop/view/order/order/express.html +++ b/app/shop/view/order/order/express.html @@ -56,6 +56,8 @@
{$detail.shipping.shipping_name | default="未知"}
{$detail.shipping.invoice_no | default= "未知"}
+ +
{$detail.shipping.traces.state | default= "未知"}
{else/}
无需快递
@@ -128,7 +130,7 @@ - {foreach $detail.shipping.traces as $k => $item} + {foreach $detail.shipping.traces.list as $k => $item} {if is_array($item)} {foreach $item as $k1 => $value} diff --git a/extend/expressage/Expressage.php b/extend/expressage/Expressage.php index bd96da32..c0e35636 100644 --- a/extend/expressage/Expressage.php +++ b/extend/expressage/Expressage.php @@ -8,6 +8,7 @@ class Expressage protected $debug; protected $logistics_info; + protected $logistics_full_info; public function __construct($app, $key, $debug = false) { @@ -16,6 +17,18 @@ class Expressage $this->debug = $debug; } + /** + * 返回完整的数据格式 + * @return bool + */ + public function logisticsFullInfo() + { + if (empty($this->logistics_full_info)) { + return false; + } + return $this->logistics_full_info; + } + /** * 格式化 * @return bool diff --git a/extend/expressage/Kd100.php b/extend/expressage/Kd100.php index a7f68896..bb577ec2 100644 --- a/extend/expressage/Kd100.php +++ b/extend/expressage/Kd100.php @@ -25,8 +25,8 @@ class Kd100 extends Expressage $result = Requests::get('http://poll.kuaidi100.com/poll/query.do?' . $params); $result = json_decode($result->body, true); if (isset($result['data'])) { + $this->logistics_full_info = $result; $this->logistics_info = $result['data']; - $this->logistics_info; } $this->error = json_encode($result, JSON_UNESCAPED_UNICODE); return false;