SpirngBoot整合快递100

news2024/11/19 7:43:34

目录

一、注册快递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数据转成对象

/*
 * 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;
    @Data
    class  Step {
        private String time;
        private String ftime;
        private String context;
    }
}

4.4 新建一个controller

/*
 * 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;

    @GetMapping
    public 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状态

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

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
    @Getter
    private Integer code; //状态
    @Setter
    @Getter
    private 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 

/*
 * 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;
    @Data
    class  Step {
        private String time;
        private String ftime;
        private String context;
    }
}

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

五、源码参考

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【yolov8】yolov8剪枝训练流程

yolov8剪枝训练流程 流程&#xff1a; 约束剪枝微调 一、正常训练 yolo train model./weights/yolov8s.pt datayolo_bvn.yaml epochs100 ampFalse projectprun nametrain二、约束训练 2.1 修改YOLOv8代码&#xff1a; ultralytics/yolo/engine/trainer.py 添加内容&#…

机器学习高频问答题总结

机器学习问答题总结 第一章 线性回归1.什么是线性回归&#xff1f;解释主要原理2.解释线性回归中最小二乘法的原理吗&#xff1f;3.如何评估线性回归模型的性能&#xff1f;4.线性回归中正则化的目的是什么吗&#xff1f;L1正则化和L2正则化有什么不同&#xff1f; 第二章 逻辑…

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法&#xff0c;它在YOLOv4的基础上引入了多项改进&#xff0c;显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效&#xff0c;它有四个版本&#xff1a;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;分别对应不同的模型大小…

神经网络与深度学习--网络优化与正则化

文章目录 前言一、网络优化1.1网络结构多样性1.2高维变量的非凸优化1.鞍点2.平坦最小值3.局部最小解的等价性 1.3.改善方法 二、优化算法2.1小批量梯度下降法&#xff08;Min-Batch&#xff09;2.2批量大小选择2.3学习率调整1.学习率衰减&#xff08;学习率退火&#xff09;分段…

MouseBoost PRO for Mac激活版:强大的 鼠标增强软件

在追求高效工作的今天&#xff0c;MouseBoost PRO for Mac成为了许多Mac用户的得力助手。这款功能强大的鼠标增强软件&#xff0c;以其独特的智能化功能和丰富的实用工具&#xff0c;让您的电脑操作更加便捷、高效。 MouseBoost PRO for Macv3.4.0中文激活版下载 MouseBoost PR…

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像&#xff0c;有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

Python 与 TensorFlow2 生成式 AI(四)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;文本生成方法的崛起 在前几章中&#xff0c;我们讨论了不同的方法和技术来开发和训练生成模型。特别是在第六章“使用 …

LLM应用:让大模型prompt总结生成Mermaid流程图

生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 Prompt 示例&#xff1a;用横向…

基于OSAL 实现UART、LED、ADC等基础示例 4

1 UART 实验目的 串口在我们开发单片机项目是很重要的&#xff0c;可以观察我们的代码运行情况&#xff0c;本节的目的就 是实现串口双工收发。 虽然说 osal 相关的代码已经跟硬件关系不大了&#xff0c;但是我们还是来贴出相关的硬件原理图贴出来。 1.1 串口初始化 osal_ini…

latex使用bib引用参考文献时,正文编号顺序乱序解决办法,两分钟搞定!

一、背景 用Latex写文章时&#xff0c;使用bib添加参考文献是一种最为简便的方式。但有的期刊模板&#xff0c;如机器人顶会IROS&#xff0c;会出现正文参考文献序号没按顺序排列的情况&#xff0c;如下图所示。按理说文献[4]应该是文献[2]&#xff0c;[2]应该是[3]&#xff0…

Go中为什么不建议用锁?

Go语言中是不建议用锁&#xff0c;而是用通道Channel来代替(不要通过共享内存来通信&#xff0c;而通过通信来共享内存)&#xff0c;当然锁也是可以用&#xff0c;锁是防止同一时刻多个goroutine操作同一个资源&#xff1b; GO语言中&#xff0c;要传递某个数据给另一个gorout…

Java项目:88 springboot104学生网上请假系统设计与实现

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本学生网上请假系统管理员&#xff0c;教师&#xff0c;学生。 管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;…

22 重构系统升级-实现不停服的数据迁移和用户切量

专栏的前 21 讲&#xff0c;从读、写以及扣减的角度介绍了三种特点各异的微服务的构建技巧&#xff0c;最后从微服务的共性问题出发&#xff0c;介绍了这些共性问题的应对技巧。 在实际工作中&#xff0c;你就可以参考本专栏介绍的技巧构建新的微服务&#xff0c;架构一个具备…

vue3 安装-使用之第一篇

首先需要node版本高于V16.14.1 安装 执行 npm create vitelatest 具体选择按照自己实际需要的来 Project name:项目名称 Select a framework:选择用哪种框架 &#xff08;我选择vue&#xff09; Select a variant: 选择用JS还是TS&#xff08;我选择JS&#xff09;找到项目&…

STM32 HAL库F103系列之IIC实验

IIC总线协议 IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步 串行 半双工通信总线。 总线就是传输数据通道 协议就是传输数据的规则 IIC总线结构图 ① 由时钟线SCL和数据线SDA组成&#xff0c;并且都接上拉电阻…

(7)快速调优

文章目录 前言 1 安装脚本 2 运行 QuikTune 3 高级配置 前言 VTOL QuikTune Lua 脚本简化了为多旋翼飞行器的姿态控制参数寻找最佳调整的过程。 脚本会缓慢增加相关增益&#xff0c;直到检测到振荡。然后&#xff0c;它将增益降低 60%&#xff0c;并进入下一个增益。所有增…

微服务保护和分布式事务(Sentinel、Seata)笔记

一、雪崩问题的解决的服务保护技术了解 二、Sentinel 2.1Sentinel入门 1.Sentinel的安装 &#xff08;1&#xff09;下载Sentinel的tar安装包先 &#xff08;2&#xff09;将jar包放在任意非中文、不包含特殊字符的目录下&#xff0c;重命名为 sentinel-dashboard.jar &…

Spark Structured Streaming 分流或双写多表 / 多数据源(Multi Sinks / Writes)

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

数据库管理-第179期 分库分表vs分布式(20240430

数据库管理179期 2024-04-30 数据库管理-第179期 分库分表vs分布式&#xff08;20240430&#xff09;1 分库分表1.1 分库1.2 分表1.3 组合1.4 问题 2 分布式3 常见分布式数据库4 期望总结 数据库管理-第179期 分库分表vs分布式&#xff08;20240430&#xff09; 作者&#xff1…

git 第一次安装设置用户名密码

git config --global user.name ljq git config --global user.email 15137659164qq.com创建公钥命令 输入后一直回车 ssh-keygen -t rsa下面这样代表成功 这里是公钥的 信息输入gitee 中 输入下面命令看是否和本机绑定成功 ssh -T gitgitee.com如何是这样&#xff0c;恭喜…