新增顺丰同城的业务代码
This commit is contained in:
parent
8336994c30
commit
5bcdaf40a7
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.pojo.req;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(description = "顺丰同城新建订单信息")
|
||||
public class SFCreateOrderReq implements Serializable {
|
||||
@ApiModelProperty("同城开发者ID")
|
||||
private Integer dev_id;
|
||||
|
||||
@ApiModelProperty("店铺ID")
|
||||
private String shop_id;
|
||||
|
||||
@ApiModelProperty("商家订单号")
|
||||
private String shop_order_id;
|
||||
|
||||
@ApiModelProperty("取货序号")
|
||||
private String order_sequence;
|
||||
|
||||
@ApiModelProperty("用户下单时间,秒级时间戳")
|
||||
private Long order_time;
|
||||
|
||||
@ApiModelProperty("推单时间,秒级时间戳")
|
||||
private Long push_time;
|
||||
|
||||
@ApiModelProperty("返回字段控制标志位(二进制),1:商品总价格,2:配送距离,4:物品重量,8:起送时间,16:期望送达时间,32:支付费用,64:实际支付金额,128:优惠券总金额,256:结算方式; 例如全部返回为填入511")
|
||||
private Integer return_flag;
|
||||
|
||||
@ApiModelProperty("版本号,参照文档主版本号填写,如:文档版本号1.9,version=19,推荐使用版本19")
|
||||
private Integer version;
|
||||
|
||||
@ApiModelProperty("发货店铺信息")
|
||||
private SFOrderShopReq shop;
|
||||
|
||||
@ApiModelProperty("订单信息")
|
||||
private SFOrderDetailReq order_detail;
|
||||
|
||||
@ApiModelProperty("收货人信息")
|
||||
private SFOrderReceiveReq receive;
|
||||
|
||||
@ApiModelProperty("订单备注")
|
||||
private String remark;
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.pojo.req;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(description = "顺丰同城订单订单信息")
|
||||
public class SFOrderDetailReq implements Serializable {
|
||||
@ApiModelProperty("用户订单商品总金额(单位:分)")
|
||||
private Integer total_price;
|
||||
|
||||
@ApiModelProperty("物品类型")
|
||||
private String product_type;
|
||||
|
||||
@ApiModelProperty("物品重量(单位:克)")
|
||||
private String weight_gram;
|
||||
|
||||
@ApiModelProperty("物品个数")
|
||||
private String product_num;
|
||||
|
||||
@ApiModelProperty("物品种类个数")
|
||||
private Long product_type_num;
|
||||
|
||||
@ApiModelProperty("物品详情;数组结构,详见product_detail结构")
|
||||
private SFOrderProductDetailReq product_detail;
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.pojo.req;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(description = "顺丰同城订单商品信息")
|
||||
public class SFOrderProductDetailReq implements Serializable {
|
||||
@ApiModelProperty("物品Id")
|
||||
private Long product_id;
|
||||
|
||||
@ApiModelProperty("物品名称")
|
||||
private String product_name;
|
||||
|
||||
@ApiModelProperty("物品数量")
|
||||
private Integer product_num;
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.pojo.req;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(description = "顺丰同城订单收货人信息")
|
||||
public class SFOrderReceiveReq implements Serializable {
|
||||
@ApiModelProperty("收货人名字")
|
||||
private String user_name;
|
||||
|
||||
@ApiModelProperty("收货人电话")
|
||||
private String user_phone;
|
||||
|
||||
@ApiModelProperty("收货详细地址")
|
||||
private String user_address;
|
||||
|
||||
@ApiModelProperty("地址经度")
|
||||
private String user_lng;
|
||||
|
||||
@ApiModelProperty("地址维度")
|
||||
private String user_lat;
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.pojo.req;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
@ApiModel(description = "顺丰同城订单发货店铺信息")
|
||||
public class SFOrderShopReq implements Serializable {
|
||||
@ApiModelProperty("店铺名字")
|
||||
private String shop_name;
|
||||
|
||||
@ApiModelProperty("店铺电话")
|
||||
private String shop_phone;
|
||||
|
||||
@ApiModelProperty("店铺详细地址")
|
||||
private String shop_address;
|
||||
|
||||
@ApiModelProperty("店铺地址经度")
|
||||
private String shop_lng;
|
||||
|
||||
@ApiModelProperty("店铺地址维度")
|
||||
private String shop_lat;
|
||||
}
|
||||
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) 2024. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
* Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
|
||||
* Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
|
||||
* Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
|
||||
* Vestibulum commodo. Ut rhoncus gravida arcu.
|
||||
*/
|
||||
|
||||
package com.suisung.mall.common.pojo.res;
|
||||
|
||||
/**
|
||||
* 顺丰同城开放平台 api 返回的数据结构
|
||||
*/
|
||||
public class SFExpressApiRes {
|
||||
private Integer error_code;
|
||||
private String error_msg;
|
||||
private Object result;
|
||||
public Object error_data;
|
||||
|
||||
|
||||
public Object getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(Object result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public String getError_msg() {
|
||||
return error_msg;
|
||||
}
|
||||
|
||||
public void setError_msg(String error_msg) {
|
||||
this.error_msg = error_msg;
|
||||
}
|
||||
|
||||
public Object getError_data() {
|
||||
return error_data;
|
||||
}
|
||||
|
||||
public void setError_data(Object error_data) {
|
||||
this.error_data = error_data;
|
||||
}
|
||||
|
||||
public Integer getError_code() {
|
||||
return error_code;
|
||||
}
|
||||
|
||||
public void setError_code(Integer error_code) {
|
||||
this.error_code = error_code;
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,12 @@
|
||||
package com.suisung.mall.shop.api.service;
|
||||
|
||||
import com.suisung.mall.common.pojo.res.SFExpressApiRes;
|
||||
|
||||
public interface SFExpressApiService {
|
||||
|
||||
/**
|
||||
* (店铺)创建顺丰同城订单
|
||||
* @return
|
||||
*/
|
||||
SFExpressApiRes createOrder();
|
||||
}
|
||||
|
||||
@ -8,7 +8,15 @@
|
||||
|
||||
package com.suisung.mall.shop.api.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.suisung.mall.common.pojo.req.SFCreateOrderReq;
|
||||
import com.suisung.mall.common.pojo.req.SFOrderDetailReq;
|
||||
import com.suisung.mall.common.pojo.req.SFOrderReceiveReq;
|
||||
import com.suisung.mall.common.pojo.req.SFOrderShopReq;
|
||||
import com.suisung.mall.common.pojo.res.SFExpressApiRes;
|
||||
import com.suisung.mall.common.utils.JsonUtil;
|
||||
import com.suisung.mall.shop.api.service.SFExpressApiService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -17,6 +25,8 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
@ -27,7 +37,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
private Long appId;
|
||||
@Value("${sf-express.appkey}")
|
||||
private String appKey;
|
||||
@Value("${sf-express.dev_id}")
|
||||
private String devId;
|
||||
|
||||
private final static String sfExpressApiDomain = "https://openic.sf-express.com/open/api/external/";
|
||||
|
||||
|
||||
/**
|
||||
@ -86,4 +99,83 @@ public class SFExpressApiServiceImpl implements SFExpressApiService {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Map<String, Object> buildCommonParams() {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("dev_id", devId);
|
||||
params.put("push_time", System.currentTimeMillis() / 1000);
|
||||
params.put("version", 19);
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装请求地址
|
||||
*
|
||||
* @param urlPath
|
||||
* @param postData
|
||||
* @return
|
||||
*/
|
||||
private String buildUrl(String urlPath, String postData) {
|
||||
StringBuilder sb = new StringBuilder(sfExpressApiDomain);
|
||||
sb.append(urlPath);
|
||||
sb.append("?sign=");
|
||||
sb.append(generateOpenSign(postData, appId, appKey));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SFExpressApiRes createOrder() {
|
||||
// 组织请求参数
|
||||
// Map<String, Object> params = buildCommonParams();
|
||||
// params.put("app_id", appId);
|
||||
// params.put("app_key", appKey);
|
||||
// params.put("device_id", devId);
|
||||
|
||||
Long now = DateUtil.currentSeconds();
|
||||
|
||||
SFCreateOrderReq param = new SFCreateOrderReq();
|
||||
param.setDev_id(1711573316);
|
||||
param.setVersion(19);
|
||||
param.setOrder_time(now);
|
||||
param.setPush_time(now);
|
||||
param.setRemark("测试顺丰同城发单,请不要通知骑手接单!");
|
||||
param.setOrder_sequence("000000123");
|
||||
param.setShop_id("3243279847393");
|
||||
param.setShop_order_id("DD-20241118-00001");
|
||||
param.setReturn_flag(511);
|
||||
|
||||
SFOrderDetailReq orderDetailReq = new SFOrderDetailReq();
|
||||
param.setOrder_detail(orderDetailReq);
|
||||
|
||||
SFOrderShopReq shop = new SFOrderShopReq();
|
||||
shop.setShop_name("顺丰同城");
|
||||
shop.setShop_address("北京市海淀区学清嘉创大厦A座15层");
|
||||
shop.setShop_phone("13203559287");
|
||||
shop.setShop_lng("");
|
||||
shop.setShop_lat("");
|
||||
param.setShop(shop);
|
||||
|
||||
|
||||
SFOrderReceiveReq receive = new SFOrderReceiveReq();
|
||||
receive.setUser_name("顺丰同城");
|
||||
receive.setUser_phone("13881979410");
|
||||
receive.setUser_address("北京市海淀区学清嘉创大厦A座15层");
|
||||
receive.setUser_lng("");
|
||||
receive.setUser_lat("");
|
||||
param.setReceive(receive);
|
||||
|
||||
|
||||
|
||||
// 转换 json 字符串参数
|
||||
String paramJSON = JsonUtil.toJSONString(param);
|
||||
|
||||
// 根据参数生成请求签名
|
||||
String retRespStr = HttpUtil.post(buildUrl("createorder", paramJSON), paramJSON);
|
||||
if (StrUtil.isEmpty(retRespStr)) {
|
||||
logger.error("顺丰同城创建订单无返回值!");
|
||||
return null;
|
||||
}
|
||||
|
||||
return JsonUtil.json2object(retRespStr, SFExpressApiRes.class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,4 +130,9 @@ logstash:
|
||||
feieyun:
|
||||
url: http://api.feieyun.cn/Api/Open/
|
||||
user: 17777525395@163.com
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
sf-express:
|
||||
# 顺丰同城 api 接口配置
|
||||
appid: 1711573316
|
||||
appkey: cd57608baa9c00fe1cda5f652b14240d
|
||||
dev_id: 1711573316
|
||||
|
||||
@ -130,4 +130,8 @@ logstash:
|
||||
feieyun:
|
||||
url: http://api.feieyun.cn/Api/Open/
|
||||
user: 17777525395@163.com
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
sf-express:
|
||||
# 顺丰同城 api 接口配置
|
||||
appid: 1711573316
|
||||
appkey: cd57608baa9c00fe1cda5f652b14240d
|
||||
@ -134,4 +134,8 @@ logstash:
|
||||
feieyun:
|
||||
url: http://api.feieyun.cn/Api/Open/
|
||||
user: 17777525395@163.com
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
sf-express:
|
||||
# 顺丰同城 api 接口配置
|
||||
appid: 1711573316
|
||||
appkey: cd57608baa9c00fe1cda5f652b14240d
|
||||
@ -134,4 +134,8 @@ logstash:
|
||||
feieyun:
|
||||
url: http://api.feieyun.cn/Api/Open/
|
||||
user: 17777525395@163.com
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
sf-express:
|
||||
# 顺丰同城 api 接口配置
|
||||
appid: 1711573316
|
||||
appkey: cd57608baa9c00fe1cda5f652b14240d
|
||||
@ -134,4 +134,8 @@ logstash:
|
||||
feieyun:
|
||||
url: http://api.feieyun.cn/Api/Open/
|
||||
user: 17777525395@163.com
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
ukey: vuzPtNVghXSxbZmr
|
||||
sf-express:
|
||||
# 顺丰同城 api 接口配置
|
||||
appid: 1711573316
|
||||
appkey: cd57608baa9c00fe1cda5f652b14240d
|
||||
Loading…
Reference in New Issue
Block a user