在后台一号通里面购买物流查询接口
后台发货的时候选择物流公司和单号,但是前端小程序上却没有显示实时物流
app/services/shipping/ExpressServices.php

<?php
CRMEB二次开发QQ: 735660248
namespace app\services\shipping;
use app\dao\shipping\ExpressDao;
use app\services\BaseServices;
use app\services\serve\ServeServices;
use crmeb\exceptions\AdminException;
use crmeb\services\CacheService;
use crmeb\services\ExpressService;
use crmeb\services\FormBuilder as Form;/*** 物流数据* Class ExpressServices* @package app\services\shipping* @method save(array $data) 保存数据* @method get(int $id, ?array $field = []) 获取数据* @method delete(int $id, ?string $key = null) 删除数据* @method update($id, array $data, ?string $key = null) 修改数据*/
class ExpressServices extends BaseServices
{public $_cacheKey = "plat_express_list";//物流查询物流公司codepublic $express_code = ['yunda' => 'yunda','yundakuaiyun' => 'yunda56','ems' => 'EMS','youzhengguonei' => 'chinapost','huitongkuaidi' => 'HTKY','baishiwuliu' => 'BSKY','shentong' => 'STO','jd' => 'JD','zhongtong' => 'ZTO','zhongtongkuaiyun' => 'ZTO56',];/*** 构造方法* ExpressServices constructor.* @param ExpressDao $dao*/public function __construct(ExpressDao $dao){$this->dao = $dao;}/*** 获取物流信息* @param array $where* @return array* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\DbException* @throws \think\db\exception\ModelNotFoundException*/public function getExpressList(array $where){[$page, $limit] = $this->getPageValue();$list = $this->dao->getExpressList($where, '*', $page, $limit);$count = $this->dao->count($where);return compact('list', 'count');}public function apiExpressList(){return $this->dao->getExpressList([], '*', 0, 0);}/*** 物流表单* @param array $formData* @return mixed* @throws \FormBuilder\Exception\FormBuilderException*/public function createExpressForm(array $formData = []){if (isset($formData['partner_id']) && $formData['partner_id'] == 1) $field[] = Form::input('account', '月结账号', $formData['account'] ?? '');if (isset($formData['partner_key']) && $formData['partner_key'] == 1) $field[] = Form::input('key', '月结密码', $formData['key'] ?? '');if (isset($formData['net']) && $formData['net'] == 1) $field[] = Form::input('net_name', '取件网点', $formData['net_name'] ?? '');$field[] = Form::number('sort', '排序', (int)($formData['sort'] ?? 0))->precision(0);$field[] = Form::radio('is_show', '是否启用', $formData['is_show'] ?? 1)->options([['value' => 0, 'label' => '隐藏'], ['value' => 1, 'label' => '启用']]);return $field;}/*** 创建物流信息表单获取* @return array* @throws \FormBuilder\Exception\FormBuilderException*/public function createForm(){return create_form('添加物流公司', $this->createExpressForm(), $this->url('/freight/express'));}/*** 修改物流信息表单获取* @param int $id* @return array* @throws \FormBuilder\Exception\FormBuilderException*/public function updateForm(int $id){$express = $this->dao->get($id);if (!$express) {throw new AdminException('查询数据失败,无法修改');}return create_form('编辑物流公司', $this->createExpressForm($express->toArray()), $this->url('/freight/express/' . $id), 'PUT');}/*** 平台获取快递* @return array|mixed*/public function getPlatExpress(){/** @var ServeServices $expressService */$expressService = app()->make(ServeServices::class);/** @var CacheService $cacheService */$cacheService = app()->make(CacheService::class);$data = [];if ($list = $cacheService::get($this->_cacheKey)) {$data = json_decode($list, true);} else {$list = $expressService->express()->express(0, 0, 1000);if (isset($list['data'])) {$cacheService->set($this->_cacheKey, json_encode($list['data']), 3600);$data = $list['data'];}}return $data;}/*** 获取物流信息组合成新的数组返回* @param array $where* @return array*/public function express(array $where = [], string $k = 'id'){$list = $this->expressList($where);$data = [];if ($list) {foreach ($list as $k => $v) {$data[$k]['id'] = $v['id'];$data[$k]['value'] = $v['name'];$data[$k]['code'] = $v['code'];}}return $data;}/*** 获取物流信息组合成新的数组返回* @param array $where* @return array*/public function expressSelectForm(array $where = []){$list = $this->expressList();//$list = $this->dao->getExpress($where, 'name', 'id');$data = [];foreach ($list as $key => $value) {$data[] = ['label' => $value['name'], 'value' => $value['id']];}return $data;}public function expressList($where = []){if (empty($where)) $where = ['is_show' => 1];return $this->dao->getExpressList($where, 'id,name,code,partner_id,partner_key,net,account,key,net_name', 0, 0);}/*** 物流公司查询* @param string $cacheName* @param string $expressNum* @param string|null $com* @return array*/public function query(string $cacheName, string $expressNum, string $com = null){$resultData = CacheService::get($cacheName, null);if ($resultData === null || !is_array($resultData)) {$data = [];$com = $this->express_code[$com] ?? '';$cacheTime = 0;switch ((int)sys_config('logistics_type')) {case 1:/** @var ServeServices $services */$services = app()->make(ServeServices::class);$result = $services->express()->query($expressNum, $com);if (isset($result['ischeck']) && $result['ischeck'] == 1) {$cacheTime = 0;} else {$cacheTime = 1800;}foreach ($result['content'] ?? [] as $item) {$data[] = ['time' => $item['time'], 'status' => $item['status']];}break;case 2:$result = ExpressService::query($expressNum, $com);if (is_array($result) &&isset($result['result']) &&isset($result['result']['deliverystatus']) &&$result['result']['deliverystatus'] >= 3)$cacheTime = 0;else$cacheTime = 1800;$data = $result['result']['list'] ?? [];break;}CacheService::set($cacheName, $data, $cacheTime);return $data;}return $resultData;}/*** 同步物流公司* @return bool*/public function syncExpress(){if (CacheService::get('sync_express')) {return true;}$expressList = $this->getPlatExpress();$data = $data_all = [];$selfExpress = $this->dao->getExpress([], 'id,code', 'id');$codes = [];if ($selfExpress) {$codes = array_column($selfExpress, 'code');}foreach ($expressList as $express) {if (!in_array($express['code'], $codes)) {$data['name'] = $express['name'] ?? '';$data['code'] = $express['code'] ?? '';$data['partner_id'] = $express['partner_id'] ?? '';$data['partner_key'] = $express['partner_key'] ?? '';$data['net'] = $express['net'] ?? '';$data['is_show'] = 1;$data['status'] = 0;if ($express['partner_id'] == 0 && $express['partner_key'] == 0 && $express['net'] == 0) {$data['status'] = 1;}$data_all[] = $data;}}if ($data_all) {$this->dao->saveAll($data_all);}CacheService::set('sync_express', 1, 3600);return true;}/** 查询单个快递公司* @param array $where* @return array|\think\Model|null* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\DbException* @throws \think\db\exception\ModelNotFoundException*/public function getOneByWhere(array $where){return $this->dao->getOne($where);}}

crmeb v4.4.2 修复前端小程序物流查询有部分查询不出来的问题相关推荐

