完善后端物流状态显示

This commit is contained in:
wangxiaowei 2024-07-18 15:27:12 +08:00
parent 8e2665e50f
commit 0f7794f9d6
6 changed files with 142 additions and 49 deletions

@ -0,0 +1,48 @@
<?php
namespace app\common\logic\expressage;
use app\common\basics\Logic;
use app\common\model\expressage\Kd100Expressage;
class Kd100Logic extends Logic
{
private static $SEL_TIME = 31 * 60; // 物流查询的时间需要大于30分钟,不然会锁单
public static $EXPRESS_STATE = array(
0 => '在途',
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();
}
}

@ -0,0 +1,10 @@
<?php
namespace app\common\model\expressage;
use app\common\basics\Models;
class Kd100Expressage extends Models
{
protected $table = 'ls_kd100_expressage';
}

@ -28,32 +28,32 @@ use app\common\enum\OrderLogEnum;
use app\common\enum\PayEnum;
use app\common\enum\TeamEnum;
use app\common\enum\VerificationEnum;
use app\common\logic\expressage\Kd100Logic;
use app\common\logic\GoodsVirtualLogic;
use app\common\logic\OrderLogLogic;
use app\common\logic\OrderRefundLogic;
use app\common\model\DevRegion;
use app\common\model\Express;
use app\common\model\order\Order;
use app\common\model\DevRegion;
use app\common\model\order\Verification;
use app\common\model\printer\Printer;
use app\common\model\printer\PrinterConfig;
use app\common\model\team\Team;
use app\common\model\team\TeamFound;
use app\common\model\team\TeamJoin;
use app\common\model\user\UserLevel;
use app\common\model\order\Verification;
use app\common\server\ConfigServer;
use app\common\server\ExportExcelServer;
use app\common\server\UrlServer;
use app\common\server\YlyPrinter;
use app\shop\logic\printer\PrinterLogic;
use think\facade\Cache;
use expressage\Kd100;
use expressage\Kdniao;
use think\facade\Db;
use think\Exception;
use think\facade\Cache;
use think\facade\Db;
use think\Model;
/**
* 订单管理-逻辑
* Class GoodsLogic
@ -166,7 +166,7 @@ class OrderLogic extends Logic
$count = $order
->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)

@ -56,6 +56,8 @@
<div class="width-160">{$detail.shipping.shipping_name | default="未知"}</div>
<label class="layui-form-label ">快递单号:</label>
<div class="width-160">{$detail.shipping.invoice_no | default= "未知"}</div>
<label class="layui-form-label ">物流状态:</label>
<div class="width-160">{$detail.shipping.traces.state | default= "未知"}</div>
{else/}
<label class="layui-form-label ">配送方式:</label>
<div class="width-160">无需快递</div>
@ -128,7 +130,7 @@
</tr>
</thead>
<tbody>
{foreach $detail.shipping.traces as $k => $item}
{foreach $detail.shipping.traces.list as $k => $item}
<tr>
{if is_array($item)}
{foreach $item as $k1 => $value}

@ -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

@ -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;