修复物流状态查询
This commit is contained in:
+19
-19
@@ -32,14 +32,12 @@ import co.yixiang.modules.order.param.*;
|
||||
import co.yixiang.modules.order.service.YxStoreOrderCartInfoService;
|
||||
import co.yixiang.modules.order.service.YxStoreOrderService;
|
||||
import co.yixiang.modules.order.service.YxStoreOrderStatusService;
|
||||
import co.yixiang.modules.order.service.dto.YxStoreOrderDto;
|
||||
import co.yixiang.modules.order.vo.ComputeVo;
|
||||
import co.yixiang.modules.order.vo.ConfirmOrderVo;
|
||||
import co.yixiang.modules.order.vo.OrderCartInfoVo;
|
||||
import co.yixiang.modules.order.vo.YxStoreOrderQueryVo;
|
||||
import co.yixiang.modules.user.domain.YxUser;
|
||||
import co.yixiang.tools.express.ExpressService;
|
||||
import co.yixiang.tools.express.config.ExpressAutoConfiguration;
|
||||
import co.yixiang.tools.express.dao.ExpressInfo;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.vdurmont.emoji.EmojiParser;
|
||||
@@ -74,7 +72,7 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
@Api(value = "订单模块", tags = "商城:订单模块")
|
||||
public class AppStoreOrderController {
|
||||
|
||||
private final ExpressService expressService;
|
||||
private final YxStoreOrderService storeOrderService;
|
||||
private final OrderSupplyService orderSupplyService;
|
||||
private final CreatShareProductService creatShareProductService;
|
||||
@@ -432,23 +430,25 @@ public class AppStoreOrderController {
|
||||
@ApiOperation(value = "获取物流信息", notes = "获取物流信息")
|
||||
public ApiResult<ExpressInfo> express(@RequestBody ExpressParam expressInfoDo) {
|
||||
|
||||
//顺丰轨迹查询处理
|
||||
String lastFourNumber = "";
|
||||
if (expressInfoDo.getShipperCode().equals(ShipperCodeEnum.SF.getValue())) {
|
||||
YxStoreOrderDto yxStoreOrderDto;
|
||||
yxStoreOrderDto = storeOrderService.getOrderDetail(Long.valueOf(expressInfoDo.getOrderCode()));
|
||||
lastFourNumber = yxStoreOrderDto.getUserPhone();
|
||||
if (lastFourNumber.length() == 11) {
|
||||
lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
|
||||
}
|
||||
}
|
||||
|
||||
ExpressService expressService = ExpressAutoConfiguration.expressService();
|
||||
// //顺丰轨迹查询处理
|
||||
// String lastFourNumber = "";
|
||||
// if (expressInfoDo.getShipperCode().equals(ShipperCodeEnum.SF.getValue())) {
|
||||
// YxStoreOrderDto yxStoreOrderDto;
|
||||
// yxStoreOrderDto = storeOrderService.getOrderDetail(Long.valueOf(expressInfoDo.getOrderCode()));
|
||||
// lastFourNumber = yxStoreOrderDto.getUserPhone();
|
||||
// if (lastFourNumber.length() == 11) {
|
||||
// lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// ExpressService expressService = ExpressAutoConfiguration.expressService();
|
||||
// ExpressInfo expressInfo = expressService.getExpressInfo(expressInfoDo.getOrderCode(),
|
||||
// expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode(), lastFourNumber);
|
||||
// if (!expressInfo.isSuccess()) {
|
||||
// throw new YshopException(expressInfo.getReason());
|
||||
// }
|
||||
ExpressInfo expressInfo = expressService.getExpressInfo(expressInfoDo.getOrderCode(),
|
||||
expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode(), lastFourNumber);
|
||||
if (!expressInfo.isSuccess()) {
|
||||
throw new YshopException(expressInfo.getReason());
|
||||
}
|
||||
expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode());
|
||||
return ApiResult.ok(expressInfo);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import co.yixiang.annotation.AnonymousAccess;
|
||||
import co.yixiang.dozer.service.IGenerator;
|
||||
import co.yixiang.enums.OrderInfoEnum;
|
||||
import co.yixiang.enums.OrderLogEnum;
|
||||
import co.yixiang.enums.ShipperCodeEnum;
|
||||
import co.yixiang.enums.ShopCommonEnum;
|
||||
import co.yixiang.exception.BadRequestException;
|
||||
import co.yixiang.logging.aop.log.Log;
|
||||
@@ -28,7 +27,6 @@ import co.yixiang.modules.order.service.YxStoreOrderService;
|
||||
import co.yixiang.modules.order.service.YxStoreOrderStatusService;
|
||||
import co.yixiang.modules.order.service.dto.*;
|
||||
import co.yixiang.tools.express.ExpressService;
|
||||
import co.yixiang.tools.express.config.ExpressAutoConfiguration;
|
||||
import co.yixiang.tools.express.dao.ExpressInfo;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@@ -36,6 +34,7 @@ import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -74,7 +73,8 @@ public class StoreOrderController {
|
||||
private final IGenerator generator;
|
||||
private final YxStoreOrderService yxStoreOrderService;
|
||||
private final YxStoreOrderStatusService yxStoreOrderStatusService;
|
||||
|
||||
@Autowired
|
||||
private ExpressService expressService;
|
||||
|
||||
public StoreOrderController(IGenerator generator, YxStoreOrderService yxStoreOrderService,
|
||||
YxStoreOrderStatusService yxStoreOrderStatusService) {
|
||||
@@ -316,21 +316,9 @@ public class StoreOrderController {
|
||||
@ApiOperation(value = "获取物流信息",notes = "获取物流信息",response = ExpressParam.class)
|
||||
public ResponseEntity express( @RequestBody ExpressParam expressInfoDo){
|
||||
|
||||
//顺丰轨迹查询处理
|
||||
String lastFourNumber = "";
|
||||
if (expressInfoDo.getShipperCode().equals(ShipperCodeEnum.SF.getValue())) {
|
||||
YxStoreOrderDto yxStoreOrderDto;
|
||||
yxStoreOrderDto = yxStoreOrderService.getOrderDetail(Long.valueOf(expressInfoDo.getOrderCode()));
|
||||
lastFourNumber = yxStoreOrderDto.getUserPhone();
|
||||
if (lastFourNumber.length()==11) {
|
||||
lastFourNumber = StrUtil.sub(lastFourNumber,lastFourNumber.length(),-4);
|
||||
}
|
||||
}
|
||||
|
||||
ExpressService expressService = ExpressAutoConfiguration.expressService();
|
||||
ExpressInfo expressInfo = expressService.getExpressInfo(expressInfoDo.getOrderCode(),
|
||||
expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode(),lastFourNumber);
|
||||
if(!expressInfo.isSuccess()) {
|
||||
expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode());
|
||||
if (!expressInfo.isSuccess()) {
|
||||
throw new BadRequestException(expressInfo.getReason());
|
||||
}
|
||||
return new ResponseEntity<>(expressInfo, HttpStatus.OK);
|
||||
|
||||
+5
-1
@@ -83,6 +83,7 @@ import co.yixiang.utils.OrderUtil;
|
||||
import co.yixiang.utils.RedisUtils;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
@@ -2386,7 +2387,10 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
|
||||
*/
|
||||
@Override
|
||||
public YxStoreOrderDto getOrderDetail(Long orderId) {
|
||||
YxStoreOrder yxStoreOrder = this.getById(orderId);
|
||||
// YxStoreOrder yxStoreOrder = this.getById(orderId);
|
||||
LambdaQueryWrapper<YxStoreOrder> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(YxStoreOrder::getOrderId, orderId);
|
||||
YxStoreOrder yxStoreOrder=yxStoreOrderMapper.selectOne(wrapper);
|
||||
if (ObjectUtil.isEmpty(yxStoreOrder)) {
|
||||
throw new BadRequestException("订单详情不存在");
|
||||
}
|
||||
|
||||
@@ -5,57 +5,42 @@
|
||||
*/
|
||||
package co.yixiang.tools.express;
|
||||
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import co.yixiang.enums.ShipperCodeEnum;
|
||||
import co.yixiang.tools.express.config.ExpressProperties;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import co.yixiang.tools.express.config.Kuaidi100Properties;
|
||||
import co.yixiang.tools.express.dao.ExpressInfo;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import co.yixiang.tools.express.dao.Traces;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.api.QueryTrack;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.IBaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.QueryTrackParam;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.QueryTrackReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.QueryTrackData;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.QueryTrackResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.SignUtils;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gson.Gson;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.Base64Utils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 物流查询服务
|
||||
* <p>
|
||||
* 快递鸟即时查询API http://www.kdniao.com/api-track
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
@EnableConfigurationProperties(Kuaidi100Properties.class)
|
||||
public class ExpressService implements Serializable {
|
||||
|
||||
private final Log logger = LogFactory.getLog(ExpressService.class);
|
||||
//请求url
|
||||
private String ReqURL = "http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
|
||||
|
||||
private ExpressProperties properties;
|
||||
|
||||
public ExpressProperties getProperties() {
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(ExpressProperties properties) {
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物流供应商名
|
||||
*
|
||||
* @param vendorCode
|
||||
* @return
|
||||
*/
|
||||
public String getVendorName(String vendorCode) {
|
||||
for (Map<String, String> item : properties.getVendors()) {
|
||||
if (item.get("code").equals(vendorCode)) {
|
||||
return item.get("name");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private Kuaidi100Properties properties;
|
||||
/**
|
||||
* 获取物流信息
|
||||
*
|
||||
@@ -63,53 +48,93 @@ public class ExpressService implements Serializable {
|
||||
* @param ShipperCode
|
||||
* @return
|
||||
*/
|
||||
public ExpressInfo getExpressInfo(String OrderCode,String ShipperCode, String LogisticCode,String lastFourNumber) {
|
||||
public ExpressInfo getExpressInfo(String OrderCode,String ShipperCode, String LogisticCode) {
|
||||
try {
|
||||
String result = getOrderTracesByJson(OrderCode,ShipperCode, LogisticCode,lastFourNumber);
|
||||
ObjectMapper objMap = new ObjectMapper();
|
||||
ExpressInfo ei = objMap.readValue(result, ExpressInfo.class);
|
||||
ei.setShipperName(getVendorName(ShipperCode));
|
||||
return ei;
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
QueryTrackResp result = getOrderTraceByJson(OrderCode,ShipperCode, LogisticCode);
|
||||
ExpressInfo info = new ExpressInfo();
|
||||
assert result != null;
|
||||
if (!result.getMessage().equals("ok")){
|
||||
info.setSuccess(false);
|
||||
info.setReason(result.getMessage());
|
||||
return info;
|
||||
}
|
||||
info.setLogisticCode(LogisticCode);
|
||||
info.setSuccess(result.getIscheck().equals("1"));
|
||||
List<Traces> tracesList = Lists.newArrayList();
|
||||
|
||||
for (QueryTrackData t: result.getData()){
|
||||
Traces traces = new Traces();
|
||||
traces.setAcceptStation(t.getContext());
|
||||
traces.setAcceptTime(t.getTime());
|
||||
tracesList.add(traces);
|
||||
}
|
||||
info.setSuccess(true);
|
||||
info.setTraces(tracesList);
|
||||
return info;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Json方式 查询订单物流轨迹
|
||||
* Json方式 快递100查询订单物流轨迹
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
private String getOrderTracesByJson(String OrderCode,String ShipperCode, String LogisticCode,String lastFourNumber) throws Exception {
|
||||
if (!properties.isEnable()) {
|
||||
private QueryTrackResp getOrderTraceByJson(String OrderCode,String ShipperCode, String LogisticCode) throws Exception {
|
||||
if (!properties.getEnable()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
//处理顺丰查询轨迹需手机号码后4位
|
||||
String requestData;
|
||||
if (ShipperCode.equals(ShipperCodeEnum.SF.getValue())) {
|
||||
requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "','CustomerName':'" + lastFourNumber + "'}";
|
||||
} else {
|
||||
requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "'}";
|
||||
}
|
||||
QueryTrackReq queryTrackReq = new QueryTrackReq();
|
||||
QueryTrackParam queryTrackParam = new QueryTrackParam();
|
||||
queryTrackParam.setCom(ShipperCode);
|
||||
queryTrackParam.setNum(LogisticCode);
|
||||
String param = new Gson().toJson(queryTrackParam);
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("RequestData", URLEncoder.encode(requestData, "UTF-8"));
|
||||
params.put("EBusinessID", properties.getAppId());
|
||||
params.put("RequestType", "1002");
|
||||
String dataSign = encrypt(requestData, properties.getAppKey(), "UTF-8");
|
||||
params.put("DataSign", URLEncoder.encode(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
queryTrackReq.setParam(param);
|
||||
queryTrackReq.setCustomer(this.properties.getCustomer());
|
||||
queryTrackReq.setSign(SignUtils.querySign(param ,this.properties.getKey(),this.properties.getCustomer()));
|
||||
|
||||
String result = HttpUtil.post(ReqURL, params);
|
||||
IBaseClient baseClient = new QueryTrack();
|
||||
|
||||
//根据公司业务处理返回的信息......
|
||||
|
||||
return result;
|
||||
HttpResult rsp = baseClient.execute(queryTrackReq);
|
||||
return JSONUtil.toBean(rsp.getBody(),QueryTrackResp.class);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Json方式 快递鸟查询订单物流轨迹
|
||||
// *
|
||||
// * @throws Exception
|
||||
// */
|
||||
// private String getOrderTracesByJson(String OrderCode,String ShipperCode, String LogisticCode,String lastFourNumber) throws Exception {
|
||||
// if (!properties.isEnable()) {
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// //处理顺丰查询轨迹需手机号码后4位(改为都需要手机号后四位)
|
||||
// String requestData;
|
||||
// if (ShipperCode.equals(ShipperCodeEnum.SF.getValue())) {
|
||||
// requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "','CustomerName':'" + lastFourNumber + "'}";
|
||||
// } else {
|
||||
// requestData = "{'OrderCode':'" + OrderCode + "','ShipperCode':'" + ShipperCode + "','LogisticCode':'" + LogisticCode + "'}";
|
||||
// }
|
||||
//
|
||||
// Map<String, Object> params = new HashMap<>();
|
||||
// params.put("RequestData", URLEncoder.encode(requestData, "UTF-8"));
|
||||
// params.put("EBusinessID", properties.getAppId());
|
||||
// params.put("RequestType", "8001");
|
||||
// String dataSign = encrypt(requestData, properties.getAppKey(), "UTF-8");
|
||||
// params.put("DataSign", URLEncoder.encode(dataSign, "UTF-8"));
|
||||
// params.put("DataType", "2");
|
||||
//
|
||||
// String result = HttpUtil.post(ReqURL, params);
|
||||
//
|
||||
// //根据公司业务处理返回的信息......
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
|
||||
/**
|
||||
* MD5加密
|
||||
*
|
||||
@@ -132,28 +157,28 @@ public class ExpressService implements Serializable {
|
||||
return sb.toString().toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign签名生成
|
||||
*
|
||||
* @param content 内容
|
||||
* @param keyValue Appkey
|
||||
* @param charset 编码方式
|
||||
* @return DataSign签名
|
||||
*/
|
||||
private String encrypt(String content, String keyValue, String charset) {
|
||||
if (keyValue != null) {
|
||||
content = content + keyValue;
|
||||
}
|
||||
byte[] src;
|
||||
try {
|
||||
src = MD5(content, charset).getBytes(charset);
|
||||
return Base64Utils.encodeToString(src);
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
// /**
|
||||
// * Sign签名生成
|
||||
// *
|
||||
// * @param content 内容
|
||||
// * @param keyValue Appkey
|
||||
// * @param charset 编码方式
|
||||
// * @return DataSign签名
|
||||
// */
|
||||
// private String encrypt(String content, String keyValue, String charset) {
|
||||
// if (keyValue != null) {
|
||||
// content = content + keyValue;
|
||||
// }
|
||||
// byte[] src;
|
||||
// try {
|
||||
// src = MD5(content, charset).getBytes(charset);
|
||||
// return Base64Utils.encodeToString(src);
|
||||
// } catch (Exception e) {
|
||||
// logger.error(e.getMessage(), e);
|
||||
// }
|
||||
//
|
||||
// return null;
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2022
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.tools.express.config;
|
||||
|
||||
|
||||
import co.yixiang.constant.ShopConstants;
|
||||
import co.yixiang.enums.ShopCommonEnum;
|
||||
import co.yixiang.tools.express.ExpressService;
|
||||
import co.yixiang.utils.RedisUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class ExpressAutoConfiguration {
|
||||
|
||||
|
||||
private static RedisUtils redisUtil;
|
||||
|
||||
@Autowired
|
||||
public ExpressAutoConfiguration(RedisUtils redisUtil) {
|
||||
ExpressAutoConfiguration.redisUtil = redisUtil;
|
||||
}
|
||||
|
||||
public static ExpressService expressService() {
|
||||
ExpressService expressService = (ExpressService)redisUtil.get(ShopConstants.ZSW_EXPRESS_SERVICE);
|
||||
if(expressService != null) {
|
||||
return expressService;
|
||||
}
|
||||
|
||||
ExpressProperties properties = new ExpressProperties();
|
||||
String enable = redisUtil.getY("exp_enable");
|
||||
String appId = redisUtil.getY("exp_appId");
|
||||
String appKey = redisUtil.getY("exp_appKey");
|
||||
properties.setAppId(appId);
|
||||
properties.setAppKey(appKey);
|
||||
|
||||
if(ShopCommonEnum.ENABLE_2.getValue().toString().equals(enable)){
|
||||
properties.setEnable(false);
|
||||
}else{
|
||||
properties.setEnable(true);
|
||||
}
|
||||
ExpressService service = new ExpressService();
|
||||
service.setProperties(properties);
|
||||
redisUtil.set(ShopConstants.ZSW_EXPRESS_SERVICE,service);
|
||||
return service;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
package co.yixiang.tools.express.config;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.express.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
@ConfigurationProperties(prefix = "kuaidi100")
|
||||
@Data
|
||||
public class Kuaidi100Properties {
|
||||
|
||||
private String key;
|
||||
|
||||
private String customer;
|
||||
|
||||
private String secret;
|
||||
|
||||
private String userid;
|
||||
|
||||
private Boolean enable;
|
||||
}
|
||||
@@ -41,6 +41,14 @@ public class ExpressInfo {
|
||||
@ApiModelProperty(value = "物流状态:2-在途中,3-签收,4-问题件")
|
||||
private String State;
|
||||
|
||||
// @JsonProperty("Location")
|
||||
// @ApiModelProperty(value = "不知道干啥的")
|
||||
// private String Location;
|
||||
//
|
||||
// @JsonProperty("StateEx")
|
||||
// @ApiModelProperty(value = "不知道干啥的")
|
||||
// private String StateEx;
|
||||
|
||||
@JsonProperty("EBusinessID")
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private String EBusinessID;
|
||||
|
||||
@@ -103,10 +103,12 @@ public class QiNiuServiceImpl implements QiNiuService {
|
||||
Auth auth = Auth.create(qiniuConfig.getAccessKey(), qiniuConfig.getSecretKey());
|
||||
String upToken = auth.uploadToken(qiniuConfig.getBucket());
|
||||
try {
|
||||
String key = file.getOriginalFilename();
|
||||
if(qiniuContentService.getOne(new LambdaQueryWrapper<QiniuContent>().eq(QiniuContent::getName,key)) != null) {
|
||||
key = QiNiuUtil.getKey(key);
|
||||
}
|
||||
String key = QiNiuUtil.getKey(file.getOriginalFilename());;
|
||||
// String key = file.getOriginalFilename();
|
||||
//key不能重复
|
||||
// if(qiniuContentService.getOne(new LambdaQueryWrapper<QiniuContent>().eq(QiniuContent::getName,key)) != null) {
|
||||
// key = QiNiuUtil.getKey(key);
|
||||
// }
|
||||
Response response = uploadManager.put(file.getBytes(), key, upToken);
|
||||
//解析上传成功的结果
|
||||
DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.AutoNumReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.AutoNumResp;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 快递100智能判断接口(只提供给正式用户使用)
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 9:59
|
||||
*/
|
||||
public class AutoNum extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
AutoNumReq autoNumReq = (AutoNumReq) request;
|
||||
return String.format(ApiInfoConstant.AUTO_NUM_URL,autoNumReq.getNum(),autoNumReq.getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据单号获取快递公司列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<AutoNumResp> getComByNumList(BaseRequest request) throws Exception{
|
||||
HttpResult httpResult = this.execute(request);
|
||||
if ( httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<List<AutoNumResp>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据单号获取第一个快递公司
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getFirstComByNum(BaseRequest request) throws Exception{
|
||||
List<AutoNumResp> comByNumList = this.getComByNumList(request);
|
||||
if (comByNumList != null && comByNumList.size()>0){
|
||||
return comByNumList.get(0).getComCode();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.PrintReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.BOrderQueryData;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.BOrderResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintBaseResp;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 商家寄件(优选寄件)
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 11:14
|
||||
*/
|
||||
public class BOrder extends BaseClient {
|
||||
|
||||
@Override
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.B_ORDER_URL;
|
||||
}
|
||||
|
||||
public PrintBaseResp transportCapacity(PrintReq param) throws Exception{
|
||||
HttpResult httpResult = execute(param);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp<BOrderQueryData>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public PrintBaseResp order(PrintReq param) throws Exception{
|
||||
HttpResult httpResult = execute(param);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp<BOrderResp>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public PrintBaseResp getCode(PrintReq param) throws Exception{
|
||||
HttpResult httpResult = execute(param);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp<Map<String,String>>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public PrintBaseResp cancel(PrintReq param) throws Exception{
|
||||
HttpResult httpResult = execute(param);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
|
||||
/**
|
||||
* 商家寄件(官方快递)
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-01-21 15:55
|
||||
*/
|
||||
public class BOrderOfficial extends BaseClient {
|
||||
|
||||
@Override
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.B_ORDER_OFFICIAL_URL;
|
||||
}
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.CloudAttachmentReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintBaseResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.HttpUtils;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 附件云打印
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:26
|
||||
*/
|
||||
public class CloudPrintAttachment extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResult execute(BaseRequest request) throws Exception{
|
||||
if (request instanceof CloudAttachmentReq){
|
||||
CloudAttachmentReq cloudPrintAttachmentReq = (CloudAttachmentReq)request;
|
||||
String url = String.format(ApiInfoConstant.CLOUD_PRINT_URL,
|
||||
cloudPrintAttachmentReq.getMethod(),
|
||||
cloudPrintAttachmentReq.getT(),
|
||||
cloudPrintAttachmentReq.getKey(),
|
||||
cloudPrintAttachmentReq.getSign(),
|
||||
URLEncoder.encode(cloudPrintAttachmentReq.getParam(), "UTF-8"));
|
||||
return HttpUtils.doPostFile(url,cloudPrintAttachmentReq.getFile(),super.getConnectTimeout(),super.getSocketTimeout());
|
||||
}
|
||||
throw new ClassCastException();
|
||||
}
|
||||
|
||||
public PrintBaseResp print(CloudAttachmentReq cloudPrintAttachmentReq) throws Exception{
|
||||
HttpResult httpResult = this.execute(cloudPrintAttachmentReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp<Map<String,String>>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.PrintReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintBaseResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.HttpUtils;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
|
||||
/**
|
||||
* 自定义云打印
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:22
|
||||
*/
|
||||
public class CloudPrintCustom extends BaseClient {
|
||||
private int connectTimeout = 3000;
|
||||
|
||||
private int socketTimeout = 3000;
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResult execute(BaseRequest request) throws Exception{
|
||||
if (request instanceof PrintReq){
|
||||
PrintReq printReq = (PrintReq)request;
|
||||
String url = String.format(ApiInfoConstant.CLOUD_PRINT_URL,
|
||||
printReq.getMethod(),
|
||||
printReq.getT(),
|
||||
printReq.getKey(),
|
||||
printReq.getSign(),
|
||||
URLEncoder.encode(printReq.getParam(), "UTF-8"));
|
||||
return HttpUtils.doPost(url,printReq,super.getConnectTimeout(),super.getSocketTimeout());
|
||||
}
|
||||
throw new ClassCastException();
|
||||
}
|
||||
|
||||
public PrintBaseResp print(PrintReq printReq) throws Exception {
|
||||
HttpResult httpResult = execute(printReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())) {
|
||||
return new Gson().fromJson(httpResult.getBody(), PrintBaseResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.PrintReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintBaseResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.HttpUtils;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
|
||||
/**
|
||||
* 复打
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:26
|
||||
*/
|
||||
public class CloudPrintOld extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResult execute(BaseRequest request) throws Exception{
|
||||
if (request instanceof PrintReq){
|
||||
PrintReq printReq = (PrintReq)request;
|
||||
String url = String.format(ApiInfoConstant.CLOUD_PRINT_URL,
|
||||
printReq.getMethod(),
|
||||
printReq.getT(),
|
||||
printReq.getKey(),
|
||||
printReq.getSign(),
|
||||
URLEncoder.encode(printReq.getParam(), "UTF-8"));
|
||||
return HttpUtils.doPost(url,printReq,super.getConnectTimeout(),super.getSocketTimeout());
|
||||
}
|
||||
throw new ClassCastException();
|
||||
}
|
||||
|
||||
public PrintBaseResp print(PrintReq request) throws Exception{
|
||||
HttpResult httpResult = this.execute(request);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
|
||||
return new Gson().fromJson(httpResult.getBody(),PrintBaseResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.PrintReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintBaseResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintCloudData;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 15:46
|
||||
*/
|
||||
public class PrintCloud extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.ELECTRONIC_ORDER_PRINT_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 电子面单打印
|
||||
*
|
||||
* @param printReq
|
||||
* @author: api.kuaidi100.com
|
||||
* @time: 2020/7/17 17:15
|
||||
*/
|
||||
public PrintBaseResp<PrintCloudData> print(PrintReq printReq) throws Exception{
|
||||
HttpResult httpResult = execute(printReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp<PrintCloudData>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.PrintReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintHtmlResp;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 17:20
|
||||
*/
|
||||
public class PrintHtml extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.ELECTRONIC_ORDER_HTML_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 电子面单打印
|
||||
*
|
||||
* @param printReq
|
||||
* @return: java.lang.String
|
||||
* @author: api.kuaidi100.com
|
||||
* @time: 2020/7/17 17:15
|
||||
*/
|
||||
public PrintHtmlResp print(PrintReq printReq) throws Exception{
|
||||
HttpResult httpResult = execute(printReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
|
||||
return new Gson().fromJson(httpResult.getBody(),PrintHtmlResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.PrintReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintBaseResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.PrintImgData;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 15:46
|
||||
*/
|
||||
public class PrintImg extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.ELECTRONIC_ORDER_PIC_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单图片(BASE64)
|
||||
*
|
||||
* @param printReq
|
||||
* @return: java.lang.String
|
||||
* @author: api.kuaidi100.com
|
||||
* @time: 2020/7/17 17:15
|
||||
*/
|
||||
public PrintBaseResp<PrintImgData> printImG(PrintReq printReq) throws Exception{
|
||||
HttpResult httpResult = execute(printReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<PrintBaseResp<PrintImgData>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理返回的base64字符串(返回的是一个字符串json数组,多个子单时会有多个)
|
||||
*
|
||||
* @param imgBase64 base64 json字符串数组
|
||||
* @return
|
||||
*/
|
||||
public List<String> getBase64Img(String imgBase64){
|
||||
List<String> stringList= new Gson().fromJson(imgBase64, new TypeToken<List<String>>() {}.getType());
|
||||
List<String> base64Img = new ArrayList<String>();
|
||||
if (stringList != null && stringList.size()>0){
|
||||
for (String s : stringList) {
|
||||
s = "data:image/png;base64,"+s.replace("\\\\n","");
|
||||
base64Img.add(s);
|
||||
}
|
||||
}
|
||||
return base64Img;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.QueryTrackReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.QueryTrackResp;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
/**
|
||||
* 实时查询
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:27
|
||||
*/
|
||||
public class QueryTrack extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.QUERY_URL;
|
||||
}
|
||||
|
||||
public QueryTrackResp queryTrack(QueryTrackReq queryTrackReq) throws Exception{
|
||||
HttpResult httpResult = execute(queryTrackReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),QueryTrackResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
|
||||
/**
|
||||
* 快递信息地图轨迹
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:27
|
||||
*/
|
||||
public class QueryTrackMap extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.QUERY_MAP_VIEW_URL;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
|
||||
/**
|
||||
* 同城配送
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 16:37
|
||||
*/
|
||||
public class SameCityOrder extends BaseClient {
|
||||
|
||||
@Override
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.SAME_CITY_ORDER_URL;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.SendSmsReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.SendSmsResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.SmsCallbackResp;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 19:00
|
||||
*/
|
||||
public class SendSms extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.SEND_SMS_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
*
|
||||
* @param sendSmsReq
|
||||
* @return
|
||||
*/
|
||||
public SendSmsResp sendSms(SendSmsReq sendSmsReq) throws Exception{
|
||||
HttpResult httpResult = execute(sendSmsReq);
|
||||
if (StringUtils.isNotBlank(httpResult.getBody()) && httpResult.getStatus() == HttpStatus.SC_OK){
|
||||
return new Gson().fromJson(httpResult.getBody(),SendSmsResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信回调接口 例子
|
||||
* @param
|
||||
* @return: java.util.Map<java.lang.String, java.lang.Boolean>
|
||||
* @author: api.kuaidi100.com
|
||||
* @time: 2020/7/21 10:11
|
||||
*/
|
||||
public Map<String,Boolean> callback(SmsCallbackResp smsCallbackResp){
|
||||
//建议记录一下这个回调的内容,方便出问题后双方排查问题
|
||||
//log.debug("快递100短信回调结果|{}",new Gson().toJson(smsCallbackResp));
|
||||
Map<String,Boolean> result = new HashMap<String, Boolean>();
|
||||
if (smsCallbackResp == null){
|
||||
return result;
|
||||
}
|
||||
|
||||
result.put("status",Boolean.TRUE);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.SubscribeReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.SubscribePushParamResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.SubscribeResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.SignUtils;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 订阅
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-16 14:38
|
||||
*/
|
||||
public class Subscribe extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.SUBSCRIBE_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订阅接口
|
||||
*
|
||||
* @param subscribeReq
|
||||
* @return
|
||||
*/
|
||||
public SubscribeResp subscribe(SubscribeReq subscribeReq) throws Exception{
|
||||
HttpResult httpResult = execute(subscribeReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(), SubscribeResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订阅推送处理(参照)
|
||||
* 订阅成功后,如果该快递单号有轨迹(包括已经签收的单),快递100将会在15分钟-4个小时推送;后面将会4个小时跟踪一次,跟踪到有轨迹变化则推送;
|
||||
* 如果订阅成功后,3天查无结果(录错单/快递公司错了/揽收比较晚),快递100将会推送3天查无结果,可以继续重新订阅。
|
||||
*
|
||||
* 回调接口支持自定义参数,比如订阅时回调地址填写的是 http://www.xxx.com?orderId=1233333
|
||||
* 可以通过下面这种方式获取到orderId: String orderId = request.getParameter("orderId");
|
||||
*
|
||||
* 返回值必须是下面这样的格式,否则快递100将认为该推送失败,快递100将会重试3次该推送,时间间隔35分钟;
|
||||
* 成功结果返回例子: {"result":true,"returnCode":"200","message":"提交成功"}
|
||||
*
|
||||
* @param request
|
||||
* @return: com.zsw.tools.utils.kuaidi100.sdk.response.SubscribeResp
|
||||
* @author: api.kuaidi100.com
|
||||
* @time: 2020/7/16 19:48
|
||||
*/
|
||||
public SubscribeResp callBackUrl(HttpServletRequest request){
|
||||
String param = request.getParameter("param");
|
||||
String sign = request.getParameter("sign");
|
||||
//建议记录一下这个回调的内容,方便出问题后双方排查问题
|
||||
//log.debug("快递100订阅推送回调结果|{}|{}",param,sign);
|
||||
//订阅时传的salt,没有可以忽略
|
||||
String salt = "";
|
||||
String ourSign = SignUtils.sign(param + salt);
|
||||
SubscribeResp subscribeResp = new SubscribeResp();
|
||||
subscribeResp.setResult(Boolean.TRUE);
|
||||
subscribeResp.setReturnCode("200");
|
||||
subscribeResp.setMessage("成功");
|
||||
//加密如果相等,属于快递100推送;否则可以忽略掉当前请求
|
||||
if (ourSign.equals(sign)){
|
||||
//TODO 业务处理
|
||||
SubscribePushParamResp subscribePushParamResp = new Gson().fromJson(param, SubscribePushParamResp.class);
|
||||
return subscribeResp;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.SubscribeReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.SubscribeResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.SubscribeWithMapPushParamResp;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.SignUtils;
|
||||
import com.google.gson.Gson;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 订阅(地图)
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-16 14:38
|
||||
*/
|
||||
public class SubscribeWithMap extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.SUBSCRIBE_WITH_MAP_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订阅接口
|
||||
*
|
||||
* @param subscribeReq
|
||||
* @return
|
||||
*/
|
||||
public SubscribeResp subscribe(SubscribeReq subscribeReq) throws Exception{
|
||||
HttpResult httpResult = execute(subscribeReq);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(), SubscribeResp.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订阅推送处理(参照)
|
||||
* 订阅成功后,如果该快递单号有轨迹(包括已经签收的单),快递100将会在15分钟-4个小时推送;后面将会4个小时跟踪一次,跟踪到有轨迹变化则推送;
|
||||
* 如果订阅成功后,3天查无结果(录错单/快递公司错了/揽收比较晚),快递100将会推送3天查无结果,可以继续重新订阅。
|
||||
*
|
||||
* 回调接口支持自定义参数,比如订阅时回调地址填写的是 http://www.xxx.com?orderId=1233333
|
||||
* 可以通过下面这种方式获取到orderId: String orderId = request.getParameter("orderId");
|
||||
*
|
||||
* 返回值必须是下面这样的格式,否则快递100将认为该推送失败,快递100将会重试3次该推送,时间间隔35分钟;
|
||||
* 成功结果返回例子: {"result":true,"returnCode":"200","message":"提交成功"}
|
||||
*
|
||||
* @param request
|
||||
* @return: com.zsw.tools.utils.kuaidi100.sdk.response.SubscribeResp
|
||||
* @author: api.kuaidi100.com
|
||||
* @time: 2020/7/16 19:48
|
||||
*/
|
||||
public SubscribeResp callBackUrl(HttpServletRequest request){
|
||||
String param = request.getParameter("param");
|
||||
String sign = request.getParameter("sign");
|
||||
//建议记录一下这个回调的内容,方便出问题后双方排查问题
|
||||
//log.debug("快递100订阅推送回调结果|{}|{}",param,sign);
|
||||
//订阅时传的salt,没有可以忽略
|
||||
String salt = "";
|
||||
String ourSign = SignUtils.sign(param + salt);
|
||||
SubscribeResp subscribeResp = new SubscribeResp();
|
||||
subscribeResp.setResult(Boolean.TRUE);
|
||||
subscribeResp.setReturnCode("200");
|
||||
subscribeResp.setMessage("成功");
|
||||
//加密如果相等,属于快递100推送;否则可以忽略掉当前请求
|
||||
if (ourSign.equals(sign)){
|
||||
//TODO 业务处理
|
||||
SubscribeWithMapPushParamResp mapPushParamResp = new Gson().fromJson(param, SubscribeWithMapPushParamResp.class);
|
||||
return subscribeResp;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.api;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
|
||||
/**
|
||||
* 第三方平台账号授权
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-01-06 14:12
|
||||
*/
|
||||
public class ThirdAuth extends BaseClient {
|
||||
|
||||
@Override
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.THIRD_AUTH_URL;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.cloud;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.contant.ApiInfoConstant;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.core.BaseClient;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.cloud.CloudBaseReq;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.cloud.CloudBaseResp;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpStatus;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-20 10:36
|
||||
*/
|
||||
public class CloudBase<T> extends BaseClient {
|
||||
|
||||
public String getApiUrl(BaseRequest request) {
|
||||
return ApiInfoConstant.CLOUD_NORMAL_URL;
|
||||
}
|
||||
|
||||
public CloudBaseResp<T> executeToObject(CloudBaseReq param) throws Exception{
|
||||
HttpResult httpResult = execute(param);
|
||||
if (httpResult.getStatus() == HttpStatus.SC_OK && StringUtils.isNotBlank(httpResult.getBody())){
|
||||
return new Gson().fromJson(httpResult.getBody(),new TypeToken<CloudBaseResp<T>>(){}.getType());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.contant;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-15 17:43
|
||||
*/
|
||||
public class ApiInfoConstant {
|
||||
/**
|
||||
* 查询url
|
||||
*/
|
||||
public static final String QUERY_URL = "https://poll.kuaidi100.com/poll/query.do";
|
||||
/**
|
||||
* 快递查询地图轨迹url
|
||||
*/
|
||||
public static final String QUERY_MAP_VIEW_URL = "https://poll.kuaidi100.com/poll/maptrack.do";
|
||||
/**
|
||||
* 订阅url
|
||||
*/
|
||||
public static final String SUBSCRIBE_URL = "https://poll.kuaidi100.com/poll";
|
||||
/**
|
||||
* 订阅带地图url
|
||||
*/
|
||||
public static final String SUBSCRIBE_WITH_MAP_URL = "http://poll.kuaidi100.com/pollmap";
|
||||
/**
|
||||
* 订阅SCHEMA
|
||||
*/
|
||||
public static final String SUBSCRIBE_SCHEMA = "json";
|
||||
/**
|
||||
* 智能单号识别url
|
||||
*/
|
||||
public static final String AUTO_NUM_URL = "http://www.kuaidi100.com/autonumber/auto?num=%s&key=%s";
|
||||
/**
|
||||
* 电子面单html url
|
||||
*/
|
||||
public static final String ELECTRONIC_ORDER_HTML_URL = "http://poll.kuaidi100.com/eorderapi.do";
|
||||
/**
|
||||
* 电子面单html方法
|
||||
*/
|
||||
public static final String ELECTRONIC_ORDER_HTML_METHOD = "getElecOrder";
|
||||
/**
|
||||
* 电子面单获取图片 url
|
||||
*/
|
||||
public static final String ELECTRONIC_ORDER_PIC_URL = "https://poll.kuaidi100.com/printapi/printtask.do";
|
||||
/**
|
||||
* 电子面单获取图片
|
||||
*/
|
||||
public static final String ELECTRONIC_ORDER_PIC_METHOD = "getPrintImg";
|
||||
/**
|
||||
* 电子面单打印 url
|
||||
*/
|
||||
public static final String ELECTRONIC_ORDER_PRINT_URL = "https://poll.kuaidi100.com/printapi/printtask.do";
|
||||
/**
|
||||
* 电子面单打印方法
|
||||
*/
|
||||
public static final String ELECTRONIC_ORDER_PRINT_METHOD = "eOrder";
|
||||
/**
|
||||
* 菜鸟淘宝账号授权
|
||||
*/
|
||||
public static final String AUTH_THIRD_URL = "https://poll.kuaidi100.com/printapi/authThird.do";
|
||||
/**
|
||||
* 云打印url
|
||||
*/
|
||||
public static final String CLOUD_PRINT_URL = "http://poll.kuaidi100.com/printapi/printtask.do?method=%s&t=%s&key=%s&sign=%s¶m=%s";
|
||||
/**
|
||||
* 自定义打印方法
|
||||
*/
|
||||
public static final String CLOUD_PRINT_CUSTOM_METHOD = "printOrder";
|
||||
/**
|
||||
* 附件打印方法
|
||||
*/
|
||||
public static final String CLOUD_PRINT_ATTACHMENT_METHOD = "imgOrder";
|
||||
/**
|
||||
* 复打方法
|
||||
*/
|
||||
public static final String CLOUD_PRINT_OLD_METHOD = "printOld";
|
||||
/**
|
||||
* 复打方法
|
||||
*/
|
||||
public static final String SEND_SMS_URL = "http://apisms.kuaidi100.com:9502/sms/send.do";
|
||||
/**
|
||||
* 商家寄件
|
||||
*/
|
||||
public static final String B_ORDER_URL = "https://order.kuaidi100.com/order/borderbestapi.do";
|
||||
/**
|
||||
* 商家寄件查询运力
|
||||
*/
|
||||
public static final String B_ORDER_QUERY_TRANSPORT_CAPACITY_METHOD = "querymkt";
|
||||
/**
|
||||
* 商家寄件下单
|
||||
*/
|
||||
public static final String B_ORDER_SEND_METHOD = "bOrderBest";
|
||||
/**
|
||||
* 商家寄件获取验证码
|
||||
*/
|
||||
public static final String B_ORDER_CODE_METHOD = "getCode";
|
||||
/**
|
||||
* 商家寄件取消
|
||||
*/
|
||||
public static final String B_ORDER_CANCEL_METHOD = "cancelBest";
|
||||
/**
|
||||
* 云平台通用请求url
|
||||
*/
|
||||
public static final String CLOUD_NORMAL_URL = "http://cloud.kuaidi100.com/api";
|
||||
/**
|
||||
* 第三方电商平台账号授权请求url
|
||||
*/
|
||||
public static final String THIRD_AUTH_URL = "https://poll.kuaidi100.com/printapi/authThird.do";
|
||||
/**
|
||||
* 商家寄件(官方寄件)请求url
|
||||
*/
|
||||
public static final String B_ORDER_OFFICIAL_URL = "https://poll.kuaidi100.com/order/borderapi.do";
|
||||
/**
|
||||
* 商家寄件(官方寄件)下单
|
||||
*/
|
||||
public static final String B_ORDER_OFFICIAL_ORDER_METHOD = "bOrder";
|
||||
/**
|
||||
* 商家寄件(官方寄件)取消
|
||||
*/
|
||||
public static final String B_ORDER_OFFICIAL_CANCEL_METHOD = "cancel";
|
||||
/**
|
||||
* 商家寄件(官方寄件)查询价格
|
||||
*/
|
||||
public static final String B_ORDER_OFFICIAL_PRICE_METHOD = "queryPrice";
|
||||
/**
|
||||
* 同城配送请求url
|
||||
*/
|
||||
public static final String SAME_CITY_ORDER_URL = "https://order.kuaidi100.com/sameCity/order";
|
||||
/**
|
||||
* 同城配送授权方法
|
||||
*/
|
||||
public static final String SAME_CITY_AUTH_METHOD = "auth";
|
||||
/**
|
||||
* 同城配送下单方法
|
||||
*/
|
||||
public static final String SAME_CITY_ORDER_METHOD = "order";
|
||||
/**
|
||||
* 同城配送查询订单方法
|
||||
*/
|
||||
public static final String SAME_CITY_QUERY_METHOD = "query";
|
||||
/**
|
||||
* 同城配送取消订单方法
|
||||
*/
|
||||
public static final String SAME_CITY_CANCEL_METHOD = "cancel";
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.contant;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-27 9:27
|
||||
*/
|
||||
public class CloudApiCodeConstant {
|
||||
/**
|
||||
* 快递寄件查询运力
|
||||
*/
|
||||
public final static String ORDER_QUERY_EXPRESS = "7c5c49c5e51a4b75bd960f4997d2846a";
|
||||
/**
|
||||
* 快递寄件
|
||||
*/
|
||||
public final static String ORDER = "ddffadd3df4b4c0d8d6f9942c7a8c990";
|
||||
/**
|
||||
* 快递寄件取消寄件
|
||||
*/
|
||||
public final static String ORDER_CANCEL = "bcb0428c1dd84aca9d6e19ea4dcf683d";
|
||||
/**
|
||||
* 快递时效查询V1版
|
||||
*/
|
||||
public final static String AGING_V1 = "8ffb952184224877a561b300dc57b935";
|
||||
/**
|
||||
* 快递时效查询V2版
|
||||
*/
|
||||
public final static String AGING_V2 = "4cdfccdf64ea4088a94eb2ea1ef40c97";
|
||||
/**
|
||||
* 快递时效详情查询V1版
|
||||
*/
|
||||
public final static String AGING_DETAILS_V1 = "60d6fa8809134c40879e5f0a7228183e";
|
||||
/**
|
||||
* 快递时效详情查询V2版
|
||||
*/
|
||||
public final static String AGING_DETAILS_V2 = "81bb0620fbaf460db4e6dab84a05ec00";
|
||||
/**
|
||||
* 实时快递查询
|
||||
*/
|
||||
public final static String SYNC_QUERY = "c3e50f627ff6452ba44688ba8883f2dc";
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.contant;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-15 17:24
|
||||
*/
|
||||
public class CompanyConstant {
|
||||
|
||||
public static final String SF = "shunfeng";
|
||||
public static final String ZT = "zhongtong";
|
||||
public static final String YT = "yuantong";
|
||||
public static final String HT = "huitongkuaidi";
|
||||
public static final String ST = "shentong";
|
||||
public static final String YD = "yunda";
|
||||
public static final String EMS = "ems";
|
||||
public static final String JD = "jd";
|
||||
public static final String ZJS = "zhaijisong";
|
||||
public static final String DB = "debangkuaidi";
|
||||
|
||||
|
||||
public static final String SS = "shansong";
|
||||
public static final String KFW = "kfw";
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.core;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.BaseResponse;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.HttpUtils;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-25 16:02
|
||||
*/
|
||||
public abstract class BaseClient implements IBaseClient{
|
||||
|
||||
private int connectTimeout = 3000;
|
||||
|
||||
private int socketTimeout = 3000;
|
||||
|
||||
public HttpResult execute(BaseRequest request) throws Exception{
|
||||
|
||||
return HttpUtils.doPost(getApiUrl(request),request,connectTimeout,socketTimeout);
|
||||
}
|
||||
|
||||
public BaseResponse executeToObject(BaseRequest request) throws Exception{
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setTimeOut(int connectTimeout, int socketTimeout) {
|
||||
this.connectTimeout = connectTimeout;
|
||||
this.socketTimeout = socketTimeout;
|
||||
}
|
||||
|
||||
public abstract String getApiUrl(BaseRequest request);
|
||||
|
||||
public int getConnectTimeout() {
|
||||
return connectTimeout;
|
||||
}
|
||||
|
||||
public int getSocketTimeout() {
|
||||
return socketTimeout;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.core;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.response.BaseResponse;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-25 16:09
|
||||
*/
|
||||
public interface IBaseClient {
|
||||
|
||||
HttpResult execute(BaseRequest request) throws Exception;
|
||||
|
||||
BaseResponse executeToObject(BaseRequest request) throws Exception;
|
||||
|
||||
void setTimeOut(int connectTimeout,int socketTimeout);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.pojo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
@Data
|
||||
public class HttpResult {
|
||||
private int status;
|
||||
private String body;
|
||||
private String error;
|
||||
|
||||
public HttpResult() {
|
||||
}
|
||||
|
||||
public HttpResult(int status, String body, String error) {
|
||||
this.status = status;
|
||||
this.body = body;
|
||||
this.error = error;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-12-04 11:11
|
||||
*/
|
||||
@Data
|
||||
public class AutoNumReq extends BaseRequest {
|
||||
|
||||
private String key;
|
||||
|
||||
private String num;
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 14:37
|
||||
*/
|
||||
@Data
|
||||
public class BOrderCancelReq {
|
||||
/**
|
||||
* 任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 取消原因,例:暂时不寄件了
|
||||
*/
|
||||
private String cancelMsg;
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 14:37
|
||||
*/
|
||||
@Data
|
||||
public class BOrderGetCodeReq {
|
||||
/**
|
||||
* 任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private String orderId;
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 商家寄件(官方快递)
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 15:29
|
||||
*/
|
||||
@Data
|
||||
public class BOrderOfficialQueryPriceReq {
|
||||
/**
|
||||
* 快递公司编码
|
||||
*/
|
||||
private String kuaidiCom;
|
||||
/**
|
||||
* 出发地地址,最小颗粒到市级,例如:广东省深圳市
|
||||
*/
|
||||
private String address;
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 11:17
|
||||
*/
|
||||
@Data
|
||||
public class BOrderQueryReq {
|
||||
|
||||
private String sendAddr;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 14:33
|
||||
*/
|
||||
@Data
|
||||
public class BOrderReq {
|
||||
|
||||
/**
|
||||
* 快递公司的编码,一律用小写字母,见《快递公司编码》
|
||||
*/
|
||||
private String kuaidicom;
|
||||
/**
|
||||
* 收件人姓名
|
||||
*/
|
||||
private String recManName;
|
||||
/**
|
||||
* 收件人的手机号,手机号和电话号二者其一必填
|
||||
*/
|
||||
private String recManMobile;
|
||||
/**
|
||||
* 收件人所在完整地址,如广东深圳市深圳市南山区科技南十二路2号金蝶软件园
|
||||
*/
|
||||
private String recManPrintAddr;
|
||||
/**
|
||||
* 寄件人姓名
|
||||
*/
|
||||
private String sendManName;
|
||||
/**
|
||||
* 寄件人的手机号,手机号和电话号二者其一必填
|
||||
*/
|
||||
private String sendManMobile;
|
||||
/**
|
||||
* 寄件人所在的完整地址,如广东深圳市深圳市南山区科技南十二路2号金蝶软件园B10
|
||||
*/
|
||||
private String sendManPrintAddr;
|
||||
/**
|
||||
* 物品名称,例:文件
|
||||
*/
|
||||
private String cargo;
|
||||
/**
|
||||
* 物品总重量KG,例:1.5,单位kg
|
||||
*/
|
||||
private String weight;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* callBackUrl订单信息回调
|
||||
*/
|
||||
private String callBackUrl;
|
||||
/**
|
||||
* 快递业务服务类型,例:标准快递,默认为标准快递
|
||||
*/
|
||||
private String serviceType;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-25 16:12
|
||||
*/
|
||||
@Data
|
||||
public class BaseRequest {
|
||||
|
||||
private String url;
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:36
|
||||
*/
|
||||
@Data
|
||||
public class CloudAttachmentReq extends PrintReq {
|
||||
private File file;
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:37
|
||||
*/
|
||||
@Data
|
||||
public class CloudPrintAttachmentParam {
|
||||
/**
|
||||
* 贵司内部自定义的订单编号,需要保证唯一性,非必填
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 打印纸的高度,以mm为单位
|
||||
*/
|
||||
private String height;
|
||||
/**
|
||||
* 打印纸的宽度,以mm为单位
|
||||
*/
|
||||
private String width;
|
||||
/**
|
||||
* 需要打印的份数,默认是一份
|
||||
*/
|
||||
private String copyNum;
|
||||
/**
|
||||
* 打印范围,起始页,仅对多页文件支持,默认是打印整个文档
|
||||
*/
|
||||
private String startPage;
|
||||
/**
|
||||
* 打印范围,结束页,仅对多页文件支持,默认是打印整个文档
|
||||
*/
|
||||
private String endPage;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* 打印设备,通过打印机输出的设备码进行获取
|
||||
*/
|
||||
private String siid;
|
||||
/**
|
||||
* 打印状态回调地址
|
||||
*/
|
||||
private String callBackUrl;
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:38
|
||||
*/
|
||||
@Data
|
||||
public class CloudPrintCustomParam {
|
||||
/**
|
||||
* 贵司内部自定义的订单编号,需要保证唯一性,非必填
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 通过管理后台的打印摸版配置信息获取
|
||||
*/
|
||||
private String tempid;
|
||||
/**
|
||||
* 打印设备,通过打印机输出的设备码进行获取
|
||||
*/
|
||||
private String siid;
|
||||
/**
|
||||
* 打印纸的高度
|
||||
*/
|
||||
private String height;
|
||||
/**
|
||||
* 打印纸的宽度
|
||||
*/
|
||||
private String width;
|
||||
/**
|
||||
* 打印状态回调地址
|
||||
*/
|
||||
private String callBackUrl;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:37
|
||||
*/
|
||||
public class CloudPrintCustomReq {
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 10:43
|
||||
*/
|
||||
@Data
|
||||
public class CloudPrintOldParam {
|
||||
|
||||
private String taskId;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 16:30
|
||||
*/
|
||||
@Data
|
||||
public class ManInfo {
|
||||
/**
|
||||
* 收件人姓名 (必填)
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 收件人的手机号,手机号和电话号二者其一必填 (必填)
|
||||
*/
|
||||
private String mobile;
|
||||
/**
|
||||
* 收件人所在完整地址 (必填)
|
||||
*/
|
||||
private String printAddr;
|
||||
/**
|
||||
* 收件人所在公司名称(可选)
|
||||
*/
|
||||
private String company;
|
||||
}
|
||||
+181
@@ -0,0 +1,181 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 17:05
|
||||
*/
|
||||
@Data
|
||||
public class PrintCloudParam {
|
||||
|
||||
/**
|
||||
* 业务类型,默认为10
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 电子面单客户账户或月结账号,需贵司向当地快递公司网点申请
|
||||
*/
|
||||
private String partnerId;
|
||||
/**
|
||||
* 电子面单密码,需贵司向当地快递公司网点申请
|
||||
*/
|
||||
private String partnerKey;
|
||||
/**
|
||||
* 收件网点名称,由快递公司当地网点分配,
|
||||
* 若使用淘宝授权填入(taobao),使用菜鸟授权填入(cainiao)
|
||||
*/
|
||||
private String net;
|
||||
/**
|
||||
* 快递公司的编码,一律用小写字母
|
||||
*/
|
||||
private String kuaidicom;
|
||||
/**
|
||||
* 收件人信息
|
||||
*/
|
||||
private ManInfo recMan;
|
||||
/**
|
||||
* 收件人信息
|
||||
*/
|
||||
private ManInfo sendMan;
|
||||
/**
|
||||
* 物品名称(部分快递公司必填)
|
||||
*/
|
||||
private String cargo;
|
||||
/**
|
||||
* 物品总数量。
|
||||
* 另外该属性与子单有关,如果需要子单(指同一个订单打印出多张电子面单,即同一个订单返回多个面单号),
|
||||
* needChild = 1、count 需要大于1,如count = 2 则一个主单 一个子单,
|
||||
* count = 3则一个主单 二个子单;返回的子单号码见返回结果的childNum字段
|
||||
*/
|
||||
private String count;
|
||||
/**
|
||||
* 物品总重量,单位:KG (例子:0.5)
|
||||
*/
|
||||
private String weight;
|
||||
/**
|
||||
* 支付方式:
|
||||
* SHIPPER:寄方付(默认)
|
||||
* CONSIGNEE:到付
|
||||
* MONTHLY:月结
|
||||
* THIRDPARTY:第三方支付
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 快递类型:
|
||||
* 标准快递(默认)
|
||||
* 顺丰特惠
|
||||
* EMS经济
|
||||
*/
|
||||
private String expType;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 电子面单模板编码
|
||||
*/
|
||||
private String tempid;
|
||||
/**
|
||||
* 打印设备编码。通过打印机输出的设备码进行获取
|
||||
*/
|
||||
private String siid;
|
||||
/**
|
||||
* 保价额度
|
||||
*/
|
||||
private String valinsPay;
|
||||
/**
|
||||
* 代收货款额度
|
||||
*/
|
||||
private String collection;
|
||||
/**
|
||||
* 是否需要子单(支持子单的快递公司才可以用,是否支持可以参考参数字典)
|
||||
* 1:需要
|
||||
* 0:不需要(默认)
|
||||
* 如果需要子单(指同一个订单打印出多张电子面单,即同一个订单返回多个面单号);
|
||||
* needChild = 1、count 需要大于1,如count = 2 一个主单 一个子单,
|
||||
* count = 3 一个主单 二个子单,返回的子单号码见返回结果的childNum字段
|
||||
*/
|
||||
private String needChild;
|
||||
/**
|
||||
* 是否需要回单(支持回单的快递公司才可以用,是否支持可以参考参数字典)
|
||||
* 1:需要
|
||||
* 0:不需要(默认)
|
||||
* 返回的回单号见返回结果的returnNum字段
|
||||
*/
|
||||
private String needBack;
|
||||
/**
|
||||
* 贵司内部自定义的订单编号,需要保证唯一性
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 生成图片的高,以mm为单位(默认100)
|
||||
*/
|
||||
private String height;
|
||||
/**
|
||||
* 生成图片的宽,以mm为单位(默认180)
|
||||
*/
|
||||
private String width;
|
||||
/**
|
||||
* 打印状态回调地址
|
||||
*/
|
||||
private String callBackUrl;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* 是否开启订阅功能:
|
||||
* 0:不开启(默认)
|
||||
* 1:开启
|
||||
* 说明开启订阅功能时:pollCallBackUrl必须填入
|
||||
* 此功能只针对有快递单号的单
|
||||
*/
|
||||
private String op;
|
||||
/**
|
||||
* 如果op设置为1时,pollCallBackUrl必须填入,用于跟踪回调
|
||||
*/
|
||||
private String pollCallBackUrl;
|
||||
/**
|
||||
* 添加此字段表示开通行政区域解析功能:0:关闭(默认);1:开通行政区域解析功能
|
||||
*/
|
||||
private String resultv2;
|
||||
/**
|
||||
* 扩展字段,不同快递公司具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String partnerSecret;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String partnerName;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String checkMan;
|
||||
|
||||
/**
|
||||
* 打印方向(默认0) 0-正方向 1-反方向
|
||||
*/
|
||||
private String direction;
|
||||
|
||||
/**
|
||||
* 打印时间
|
||||
*/
|
||||
private String printTime;
|
||||
/**
|
||||
* 额外服务(类似部分物流公司的需定义派送方式,包装等)
|
||||
*/
|
||||
private String addService;
|
||||
/*
|
||||
* 到付金额(单位:元)
|
||||
*/
|
||||
private String freight;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 16:21
|
||||
*/
|
||||
@Data
|
||||
public class PrintCloudReq extends PrintReq{
|
||||
|
||||
/**
|
||||
* 业务类型(默认:getPrintImg)
|
||||
*/
|
||||
private String method;
|
||||
/**
|
||||
* 快递100分配给贵司的的授权key
|
||||
*/
|
||||
private String key;
|
||||
/**
|
||||
* 加密签名信息:MD5(param+t+key+secret);加密后字符串转大写
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 当前请求时间戳
|
||||
*/
|
||||
private String t;
|
||||
/**
|
||||
* 其他参数组合成的json对象
|
||||
*/
|
||||
private String param;
|
||||
}
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 16:55
|
||||
*/
|
||||
@Data
|
||||
public class PrintHtmlParam {
|
||||
/**
|
||||
* 电子面单客户账户或月结账号,需贵司向当地快递公司网点申请
|
||||
*/
|
||||
private String partnerId;
|
||||
/**
|
||||
* 电子面单密码,需贵司向当地快递公司网点申请
|
||||
*/
|
||||
private String partnerKey;
|
||||
/**
|
||||
* 收件网点名称,由快递公司当地网点分配,
|
||||
* 若使用淘宝授权填入(taobao),使用菜鸟授权填入(cainiao)
|
||||
*/
|
||||
private String net;
|
||||
/**
|
||||
* 快递公司的编码,一律用小写字母
|
||||
*/
|
||||
private String kuaidicom;
|
||||
/**
|
||||
* 收件人信息
|
||||
*/
|
||||
private ManInfo recMan;
|
||||
/**
|
||||
* 收件人信息
|
||||
*/
|
||||
private ManInfo sendMan;
|
||||
/**
|
||||
* 物品名称(部分快递公司必填)
|
||||
*/
|
||||
private String cargo;
|
||||
/**
|
||||
* 物品总数量。
|
||||
* 另外该属性与子单有关,如果需要子单(指同一个订单打印出多张电子面单,即同一个订单返回多个面单号),
|
||||
* needChild = 1、count 需要大于1,如count = 2 则一个主单 一个子单,
|
||||
* count = 3则一个主单 二个子单;返回的子单号码见返回结果的childNum字段
|
||||
*/
|
||||
private int count;
|
||||
/**
|
||||
* 物品总重量,单位:KG (例子:0.5)
|
||||
*/
|
||||
private String weight;
|
||||
/**
|
||||
* 支付方式:
|
||||
* SHIPPER:寄方付(默认)
|
||||
* CONSIGNEE:到付
|
||||
* MONTHLY:月结
|
||||
* THIRDPARTY:第三方支付
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 快递类型:
|
||||
* 标准快递(默认)
|
||||
* 顺丰特惠
|
||||
* EMS经济
|
||||
*/
|
||||
private String expType;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 保价额度
|
||||
*/
|
||||
private String valinsPay;
|
||||
/**
|
||||
* 代收货款额度
|
||||
*/
|
||||
private String collection;
|
||||
/**
|
||||
* 是否需要子单(支持子单的快递公司才可以用,是否支持可以参考参数字典)
|
||||
* 1:需要
|
||||
* 0:不需要(默认)
|
||||
* 如果需要子单(指同一个订单打印出多张电子面单,即同一个订单返回多个面单号);
|
||||
* needChild = 1、count 需要大于1,如count = 2 一个主单 一个子单,
|
||||
* count = 3 一个主单 二个子单,返回的子单号码见返回结果的childNum字段
|
||||
*/
|
||||
private int needChild;
|
||||
/**
|
||||
* 是否需要回单(支持回单的快递公司才可以用,是否支持可以参考参数字典)
|
||||
* 1:需要
|
||||
* 0:不需要(默认)
|
||||
* 返回的回单号见返回结果的returnNum字段
|
||||
*/
|
||||
private String needBack;
|
||||
/**
|
||||
* 贵司内部自定义的订单编号,需要保证唯一性
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 是否返回面单
|
||||
* 0:不需要(默认)
|
||||
* 1:需要
|
||||
* 如果需要,则返回要打印的模版的HTML代码,贵司可以直接将之显示到IE等浏览器,然后通过浏览器进行打印
|
||||
*/
|
||||
private String needTemplate;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* 是否开启订阅功能:
|
||||
* 0:不开启(默认)
|
||||
* 1:开启
|
||||
* 说明开启订阅功能时:pollCallBackUrl必须填入
|
||||
* 此功能只针对有快递单号的单
|
||||
*/
|
||||
private String op;
|
||||
/**
|
||||
* 如果op设置为1时,pollCallBackUrl必须填入,用于跟踪回调
|
||||
*/
|
||||
private String pollCallBackUrl;
|
||||
/**
|
||||
* 添加此字段表示开通行政区域解析功能:0:关闭(默认);1:开通行政区域解析功能
|
||||
*/
|
||||
private String resultv2;
|
||||
/**
|
||||
* 扩展字段,不同快递公司具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String partnerSecret;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String partnerName;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String checkMan;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 16:14
|
||||
*/
|
||||
@Data
|
||||
public class PrintHtmlReq {
|
||||
|
||||
/**
|
||||
* 业务类型(默认:getPrintImg)
|
||||
*/
|
||||
private String method;
|
||||
/**
|
||||
* 快递100分配给贵司的的授权key
|
||||
*/
|
||||
private String key;
|
||||
/**
|
||||
* 加密签名信息:MD5(param+t+key+secret);加密后字符串转大写
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 当前请求时间戳
|
||||
*/
|
||||
private String t;
|
||||
/**
|
||||
* 其他参数组合成的json对象
|
||||
*/
|
||||
private String param;
|
||||
}
|
||||
+179
@@ -0,0 +1,179 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 15:49
|
||||
*/
|
||||
@Data
|
||||
public class PrintImgParam {
|
||||
/**
|
||||
* 业务类型,默认为10
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 电子面单客户账户或月结账号,需贵司向当地快递公司网点申请
|
||||
*/
|
||||
private String partnerId;
|
||||
/**
|
||||
* 电子面单密码,需贵司向当地快递公司网点申请
|
||||
*/
|
||||
private String partnerKey;
|
||||
/**
|
||||
* 收件网点名称,由快递公司当地网点分配,
|
||||
* 若使用淘宝授权填入(taobao),使用菜鸟授权填入(cainiao)
|
||||
*/
|
||||
private String net;
|
||||
/**
|
||||
* 快递公司的编码,一律用小写字母
|
||||
*/
|
||||
private String kuaidicom;
|
||||
/**
|
||||
* 收件人姓名
|
||||
*/
|
||||
private String recManName;
|
||||
/**
|
||||
* 收件人的手机号
|
||||
*/
|
||||
private String recManMobile;
|
||||
/**
|
||||
* 收件人的手机号
|
||||
*/
|
||||
private String recManTel;
|
||||
/**
|
||||
* 收件人所在完整地址
|
||||
*/
|
||||
private String recManPrintAddr;
|
||||
/**
|
||||
* 寄件人姓名
|
||||
*/
|
||||
private String sendManName;
|
||||
/**
|
||||
* 寄件人的手机号
|
||||
*/
|
||||
private String sendManMobile;
|
||||
/**
|
||||
* 寄件人所在的完整地址
|
||||
*/
|
||||
private String sendManPrintAddr;
|
||||
/**
|
||||
* 打印电子面单模板编码(登录快递100管理后台查看)
|
||||
*/
|
||||
private String tempid;
|
||||
/**
|
||||
* 物品名称(部分快递公司必填)
|
||||
*/
|
||||
private String cargo;
|
||||
/**
|
||||
* 物品总数量。
|
||||
* 另外该属性与子单有关,如果需要子单(指同一个订单打印出多张电子面单,即同一个订单返回多个面单号),
|
||||
* needChild = 1、count 需要大于1,如count = 2 则一个主单 一个子单,
|
||||
* count = 3则一个主单 二个子单;返回的子单号码见返回结果的childNum字段
|
||||
*/
|
||||
private String count;
|
||||
/**
|
||||
* 物品总重量,单位:KG (例子:0.5)
|
||||
*/
|
||||
private String weight;
|
||||
/**
|
||||
* 支付方式:
|
||||
* SHIPPER:寄方付(默认)
|
||||
* CONSIGNEE:到付
|
||||
* MONTHLY:月结
|
||||
* THIRDPARTY:第三方支付
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 快递类型:
|
||||
* 标准快递(默认)
|
||||
* 顺丰特惠
|
||||
* EMS经济
|
||||
*/
|
||||
private String expType;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 保价额度
|
||||
*/
|
||||
private String valinsPay;
|
||||
/**
|
||||
* 代收货款额度
|
||||
*/
|
||||
private String collection;
|
||||
/**
|
||||
* 是否需要子单(支持子单的快递公司才可以用,是否支持可以参考参数字典)
|
||||
* 1:需要
|
||||
* 0:不需要(默认)
|
||||
* 如果需要子单(指同一个订单打印出多张电子面单,即同一个订单返回多个面单号);
|
||||
* needChild = 1、count 需要大于1,如count = 2 一个主单 一个子单,
|
||||
* count = 3 一个主单 二个子单,返回的子单号码见返回结果的childNum字段
|
||||
*/
|
||||
private String needChild;
|
||||
/**
|
||||
* 是否需要回单(支持回单的快递公司才可以用,是否支持可以参考参数字典)
|
||||
* 1:需要
|
||||
* 0:不需要(默认)
|
||||
* 返回的回单号见返回结果的returnNum字段
|
||||
*/
|
||||
private String needBack;
|
||||
/**
|
||||
* 贵司内部自定义的订单编号,需要保证唯一性
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 生成图片的高,以mm为单位(默认100)
|
||||
*/
|
||||
private String height;
|
||||
/**
|
||||
* 生成图片的宽,以mm为单位(默认180)
|
||||
*/
|
||||
private String width;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* 是否开启订阅功能:
|
||||
* 0:不开启(默认)
|
||||
* 1:开启
|
||||
* 说明开启订阅功能时:pollCallBackUrl必须填入
|
||||
* 此功能只针对有快递单号的单
|
||||
*/
|
||||
private String op;
|
||||
/**
|
||||
* 如果op设置为1时,pollCallBackUrl必须填入,用于跟踪回调
|
||||
*/
|
||||
private String pollCallBackUrl;
|
||||
/**
|
||||
* 添加此字段表示开通行政区域解析功能:0:关闭(默认);1:开通行政区域解析功能
|
||||
*/
|
||||
private String resultv2;
|
||||
/**
|
||||
* 打印时间
|
||||
*/
|
||||
private String printTime;
|
||||
|
||||
/**
|
||||
* 扩展字段,不同快递公司具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String partnerSecret;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String partnerName;
|
||||
/**
|
||||
* 扩展字段,具体详情看参数字典
|
||||
* https://api.kuaidi100.com/help/doc/?code=5f0ff6e82977d50a94e10237&openKey=%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95
|
||||
*/
|
||||
private String checkMan;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 15:49
|
||||
*/
|
||||
@Data
|
||||
public class PrintImgReq extends PrintReq{
|
||||
/**
|
||||
* 业务类型(默认:getPrintImg)
|
||||
*/
|
||||
private String method;
|
||||
/**
|
||||
* 快递100分配给贵司的的授权key
|
||||
*/
|
||||
private String key;
|
||||
/**
|
||||
* 加密签名信息:MD5(param+t+key+secret);加密后字符串转大写
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 当前请求时间戳
|
||||
*/
|
||||
private String t;
|
||||
/**
|
||||
* 其他参数组合成的json对象
|
||||
*/
|
||||
private String param;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-20 9:41
|
||||
*/
|
||||
@Data
|
||||
public class PrintReq extends BaseRequest {
|
||||
|
||||
/**
|
||||
* 业务类型(默认:getPrintImg)
|
||||
*/
|
||||
private String method;
|
||||
/**
|
||||
* 快递100分配给贵司的的授权key
|
||||
*/
|
||||
private String key;
|
||||
/**
|
||||
* 加密签名信息:MD5(param+t+key+secret);加密后字符串转大写
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 当前请求时间戳
|
||||
*/
|
||||
private String t;
|
||||
/**
|
||||
* 其他参数
|
||||
*/
|
||||
private String param;
|
||||
/**
|
||||
* 快递100分配给贵司的的授权key
|
||||
*/
|
||||
private String secret;
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 15:58
|
||||
*/
|
||||
@Data
|
||||
public class QueryTrackParam {
|
||||
/**
|
||||
* 查询的快递公司的编码,一律用小写字母
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 查询的快递单号, 单号的最大长度是32个字符
|
||||
*/
|
||||
private String num;
|
||||
/**
|
||||
* 收件人或寄件人的手机号或固话
|
||||
*/
|
||||
private String phone;
|
||||
/**
|
||||
* 出发地城市,省-市-区
|
||||
*/
|
||||
private String from;
|
||||
/**
|
||||
* 目的地城市,省-市-区
|
||||
*/
|
||||
private String to;
|
||||
/**
|
||||
* 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能,2:开通行政解析功能并且返回出发、目的及当前城市信息
|
||||
*/
|
||||
private String resultv2 = "0";
|
||||
/**
|
||||
* 返回数据格式。0:json(默认),1:xml,2:html,3:text
|
||||
*/
|
||||
private String show = "0";
|
||||
/**
|
||||
* 返回结果排序方式。desc:降序(默认),asc:升序
|
||||
*/
|
||||
private String order = "desc";
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 15:56
|
||||
*/
|
||||
@Data
|
||||
public class QueryTrackReq extends BaseRequest {
|
||||
/**
|
||||
* 我方分配给贵司的的公司编号, 点击查看账号信息
|
||||
*/
|
||||
private String customer;
|
||||
/**
|
||||
* 签名, 用于验证身份, 按param + key + customer 的顺序进行MD5加密(注意加密后字符串要转大写), 不需要“+”号
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 其他参数组合成的json对象
|
||||
*/
|
||||
private String param;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-21 9:14
|
||||
*/
|
||||
@Data
|
||||
public class SendSmsReq extends BaseRequest {
|
||||
/**
|
||||
* 加密签名信息:MD5(key + userid);加密后字符串转大写
|
||||
*/
|
||||
private String sign;
|
||||
/**
|
||||
* 我方分配给贵司的的短信接口用户ID,点击查看账号信息
|
||||
*/
|
||||
private String userid;
|
||||
/**
|
||||
* 商户名称签名;最好用简称,该字段信息会在短信标签处显示。不要超过5个字符
|
||||
*/
|
||||
private String seller;
|
||||
/**
|
||||
* 接收短信手机号
|
||||
*/
|
||||
private String phone;
|
||||
/**
|
||||
* 短信模板ID
|
||||
*/
|
||||
private String tid;
|
||||
/**
|
||||
* 短信模板替换内容
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 外部订单号:当该短信发送模板有回调地址时,外部订单号会返回给调用者,方便用户更新数据
|
||||
*/
|
||||
private String outorder;
|
||||
/**
|
||||
* 回调地址:如果客户在发送短信时填写该参数,将按照这个参数回调短信发送状态;
|
||||
* 如果为空,将按照模板配置的地址回调短信发送状态;如果两个参数都不填写,将不会回调通知状态
|
||||
*/
|
||||
private String callback;
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-16 13:41
|
||||
*/
|
||||
@Data
|
||||
public class SubscribeParam {
|
||||
|
||||
/**
|
||||
* 订阅的快递公司的编码,一律用小写字母
|
||||
*/
|
||||
private String company;
|
||||
/**
|
||||
* 订阅的快递单号,单号的最大长度是32个字符
|
||||
*/
|
||||
private String number;
|
||||
/**
|
||||
* 出发地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,请尽量提供
|
||||
*/
|
||||
private String from;
|
||||
/**
|
||||
* 目的地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,且到达目的地后会加大监控频率,请尽量提供
|
||||
*/
|
||||
private String to;
|
||||
/**
|
||||
* 我方分配给贵司的的授权key
|
||||
*/
|
||||
private String key;
|
||||
/**
|
||||
* 附加参数信息
|
||||
*/
|
||||
private SubscribeParameters parameters;
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-16 13:42
|
||||
*/
|
||||
@Data
|
||||
public class SubscribeParameters {
|
||||
/**
|
||||
* 回调接口的地址。如果需要在推送信息回传自己业务参数,可以在回调地址URL后面拼接上去,如示例中的orderId
|
||||
* http://www.xxxxx.com/callback?orderId=123
|
||||
*/
|
||||
private String callbackurl;
|
||||
/**
|
||||
* 签名用随机字符串。32位自定义字符串。添加该参数,则推送的时候会增加sign给贵司校验消息的可靠性
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能
|
||||
*/
|
||||
private String resultv2;
|
||||
/**
|
||||
* 添加此字段且将此值设为1,则表示开始智能判断单号所属公司的功能,
|
||||
* 开启后,company字段可为空,即只传运单号(number字段),我方收到后会根据单号判断出其所属的快递公司(即company字段)。
|
||||
* 建议只有在无法知道单号对应的快递公司(即company的值)的情况下才开启此功能。
|
||||
*/
|
||||
private String autoCom;
|
||||
/**
|
||||
* 添加此字段表示开启国际版
|
||||
* 开启后,若订阅的单号(即number字段)属于国际单号,会返回出发国与目的国两个国家的跟踪信息;
|
||||
* 本功能暂时只支持邮政体系(国际类的邮政小包、EMS)内的快递公司;
|
||||
* 若单号我方识别为非国际单,即使添加本字段,也不会返回destResult元素组.
|
||||
*/
|
||||
private String interCom;
|
||||
/**
|
||||
* 出发国家编码
|
||||
*/
|
||||
private String departureCountry;
|
||||
/**
|
||||
* 出发国家快递公司的编码
|
||||
*/
|
||||
private String departureCom;
|
||||
/**
|
||||
* 目的国家编码
|
||||
*/
|
||||
private String destinationCountry;
|
||||
/**
|
||||
* 目的国家快递公司的编码
|
||||
*/
|
||||
private String destinationCom;
|
||||
/**
|
||||
* 收件人或寄件人的手机号或固话(顺丰单号必填,也可以填写后四位,如果是固话,请不要上传分机号)
|
||||
*/
|
||||
private String phone;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-16 13:41
|
||||
*/
|
||||
@Data
|
||||
public class SubscribeReq extends BaseRequest {
|
||||
/**
|
||||
* 返回数据格式(json、xml、text)
|
||||
*/
|
||||
private String schema;
|
||||
/**
|
||||
* 其他参数
|
||||
*/
|
||||
private String param;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-01-06 14:16
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class ThirdAuthReq {
|
||||
/**
|
||||
* 请求的第三方平台,淘宝:taobao,菜鸟:cainiao,京东:jdalpha,拼多多:pinduoduoWx
|
||||
*/
|
||||
private String net;
|
||||
/**
|
||||
* 授权完后的信息回调地址
|
||||
*/
|
||||
private String callBackUrl;
|
||||
/**
|
||||
* 已经授权完需要重新获取授权信息
|
||||
*/
|
||||
private String partnerId;
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.cloud;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-25 15:47
|
||||
*/
|
||||
@Data
|
||||
public class COrderCancelReq extends CloudBaseReq{
|
||||
/**
|
||||
* 任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 取消原因,例:暂时不寄件了
|
||||
*/
|
||||
private String cancelMsg;
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.cloud;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-20 11:09
|
||||
*/
|
||||
@Data
|
||||
public class COrderQueryReq extends CloudBaseReq{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private String sendManPrintAddr;
|
||||
|
||||
private String recManPrintAddr;
|
||||
|
||||
private String address;
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.cloud;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-10-27 15:47
|
||||
*/
|
||||
@Data
|
||||
public class COrderReq extends CloudBaseReq{
|
||||
/**
|
||||
* 快递公司的编码,一律用小写字母,见《快递公司编码》
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 收件人姓名
|
||||
*/
|
||||
private String recManName;
|
||||
/**
|
||||
* 收件人的手机号,手机号和电话号二者其一必填
|
||||
*/
|
||||
private String recManMobile;
|
||||
/**
|
||||
* 收件人所在完整地址,如广东深圳市深圳市南山区科技南十二路2号金蝶软件园
|
||||
*/
|
||||
private String recManPrintAddr;
|
||||
/**
|
||||
* 寄件人姓名
|
||||
*/
|
||||
private String sendManName;
|
||||
/**
|
||||
* 寄件人的手机号,手机号和电话号二者其一必填
|
||||
*/
|
||||
private String sendManMobile;
|
||||
/**
|
||||
* 寄件人所在的完整地址,如广东深圳市深圳市南山区科技南十二路2号金蝶软件园B10
|
||||
*/
|
||||
private String sendManPrintAddr;
|
||||
/**
|
||||
* 物品名称,例:文件
|
||||
*/
|
||||
private String cargo;
|
||||
/**
|
||||
* 物品总重量KG,例:1.5,单位kg
|
||||
*/
|
||||
private String weight;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* callBackUrl订单信息回调
|
||||
*/
|
||||
private String callBackUrl;
|
||||
/**
|
||||
* 预约日期,例如:今天/明天/后天
|
||||
*/
|
||||
private String dayType;
|
||||
/**
|
||||
* 预约起始时间(HH:mm),例如:09:00
|
||||
*/
|
||||
private String pickupStartTime;
|
||||
/**
|
||||
* 预约截止时间(HH:mm),例如:10:00
|
||||
*/
|
||||
private String pickupEndTime;
|
||||
/**
|
||||
* 支付方式,SHIPPER: 寄付(默认),CONSIGNEE: 到付
|
||||
*/
|
||||
private String payment;
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.cloud;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.request.BaseRequest;
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.utils.SignUtils;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-10-27 15:45
|
||||
*/
|
||||
@Data
|
||||
public class CloudBaseReq extends BaseRequest {
|
||||
/**
|
||||
* 用户授权key
|
||||
*/
|
||||
private String secret_key;
|
||||
/**
|
||||
* 接口编号
|
||||
*/
|
||||
private String secret_code;
|
||||
/**
|
||||
* 加密签名:md5(secret_key+secret_secret)转大写
|
||||
*/
|
||||
private String secret_sign;
|
||||
|
||||
private String secret_secret;
|
||||
|
||||
public String getSecret_sign() {
|
||||
return SignUtils.sign(secret_key+secret_secret);
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 16:57
|
||||
*/
|
||||
@Data
|
||||
public class AuthReq {
|
||||
/**
|
||||
* 快递公司,一律用小写字母,见参数字典
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 授权店铺id
|
||||
*/
|
||||
private String storeId;
|
||||
/**
|
||||
* 授权后信息的信息回调地址
|
||||
*/
|
||||
private String callbackUrl;
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 17:24
|
||||
*/
|
||||
@Data
|
||||
public class CancelReq {
|
||||
|
||||
/**
|
||||
* 任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 取消原因
|
||||
*/
|
||||
private String cancelMsg;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-09 10:15
|
||||
*/
|
||||
@Data
|
||||
public class OrderGoods {
|
||||
/**
|
||||
* 商品名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 商品价格(分)
|
||||
*/
|
||||
private Integer price;
|
||||
/**
|
||||
* 商品数量
|
||||
*/
|
||||
private Integer count;
|
||||
/**
|
||||
* 商品单位
|
||||
*/
|
||||
private String unit;
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 17:25
|
||||
*/
|
||||
@Data
|
||||
public class OrderReq {
|
||||
/**
|
||||
* 快递公司的编码,一律用小写字母,见《快递公司编码》
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 收件人姓名
|
||||
*/
|
||||
private String recManName;
|
||||
/**
|
||||
* 收件人的手机号,手机号和电话号二者其一必填
|
||||
*/
|
||||
private String recManMobile;
|
||||
/**
|
||||
* 收件人所在完整地址,如广东深圳市深圳市南山区科技南十二路2号金蝶软件园
|
||||
*/
|
||||
private String recManPrintAddr;
|
||||
/**
|
||||
* 寄件人姓名
|
||||
*/
|
||||
private String sendManName;
|
||||
/**
|
||||
* 寄件人的手机号,手机号和电话号二者其一必填
|
||||
*/
|
||||
private String sendManMobile;
|
||||
/**
|
||||
* 寄件人所在的完整地址,如广东深圳市深圳市南山区科技南十二路2号金蝶软件园B10
|
||||
*/
|
||||
private String sendManPrintAddr;
|
||||
/**
|
||||
* 服务类型
|
||||
*/
|
||||
private String serviceType;
|
||||
/**
|
||||
* 物品总重量KG,例:1.5,单位kg
|
||||
*/
|
||||
private Double weight;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 签名用随机字符串
|
||||
*/
|
||||
private String salt;
|
||||
/**
|
||||
* callBackUrl订单信息回调
|
||||
*/
|
||||
private String callbackUrl;
|
||||
/**
|
||||
* 订单类型,默认为0 0: 立即单 1: 预约单
|
||||
*/
|
||||
private Integer orderType;
|
||||
/**
|
||||
* 取货时间(2020-02-02 22:00,指的是预约取件时间)
|
||||
*/
|
||||
|
||||
private String pickupTime;
|
||||
/**
|
||||
* 支付方式,SHIPPER: 寄付(默认),CONSIGNEE: 到付
|
||||
*/
|
||||
private String payment;
|
||||
/**
|
||||
* 对应商家版物品来源流水号
|
||||
*/
|
||||
private String orderSourceNo;
|
||||
/**
|
||||
* 物品来源
|
||||
*/
|
||||
private String orderSourceType;
|
||||
/**
|
||||
* 店铺ID
|
||||
*/
|
||||
private String storeId;
|
||||
/**
|
||||
* 小费(分)
|
||||
*/
|
||||
private Integer additionFee;
|
||||
/**
|
||||
* 保险费用(闪送支持)
|
||||
*/
|
||||
private Integer insurance;
|
||||
/**
|
||||
* 保险产品ID(闪送支持)
|
||||
*/
|
||||
private String insuranceProId;
|
||||
/**
|
||||
* 商品价格
|
||||
*/
|
||||
private Integer price;
|
||||
/**
|
||||
* 代收价格
|
||||
*/
|
||||
private Integer CollectionPrice;
|
||||
|
||||
private String partnerId;
|
||||
|
||||
private String partnerKey;
|
||||
|
||||
/**
|
||||
* 商品详情(强烈建议提供,方便骑手在取货时确认货品信息 ;顺丰时必填)
|
||||
*/
|
||||
private List<OrderGoods> goods;
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.request.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 17:24
|
||||
*/
|
||||
@Data
|
||||
public class QueryReq {
|
||||
|
||||
/**
|
||||
* 任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private String orderId;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 10:04
|
||||
*/
|
||||
@Data
|
||||
public class AutoNumResp {
|
||||
/**
|
||||
* 请忽略
|
||||
*/
|
||||
public String lengthPre;
|
||||
/**
|
||||
* 快递公司对应的编码
|
||||
*/
|
||||
private String comCode;
|
||||
/**
|
||||
* 请忽略
|
||||
*/
|
||||
private String noPre;
|
||||
/**
|
||||
* 请忽略
|
||||
*/
|
||||
private String noCount;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 14:17
|
||||
*/
|
||||
@Data
|
||||
public class BOrderQueryData {
|
||||
|
||||
private String province;
|
||||
|
||||
private String city;
|
||||
|
||||
private String district;
|
||||
|
||||
private String addr;
|
||||
|
||||
private String latitude;
|
||||
|
||||
private String longitude;
|
||||
|
||||
private List<BOrderQueryDataInfo> mktInfo;
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 14:24
|
||||
*/
|
||||
@Data
|
||||
public class BOrderQueryDataInfo {
|
||||
/**
|
||||
* 业务服务类型
|
||||
*/
|
||||
private List<String> serviceType;
|
||||
/**
|
||||
* 支持的快递公司编码
|
||||
*/
|
||||
private String kuaidiCom;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-09-17 14:31
|
||||
*/
|
||||
@Data
|
||||
public class BOrderResp {
|
||||
/**
|
||||
* 任务ID
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 订单ID
|
||||
*/
|
||||
private String orderId;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-11-25 16:11
|
||||
*/
|
||||
public class BaseResponse<K> {
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 18:48
|
||||
*/
|
||||
@Data
|
||||
public class PrintBaseResp<T> {
|
||||
|
||||
private String returnCode;
|
||||
|
||||
private boolean result;
|
||||
|
||||
private String message;
|
||||
|
||||
private T data;
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 19:49
|
||||
*/
|
||||
@Data
|
||||
public class PrintCloudData {
|
||||
|
||||
private String taskId;
|
||||
|
||||
private String eOrder;
|
||||
|
||||
private String kuaidinum;
|
||||
|
||||
private String kuaidicom;
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 19:31
|
||||
*/
|
||||
@Data
|
||||
public class PrintHtmlData {
|
||||
/**
|
||||
* html代码
|
||||
*/
|
||||
private List<String> template;
|
||||
/**
|
||||
* 快递单号
|
||||
*/
|
||||
private String kuaidinum;
|
||||
/**
|
||||
* 大头笔
|
||||
*/
|
||||
private String bulkpen;
|
||||
/**
|
||||
* 电子面单链接
|
||||
*/
|
||||
private List<String> templateurl;
|
||||
/**
|
||||
* 子单号
|
||||
*/
|
||||
private String childNum;
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 19:29
|
||||
*/
|
||||
@Data
|
||||
public class PrintHtmlResp {
|
||||
|
||||
private String taskId;
|
||||
|
||||
private String message;
|
||||
|
||||
private String status;
|
||||
|
||||
private boolean result;
|
||||
|
||||
private List<PrintHtmlData> data;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-17 18:52
|
||||
*/
|
||||
@Data
|
||||
public class PrintImgData {
|
||||
|
||||
private String taskId;
|
||||
|
||||
private String eOrder;
|
||||
|
||||
private String kuaidinum;
|
||||
|
||||
private String kuaidicom;
|
||||
|
||||
private String imgBase64;
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:13
|
||||
*/
|
||||
@Data
|
||||
public class QueryTrackData {
|
||||
/**
|
||||
* 时间,原始格式
|
||||
*/
|
||||
private String time;
|
||||
/**
|
||||
* 物流轨迹节点内容
|
||||
*/
|
||||
private String context;
|
||||
/**
|
||||
* 格式化后时间
|
||||
*/
|
||||
private String ftime;
|
||||
/**
|
||||
* 行政区域的编码
|
||||
*/
|
||||
private String areaCode;
|
||||
/**
|
||||
* 行政区域的名称
|
||||
*/
|
||||
private String areaName;
|
||||
/**
|
||||
* 签收状态 (0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转投)
|
||||
*/
|
||||
private String status;
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-12-24 17:34
|
||||
*/
|
||||
@Data
|
||||
@ToString(callSuper = true)
|
||||
public class QueryTrackMapResp extends QueryTrackResp {
|
||||
|
||||
/**
|
||||
* 轨迹地图链接
|
||||
*/
|
||||
private String trailUrl;
|
||||
/**
|
||||
* 预计到达时间
|
||||
*/
|
||||
private String arrivalTime;
|
||||
/**
|
||||
* 平均耗时
|
||||
*/
|
||||
private String totalTime;
|
||||
/**
|
||||
* 到达还需多少时间
|
||||
*/
|
||||
private String remainTime;
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:16
|
||||
*/
|
||||
@Data
|
||||
public class QueryTrackPosition {
|
||||
|
||||
/**
|
||||
* 地址编码
|
||||
*/
|
||||
private String number;
|
||||
/**
|
||||
* 地址名称
|
||||
*/
|
||||
private String name;
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:07
|
||||
*/
|
||||
@Data
|
||||
public class QueryTrackResp {
|
||||
/**
|
||||
* 消息体,请忽略
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 快递单号
|
||||
*/
|
||||
private String nu;
|
||||
/**
|
||||
* 是否签收标记
|
||||
*/
|
||||
private String ischeck;
|
||||
/**
|
||||
* 快递公司编码,一律用小写字母
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 通讯状态
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 轨迹详情数组
|
||||
*/
|
||||
private List<QueryTrackData> data;
|
||||
/**
|
||||
* 快递单当前状态,包括0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转投,10待清关,11清关中,12已清关,13清关异常,14拒签 等13个状态
|
||||
*/
|
||||
private String state;
|
||||
/**
|
||||
* 快递单明细状态标记
|
||||
*/
|
||||
private String condition;
|
||||
|
||||
private QueryTrackRouteInfo routeInfo;
|
||||
/**
|
||||
* 查不到轨迹或者其他问题返回码
|
||||
*/
|
||||
private String returnCode;
|
||||
/**
|
||||
* 查不到轨迹或者其他问题返回结果
|
||||
*/
|
||||
private boolean result;
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:14
|
||||
*/
|
||||
@Data
|
||||
public class QueryTrackRouteInfo {
|
||||
/**
|
||||
* 出发位置
|
||||
*/
|
||||
private QueryTrackPosition from;
|
||||
/**
|
||||
* 当前位置
|
||||
*/
|
||||
private QueryTrackPosition cur;
|
||||
/**
|
||||
* 收货地
|
||||
*/
|
||||
private QueryTrackPosition to;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-21 9:19
|
||||
*/
|
||||
@Data
|
||||
public class SendSmsResp {
|
||||
|
||||
private Integer status;
|
||||
|
||||
private String data;
|
||||
|
||||
private String msg;
|
||||
|
||||
private Integer code;
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-21 10:05
|
||||
*/
|
||||
@Data
|
||||
public class SmsCallbackData {
|
||||
/**
|
||||
* 传入的外部订单号
|
||||
*/
|
||||
private String outorder;
|
||||
/**
|
||||
* 附加信息
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 短信发送状态:发送成功、发送失败、接收成功、接收失败
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 返回校验信息:MD5(id + phone + outorder);校验方式是MD5加密的:模板ID+手机号+外部订单号。用户可根据加密签名判断是否进行处理请求
|
||||
*/
|
||||
private String sign;
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 短信回调结果
|
||||
*
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-21 10:02
|
||||
*/
|
||||
@Data
|
||||
public class SmsCallbackResp {
|
||||
/**
|
||||
* 状态值:0-表示失败;1-表示成功
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 返回数据信息:短信发送状态
|
||||
*/
|
||||
private SmsCallbackData data;
|
||||
/**
|
||||
* 信息内容:返回具体的信息体描述
|
||||
*/
|
||||
private String msg;
|
||||
/**
|
||||
* 附加信息
|
||||
*/
|
||||
private String extra;
|
||||
/**
|
||||
* 该值表示所数据的总条数
|
||||
*/
|
||||
private Integer total;
|
||||
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-08-28 14:24
|
||||
*/
|
||||
@Data
|
||||
public class SubscribePushData {
|
||||
/**
|
||||
* 物流轨迹节点内容
|
||||
*/
|
||||
private String context;
|
||||
/**
|
||||
* 时间,原始格式
|
||||
*/
|
||||
private String time;
|
||||
/**
|
||||
* 格式化后时间
|
||||
*/
|
||||
private String ftime;
|
||||
/**
|
||||
* 本数据元对应的签收状态。只有在开通签收状态服务(见上面"status"后的说明)且在订阅接口中提交resultv2标记后才会出现
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 本数据元对应的行政区域的编码,只有在开通签收状态服务(见上面"status"后的说明)且在订阅接口中提交resultv2标记后才会出现
|
||||
*/
|
||||
private String areaCode;
|
||||
/**
|
||||
* 本数据元对应的行政区域的名称,开通签收状态服务(见上面"status"后的说明)且在订阅接口中提交resultv2标记后才会出现
|
||||
*/
|
||||
private String areaName;
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-08-28 14:23
|
||||
*/
|
||||
@Data
|
||||
public class SubscribePushParamResp {
|
||||
/**
|
||||
* 监控状态:polling:监控中,shutdown:结束,abort:中止,updateall:重新推送。
|
||||
* 其中当快递单为已签收时status=shutdown,当message为“3天查询无记录”或“60天无变化时”status= abort ,对于stuatus=abort的状态,
|
||||
* 需要增加额外的处理逻辑:若贵司校验快递公司编码和单号无误后仍需继续跟踪,则隔半小时再发起该单的订阅即可
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 包括got、sending、check三个状态,由于意义不大,已弃用,请忽略
|
||||
*/
|
||||
private String billstatus;
|
||||
/**
|
||||
* 监控状态相关消息,如:3天查询无记录,60天无变化
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 快递公司编码是否出错,0为本推送信息对应的是贵司提交的原始快递公司编码,1为本推送信息对应的是我方纠正后的新的快递公司编码。
|
||||
* 一个单如果我们连续3天都查不到结果,我方会
|
||||
* (1)判断一次贵司提交的快递公司编码是否正确,如果正确,给贵司的回调接口(callbackurl)推送带有如下字段的信息:autoCheck=0、comOld与comNew都为空;
|
||||
* (2)如果贵司提交的快递公司编码出错,我们会帮忙用正确的快递公司编码+原来的运单号重新提交订阅并开启监控(后续如果监控到单号有更新就给贵司的回调接口(callbackurl)
|
||||
* 推送带有如下字段的信息:autoCheck=1、comOld=原来的公司编码、comNew=新的公司编码);
|
||||
* 并且给贵方的回调接口(callbackurl)推送一条含有如下字段的信息:status=abort、autoCheck=0、comOld为空、comNew=纠正后的快递公司编码。
|
||||
*/
|
||||
private String autoCheck;
|
||||
/**
|
||||
* 贵司提交的原始的快递公司编码。详细见autoCheck后说明。若开启了国际版(即在订阅请求中增加字段interCom=1),则回调请求中暂无此字段
|
||||
*/
|
||||
private String comOld;
|
||||
/**
|
||||
* 我司纠正后的新的快递公司编码。详细见autoCheck后说明。若开启了国际版(即在订阅请求中增加字段interCom=1),则回调请求中暂无此字段
|
||||
*/
|
||||
private String comNew;
|
||||
/**
|
||||
* 最新查询结果,若在订阅报文中通过interCom字段开通了国际版,则此lastResult表示出发国的查询结果,全量,倒序(即时间最新的在最前)
|
||||
*/
|
||||
private SubscribePushResult lastResult;
|
||||
/**
|
||||
* 表示最新的目的国家的查询结果,只有在订阅报文中通过interCom=1字段开通了国际版才会显示此数据元,全量,倒序(即时间最新的在最前)
|
||||
*/
|
||||
private SubscribePushResult destResult;
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-08-28 14:24
|
||||
*/
|
||||
@Data
|
||||
public class SubscribePushResult {
|
||||
/**
|
||||
* 消息体,请忽略
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 快递单当前状态,包括0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转投 等8个状态
|
||||
*/
|
||||
private String state;
|
||||
/**
|
||||
* 通讯状态,请忽略
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 快递单明细状态标记,暂未实现,请忽略
|
||||
*/
|
||||
private String condition;
|
||||
/**
|
||||
* 是否签收标记
|
||||
*/
|
||||
private String ischeck;
|
||||
/**
|
||||
* 快递公司编码,一律用小写字母,点击查看快递公司编码
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 快递单号
|
||||
*/
|
||||
private String nu;
|
||||
/**
|
||||
* 数组,包含多个对象,每个对象字段如展开所示
|
||||
*/
|
||||
private List<SubscribePushData> data;
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-16 19:18
|
||||
*/
|
||||
@Data
|
||||
public class SubscribeResp {
|
||||
|
||||
private boolean result;
|
||||
|
||||
private String returnCode;
|
||||
|
||||
private String message;
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-08-28 14:23
|
||||
*/
|
||||
@Data
|
||||
public class SubscribeWithMapPushParamResp {
|
||||
/**
|
||||
* 监控状态:polling:监控中,shutdown:结束,abort:中止,updateall:重新推送。
|
||||
* 其中当快递单为已签收时status=shutdown,当message为“3天查询无记录”或“60天无变化时”status= abort ,对于stuatus=abort的状态,
|
||||
* 需要增加额外的处理逻辑:若贵司校验快递公司编码和单号无误后仍需继续跟踪,则隔半小时再发起该单的订阅即可
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 包括got、sending、check三个状态,由于意义不大,已弃用,请忽略
|
||||
*/
|
||||
private String billstatus;
|
||||
/**
|
||||
* 监控状态相关消息,如:3天查询无记录,60天无变化
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 快递公司编码是否出错,0为本推送信息对应的是贵司提交的原始快递公司编码,1为本推送信息对应的是我方纠正后的新的快递公司编码。
|
||||
* 一个单如果我们连续3天都查不到结果,我方会
|
||||
* (1)判断一次贵司提交的快递公司编码是否正确,如果正确,给贵司的回调接口(callbackurl)推送带有如下字段的信息:autoCheck=0、comOld与comNew都为空;
|
||||
* (2)如果贵司提交的快递公司编码出错,我们会帮忙用正确的快递公司编码+原来的运单号重新提交订阅并开启监控(后续如果监控到单号有更新就给贵司的回调接口(callbackurl)
|
||||
* 推送带有如下字段的信息:autoCheck=1、comOld=原来的公司编码、comNew=新的公司编码);
|
||||
* 并且给贵方的回调接口(callbackurl)推送一条含有如下字段的信息:status=abort、autoCheck=0、comOld为空、comNew=纠正后的快递公司编码。
|
||||
*/
|
||||
private String autoCheck;
|
||||
/**
|
||||
* 贵司提交的原始的快递公司编码。详细见autoCheck后说明。若开启了国际版(即在订阅请求中增加字段interCom=1),则回调请求中暂无此字段
|
||||
*/
|
||||
private String comOld;
|
||||
/**
|
||||
* 我司纠正后的新的快递公司编码。详细见autoCheck后说明。若开启了国际版(即在订阅请求中增加字段interCom=1),则回调请求中暂无此字段
|
||||
*/
|
||||
private String comNew;
|
||||
/**
|
||||
* 最新查询结果,若在订阅报文中通过interCom字段开通了国际版,则此lastResult表示出发国的查询结果,全量,倒序(即时间最新的在最前)
|
||||
*/
|
||||
private SubscribeWithMapPushResult lastResult;
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-08-28 14:24
|
||||
*/
|
||||
@Data
|
||||
public class SubscribeWithMapPushResult {
|
||||
/**
|
||||
* 消息体,请忽略
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 快递单当前状态,包括0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转投 等8个状态
|
||||
*/
|
||||
private String state;
|
||||
/**
|
||||
* 通讯状态,请忽略
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 快递单明细状态标记,暂未实现,请忽略
|
||||
*/
|
||||
private String condition;
|
||||
/**
|
||||
* 是否签收标记
|
||||
*/
|
||||
private String ischeck;
|
||||
/**
|
||||
* 快递公司编码,一律用小写字母,点击查看快递公司编码
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 快递单号
|
||||
*/
|
||||
private String nu;
|
||||
/**
|
||||
* 数组,包含多个对象,每个对象字段如展开所示
|
||||
*/
|
||||
private List<SubscribePushData> data;
|
||||
/**
|
||||
* 轨迹地图链接
|
||||
*/
|
||||
private String trailUrl;
|
||||
/**
|
||||
* 预计到达时间
|
||||
*/
|
||||
private String arrivalTime;
|
||||
/**
|
||||
* 平均耗时
|
||||
*/
|
||||
private String totalTime;
|
||||
/**
|
||||
* 到达还需多少时间
|
||||
*/
|
||||
private String remainTime;
|
||||
/**
|
||||
* 路由信息
|
||||
*/
|
||||
private QueryTrackRouteInfo routeInfo;
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-01-06 14:24
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class ThirdAuthResp {
|
||||
// 授权链接
|
||||
private String url;
|
||||
// 面单需要的partnerKey
|
||||
private String partnerKey;
|
||||
// 面单需要的parterId
|
||||
private String parterId;
|
||||
// 面单需要的net
|
||||
private String net;
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response.cloud;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-10-27 16:00
|
||||
*/
|
||||
@Data
|
||||
public class COrderRespData {
|
||||
/**
|
||||
* 任务id
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 快递100返回给您的平台订单id
|
||||
*/
|
||||
private String orderId;
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response.cloud;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-10-27 15:58
|
||||
*/
|
||||
public class CloudBaseResp<T> {
|
||||
/**
|
||||
* 响应码
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 响应结果描述
|
||||
*/
|
||||
private String message;
|
||||
/**
|
||||
* 响应数据
|
||||
*/
|
||||
private T data;
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-22 17:32
|
||||
*/
|
||||
@Data
|
||||
public class AuthResp {
|
||||
|
||||
private String url;
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-02-20 9:53
|
||||
*/
|
||||
@Data
|
||||
public class OrderResp {
|
||||
/**
|
||||
* 快递100任务id(归属快递100)
|
||||
*/
|
||||
private String taskId;
|
||||
/**
|
||||
* 快递公司
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 快递100订单号(归属快递100)
|
||||
*/
|
||||
private String orderId;
|
||||
/**
|
||||
* 费用
|
||||
*/
|
||||
private Integer fee;
|
||||
/**
|
||||
* 距离(公里)
|
||||
*/
|
||||
private Integer distance;
|
||||
/**
|
||||
* 快递公司单号
|
||||
*/
|
||||
private String kuaidiNum;
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.response.samecity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2021-03-02 11:04
|
||||
*/
|
||||
@Data
|
||||
public class QueryResp {
|
||||
/**
|
||||
* 骑手姓名(订单处于下单成功、取消状态下为空)
|
||||
*/
|
||||
private String courierName;
|
||||
/**
|
||||
* 骑手电话(订单处于下单成功、已签收、取消状态下为空)
|
||||
*/
|
||||
private String courierPhone;
|
||||
/**
|
||||
* 预计送达时间(订单处于下单成功、已签收、取消状态下为空)
|
||||
*/
|
||||
private String predictDeliveryTime;
|
||||
/**
|
||||
* 地图链接(订单处于下单成功、已签收、取消状态下为空)
|
||||
*/
|
||||
private String trailUrl;
|
||||
/**
|
||||
* 当前骑手维度(订单处于下单成功、已签收、取消状态下为空)
|
||||
*/
|
||||
private String lat;
|
||||
/**
|
||||
* 当前骑手经度(订单处于下单成功、已签收、取消状态下为空)
|
||||
*/
|
||||
private String lng;
|
||||
/**
|
||||
* 订单状态( 0-下单成功 1-已接单 10-已取货 13-已签收 9-用户主动取消 99-订单已取消)
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 快递公司
|
||||
*/
|
||||
private String com;
|
||||
/**
|
||||
* 快递公司
|
||||
*/
|
||||
private String num;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.utils;
|
||||
|
||||
import co.yixiang.tools.utils.kuaidi100.sdk.pojo.HttpResult;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-07-14 16:59
|
||||
*/
|
||||
public class HttpUtils {
|
||||
|
||||
private final static String CHARSET_DEFAULT = "UTF-8";
|
||||
|
||||
/**
|
||||
* post请求 编码格式默认UTF-8
|
||||
*
|
||||
* @param url 请求url
|
||||
* @return
|
||||
*/
|
||||
public static HttpResult doPost(String url, Object obj, int connectTimeout, int socketTimeout) {
|
||||
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
||||
CloseableHttpResponse resp = null;
|
||||
|
||||
HttpResult result = new HttpResult();
|
||||
try {
|
||||
Map<String, String> params = ObjectToMapUtils.objectToMap(obj);
|
||||
HttpPost httpPost = new HttpPost(url);
|
||||
|
||||
RequestConfig requestConfig = RequestConfig.custom()
|
||||
.setConnectTimeout(connectTimeout)
|
||||
.setSocketTimeout(socketTimeout).build();
|
||||
httpPost.setConfig(requestConfig);
|
||||
if (params != null && params.size() > 0) {
|
||||
List<NameValuePair> list = new ArrayList<NameValuePair>();
|
||||
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
|
||||
}
|
||||
httpPost.setEntity(new UrlEncodedFormEntity(list, CHARSET_DEFAULT));
|
||||
}
|
||||
|
||||
resp = httpClient.execute(httpPost);
|
||||
String body = EntityUtils.toString(resp.getEntity(), CHARSET_DEFAULT);
|
||||
int statusCode = resp.getStatusLine().getStatusCode();
|
||||
result.setStatus(statusCode);
|
||||
result.setBody(body);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (null != resp) {
|
||||
try {
|
||||
resp.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* post请求 编码格式默认UTF-8
|
||||
*
|
||||
* @param url 请求url
|
||||
* @return
|
||||
*/
|
||||
public static HttpResult doPostFile(String url, File file,int connectTimeout,int socketTimeout) {
|
||||
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
||||
CloseableHttpResponse resp = null;
|
||||
|
||||
HttpResult result = new HttpResult();
|
||||
try {
|
||||
|
||||
HttpPost httpPost = new HttpPost(url);
|
||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||
RequestConfig requestConfig = RequestConfig.custom()
|
||||
.setConnectTimeout(connectTimeout)
|
||||
.setSocketTimeout(socketTimeout).build();
|
||||
httpPost.setConfig(requestConfig);
|
||||
// 把文件加到HTTP的post请求中
|
||||
builder.addBinaryBody(
|
||||
"file",
|
||||
new FileInputStream(file),
|
||||
ContentType.MULTIPART_FORM_DATA,
|
||||
file.getName()
|
||||
);
|
||||
//HttpEntity
|
||||
HttpEntity entity = builder.build();
|
||||
httpPost.setEntity(entity);
|
||||
resp = httpClient.execute(httpPost);
|
||||
result.setStatus(resp.getStatusLine().getStatusCode());
|
||||
result.setBody(EntityUtils.toString(resp.getEntity(), CHARSET_DEFAULT));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (null != resp) {
|
||||
try {
|
||||
resp.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package co.yixiang.tools.utils.kuaidi100.sdk.utils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Author: api.kuaidi100.com
|
||||
* @Date: 2020-12-01 9:19
|
||||
*/
|
||||
public class ObjectToMapUtils {
|
||||
/**
|
||||
* 将Object对象里面的属性和值转化成Map对象
|
||||
*
|
||||
* @param obj
|
||||
* @return
|
||||
* @throws IllegalAccessException
|
||||
*/
|
||||
public static Map<String, String> objectToMap(Object obj) throws IllegalAccessException {
|
||||
if (obj == null) {
|
||||
return null;
|
||||
}
|
||||
Map<String, String> map = new HashMap<String,String>();
|
||||
List<Field> allField = getAllField(obj);
|
||||
for (Field field : allField) {
|
||||
field.setAccessible(true);
|
||||
String fieldName = field.getName();
|
||||
String fieldValue = "";
|
||||
if (field.getType()== String.class || field.getType() == Integer.class || field.getType() == int.class){
|
||||
fieldValue = field.get(obj)==null?"": field.get(obj).toString();
|
||||
}
|
||||
map.put(fieldName, fieldValue);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private static List<Field> getAllField(Object obj){
|
||||
List<Field> fieldList = new ArrayList<Field>() ;
|
||||
Class<?> clazz = obj.getClass();
|
||||
while (clazz != null){
|
||||
fieldList.addAll(Arrays.asList(clazz.getDeclaredFields()));
|
||||
clazz = clazz.getSuperclass();
|
||||
}
|
||||
return fieldList;
|
||||
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user