SpirngBoot整合快递100

devtools/2025/1/17 6:12:13/

目录

一、注册快递100

二、技术文档地址

三、需要认证的key和comcumer

 四、spring boot 整合快递 100使用

4.1 引入快递100和hutool的依赖

4.2 将key和comcumer写入application.properties文件中

 4.3 新建一个modle,用于将查出来的json数据转成对象

4.4 新建一个controller

4.5 结果显示

五、源码参考


一、注册快递100

https://api.kuaidi100.com/manager/v2/query/overview

二、技术文档地址

https://api.kuaidi100.com/document/5f0ffb5ebc8da837cbd8aefc

三、需要认证的key和comcumer

登录到快递100的后台

key:uxdpeXvk7416

customer: A04A2C3A70259125790AE81164145FE2

 四、spring boot 整合快递 100使用

4.1 引入快递100和hutool的依赖

   <!-- 添加快递100的依赖 --><dependency><groupId>com.github.kuaidi100-api</groupId><artifactId>sdk</artifactId><version>1.0.11</version></dependency><!--添加hutool的依赖 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency>

4.2 将key和comcumer写入application.properties文件中

# 定义出快递100 key和customer
kuaidi100.key=uxdpeXvk7416
kuaidi100.customer=A04A2C3A70259125790AE81164145FE2

 4.3 新建一个modle,用于将查出来的json数据转成对象

java">/** Copyright (c) 2020, 2024, webrx.cn All rights reserved.**/
package com.beiyou.model;import lombok.Data;import java.util.List;@Data
public class KuaidiInfo {private String message;private List<Step> data;@Dataclass  Step {private String time;private String ftime;private String context;}
}

4.4 新建一个controller

java">/** Copyright (c) 2020, 2024, webrx.cn All rights reserved.**/
package com.beiyou.controller;import cn.hutool.json.JSONUtil;
import com.beiyou.model.KuaidiInfo;
import com.google.gson.Gson;
import com.kuaidi100.sdk.api.QueryTrack;
import com.kuaidi100.sdk.contant.CompanyConstant;
import com.kuaidi100.sdk.core.IBaseClient;
import com.kuaidi100.sdk.pojo.HttpResult;
import com.kuaidi100.sdk.request.QueryTrackParam;
import com.kuaidi100.sdk.request.QueryTrackReq;
import com.kuaidi100.sdk.utils.SignUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/kd100")
public class KD100Controller {/*** 定义出快递100 的customer和key*/@Value("${kuaidi100.customer}")private String customer;@Value("${kuaidi100.key}")private String key;@GetMappingpublic KuaidiInfo queryTrack() throws Exception {QueryTrackReq queryTrackReq = new QueryTrackReq();QueryTrackParam queryTrackParam = new QueryTrackParam();queryTrackParam.setCom(CompanyConstant.ZT);queryTrackParam.setNum("78414126296826");String param = new Gson().toJson(queryTrackParam);queryTrackReq.setParam(param);queryTrackReq.setCustomer("A04A2C3A70259125790AE81164145FE2");queryTrackReq.setSign(SignUtils.querySign(param, key, customer));IBaseClient baseClient = new QueryTrack();HttpResult h = baseClient.execute(queryTrackReq);String body = h.getBody();/*** 1. 使用hutooL工具将json字符串转换为对象*/KuaidiInfo kuaidiInfo = JSONUtil.toBean(body, KuaidiInfo.class);/*** 通过debug可以得出 无论输入的信息是否有误 都会返回200* 所以我们可以根据message来判断是否成功*/return kuaidiInfo;}}

4.5 结果显示

 还差一个state状态

我们可以新建一个枚举 用于定义状态

java">package com.beiyou.emul;import lombok.Getter;
import lombok.Setter;import java.util.Arrays;
import java.util.Optional;//轨迹当前状态,如:0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转单,10待清关,11清关中,12已清关,13清关异常,14收件人拒签等
public enum KDstate {SALE(0, "在途"),OFF_SALE(1, "揽收"),DELETE(5, "派件");@Setter@Getterprivate Integer code; //状态@Setter@Getterprivate String desc; //状态描述KDstate(Integer code, String desc) {this.code = code;this.desc = desc;}public static KDstate findByCode(Integer code) {//jdk1.8提供了哪些新特性Optional<KDstate> optional = Arrays.stream(KDstate.values()).filter(item -> item.getCode().equals(code)).findFirst();/*if (optional.isPresent()){return optional.get();}return null;*/return optional.orElse(null);}
}

