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(必填)
*/