springboot接入顺丰

发布于:2025-08-16 ⋅ 阅读:(21) ⋅ 点赞:(0)

1. 注册及申请

注册及申请自己的顾客编码及校验码
地址
在这里插入图片描述

2. 下载sdk及引入

地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

        <dependency>
            <groupId>com.sf</groupId>
            <artifactId>SF-CSIM-EXPRESS-SDK</artifactId>
            <version>2.1.7</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/SF-CSIM-EXPRESS-SDK-V2.1.7.jar</systemPath>
        </dependency>

3.代码

3.1 实体类

吐槽一下 都提供sdk了 也不给提供参数类,这里只创建几个关键的,没用到了比如报关什么都没建立

package com.shimao.iibs.common.sf.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.shimao.iibs.common.sf.ExpredssTypeEnum;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Data
//@FieldDefaults(level = lombok.AccessLevel.PRIVATE)
@TableName(value = "sf_order")
@Accessors(chain = true)
public class Order {
   
   

    // ==================== 必填字段 ====================

    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 客户订单号(必填)
     */
    @NotBlank(message = "订单号不能为空")
    @Size(max = 64, message = "订单号长度不能超过64")
    @TableField(value = "order_id")
    private String orderId;

    /**
     * 运单号
     */
    @TableField(value = "waybill_no")
    private String waybillNo;

    /**
     * 付款方式,支持以下值: 1:寄方付 2:收方付 3:第三方付
     * 字典 sf_pay_method
     */
    @Min(value = 1, message = "必须为1-3")
    @Max(value = 3, message = "必须为1-3")
    @TableField(value = "pay_method")
    private Integer payMethod = 1;

    /**
     * 收寄双方信息列表(必填)
     */
    @NotEmpty(message = "联系人信息不能为空")
    @TableField(exist = false)
    private List<ContactInfo> contactInfoList;

    /**
     * 托寄物信息(必填)
     */
    @NotEmpty(message = "托寄物信息不能为空")
    @TableField(exist = false)
    private List<CargoDetail> cargoDetails;

    /**
     * 快件产品类别代码
     * 字典 sf_expredss_type
     */
    @NotNull(message = "快件产品类别代码不能为空")
    @TableField(value = "express_type_id")
    private Integer expressTypeId = ExpredssTypeEnum.T4_1.getCode();

    /**
     * 快件产品类别名称
     */
    @NotNull(message = "快件产品类别名称")
    @TableField(value = "express_type_name")
    private Integer expressTypeName;

    /**
     * 响应报文的语言(必填,默认zh-CN)
     */
    @NotBlank(message = "语言不能为空")
    @Size(max = 10, message = "语言长度不能超过10")
    @Pattern(regexp = "zh-CN|zh-TW|zh-HK|zh-MO|en", message = "不支持的语种类型")
    @TableField(exist = false)
    private String language = "zh-CN";

    /**
     * 是否返回路由标签(必填,默认1)
     */
    @NotNull(message = "是否返回路由标签不能为空")
    @Min(value = 0, message = "必须为0或1")
    @Max(value = 1, message = "必须为0或1")
    @TableField(exist = false)
    private Integer isReturnRoutelabel = 1;


    /**
     * 顺丰月结卡号(月结支付时必填)
     */
    @Size(max = 20, message = "月结卡号长度不能超过20")
    @TableField(value = "monthly_Card")
    private String monthlyCard;

    /**
     * 订单货物总重量(子母件/郑州空港海关必填)
     */
    @Digits(integer = 17, fraction = 5, message = "总重量格式不正确")
    @DecimalMin(value = "0.001", inclusive = false, message = "总重量必须大于0")
    @TableField(exist = false)
    private BigDecimal totalWeight = new BigDecimal(0.5);

    /**
     * 上门取件开始时间
     * 要求上门取件开始时间, 格式: YYYY-MM-DD HH24:MM:SS, 示例: 2012-7-30 09:30:00 ,
     * 若该字段没有赋值,默认开始时间为当前时间,(可配合上门取件截止时间pickupAppointEndTime扩展字段备注进行下发,
     * 若没有给截止时间则系统默认1小时的截止时间)
     */
    @TableField(value = "send_start_tm")
    private Date sendStartTm;