  1. crmeb v4和pro公众号小程序客服配置详解

    想要使用客服需要就的必须开启长连接.长连接的配置过程稍微复杂,需要服务器放行端口,如果是宝塔就的需要在安全里面接着放行端口.如果是使用https协议访问,那就增加了一个WSS的配置,接下来会一一详细解 ...

  2. 二开CRMEB v4.4.2修复改价后退款金额还是未改价之前的价格问题

    二开CRMEB v4.4.2修复改价后退款金额还是未改价之前的价格问题 直接替换更新这个文件就好了 app/services/order/StoreOrderRefundServices.php &l ...

  3. php社区团购小程序系统,[PHP程序]狮子鱼社区团购小程序V16.0.1独立版开源无授权带前端小程序...

    源码介绍 狮子鱼社区团购小程序V16.0.1独立版开源无授权版带前端直播小程序.狮子鱼社区团购小程序支持长期更新.详细功能看本站演示. 更新日志 V16.0.1 [优化] 非预售vip会员商品价格 重 ...

  4. php 授权模块,PHP免授权功能模块:智慧农场小程序 1.8.9后台模块前端小程序源码模块插件...

    功能模块:智慧农场小程序 1.8.9后台模块+前端小程序源码 内容介绍: 版本号:1.8.9 – 普通版注意:1.本次更新需要重新上传小程序 2.本次更新内容较多,请注意备份–新增小程序自己添加收货地 ...