修改最开始的KuaidiInfo 

java">/** Copyright (c) 2020, 2024, webrx.cn All rights reserved.**/
package com.beiyou.model;import com.beiyou.emul.KDstate;
import lombok.Data;import java.util.List;@Data
public class KuaidiInfo {private String message;private List<Step> data;// 定义快递状态private String  state;/*** 根据传来的state 返回对应的描述* @return*/public String getStateX() {return KDstate.findByCode(Integer.parseInt(this.state)).getDesc();}private String stateX;@Dataclass  Step {private String time;private String ftime;private String context;}
}

此时前端只需要渲染 stateX的数据即可

五、源码参考

 源码我已经放到了云效,有兴趣可以参考

https://codeup.aliyun.com/62858d45487c500c27f5aab5/SpringBoot-KD100-Huang.git 


http://www.ppmy.cn/devtools/26451.html

相关文章

机器学习之Scikit-learn基础教程

Scikit-learn&#xff08;简称sklearn&#xff09;是一个广泛使用的Python机器学习库&#xff0c;它提供了各种算法和工具&#xff0c;用于数据挖掘和数据分析。本教程将介绍sklearn的基本概念和使用方法。 1. 安装Scikit-learn 如果你还没有安装scikit-learn&#xff0c;可以…

自动控制原理学习--平衡小车的控制算法(一)

基于单片机STM32的两轮平衡小车&#xff0c;单片机的各种IO、定时器、通讯等等一大堆要理解、编程&#xff0c;但这些都是琐碎的文档知识&#xff0c;需要花时间看各个模块的接口文档进而编程&#xff0c;需要良好的编程逻辑思维&#xff0c;去获取相关的传感模块信息&#xff…

工具类,包含线程池,excel图片处理

一、线程池 public class ThreadPool {/*** 核心线程*/public static final int CORE_POOL_SIZE Runtime.getRuntime().availableProcessors() 1;/*** 线程池最大线程数*/public static final int MAX_POOL_SIZE CORE_POOL_SIZE * 2;/*** 空闲线程回收时间*/public static …

多线程模型浅谈

优质博文&#xff1a;IT-BLOG-CN 笔者近期在维护的项目中发现了一些比较随机的问题&#xff0c;时有时无的&#xff0c;排查之后发现是使用多线程导致的&#xff0c;恍然之下研究了下多线程的底层模型相关知识&#xff0c;现不大家简要分享下。 一个程序进程可包含多个线程&am…

(学习日记)2024.05.06:UCOSIII第六十节:User文件夹函数概览(uCOS-III->Source文件夹)第六部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后,经过几经思考,最后决定自己锦上添花,再续上几章。 这…

C# Onnx YOLOv8_Blackjack

C# Onnx YOLOv8_Blackjack 目录 效果 模型 项目 代码 下载 效果 模型 Model Properties ------------------------- date&#xff1a;2024-04-23T17:17:10.378224 description&#xff1a;Ultralytics YOLOv8_Blackjack model trained on data.yaml author&#xff1a;U…

Milvus Cloud 向量数据库Reranker成本比较和使用场景

成本比较:向量检索 v.s. Cross-encoder Reranker v.s. 大模型生成 虽然 Reranker 的使用成本远高于单纯使用向量检索的成本,但它仍然比使用 LLM 为同等数量文档生成答案的成本要低。在 RAG 架构中,Reranker 可以筛选向量搜索的初步结果,丢弃掉与查询相关性低的文档,从而有…

Windows使用SSH登录本机Linux虚拟机

SSH&#xff08;Secure Shell&#xff09;&#xff0c;一种网络协议&#xff0c;可以在安全外壳下实现数据传输通信&#xff0c;所以主要用于计算机间加密登录&#xff0c;可以简单理解为远程控制。除了计算机间直接互联&#xff0c;在git中也可以看到&#xff0c;常见的协议有…