    /**
     * 状态
     * 字典 sf_order_status
     */
    @TableField(value = "status")
    private String status;

    /**
     * 备注
     */
    @Size(max = 100, message = "长度不能超过100")
    @TableField(value = "remark")
    private String remark;

    /**
     * 是否通过手持终端 通知顺丰收派 员上门收件,支持以下值: 1:要求 0:不要求 (默认0)
     */
    @Min(value = 0, message = "必须为0或1")
    @Max(value = 1, message = "必须为0或1")
    @TableField(value = "is_docall")
    private Integer isDocall = 1;

    /**
     * 寄件人id
     */
    @TableField(value = "send_contact_id")
    private  String  sendContactId;

    /**
     * 收件人id
     */
    @TableField(value = "receive_contact_id")
    private  String  receiveContactId;

    /**
     * 邮寄内容
     */
    @TableField(value = "cargo_item")
    private  String  cargoItem;

    /**
     * 总费用
     */
    @TableField(exist = false)
    private BigDecimal totalWaybill;

    /**
     * 请求报文
     */
    @TableField(value = "params")
    private String params;

    /**
     * 结果报文
     */
    @TableField(value = "result")
    private String result;

    /**`
     * 创建者
     */
    @TableField(value = "create_by")
    private String createBy;

    /**
     * 创建用户
     */
    @TableField(exist = false)
    private String createName;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;


    // ==================== 取消订单用 ====================
    /**
     * 客户订单操作标识: 1:确认 (丰桥下订单接口默认自动确认,不需客户重复确认,该操作用在其它非自动确认的场景) 2:取消
     */
    @TableField(exist = false)
    private Integer dealType = 1;
    // ==================== 取消订单用 ====================



    // ==================== 查订单用 ====================
    /**
     * 查询类型:1正向单 2退货单
     */
    @Size(max = 2, message = "查询类型:1正向单 2退货单")
    @TableField(exist = false)
    private String searchType = "1";

    // ==================== 查订单用 ====================


    // ==================== 清单运费 ====================
    /**
     * 费用清单
     */
    @TableField(exist = false)
    private List<Waybill> waybillList;
    // ==================== 清单运费 ====================



    // ==================== 路由查询 ====================
    /**
     * 查询号类别:
     * 1:根据顺丰运单号查询,trackingNumber将被当作顺丰运单号处理
     * 2:根据客户订单号查询, trackingNumber将被当作客户订单号处理
     */
    @TableField(exist = false)
    private Integer trackingType = 2;

    /**
     * 查询号:
     * 1、如果trackingType=1,则此值为顺丰运单号
     * 2、如果trackingType=2,则此值为客户订单号
     */
    @TableField(exist = false)
    private List<String> trackingNumber;

    /**
     * 路由查询结果
     */
    @TableField(exist = false)
    private List<Routes> routesList;
    // ==================== 路由查询 ====================


    /**
     * 包裹数(默认1)
     */
    @Min(value = 1, message = "必须大于0")
    @TableField(exist = false)
    private Integer parcelQty = 1;

    /**
     * 是否返回二维码(默认0)
     */
    @Min(value = 0, message = "必须为0或1")
    @Max(value = 1, message = "必须为0或1")
    @TableField(exist = false)
    private Integer isReturnQRCode = 0;

    /**
     * 是否返回签回单路由标签(默认0)
     */
    @Min(value = 0, message = "必须为0或1")
    @Max(value = 1, message = "必须为0或1")
    @TableField(exist = false)
    private Integer isReturnSignBackRouteLabel = 0;

    /**
     * 是否使用统一面单号(默认0)
     */
    @Min(value = 0, message = "必须为0或1")
    @Max(value = 1, message = "必须为0或1")
    @TableField(exist = false)
    private Integer isUnifiedWaybillNo = 0;

    /**
     * 是否生成运单号(默认1)
     */
    @Min(value = 0, message = "必须为0或1")
    @Max(value = 1, message = "必须为0或1")
    @TableField(exist = false)
    private Integer isGenWaybillNo = 1;


    /**
     * 头程运单号(郑州空港海关必填)
     */
    //private String inProcessWaybillNo;

    /**
     * 订单货物总长
     */
    //private BigDecimal totalLength;

