其实这个物流信息查询没什么需要写的,因为阿里云官网的demo就可以拿来直接用,我主要是记录一下限制查询次数
阿里云物流查询地址:

官网的demo : 需要填写自己的AppCode和物流单号 就可以直接用了

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;public class Tools {public static void main(String[] args) {String host = "https://wuliu.market.alicloudapi.com";// 【1】请求地址 支持http 和 https 及 WEBSOCKETString path = "/kdi";  // 【2】后缀String appcode = "你自己的AppCode"; // 【3】开通服务后 买家中心-查看AppCodeString no = "780098068058";// 【4】请求参数,详见文档描述String type = "zto"; //  【4】请求参数,不知道可不填 95%能自动识别String urlSend = host + path + "?no=" + no +"&type="+type;  // 【5】拼接请求链接try {URL url = new URL(urlSend);HttpURLConnection httpURLCon = (HttpURLConnection) url.openConnection();httpURLCon .setRequestProperty("Authorization", "APPCODE " + appcode);// 格式Authorization:APPCODE (中间是英文空格)int httpCode = httpURLCon.getResponseCode();if (httpCode == 200) {String json = read(httpURLCon.getInputStream());System.out.println("正常请求计费(其他均不计费)");System.out.println("获取返回的json:");System.out.print(json);} else {Map<String, List<String>> map = httpURLCon.getHeaderFields();String error = map.get("X-Ca-Error-Message").get(0);if (httpCode == 400 && error.equals("Invalid AppCode `not exists`")) {System.out.println("AppCode错误 ");} else if (httpCode == 400 && error.equals("Invalid Url")) {System.out.println("请求的 Method、Path 或者环境错误");} else if (httpCode == 400 && error.equals("Invalid Param Location")) {System.out.println("参数错误");} else if (httpCode == 403 && error.equals("Unauthorized")) {System.out.println("服务未被授权(或URL和Path不正确)");} else if (httpCode == 403 && error.equals("Quota Exhausted")) {System.out.println("套餐包次数用完 ");} else {System.out.println("参数名错误 或 其他错误");System.out.println(error);}}} catch (MalformedURLException e) {System.out.println("URL格式错误");} catch (UnknownHostException e) {System.out.println("URL地址错误");} catch (Exception e) {// 打开注释查看详细报错异常信息// e.printStackTrace();}}/** 读取返回结果*/private static String read(InputStream is) throws IOException {StringBuffer sb = new StringBuffer();BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = null;while ((line = br.readLine()) != null) {line = new String(line.getBytes(), "utf-8");sb.append(line);}br.close();return sb.toString();}
}

这是官网的返回式例,基本上也没什么毛病.

这里我对查询做了控制,每次查询之后就回保存物流信息到数据库
(如果有redis等缓存服务器的话,最好是保存在缓存服务器里面),
如果是半小时内重复查询就返回数据库或缓存中的物流信息,因为物流信息没那么快跟新,没必要一直去查,要花钱的,时间间隔可以大一点,2小时,超过两小时再去查询新的物流信息,然后跟新缓存和数据库

@RestController
@Api(tags = {"物流信息查询"})
@CrossOrigin  //跨域支持
@RequestMapping("/app/wuliu")
public class AliyunWuLiuController {@AutowiredAliyunWuLiu aliyunWuLiu;@Autowiredprivate ISalesOrderHeaderService salesOrderHeaderService;@RequestMapping(value = "/findLogistics", method = RequestMethod.GET)@ResponseBody@ApiOperation(value = "物流信息查询", httpMethod = "GET")@ApiImplicitParams({@ApiImplicitParam(name="no",value = "物流单号",required=true)})public Result<String> findLogistics(String no, String type){SalesOrderHeader byLogisticsNo = salesOrderHeaderService.findByLogisticsNo(no);if (byLogisticsNo ==null || StringUtils.isEmpty(byLogisticsNo.getId())){return new ResultUtils<String>().setErrorMsg("查询的物流订单信息不存在!");}if (StringUtils.isEmpty(byLogisticsNo.getShippingType())){String logistics = aliyunWuLiu.findLogistics(no, type);byLogisticsNo.setShippingType(logistics);byLogisticsNo.setModifiedDate(LocalDateTimeUtil.getLocalDateTime());salesOrderHeaderService.update(byLogisticsNo);return new ResultUtils<String>().setData(logistics);}else {LocalDateTime localDateTime = LocalDateTimeUtil.getLocalDateTime();LocalDateTime modifiedDate = byLogisticsNo.getModifiedDate();Duration duration = Duration.between(modifiedDate,localDateTime);long minutes = duration.toMinutes();if (minutes <= 30){String shippingType = byLogisticsNo.getShippingType();return new ResultUtils<String>().setData(shippingType);}else {String logistics = aliyunWuLiu.findLogistics(no, type);byLogisticsNo.setShippingType(logistics);byLogisticsNo.setModifiedDate(LocalDateTimeUtil.getLocalDateTime());salesOrderHeaderService.update(byLogisticsNo);return new ResultUtils<String>().setData(logistics);}}}}

Aliyun服务之物流信息查询相关推荐

  1. 客快物流大数据项目(一百零七):物流信息查询服务接口开发解决方案

    文章目录 物流信息查询服务接口开发解决方案 一.业务需求 二.系统架构演变 1.​​​​​​​集中式架构 2.​​​​​​​​​​​​​​垂直拆分 3.分布式服务 ​​​​​​​4.面向服务架构(SO ...

  2. 招聘·全球物流信息查询SaaS服务公司

    简历投递 amber@risfond.com 更详细的公司和职位信息请直接邮件沟通(联系人是个可爱的小姑娘). 公司介绍 公司业务全球物流信息查询SaaS服务,海外同行排名前三,12年成立,14年之后 ...

  3. 【VUE项目实战】59、订单的物流信息查询功能

    接上篇<58.订单修改收货地址的功能> 上一篇我们完成了订单列表的修改收货地址功能,本篇我们来实现订单的物流信息查询功能. 一.要实现的效果 我们要实现点击操作列的"物流进度&q ...

  4. 北京摇号系统服务器,支付宝“城市服务”平台可查询北京小客车摇号结果

    支付宝"城市服务"平台可查询北京小客车摇号结果 [TechWeb报道]9月7日消息,北京市交通委与支付宝达成合作,市内交通出行服务将登陆城市服务平台.市民在手机上进入支付宝&quo ...

  5. 【前端】实现一个简洁物流信息查询页面

    这是自己写的一个简易版查询物流信息的页面,先看效果: 可以作为小程序或者其他项目插入使用,有需要的同学这里下载: 查询快递物流信息页面[源码]_物流信息查询-Javascript文档类资源-CSDN下 ...

  6. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)...

    阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...

  7. 基于多种服务的地理位置查询系统

    本文为掘金投稿,译文出自 : 掘金翻译计划 原文链接 : Geolocation using multiple services 原文作者 : wsdookadr,感谢作者对本篇文章的翻译授权. 译者 ...

  8. java wmi_WMI依赖服务使用WMI查询

    我正在使用WMI查询来获取共享文件夹: public static List GetNetworkShareFoldersList(string serverName) { List shares = ...

  9. 谷歌浏览器主页_谷歌浏览器客服人工服务电话怎样查询-客服人工服务电话查询方法...

    很多用户在使用谷歌浏览器时候可能会有一些不了解的地方想要找的谷歌的扔客服询问,但是却不知道该如何查询,其实方法有很多中,小编帮助大家整理了几种人工服务电话查询方法,一起来看看吧~ [谷歌浏览器常见问题 ...

最新文章

  1. Genome Biology:人体各部位微生物组时间序列分析
  2. Linux网络服务-Web Service之【HTTP协议简介】(一)
  3. 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式
  4. SQL Server2005的XML数据类型之基础篇 (2)
  5. SQL*Loader之CASE8
  6. php读取文件和读取redis,本地测试读取redis和普通文件缓存的速度,redis慢一倍?...
  7. hive与spark的匹配版本汇总
  8. 执行命令npm install XXX后仍然提示 Cannot find Module XXX
  9. 串口,com口,ttl,max232你应该知道的事
  10. 每日学习小记 11/02
  11. golang实现AES ECB模式的加密和解密
  12. 台湾19大IT业营收连衰 全球产业景气警报先兆
  13. arcgis engine 打开shp文件
  14. psql屏幕输出全部结果_液晶电视无法开机,是电源板问题还是屏幕问题,自己动手维修...
  15. Linux安装和部署
  16. “.”和“->”的区别
  17. 易基因|3文一览:简化甲基化测序(RRBS)技术优势及研究成果(医学+物种保护+农学)
  18. tushare实战分析上证综指与美债收益率的关系
  19. EC20 raspberry pi 树莓派 4g上网 发短信
  20. php 生成拼音缩写,用PHP生成中文拼音代码

热门文章

  1. ionic2集成极光推送
  2. adw -- android 平台上比较优秀的开源桌面应用程序之一
  3. Git忽略文件.gitignore规则详解
  4. 西门子PLC S7-1200硬件故障ERROR灯常亮处理一例---附“未决的启动禁止项 重置为出厂设置”方法
  5. ABB机器人:基于现场通信方式向西门子PLC发送实时位置数据的方法
  6. 源启企业级智能短信平台介绍
  7. Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理2
  8. 嵌入式开发之hisilicon---hi3536 处理器简介
  9. matlab半张量积,半张量积原理.doc
  10. MATLAB/Simulink电力系统与仿真,第七章变压器内部故障时的仿真经验