  5. 基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的教室图书馆座位预约小程序系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序预约订座小程序,前台用户使用小程序,后台管理使用Java+Mysql开发,后台使用了springboot框架:通过后台添加座位类型 ...

  6. 毒鸡汤词汇类的前端小程序源码模板

    介绍: 毒鸡汤词汇类的前端小程序源码 网盘下载地址: https://zijiewangpan.com/SDxJOFXAKte 图片:

  7. 基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的影视评论交流小程序系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序影视评论交流系统,前台用户使用小程序,后台管理使用Java+Mysql开发,后台使用了springboot框架:通过后台设置影视属 ...

  8. 初级前端小程序项目加载速度优化

    这份文字是根据近期团队做来问丁香医生 SPA 和 丁香医生小程序 加载速度优化的经历整理而成. 效果 古人有一句话叫做:治感冒看疗效.既然是关于速度优化的,我们就先来看一下优化的效果. 来问丁香医生 ...

  9. 基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的菜谱美食小程序系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序美食菜谱点评系统,前台用户使用小程序,后台管理使用Java+Mysql开发,后台使用了springboot框架:通过后台添加资讯和 ...

  10. 基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的旅游景区景点购票小程序系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序景区景点预约购票系统,前台用户使用小程序,后台管理使用Java+Mysql开发,后台使用了springboot框架:通过后台添加景 ...

最新文章

  1. JavaScript replace() 方法
  2. Neutron Router 工作原理 - 每天5分钟玩转 OpenStack(142)
  3. Qt5.12过时的类
  4. 数据结构php语言,PHP语言做网页开发,会用到什么数据结构,算法?
  5. 码云 GVP 项目 SequoiaDB 完成 C 轮数千万美元融资
  6. 【jq插件】Grade-打分效果
  7. [前端漫谈_4] 从 薛定谔的猫 聊到 Event loop
  8. android nfc 跳转,android – 通过NFC发送URL,由浏览器打开
  9. 演示Thread.sleep(100)和Thread.currentThread().isInterrupted()+@Deprecated:将方法标注为废弃的方法...
  10. cocos2d-x Schedule详解
  11. linq group by 多个字段取值以及取出重复的数据
  12. [译] 如何在 keras 中使用循环神经网络创作音乐
  13. TM/QQ默认表情全部丢失的解决办法
  14. 最详细的讲解过滤器,拦截器,AOP的区别
  15. 前端实现HTML转PDF
  16. C语言如何使用三角函数
  17. Monocular Depth Estimation UsingLaplacian Pyramid-Based Depth Residuals翻译
  18. 安装两个Mysql错误 ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)”
  19. js刷新当前页的方法
  20. 常见加密算法特点及适用场景

热门文章

  1. 2014年总结和2015年的规划
  2. 11,SFDC 管理员篇 - 报表和数据的可视化
  3. html5自动淡入淡出图片,利用html5实现图片的淡入淡出效果
  4. 航海家软件公式全破解
  5. 自然语言三兄弟NLP、NLU、NLG傻傻分不清?一文搞懂它们的区别
  6. NLP NLU NLG 简介
  7. 【微信小程序】---授权登陆---【巷子】
  8. JAVA身份证阅读器数据返回图片
  9. springboot整合手机验证码
  10. 分割符(split)