    /**
     * 订单货物总宽
     */
    //private BigDecimal totalWidth;

    /**
     * 订单货物总高
     */
    //private BigDecimal totalHeight;

    /**
     * 订单货物总体积
     */
    //private BigDecimal totalVolume;

    /**
     * 商品总净重
     */
    //private BigDecimal totalNetWeight;


}

package com.shimao.iibs.common.sf.domain;

import lombok.Data;

/**
 * 公共响应参数
 */
@Data
public class ApiResultData {
   
   
    /**
     * 请求是否成功(必填)
     * true-请求成功,false-请求失败
     */
    private Boolean success;

    /**
     * 错误编码(必填)
     * S0000表示成功
     */
    private String errorCode;

    /**
     * 错误描述(必填)
     */
    private String errorMsg;

    /**
     * 顺丰运单号
     */
    private String waybillNo;

    /**
     * 请求信息
     */
    private String params;

    /**
     * 返回的详细数据(必填)
     * 使用泛型适应不同数据类型
     */
    private String msgData;




}

package com.shimao.iibs.common.sf.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 顺丰订单货物明细 仅下单使用 不存库
 */
@Data
@Accessors(chain = true)
public class CargoDetail implements Serializable {
   
   



    /**
     * 货物名称(必填,电子运单必填)
     */
    @NotBlank(message = "货物名称不能为空")
    @Size(max = 128, message = "货物名称长度不能超过128")
    private String name;

    /**
     * 货物数量(跨境件报关必填)
     */
    @Min(value = 1, message = "货物数量必须大于0")
    @Max(value = 99999, message = "货物数量不能超过99999")
    private Integer count;

    /**
     * 货物单位重量(跨境件报关必填)
     */
    @Digits(integer = 16, fraction = 3, message = "重量格式不正确")
    @DecimalMin(value = "0.001", message = "重量必须大于0")
    private BigDecimal weight;

    /**
     * 货物单位(跨境件报关必填)
     */
    @Size(max = 30, message = "货物单位长度不能超过30")
    private String unit;

    /**
     * 货物单价(跨境件报关必填)
     */
    //@Digits(integer = 17, fraction = 3, message = "金额格式不正确")
    //@DecimalMin(value = "0.001", message = "金额必须大于0")
    //private BigDecimal amount;

    /**
     * 货物单价的币别(跨境件报关必填)
     */
    //@Size(max = 5, message = "币别长度不能超过5")
    //private String currency;

    /**
     * 原产地国别(跨境件报关必填)
     */
    //@Size(max = 5, message = "原产地国别长度不能超过5")
    //private String sourceArea;

}

package com.shimao.iibs.common.sf.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.constraints.*;
import java.util.Date;

/**
 * 收发人信息
 */
@Data
@Accessors(chain = true)
@TableName(value = "sf_contactInfo")
public class ContactInfo {
   
   

    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * sf_order表主键
     */
    @TableField(value = "marter_id")
    private Long marterId;

    /**
     * 客户订单号(必填)
     */
    @NotBlank(message = "订单号不能为空")
    @Size(max = 64, message = "订单号长度不能超过64")
    @TableField(value = "order_id")
    private String orderId;

    /**
     * 运单号
     */
    @TableField(value = "waybill_no")
    private String waybillNo;

    /**
     * 地址类型:1-寄件方信息,2-到件方信息(必填)
     */
    @NotNull(message = "地址类型不能为空")
    @Min(value = 1, message = "地址类型必须为1或2")
    @Max(value = 2, message = "地址类型必须为1或2")
    @TableField(value = "contact_type")
    private Integer contactType;


    /**
     * 联系人(条件必填)
     */
    @TableField(value = "contact")
    private String contact;

    /**
     * 公司名称(条件必填)
     */
    @TableField(value = "company")
    private String company;

    /**
     * 手机(条件必填:tel和mobile必填其中一个)
     */
    @TableField(value = "mobile")
    private String mobile;

    /**
     * 电话(条件必填:tel和mobile必填其中一个)
     */
    //private String tel;

    /**
     * 国家或地区代码 例如:内地件CN 香港852(必填)
     */
    

网站公告

今日签到

点亮在社区的每一天
去签到