From 80fd9e3da4b45285c29cdb380ce743202b0c2af4 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 21 Nov 2024 11:22:36 +0800
Subject: [PATCH] feat(mall): 添加快递信息查询功能

---
 src/main/java/com/best/javaSdk/kdTraceQuery/response/KdTraceQueryRsp.java                                   |   19 
 src/main/java/com/best/javaSdk/kdTraceQuery/response/TraceLogs.java                                         |   51 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/ChildMailNo.java                      |   19 
 src/main/java/com/best/javaSdk/Param.java                                                                   |   56 
 src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONReader.java                                    |  238 +++
 src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidator.java                                 |  214 +++
 src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONErrorListener.java                             |    7 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/KdCreateWaybillOrderPdfNotifyRsp.java |  120 +
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Sender.java                            |  107 +
 src/main/java/com/best/javaSdk/converter/impl/BooleanConverter.java                                         |   25 
 src/main/java/com/best/javaSdk/BaseRequest.java                                                             |    7 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/KdCreateWaybillOrderNotifyRsp.java       |   98 +
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Item.java                              |   74 +
 src/main/java/com/best/javaSdk/Client.java                                                                  |   49 
 src/main/java/com/best/javaSdk/kdTraceQuery/request/KdTraceQueryReq.java                                    |   44 
 src/main/java/com/best/javaSdk/Sign.java                                                                    |   53 
 src/main/java/com/best/javaSdk/kdTraceQuery/request/MailNos.java                                            |   12 
 src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/ChildMailNo.java                                |   19 
 src/main/java/cc/mrbird/febs/mall/controller/CommonController.java                                          |   14 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Receiver.java                             |  107 +
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/ChildMailNo.java                         |   19 
 src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingReader.java                          |   23 
 src/main/java/com/best/javaSdk/BsApi.java                                                                   |   32 
 src/main/java/com/best/javaSdk/kdCancelOrderNotify/response/KdCancelOrderNotifyRsp.java                     |   53 
 src/main/java/com/best/javaSdk/kdTraceQuery/response/Trace.java                                             |  118 +
 src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/KdUpdateOrderNotifyRsp.java                     |  109 +
 src/main/java/cc/mrbird/febs/mall/dto/ApiCheckTraceInfoDto.java                                             |   15 
 src/main/java/com/best/javaSdk/converter/impl/IntConverter.java                                             |   24 
 pom.xml                                                                                                     |   20 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Sender.java                               |  107 +
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Receiver.java                          |  107 +
 src/main/java/com/best/javaSdk/converter/util/jsonReader/BufferErrorListener.java                           |   41 
 src/main/java/com/best/javaSdk/converter/impl/DoubleConverter.java                                          |   25 
 src/main/java/com/best/javaSdk/Parser.java                                                                  |  278 +++
 src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONWriter.java                                    |  221 +++
 src/main/java/com/best/javaSdk/converter/impl/LongConverter.java                                            |   25 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/KdCreateWaybillOrderPdfNotifyReq.java  |  333 ++++
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/KdCreateWaybillOrderNotifyReq.java        |  333 ++++
 src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java                                           |   27 
 src/main/java/com/best/javaSdk/converter/impl/FloatConverter.java                                           |   25 
 src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java                                          |   11 
 src/main/java/com/best/javaSdk/kdCancelOrderNotify/request/KdCancelOrderNotifyReq.java                      |   44 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Items.java                                |   20 
 src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/KdUpdateOrderNotifyReq.java                      |   56 
 src/main/java/com/best/javaSdk/BaseResponse.java                                                            |    4 
 src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingWriter.java                          |   56 
 src/main/java/com/best/javaSdk/converter/util/jsonReader/StdoutStreamErrorListener.java                     |    8 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Items.java                             |   20 
 src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/Params.java                                      |  360 +++++
 src/main/java/com/best/javaSdk/converter/ConverterUtil.java                                                 |   12 
 src/main/java/cc/mrbird/febs/mall/service/ICommonService.java                                               |    4 
 src/main/java/com/best/javaSdk/converter/impl/DateConverter.java                                            |   47 
 src/main/java/com/best/javaSdk/kdTraceQuery/response/Traces.java                                            |   19 
 src/main/java/com/best/javaSdk/converter/Converter.java                                                     |   15 
 src/main/java/com/best/javaSdk/converter/XmlConverter.java                                                  |   12 
 src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Item.java                                 |   74 +
 src/main/java/com/best/javaSdk/converter/impl/StringConverter.java                                          |   25 
 src/main/java/com/best/javaSdk/HttpService.java                                                             |   96 +
 src/main/java/com/best/javaSdk/converter/util/jsonReader/ExceptionErrorListener.java                        |    9 
 src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java                                       |    2 
 src/main/resources/application.yml                                                                          |    2 
 61 files changed, 4,151 insertions(+), 13 deletions(-)

diff --git a/pom.xml b/pom.xml
index 3f933da..900945f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,16 +40,16 @@
             <artifactId>json</artifactId>
             <version>20230618</version>
         </dependency>
-        <dependency>
-            <groupId>com.github.wechatpay-apiv3</groupId>
-            <artifactId>wechatpay-apache-httpclient</artifactId>
-            <version>0.4.7</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.wechatpay-apiv3</groupId>
-            <artifactId>wechatpay-java</artifactId>
-            <version>0.2.12</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.github.wechatpay-apiv3</groupId>-->
+<!--            <artifactId>wechatpay-apache-httpclient</artifactId>-->
+<!--            <version>0.4.7</version>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.github.wechatpay-apiv3</groupId>-->
+<!--            <artifactId>wechatpay-java</artifactId>-->
+<!--            <version>0.2.12</version>-->
+<!--        </dependency>-->
         <!--        图片压缩-->
         <dependency>
             <groupId>net.coobird</groupId>
diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index 7165cd8..984c91a 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.interceptor.LoginInterceptor;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -40,4 +41,14 @@
         registration.excludePathPatterns("/configuration/security");
         registration.excludePathPatterns("/swagger-resources");
     }
+
+    @Override
+    public void addCorsMappings( CorsRegistry registry) {
+        // 跨域请求配置
+        registry.addMapping("/**")//允许请求路径
+                .allowedOrigins("*")//表示允许所有网址发起跨域请求
+                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")//表示允许跨域请求的方法
+                .maxAge(3600)//表示在3600秒内不需要再发送预校验请求
+                .allowCredentials(true);//允许客户端携带验证信息,即允许携带cookie
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
index 2d10d5b..4e1b19c 100644
--- a/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
+++ b/src/main/java/cc/mrbird/febs/common/interceptor/LoginInterceptor.java
@@ -31,7 +31,7 @@
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        String headerToken = request.getHeader("token");
+        String headerToken = request.getHeader("Token");
         if (StringUtils.isBlank(headerToken)) {
             responseUnAuth(response);
             return false;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java b/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
index 58cb018..7db03b9 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
@@ -5,11 +5,13 @@
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.*;
 import cc.mrbird.febs.mall.dto.AccountAndCodeDto;
+import cc.mrbird.febs.mall.dto.ApiCheckTraceInfoDto;
 import cc.mrbird.febs.mall.dto.Base64UploadDto;
 import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
 import cc.mrbird.febs.mall.service.ICommonService;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -210,4 +212,16 @@
         }
         return new FebsResponse().fail().message("验证码错误");
     }
+
+    @ApiOperation(value = "获取快递信息接口")
+    @PostMapping(value = "/checkTraceInfo")
+    public FebsResponse checkTraceInfo(@RequestBody ApiCheckTraceInfoDto checkTraceInfoDto) {
+
+        KdTraceQueryRsp traceQueryRsp = commonService.checkTraceInfo(checkTraceInfoDto);
+        boolean result = traceQueryRsp.isResult();
+        if (result) {
+            return new FebsResponse().success().data(traceQueryRsp);
+        }
+        return new FebsResponse().fail().message("请检查您的快递单号是否输入正确。");
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiCheckTraceInfoDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiCheckTraceInfoDto.java
new file mode 100644
index 0000000..1730a0a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiCheckTraceInfoDto.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ApiCheckTraceInfoDto {
+
+
+    @NotBlank(message = "快递单号不能为空")
+    @ApiModelProperty(value = "快递单号", example = "60850007041815")
+    private String traceNo;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/ICommonService.java b/src/main/java/cc/mrbird/febs/mall/service/ICommonService.java
index afd64f4..f574449 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/ICommonService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/ICommonService.java
@@ -1,8 +1,9 @@
 package cc.mrbird.febs.mall.service;
 
+import cc.mrbird.febs.mall.dto.ApiCheckTraceInfoDto;
 import cc.mrbird.febs.mall.entity.AppVersion;
 import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
-import cc.mrbird.febs.mall.vo.CashOutSettingVo;
+import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
 
 import java.util.List;
 
@@ -21,4 +22,5 @@
 
     void addDataDic(String type, String key, Object value, String description, boolean isJson);
 
+    KdTraceQueryRsp checkTraceInfo(ApiCheckTraceInfoDto checkTraceInfoDto);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java b/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java
index 4f4cd2f..89ef59d 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/CommonService.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.dto.ApiCheckTraceInfoDto;
 import cc.mrbird.febs.mall.entity.AppVersion;
 import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
 import cc.mrbird.febs.mall.mapper.AppVersionMapper;
@@ -9,10 +10,15 @@
 import cc.mrbird.febs.mall.service.ICommonService;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.best.javaSdk.Client;
+import com.best.javaSdk.kdTraceQuery.request.KdTraceQueryReq;
+import com.best.javaSdk.kdTraceQuery.request.MailNos;
+import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -83,4 +89,25 @@
         dic.setDescription(description);
         dataDictionaryCustomMapper.insert(dic);
     }
+
+    @Override
+    public KdTraceQueryRsp checkTraceInfo(ApiCheckTraceInfoDto checkTraceInfoDto) {
+        String url = "http://open-sgp.800best.com/api-server/m9api/api/process";
+        String partnerID = "71";
+        String partnerKey = "G95DIM64";
+        String format = "JSON";
+
+        Client client = new Client(url, partnerID, partnerKey, format);
+
+        KdTraceQueryReq tdTraceQueryReq = new KdTraceQueryReq();
+        MailNos mailNos = new MailNos();
+        List<String> mailNo = new ArrayList<>();
+        mailNo.add(checkTraceInfoDto.getTraceNo());
+        mailNos.setMailNo(mailNo);
+        tdTraceQueryReq.setMailNos(mailNos);
+        tdTraceQueryReq.setLangType("zh-CN");
+
+        KdTraceQueryRsp kdTraceQueryRsp = client.executed(tdTraceQueryReq);
+        return kdTraceQueryRsp;
+    }
 }
diff --git a/src/main/java/com/best/javaSdk/BaseRequest.java b/src/main/java/com/best/javaSdk/BaseRequest.java
new file mode 100644
index 0000000..ad0ea7f
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/BaseRequest.java
@@ -0,0 +1,7 @@
+package com.best.javaSdk;
+
+public interface BaseRequest {
+    public String obtainServiceType();
+
+    BaseResponse makeResponse(String rsp, String format);
+}
diff --git a/src/main/java/com/best/javaSdk/BaseResponse.java b/src/main/java/com/best/javaSdk/BaseResponse.java
new file mode 100644
index 0000000..c409afb
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/BaseResponse.java
@@ -0,0 +1,4 @@
+package com.best.javaSdk;
+
+public interface BaseResponse {
+}
diff --git a/src/main/java/com/best/javaSdk/BsApi.java b/src/main/java/com/best/javaSdk/BsApi.java
new file mode 100644
index 0000000..1792271
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/BsApi.java
@@ -0,0 +1,32 @@
+package com.best.javaSdk;
+
+import cn.hutool.json.JSONUtil;
+import com.best.javaSdk.kdTraceQuery.request.KdTraceQueryReq;
+import com.best.javaSdk.kdTraceQuery.request.MailNos;
+import com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BsApi {
+
+    public static void main(String[] args) {
+        String url = "http://open-sgp.800best.com/api-server/m9api/api/process";
+        String partnerID = "71";
+        String partnerKey = "G95DIM64";
+        String format = "JSON";
+
+        Client client = new Client(url, partnerID, partnerKey, format);
+
+        KdTraceQueryReq tdTraceQueryReq = new KdTraceQueryReq();
+        MailNos mailNos = new MailNos();
+        List<String> mailNo = new ArrayList<>();
+        mailNo.add("JT689574278404");
+        mailNos.setMailNo(mailNo);
+        tdTraceQueryReq.setMailNos(mailNos);
+        tdTraceQueryReq.setLangType("zh-CN");
+
+        KdTraceQueryRsp kdTraceQueryRsp = client.executed(tdTraceQueryReq);
+        System.out.println(JSONUtil.parseObj(kdTraceQueryRsp));
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/Client.java b/src/main/java/com/best/javaSdk/Client.java
new file mode 100644
index 0000000..b3e08d8
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/Client.java
@@ -0,0 +1,49 @@
+package com.best.javaSdk;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Client {
+
+    private String url;
+    private String partnerID;
+    private String partnerKey;
+    private String messageFormat;
+
+    public Client(String url, String partnerID, String partnerKey, String messageFormat){
+        this.url = url;
+        this.messageFormat = messageFormat;
+        this.partnerID = partnerID;
+        this.partnerKey = partnerKey;
+
+    }
+
+    public <T extends BaseResponse> T executed(BaseRequest baseRequest) {
+        String response = "";
+        Map<String, String> params = new HashMap<>();
+        Map<String, String> headers = new HashMap<>();
+        Param param = new Param();
+		param.setPartnerID(partnerID);
+		param.setServiceType(baseRequest.obtainServiceType());
+		param.setBizData(makeBizData(baseRequest));
+		param.setPartnerKey(partnerKey);
+
+		params.put("partnerID", param.getPartnerID());
+		params.put("serviceType", param.getServiceType());
+		params.put("bizData", param.getBizData());
+		params.put("sign", Sign.makeSign(param));
+        try {
+            response = HttpService.sendPost(url, params, headers);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return response == null ? null : (T) baseRequest.makeResponse(response, messageFormat);
+    }
+
+    private String makeBizData(BaseRequest baseRequest) {
+        if("xml".equalsIgnoreCase(this.messageFormat)) {
+            return Parser.coverObject2Xml(baseRequest);
+        }
+        return  Parser.convertObject2Json(baseRequest);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/best/javaSdk/HttpService.java b/src/main/java/com/best/javaSdk/HttpService.java
new file mode 100644
index 0000000..fd80477
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/HttpService.java
@@ -0,0 +1,96 @@
+package com.best.javaSdk;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Map;
+
+public class HttpService {
+    public static String sendPost(String url, Map<String, String> paramMap, Map<String, String> headerMap) throws Exception {
+        StringBuffer buffer = new StringBuffer(); //用来拼接参数
+        StringBuffer result = new StringBuffer(); //用来接受返回值
+        //创建URL
+        URL httpUrl = new URL(url);
+        //建立连接
+        URLConnection connection = httpUrl.openConnection();
+        connection.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        connection.setRequestProperty("connection", "keep-alive");
+        connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
+        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+        connection.setDoOutput(true);
+        connection.setDoInput(true);
+        if (headerMap != null && !headerMap.isEmpty()) {
+            for (Map.Entry<String, String> entry : headerMap.entrySet()) {
+                connection.setRequestProperty(entry.getKey(),  URLEncoder.encode(entry.getValue(), "utf-8"));
+            }
+        }
+
+        PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
+        String request = "";
+        if(paramMap != null && !paramMap.isEmpty()){
+            for (Map.Entry<String, String> entry : paramMap.entrySet()) {
+                buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8")).append("&");
+            }
+            //去掉最后一个&并urlencode
+            request = buffer.toString().substring(0, buffer.toString().length() - 1);
+        }
+        printWriter.print(request);
+        printWriter.flush();
+        connection.connect();
+        //接受连接返回参数
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+        String line;
+        while ((line = bufferedReader.readLine()) != null) {
+            result.append(line);
+        }
+        bufferedReader.close();
+        return result.toString();
+    }
+
+    public static String sendPost(String url, Map<String, String> paramMap, Map<String, String> headerMap, String body) throws Exception {
+        StringBuffer buffer = new StringBuffer(); //用来拼接参数
+        StringBuffer result = new StringBuffer(); //用来接受返回值
+        String request = "";
+        if(paramMap != null && !paramMap.isEmpty()){
+            for (Map.Entry<String, String> entry : paramMap.entrySet()) {
+                buffer.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8")).append("&");
+            }
+            //去掉最后一个&并urlencode
+            request = buffer.toString().substring(0, buffer.toString().length() - 1);
+        }
+
+        //创建URL
+        URL httpUrl = new URL(url + "?" + request);
+        //建立连接
+        URLConnection connection =  httpUrl.openConnection();
+        connection.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+        connection.setRequestProperty("connection", "keep-alive");
+        connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
+        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+        connection.setDoOutput(true);
+        connection.setDoInput(true);
+        if (headerMap != null && !headerMap.isEmpty()) {
+            for (Map.Entry<String, String> entry : headerMap.entrySet()) {
+                connection.setRequestProperty(entry.getKey(),  URLEncoder.encode(entry.getValue(), "utf-8"));
+            }
+        }
+
+        PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
+
+        printWriter.print(body);
+        printWriter.flush();
+        connection.connect();
+        //接受连接返回参数
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+        String line;
+        while ((line = bufferedReader.readLine()) != null) {
+            result.append(line);
+        }
+        bufferedReader.close();
+        return result.toString();
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/Param.java b/src/main/java/com/best/javaSdk/Param.java
new file mode 100644
index 0000000..eb37609
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/Param.java
@@ -0,0 +1,56 @@
+package com.best.javaSdk;
+
+
+public class Param {
+	private String partnerID;
+	private String serviceType;
+	private String bizData;
+	private String partnerKey;
+	private String sign;
+
+    public String getPartnerID()
+    {
+        return this.partnerID;
+    }
+
+    public void setPartnerID(String value)
+    {
+        this.partnerID = value;
+    }
+    public String getServiceType()
+    {
+        return this.serviceType;
+    }
+
+    public void setServiceType(String value)
+    {
+        this.serviceType = value;
+    }
+    public String getBizData()
+    {
+        return this.bizData;
+    }
+
+    public void setBizData(String value)
+    {
+        this.bizData = value;
+    }
+    public String getPartnerKey()
+    {
+        return this.partnerKey;
+    }
+
+    public void setPartnerKey(String value)
+    {
+        this.partnerKey = value;
+    }
+    public String getSign()
+    {
+        return this.sign;
+    }
+
+    public void setSign(String value)
+    {
+        this.sign = value;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/best/javaSdk/Parser.java b/src/main/java/com/best/javaSdk/Parser.java
new file mode 100644
index 0000000..ee1eeb7
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/Parser.java
@@ -0,0 +1,278 @@
+package com.best.javaSdk;
+
+import com.best.javaSdk.converter.Converter;
+import com.best.javaSdk.converter.impl.*;
+import com.best.javaSdk.converter.util.jsonReader.*;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.StringReader;
+import java.lang.reflect.Field;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.*;
+
+public class Parser {
+
+    private static Map<Class, Converter> converterMap;
+
+    static {
+        converterMap = new HashMap<>();
+        converterMap.put(String.class, new StringConverter());
+        converterMap.put(int.class, new IntConverter());
+        converterMap.put(Integer.class, new IntConverter());
+        converterMap.put(float.class, new FloatConverter());
+        converterMap.put(Float.class, new FloatConverter());
+        converterMap.put(double.class, new DoubleConverter());
+        converterMap.put(Double.class, new DoubleConverter());
+        converterMap.put(long.class, new LongConverter());
+        converterMap.put(Long.class, new LongConverter());
+        converterMap.put(boolean.class, new BooleanConverter());
+        converterMap.put(Boolean.class, new BooleanConverter());
+        converterMap.put(Date.class, new DateConverter());
+    }
+
+    public static String coverObject2Xml(Object o) {
+        StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        Class cls = o.getClass();
+        String className = cls.getName();
+        className = className.substring(className.lastIndexOf(".") + 1);
+        if (className.endsWith("Req")) {
+            sb.append(appendXmlNode("request", object2XmlConvert(o)));
+        } else {
+            sb.append(appendXmlNode("response", object2XmlConvert(o)));
+        }
+
+        return sb.toString();
+    }
+
+    public static String object2XmlConvert(Object o) {
+        StringBuilder stringBuilder = new StringBuilder();
+        try {
+            Class cls = o.getClass();
+            if (cls.getName().startsWith("java.lang")) {
+                return o.toString();
+            }
+
+            Field[] props = cls.getDeclaredFields();
+            for (Field prop : props) {
+                prop.setAccessible(true);
+                String propName = prop.getName();
+                Class propType = prop.getType();
+                Object propValue = prop.get(o);
+                StringBuilder stb = new StringBuilder();
+                if(propValue == null) {
+                    continue;
+                }
+                if(converterMap.containsKey(propType)) {
+                    stb = new StringBuilder(converterMap.get(propType).xmlReverse(propValue, prop));
+                } else if (propType.getName().equals("java.util.List")) {
+                    List valueList = (List) propValue;
+                    for (Object value : valueList) {
+                        stb.append(appendXmlNode(propName, object2XmlConvert(value)));
+                    }
+                } else {
+                    stb = new StringBuilder(appendXmlNode(propName, object2XmlConvert(propValue)));
+                }
+                stringBuilder.append(stb);
+            }
+        } catch (Exception e) {
+            return "parser error : " + e.getMessage();
+        }
+        return stringBuilder.toString();
+    }
+
+    public static String appendXmlNode(String nodeName, String nodeValue) {
+        StringBuilder sb = new StringBuilder();
+        return sb.append("<").append(nodeName).append(">").append(nodeValue).append("</").append(nodeName).append(">").toString();
+    }
+
+    public static <T> T coverXml2Object(String xml, Class<T> clazz) {
+
+        if(xml == null || "".equals(xml)) {
+            return null;
+        }
+
+        try {
+            DocumentBuilderFactory factory = DocumentBuilderFactory
+                    .newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document doc = builder.parse(new InputSource(new StringReader(xml)));
+            Element root = doc.getDocumentElement();
+            NodeList nodeList = root.getChildNodes();
+            return handelNodes(nodeList, clazz);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static <T> T handelNodes(NodeList nodeList, Class<T> clazz) {
+        try {
+            if (nodeList == null) {
+                return null;
+            }
+            if (clazz.getName().startsWith("java.lang")) {
+                return (T)nodeList.item(0).getNodeValue();
+            }
+
+            T obj = clazz.newInstance();
+            Map<Field, List<Object>> listChildMap = new HashMap<>();
+            for (int i = 0; i < nodeList.getLength(); i++) {
+                Node node = nodeList.item(i);
+                String nodeName = node.getNodeName();
+                short nodeType = node.getNodeType();
+                if (nodeType == 3 || nodeType == 4) {
+                    continue;
+                }
+                if(!node.hasChildNodes()) {
+                    continue;
+                }
+                Field[] fields = clazz.getDeclaredFields();
+                if(!isContainProp(fields, nodeName)) {
+                    continue;
+                }
+                Field field = clazz.getDeclaredField(nodeName);
+                field.setAccessible(true);
+                Class<?> fieldType = field.getType();
+
+                if (fieldType.getName().equals("java.util.List")) {
+                    Type type = field.getGenericType();
+                    if(type instanceof ParameterizedType) {
+                        ParameterizedType pt = (ParameterizedType) type;
+                        Class genericClazz = (Class) pt.getActualTypeArguments()[0];
+                        Object listChildObj = handelNodes(node.getChildNodes(), genericClazz);
+
+                        if (listChildMap.get(field) == null) {
+                            List<Object> objectList = new ArrayList<>();
+                            objectList.add(listChildObj);
+                            listChildMap.put(field, objectList);
+                        } else {
+                            listChildMap.get(field).add(listChildObj);
+                        }
+                    }
+                } else {
+                    Converter converter = converterMap.get(fieldType);
+                    if (converter == null) {
+                        field.set(obj, handelNodes(node.getChildNodes(), fieldType));
+                        continue;
+                    }
+                    Object convert = converter.convertXml(node, field);
+                    if (convert != null) {
+                        field.set(obj, convert);
+                    }
+                }
+            }
+            for (Field field : listChildMap.keySet()) {
+                field.set(obj, listChildMap.get(field));
+            }
+            return obj;
+        } catch (InstantiationException | IllegalAccessException | NoSuchFieldException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static <T> T convertJson2Object(String str, Class<T> clazz) {
+        try {
+            JSONReader reader = new JSONValidatingReader(new ExceptionErrorListener());
+            Object rootObj = reader.read(str);
+            return convertJson2Object(rootObj, clazz);
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private static <T> T convertJson2Object(Object object, Class<T> clazz) throws Exception {
+        T t = clazz.newInstance();
+        if (object instanceof Map<?, ?>) {
+            Map<?, ?> rootJson = (Map<?, ?>) object;
+            for (Object obj : rootJson.keySet()) {
+                String itemName = obj.toString();
+                Object itemValue = rootJson.get(obj);
+                Field[] fields = clazz.getDeclaredFields();
+                if (!isContainProp(fields, itemName)) {
+                    continue;
+                }
+                Field field = clazz.getDeclaredField(itemName);
+                field.setAccessible(true);
+                Class<?> fieldType = field.getType();
+                Object value;
+
+                Converter converter = converterMap.get(fieldType);
+                if (converter == null && itemValue instanceof Map<?, ?>) {
+                    value = convertJson2Object(itemValue, fieldType);
+                } else if (itemValue instanceof ArrayList<?> && fieldType.equals(List.class)) {
+                    value = handlerListJson((ArrayList<?>) itemValue, field);
+                } else if (converter != null) {
+                    if (itemValue == null) {
+                        value = null;
+                    } else {
+                        value = converter.convertJson(itemValue, field);
+                    }
+                } else {
+                    continue;
+                }
+                if (value != null) {
+                    field.set(t, value);
+                }
+            }
+        }
+        return t;
+    }
+
+    private static List handlerListJson(ArrayList<?> value, Field field) throws Exception {
+        List list = new ArrayList<>();
+        Type type = field.getGenericType();
+        if(type instanceof ParameterizedType) {
+            ParameterizedType pt = (ParameterizedType) type;
+            Class genericClazz = (Class) pt.getActualTypeArguments()[0];
+            Converter converter = converterMap.get(genericClazz);
+            for (Object object : value) {
+                if (object instanceof Map<?, ?>) {
+                    list.add(convertJson2Object(object, genericClazz));
+                }else {
+                    list.add(converter.convertJson(object, field));
+                }
+            }
+        }
+
+        return list;
+    }
+
+    public static String convertObject2Json(Object object) {
+        try {
+            JSONWriter jsonWriter = new JSONWriter();
+            return jsonWriter.write(object);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private static boolean isContainProp(Field[] fields, String nodeName) {
+
+        if(fields == null || fields.length < 0) {
+            return false;
+        }
+
+        if(nodeName == null || "".equals(nodeName)) {
+            return false;
+        }
+
+        for(Field field : fields) {
+            if(field.getName().equals(nodeName)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/Sign.java b/src/main/java/com/best/javaSdk/Sign.java
new file mode 100644
index 0000000..315b1d5
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/Sign.java
@@ -0,0 +1,53 @@
+package com.best.javaSdk;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class Sign {
+    public static String makeSign(Param param){
+        String signString = makeSignString(param);
+        String sign = "";
+        try {
+            sign = digestEncrypte(signString.getBytes("utf-8"), "MD5");
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return sign;
+    }
+
+    public static String makeBase64Sign(Param param){
+        String signString = makeSignString(param);
+        String sign = "";
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            md.update(signString.getBytes("utf-8"));
+            byte[] b = md.digest();
+            sign = (new sun.misc.BASE64Encoder()).encode(b);
+        }catch (Throwable e) {
+            e.printStackTrace();
+        }
+        return sign;
+    }
+
+    private static String makeSignString(Param param) {
+		String signString = param.getBizData() + param.getPartnerKey();        return signString;
+    }
+
+    public static String digestEncrypte(byte[] plainText, String algorithm) throws NoSuchAlgorithmException, UnsupportedEncodingException {
+        MessageDigest md = MessageDigest.getInstance(algorithm);
+        md.update(plainText);
+        byte[] b = md.digest();
+        StringBuilder output = new StringBuilder(32);
+        for (int i = 0; i < b.length; i++) {
+            String temp = Integer.toHexString(b[i] & 0xff);
+            if (temp.length() < 2) {
+                output.append("0");
+            }
+            output.append(temp);
+        }
+        return output.toString();
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/Converter.java b/src/main/java/com/best/javaSdk/converter/Converter.java
new file mode 100644
index 0000000..f7e3a89
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/Converter.java
@@ -0,0 +1,15 @@
+package com.best.javaSdk.converter;
+
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public interface Converter {
+
+    Object convertXml(Node node, Field field);
+
+    String xmlReverse(Object propValue, Field prop);
+
+    Object convertJson(Object value, Field field);
+
+}
diff --git a/src/main/java/com/best/javaSdk/converter/ConverterUtil.java b/src/main/java/com/best/javaSdk/converter/ConverterUtil.java
new file mode 100644
index 0000000..dff3f8b
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/ConverterUtil.java
@@ -0,0 +1,12 @@
+package com.best.javaSdk.converter;
+
+public class ConverterUtil {
+    public static Object convert(Class<?> type, String value){
+        if(type.isAssignableFrom(int.class)){
+            return Integer.parseInt(value);
+        }else if(type.isAssignableFrom(double.class)){
+            return Double.valueOf(value);
+        }
+        return value;
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/XmlConverter.java b/src/main/java/com/best/javaSdk/converter/XmlConverter.java
new file mode 100644
index 0000000..0e50889
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/XmlConverter.java
@@ -0,0 +1,12 @@
+package com.best.javaSdk.converter;
+
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public interface XmlConverter {
+
+    Object convert(Node node, Field field);
+
+    String reverse(Object propValue, Field prop);
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/BooleanConverter.java b/src/main/java/com/best/javaSdk/converter/impl/BooleanConverter.java
new file mode 100644
index 0000000..d59aef7
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/BooleanConverter.java
@@ -0,0 +1,25 @@
+package com.best.javaSdk.converter.impl;
+
+import com.best.javaSdk.converter.Converter;
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public class BooleanConverter implements Converter {
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        return Boolean.parseBoolean(firstChild.getNodeValue());
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        return Boolean.parseBoolean(value.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/DateConverter.java b/src/main/java/com/best/javaSdk/converter/impl/DateConverter.java
new file mode 100644
index 0000000..fd05673
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/DateConverter.java
@@ -0,0 +1,47 @@
+package com.best.javaSdk.converter.impl;
+
+import com.best.javaSdk.converter.Converter;
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.TimeZone;
+
+public class DateConverter implements Converter {
+
+    private static DateFormat format;
+
+    static {
+        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+    }
+
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        try {
+            return format.parse(firstChild.getNodeValue().toString());
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        try {
+            return format.parse(value.toString());
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/DoubleConverter.java b/src/main/java/com/best/javaSdk/converter/impl/DoubleConverter.java
new file mode 100644
index 0000000..ae0201c
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/DoubleConverter.java
@@ -0,0 +1,25 @@
+package com.best.javaSdk.converter.impl;
+
+import com.best.javaSdk.converter.Converter;
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public class DoubleConverter implements Converter {
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        return Double.valueOf(firstChild.getNodeValue());
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        return Double.valueOf(value.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/FloatConverter.java b/src/main/java/com/best/javaSdk/converter/impl/FloatConverter.java
new file mode 100644
index 0000000..268f04b
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/FloatConverter.java
@@ -0,0 +1,25 @@
+package com.best.javaSdk.converter.impl;
+
+import com.best.javaSdk.converter.Converter;
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public class FloatConverter implements Converter {
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        return Float.valueOf(firstChild.getNodeValue());
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        return Float.valueOf(value.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/IntConverter.java b/src/main/java/com/best/javaSdk/converter/impl/IntConverter.java
new file mode 100644
index 0000000..2bac771
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/IntConverter.java
@@ -0,0 +1,24 @@
+package com.best.javaSdk.converter.impl;
+
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public class IntConverter implements com.best.javaSdk.converter.Converter {
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        return Integer.parseInt(firstChild.getNodeValue());
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        return Integer.parseInt(value.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/LongConverter.java b/src/main/java/com/best/javaSdk/converter/impl/LongConverter.java
new file mode 100644
index 0000000..f7b57ca
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/LongConverter.java
@@ -0,0 +1,25 @@
+package com.best.javaSdk.converter.impl;
+
+import com.best.javaSdk.converter.Converter;
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public class LongConverter implements Converter {
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        return Long.valueOf(firstChild.getNodeValue());
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        return Long.valueOf(value.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/impl/StringConverter.java b/src/main/java/com/best/javaSdk/converter/impl/StringConverter.java
new file mode 100644
index 0000000..3b8195c
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/impl/StringConverter.java
@@ -0,0 +1,25 @@
+package com.best.javaSdk.converter.impl;
+
+import com.best.javaSdk.converter.Converter;
+import org.w3c.dom.Node;
+
+import java.lang.reflect.Field;
+
+public class StringConverter implements Converter {
+    @Override
+    public Object convertXml(Node node, Field field) {
+        Node firstChild = node.getFirstChild();
+        return firstChild.getNodeValue();
+    }
+
+    @Override
+    public String xmlReverse(Object propValue, Field prop) {
+        String propName = prop.getName();
+        return com.best.javaSdk.Parser.appendXmlNode(propName, propValue.toString());
+    }
+
+    @Override
+    public Object convertJson(Object value, Field field) {
+        return value.toString();
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/BufferErrorListener.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/BufferErrorListener.java
new file mode 100644
index 0000000..2dea0fa
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/BufferErrorListener.java
@@ -0,0 +1,41 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+public class BufferErrorListener implements JSONErrorListener {
+
+    protected StringBuffer buffer;
+    private String input;
+    
+    public BufferErrorListener(StringBuffer buffer) {
+        this.buffer = buffer;
+    }
+    
+    public BufferErrorListener() {
+        this(new StringBuffer());
+    }
+    
+    public void start(String input) {
+        this.input = input;
+        buffer.setLength(0);
+    }
+
+    public void error(String type, int col) {
+        buffer.append("expected ");
+        buffer.append(type);
+        buffer.append(" at column ");
+        buffer.append(col);
+        buffer.append("\n");
+        buffer.append(input);
+        buffer.append("\n");
+        indent(col-1, buffer);
+        buffer.append("^");
+    }
+
+    private void indent(int n, StringBuffer ret) {
+        for (int i = 0; i< n; ++i) {
+            ret.append(' ');
+        }
+    }
+
+    public void end() {
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/ExceptionErrorListener.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/ExceptionErrorListener.java
new file mode 100644
index 0000000..21eaf32
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/ExceptionErrorListener.java
@@ -0,0 +1,9 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+public class ExceptionErrorListener extends BufferErrorListener {
+    
+    public void error(String type, int col) {
+        super.error(type, col);
+        throw new IllegalArgumentException(buffer.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONErrorListener.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONErrorListener.java
new file mode 100644
index 0000000..d7a483e
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONErrorListener.java
@@ -0,0 +1,7 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+public interface JSONErrorListener {
+    void start(String text);
+    void error(String message, int column);
+    void end();
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONReader.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONReader.java
new file mode 100644
index 0000000..23da6a7
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONReader.java
@@ -0,0 +1,238 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 不能直接使用JSONReader,请用JSONValidatingReader,所以这里改为abstract修饰。
+ */
+public abstract class JSONReader {
+
+    private static final Object OBJECT_END = new Object();
+    private static final Object ARRAY_END = new Object();
+    private static final Object COLON = new Object();
+    private static final Object COMMA = new Object();
+    public static final int FIRST = 0;
+    public static final int CURRENT = 1;
+    public static final int NEXT = 2;
+
+    private static Map<Character, Character> escapes = new HashMap<Character, Character>();
+    static {
+        escapes.put(Character.valueOf('"'), Character.valueOf('"'));
+        escapes.put(Character.valueOf('\\'), Character.valueOf('\\'));
+        escapes.put(Character.valueOf('/'), Character.valueOf('/'));
+        escapes.put(Character.valueOf('b'), Character.valueOf('\b'));
+        escapes.put(Character.valueOf('f'), Character.valueOf('\f'));
+        escapes.put(Character.valueOf('n'), Character.valueOf('\n'));
+        escapes.put(Character.valueOf('r'), Character.valueOf('\r'));
+        escapes.put(Character.valueOf('t'), Character.valueOf('\t'));
+    }
+
+    private CharacterIterator it;
+    private char c;
+    private Object token;
+    private StringBuffer buf = new StringBuffer();
+
+    private char next() {
+        c = it.next();
+        return c;
+    }
+
+    private void skipWhiteSpace() {
+        while (Character.isWhitespace(c)) {
+            next();
+        }
+    }
+
+    /**
+     * 2
+     * @param ci
+     * @param start
+     * @return
+     */
+    public Object read(CharacterIterator ci, int start) {
+        it = ci;
+        switch (start) {
+        case FIRST:
+            c = it.first();
+            break;
+        case CURRENT:
+            c = it.current();
+            break;
+        case NEXT:
+            c = it.next();
+            break;
+        }
+        return read();
+    }
+
+    public Object read(CharacterIterator it) {
+        return read(it, NEXT);
+    }
+
+    /**
+     * 1
+     * @param string
+     * @return
+     */
+    public Object read(String string) {
+        return read(new StringCharacterIterator(string), FIRST);
+    }
+
+    /**
+     * 3
+     * @return
+     */
+    private Object read() {
+        skipWhiteSpace();
+        char ch = c;
+        next();
+        switch (ch) {
+            case '"': token = string(); break;
+            case '[': token = array(); break;
+            case ']': token = ARRAY_END; break;
+            case ',': token = COMMA; break;
+            case '{': token = object(); break;
+            case '}': token = OBJECT_END; break;
+            case ':': token = COLON; break;
+            case 't':
+                next(); next(); next(); // assumed r-u-e
+                token = Boolean.TRUE;
+                break;
+            case'f':
+                next(); next(); next(); next(); // assumed a-l-s-e
+                token = Boolean.FALSE;
+                break;
+            case 'n':
+                next(); next(); next(); // assumed u-l-l
+                token = null;
+                break;
+            default:
+                c = it.previous();
+                if (Character.isDigit(c) || c == '-') {
+                    token = number();
+                }
+        }
+        // System.out.println("token: " + token); // enable this line to see the token stream
+        return token;
+    }
+    
+    private Object object() {
+        Map<Object, Object> ret = new HashMap<Object, Object>();
+        Object key = read();
+        while (token != OBJECT_END) {
+            read(); // should be a colon
+            if (token != OBJECT_END) {
+                ret.put(key, read());
+                if (read() == COMMA) {
+                    key = read();
+                }
+            }
+        }
+
+        return ret;
+    }
+
+    private Object array() {
+        List<Object> ret = new ArrayList<Object>();
+        Object value = read();
+        while (token != ARRAY_END) {
+            ret.add(value);
+            if (read() == COMMA) {
+                value = read();
+            }
+        }
+        return ret;
+    }
+
+    private Object number() {
+        int length = 0;
+        boolean isFloatingPoint = false;
+        buf.setLength(0);
+        
+        if (c == '-') {
+            add();
+        }
+        length += addDigits();
+        if (c == '.') {
+            add();
+            length += addDigits();
+            isFloatingPoint = true;
+        }
+        if (c == 'e' || c == 'E') {
+            add();
+            if (c == '+' || c == '-') {
+                add();
+            }
+            addDigits();
+            isFloatingPoint = true;
+        }
+ 
+        String s = buf.toString();
+        return isFloatingPoint ? (length < 17) ? (Object)Double.valueOf(s) : new BigDecimal(s) : (length < 19) ? (Object)Long.valueOf(s) : new BigInteger(s);
+    }
+ 
+    private int addDigits() {
+        int ret;
+        for (ret = 0; Character.isDigit(c); ++ret) {
+            add();
+        }
+        return ret;
+    }
+
+    private Object string() {
+        buf.setLength(0);
+        while (c != '"') {
+            if (c == '\\') {
+                next();
+                if (c == 'u') {
+                    add(unicode());
+                } else {
+                    Object value = escapes.get(Character.valueOf(c));
+                    if (value != null) {
+                        add(((Character) value).charValue());
+                    }
+                }
+            } else {
+                add();
+            }
+        }
+        next();
+
+        return buf.toString();
+    }
+
+    private void add(char cc) {
+        buf.append(cc);
+        next();
+    }
+
+    private void add() {
+        add(c);
+    }
+
+    private char unicode() {
+        int value = 0;
+        for (int i = 0; i < 4; ++i) {
+            switch (next()) {
+            case '0': case '1': case '2': case '3': case '4': 
+            case '5': case '6': case '7': case '8': case '9':
+                value = (value << 4) + c - '0';
+                break;
+            case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+                value = (value << 4) + c - 'k';
+                break;
+            case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+                value = (value << 4) + c - 'K';
+                break;
+            }
+        }
+        return (char) value;
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingReader.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingReader.java
new file mode 100644
index 0000000..1014681
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingReader.java
@@ -0,0 +1,23 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+public class JSONValidatingReader extends JSONReader {
+    public static final Object INVALID = new Object();
+    private JSONValidator validator;
+    
+    public JSONValidatingReader(JSONValidator validator) {
+        this.validator = validator;
+    }
+    
+    public JSONValidatingReader(ExceptionErrorListener listener) {
+        this(new JSONValidator(listener));
+    }
+    
+/*    public JSONValidatingReader() {
+        this(new StdoutStreamErrorListener());
+    }*/
+
+    public Object read(String string) {
+        if (!validator.validate(string)) return INVALID;
+        return super.read(string);
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingWriter.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingWriter.java
new file mode 100644
index 0000000..ac2e30e
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidatingWriter.java
@@ -0,0 +1,56 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+public class JSONValidatingWriter extends JSONWriter {
+
+    private JSONValidator validator;
+    
+    public JSONValidatingWriter(JSONValidator validator, boolean emitClassName) {
+        super(emitClassName);
+        this.validator = validator;
+    }
+    
+    public JSONValidatingWriter(JSONValidator validator) {
+        this.validator = validator;
+    }
+    
+    public JSONValidatingWriter(JSONErrorListener listener, boolean emitClassName) {
+        this(new JSONValidator(listener), emitClassName);
+    }
+    
+    public JSONValidatingWriter(JSONErrorListener listener) {
+        this(new JSONValidator(listener));
+    }
+    
+    public JSONValidatingWriter() {
+        this(new StdoutStreamErrorListener());
+    }
+    
+    public JSONValidatingWriter(boolean emitClassName) {
+        this(new StdoutStreamErrorListener(), emitClassName);
+    }
+    
+    private String validate(String text) {
+        validator.validate(text);
+        return text;
+    }
+
+    public String write(Object object) {
+        return validate(super.write(object));
+    }
+
+    public String write(long n) {
+        return validate(super.write(n));
+    }
+
+    public String write(double d) {
+        return validate(super.write(d));
+    }
+
+    public String write(char c) {
+        return validate(super.write(c));
+    }
+
+    public String write(boolean b) {
+        return validate(super.write(b));
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidator.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidator.java
new file mode 100644
index 0000000..cf55cd3
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONValidator.java
@@ -0,0 +1,214 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+
+public class JSONValidator {
+
+    private JSONErrorListener listener;
+    private CharacterIterator it;
+    private char c;
+    private int col;
+    
+    public JSONValidator(JSONErrorListener listener) {
+        this.listener = listener;
+    }
+    
+    public boolean validate(String input) {
+        input = input.trim();
+        listener.start(input);
+        boolean ret = valid(input);
+        listener.end();
+        return ret;
+    }
+
+    private boolean valid(String input) {
+        if ("".equals(input)) return true;
+        
+        boolean ret = true;
+        it = new StringCharacterIterator(input);
+        c = it.first();
+        col = 1;
+        if (!value()) {
+            ret = error("value", 1);
+        } else {
+            skipWhiteSpace();
+            if (c != CharacterIterator.DONE) {
+                ret = error("end", col);
+            }
+        }
+        
+        return ret;
+    }
+
+    private boolean value() {
+        return 
+            literal("true") ||
+            literal("false") ||
+            literal("null") ||
+            string() ||
+            number() ||
+            object() ||
+            array();
+    }
+
+    private boolean literal(String text) {
+        CharacterIterator ci = new StringCharacterIterator(text);
+        char t = ci.first();
+        if (c != t) return false;
+        
+        int start = col;
+        boolean ret = true;
+        for (t = ci.next(); t != CharacterIterator.DONE; t = ci.next()) {
+            if (t != nextCharacter()) {
+                ret = false;
+                break;
+            }
+        }
+        nextCharacter();
+
+        if (!ret) error("literal " + text, start);
+        return ret;
+    }
+
+    private boolean array() {
+        return aggregate('[', ']', false);
+    }
+
+    private boolean object() {
+        return aggregate('{', '}', true);
+    }
+
+    private boolean aggregate(char entryCharacter, char exitCharacter, boolean prefix) {
+        if (c != entryCharacter) return false;
+        nextCharacter();
+        skipWhiteSpace();
+        if (c == exitCharacter) {
+            nextCharacter();
+            return true;
+        }
+        
+        for(;;) {
+            if (prefix) {
+                int start = col;
+                if (!string()) return error("string", start);
+                skipWhiteSpace();
+                if (c != ':') return error("colon", col);
+                nextCharacter();
+                skipWhiteSpace();
+            }
+            if (value()) {
+                skipWhiteSpace();
+                if (c == ',') {
+                    nextCharacter();
+                } else if (c == exitCharacter) {
+                    break;
+                } else { 
+                    return error("comma or " + exitCharacter, col);
+                }
+            } else {
+                return error("value", col);
+            }
+            skipWhiteSpace();
+        }
+        
+        nextCharacter();
+        return true;
+    }
+
+    private boolean number() {
+        if (!Character.isDigit(c) && c != '-') return false;
+        int start = col;
+
+        if (c == '-') nextCharacter();
+
+        if (c == '0') {
+            nextCharacter();
+        } else if (Character.isDigit(c)) {
+            while(Character.isDigit(c)) nextCharacter();
+        } else {
+            return error("number", start);
+        }
+
+        if (c == '.') {
+            nextCharacter();
+            if (Character.isDigit(c)) {
+                while(Character.isDigit(c)) nextCharacter();
+            } else {
+                return error("number", start);
+            }        
+        }
+
+        if (c == 'e' || c == 'E') {
+            nextCharacter();
+            if (c == '+' || c=='-') {
+                nextCharacter();
+            }
+            if (Character.isDigit(c)) {
+                while(Character.isDigit(c)) nextCharacter();
+            } else {
+                return error("number", start);
+            }        
+        }
+
+        return true;
+    }
+
+    private boolean string() {
+        if (c != '"') return false;
+        
+        int start = col;
+        boolean escaped = false;
+
+        for (nextCharacter(); c != CharacterIterator.DONE; nextCharacter()) {
+            if (!escaped && c == '\\') {
+                escaped = true;
+            } else if (escaped) {
+                if (!escape()) {
+                    return false;
+                }
+                escaped = false;
+            } else if (c == '"') {
+                nextCharacter();
+                return true;
+            }
+        }
+
+        return error("quoted string", start);
+    }
+
+    private boolean escape() {
+        int start = col-1;
+        if ("\\\"/bfnrtu".indexOf(c) < 0) {
+            return error("escape sequence \\\",\\\\,\\/,\\b,\\f,\\n,\\r,\\t or \\uxxxx", start);
+        } 
+        if (c == 'u') {
+            if (!ishex(nextCharacter()) || !ishex(nextCharacter()) || 
+                    !ishex(nextCharacter()) || !ishex(nextCharacter())) {
+                return error("unicode escape sequence \\uxxxx", start);
+            }
+        }
+        return true;
+    }
+
+    private boolean ishex(char d) {
+        return "0123456789abcdefABCDEF".indexOf(c) >= 0;
+    }
+
+    private char nextCharacter() {
+        c = it.next();
+        ++col;
+        return c;
+    }
+
+    private void skipWhiteSpace() {
+        while (Character.isWhitespace(c)) {
+            nextCharacter();
+        }
+    }
+
+    private boolean error(String type, int col) {
+        if (listener != null) listener.error(type, col);
+        return false;
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONWriter.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONWriter.java
new file mode 100644
index 0000000..f52914a
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/JSONWriter.java
@@ -0,0 +1,221 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.text.CharacterIterator;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.text.StringCharacterIterator;
+import java.util.*;
+
+public class JSONWriter {
+
+    private StringBuffer buf = new StringBuffer();
+    private Stack<Object> calls = new Stack<Object>();
+    private boolean emitClassName = true;
+    private DateFormat format;
+
+    public JSONWriter(boolean emitClassName) {
+        this.emitClassName = emitClassName;
+    }
+
+    public JSONWriter() {
+        this(false);
+    }
+
+    public JSONWriter(DateFormat format) {
+        this(false);
+        this.format = format;
+    }
+
+    public String write(Object object) {
+        buf.setLength(0);
+        value(object);
+        return buf.toString();
+    }
+
+    public String write(long n) {
+        return String.valueOf(n);
+    }
+
+    public String write(double d) {
+        return String.valueOf(d);
+    }
+
+    public String write(char c) {
+        return "\"" + c + "\"";
+    }
+    
+    public String write(boolean b) {
+        return String.valueOf(b);
+    }
+
+    private void value(Object object) {
+        if (object == null || cyclic(object)) {
+            add(null);
+        } else {
+            calls.push(object);
+            if (object instanceof Class<?>) string(object);
+            else if (object instanceof Boolean) bool(((Boolean) object).booleanValue());
+            else if (object instanceof Number) add(object);
+            else if (object instanceof String) string(object);
+            else if (object instanceof Character) string(object);
+            else if (object instanceof Map<?, ?>) map((Map<?, ?>)object);
+            else if (object.getClass().isArray()) array(object);
+            else if (object instanceof Iterator<?>) array((Iterator<?>)object);
+            else if (object instanceof Collection<?>) array(((Collection<?>)object).iterator());
+            else if (object instanceof Date) date((Date)object);
+            else bean(object);
+            calls.pop();
+        }
+    }
+
+    private boolean cyclic(Object object) {
+        Iterator<Object> it = calls.iterator();
+        while (it.hasNext()) {
+            Object called = it.next();
+            if (object == called) return true;
+        }
+        return false;
+    }
+    
+    private void bean(Object object) {
+        add("{");
+        BeanInfo info;
+        boolean addedSomething = false;
+        try {
+            info = Introspector.getBeanInfo(object.getClass());
+            PropertyDescriptor[] props = info.getPropertyDescriptors();
+            for (int i = 0; i < props.length; ++i) {
+                PropertyDescriptor prop = props[i];
+                String name = prop.getName();
+                Method accessor = prop.getReadMethod();
+                if ((emitClassName || !"class".equals(name)) && accessor != null) {
+                    if (!accessor.isAccessible()) accessor.setAccessible(true);
+                    Object value = accessor.invoke(object, (Object[])null);
+                    if (value == null) continue;
+                    if (addedSomething) add(',');
+                    add(name, value);
+                    addedSomething = true;
+                }
+            }
+            Field[] ff = object.getClass().getFields();
+            for (int i = 0; i < ff.length; ++i) {
+                Field field = ff[i];
+                Object value = field.get(object);
+                if (value == null) continue;
+                if (addedSomething) add(',');
+                add(field.getName(), value);
+                addedSomething = true;
+            }
+        } catch (IllegalAccessException iae) {
+            iae.printStackTrace();
+        } catch (InvocationTargetException ite) {
+            ite.getCause().printStackTrace();
+            ite.printStackTrace();
+        } catch (IntrospectionException ie) {
+            ie.printStackTrace();
+        }
+        add("}");
+    }
+
+    private void add(String name, Object value) {
+        add('"');
+        add(name);
+        add("\":");
+        value(value);
+    }
+
+    private void map(Map<?, ?> map) {
+        add("{");
+        Iterator<?> it = map.entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry<?, ?> e = (Map.Entry<?, ?>) it.next();
+            value(e.getKey());
+            add(":");
+            value(e.getValue());
+            if (it.hasNext()) add(',');
+        }
+        add("}");
+    }
+    
+    private void array(Iterator<?> it) {
+        add("[");
+        while (it.hasNext()) {
+            value(it.next());
+            if (it.hasNext()) add(",");
+        }
+        add("]");
+    }
+
+    private void array(Object object) {
+        add("[");
+        int length = Array.getLength(object);
+        for (int i = 0; i < length; ++i) {
+            value(Array.get(object, i));
+            if (i < length - 1) add(',');
+        }
+        add("]");
+    }
+
+    private void bool(boolean b) {
+        add(b ? "true" : "false");
+	}
+
+    private void date(Date date) {
+        if (this.format == null) {
+            this.format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            this.format.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+        }
+        add("\"");
+        add(format.format(date));
+        add("\"");
+    }
+
+	private void string(Object obj) {
+        add('"');
+        CharacterIterator it = new StringCharacterIterator(obj.toString());
+        for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
+            if (c == '"') add("\\\"");
+            else if (c == '\\') add("\\\\");
+            else if (c == '/') add("\\/");
+            else if (c == '\b') add("\\b");
+            else if (c == '\f') add("\\f");
+            else if (c == '\n') add("\\n");
+            else if (c == '\r') add("\\r");
+            else if (c == '\t') add("\\t");
+            else if (Character.isISOControl(c)) {
+                unicode(c);
+            } else {
+                add(c);
+            }
+        }
+        add('"');
+    }
+
+    private void add(Object obj) {
+        buf.append(obj);
+    }
+
+    private void add(char c) {
+        buf.append(c);
+    }
+
+    static char[] hex = "0123456789ABCDEF".toCharArray();
+
+    private void unicode(char c) {
+        add("\\u");
+        int n = c;
+        for (int i = 0; i < 4; ++i) {
+            int digit = (n & 0xf000) >> 12;
+            add(hex[digit]);
+            n <<= 4;
+        }
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/converter/util/jsonReader/StdoutStreamErrorListener.java b/src/main/java/com/best/javaSdk/converter/util/jsonReader/StdoutStreamErrorListener.java
new file mode 100644
index 0000000..b1f015f
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/converter/util/jsonReader/StdoutStreamErrorListener.java
@@ -0,0 +1,8 @@
+package com.best.javaSdk.converter.util.jsonReader;
+
+public class StdoutStreamErrorListener extends BufferErrorListener {
+    
+    public void end() {
+        System.out.print(buffer.toString());
+    }
+}
diff --git a/src/main/java/com/best/javaSdk/kdCancelOrderNotify/request/KdCancelOrderNotifyReq.java b/src/main/java/com/best/javaSdk/kdCancelOrderNotify/request/KdCancelOrderNotifyReq.java
new file mode 100644
index 0000000..a5748a0
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCancelOrderNotify/request/KdCancelOrderNotifyReq.java
@@ -0,0 +1,44 @@
+package com.best.javaSdk.kdCancelOrderNotify.request;
+
+import com.best.javaSdk.BaseRequest;
+import com.best.javaSdk.BaseResponse;
+import com.best.javaSdk.Parser;
+
+
+public class KdCancelOrderNotifyReq implements BaseRequest {
+	private String txLogisticId;
+	private String reason;
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public String getReason()
+    {
+        return this.reason;
+    }
+
+    public void setReason(String value)
+    {
+        this.reason = value;
+    }
+
+    public String obtainServiceType() {
+        return "KD_CANCEL_ORDER_NOTIFY";
+    }
+
+    public BaseResponse makeResponse(String rsp, String format) {
+        if ("xml".equalsIgnoreCase(format)) {
+			return Parser.coverXml2Object(rsp, com.best.javaSdk.kdCancelOrderNotify.response.KdCancelOrderNotifyRsp.class);
+		}
+		return Parser.convertJson2Object(rsp, com.best.javaSdk.kdCancelOrderNotify.response.KdCancelOrderNotifyRsp.class);
+
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCancelOrderNotify/response/KdCancelOrderNotifyRsp.java b/src/main/java/com/best/javaSdk/kdCancelOrderNotify/response/KdCancelOrderNotifyRsp.java
new file mode 100644
index 0000000..45a68e7
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCancelOrderNotify/response/KdCancelOrderNotifyRsp.java
@@ -0,0 +1,53 @@
+package com.best.javaSdk.kdCancelOrderNotify.response;
+
+import com.best.javaSdk.BaseResponse;
+
+
+public class KdCancelOrderNotifyRsp implements BaseResponse {
+	private boolean result;
+	private String remark;
+	private String errorCode;
+	private String errorDescription;
+
+    public boolean getResult()
+    {
+        return this.result;
+    }
+
+    public void setResult(boolean value)
+    {
+        this.result = value;
+    }
+
+    public String getRemark()
+    {
+        return this.remark;
+    }
+
+    public void setRemark(String value)
+    {
+        this.remark = value;
+    }
+
+    public String getErrorCode()
+    {
+        return this.errorCode;
+    }
+
+    public void setErrorCode(String value)
+    {
+        this.errorCode = value;
+    }
+
+    public String getErrorDescription()
+    {
+        return this.errorDescription;
+    }
+
+    public void setErrorDescription(String value)
+    {
+        this.errorDescription = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Item.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Item.java
new file mode 100644
index 0000000..52f8964
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Item.java
@@ -0,0 +1,74 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
+
+
+
+public class Item {
+	private long itemCount;
+	private long itemWeight;
+	private long itemLength;
+	private long itemWidth;
+	private long itemHeight;
+	private String itemName;
+
+    public long getItemCount()
+    {
+        return this.itemCount;
+    }
+
+    public void setItemCount(long value)
+    {
+        this.itemCount = value;
+    }
+
+    public long getItemWeight()
+    {
+        return this.itemWeight;
+    }
+
+    public void setItemWeight(long value)
+    {
+        this.itemWeight = value;
+    }
+
+    public long getItemLength()
+    {
+        return this.itemLength;
+    }
+
+    public void setItemLength(long value)
+    {
+        this.itemLength = value;
+    }
+
+    public long getItemWidth()
+    {
+        return this.itemWidth;
+    }
+
+    public void setItemWidth(long value)
+    {
+        this.itemWidth = value;
+    }
+
+    public long getItemHeight()
+    {
+        return this.itemHeight;
+    }
+
+    public void setItemHeight(long value)
+    {
+        this.itemHeight = value;
+    }
+
+    public String getItemName()
+    {
+        return this.itemName;
+    }
+
+    public void setItemName(String value)
+    {
+        this.itemName = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Items.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Items.java
new file mode 100644
index 0000000..065e9b5
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Items.java
@@ -0,0 +1,20 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
+
+import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Item;
+import java.util.List;
+
+
+public class Items {
+	private List<Item> item;
+
+    public List<Item>  getItem()
+    {
+        return this.item;
+    }
+
+    public void setItem(List<Item>  value)
+    {
+        this.item = value;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/KdCreateWaybillOrderNotifyReq.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/KdCreateWaybillOrderNotifyReq.java
new file mode 100644
index 0000000..2e96dcc
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/KdCreateWaybillOrderNotifyReq.java
@@ -0,0 +1,333 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
+
+import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Sender;
+import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Receiver;
+import com.best.javaSdk.kdCreateWaybillOrderNotify.request.Items;
+import com.best.javaSdk.BaseRequest;
+import com.best.javaSdk.BaseResponse;
+import com.best.javaSdk.Parser;
+
+
+public class KdCreateWaybillOrderNotifyReq implements BaseRequest {
+	private long piece;
+	private double length;
+	private double width;
+	private double height;
+	private String customerName;
+	private String txLogisticId;
+	private String mailNo;
+	private String tradeNo;
+	private String serviceType;
+	private long sendStartTime;
+	private long sendEndTime;
+	private String recSite;
+	private double goodsValue;
+	private double itemsValue;
+	private double insuranceValue;
+	private String special;
+	private String bankCardOwner;
+	private String bankCode;
+	private String bankCardNo;
+	private String remark;
+	private Sender sender;
+	private Receiver receiver;
+	private Items items;
+	private double itemsWeight;
+	private String certificateType;
+	private String certificateNo;
+	private String deliverySite;
+	private String deliveryType;
+
+    public long getPiece()
+    {
+        return this.piece;
+    }
+
+    public void setPiece(long value)
+    {
+        this.piece = value;
+    }
+
+    public double getLength()
+    {
+        return this.length;
+    }
+
+    public void setLength(double value)
+    {
+        this.length = value;
+    }
+
+    public double getWidth()
+    {
+        return this.width;
+    }
+
+    public void setWidth(double value)
+    {
+        this.width = value;
+    }
+
+    public double getHeight()
+    {
+        return this.height;
+    }
+
+    public void setHeight(double value)
+    {
+        this.height = value;
+    }
+
+    public String getCustomerName()
+    {
+        return this.customerName;
+    }
+
+    public void setCustomerName(String value)
+    {
+        this.customerName = value;
+    }
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public String getTradeNo()
+    {
+        return this.tradeNo;
+    }
+
+    public void setTradeNo(String value)
+    {
+        this.tradeNo = value;
+    }
+
+    public String getServiceType()
+    {
+        return this.serviceType;
+    }
+
+    public void setServiceType(String value)
+    {
+        this.serviceType = value;
+    }
+
+    public long getSendStartTime()
+    {
+        return this.sendStartTime;
+    }
+
+    public void setSendStartTime(long value)
+    {
+        this.sendStartTime = value;
+    }
+
+    public long getSendEndTime()
+    {
+        return this.sendEndTime;
+    }
+
+    public void setSendEndTime(long value)
+    {
+        this.sendEndTime = value;
+    }
+
+    public String getRecSite()
+    {
+        return this.recSite;
+    }
+
+    public void setRecSite(String value)
+    {
+        this.recSite = value;
+    }
+
+    public double getGoodsValue()
+    {
+        return this.goodsValue;
+    }
+
+    public void setGoodsValue(double value)
+    {
+        this.goodsValue = value;
+    }
+
+    public double getItemsValue()
+    {
+        return this.itemsValue;
+    }
+
+    public void setItemsValue(double value)
+    {
+        this.itemsValue = value;
+    }
+
+    public double getInsuranceValue()
+    {
+        return this.insuranceValue;
+    }
+
+    public void setInsuranceValue(double value)
+    {
+        this.insuranceValue = value;
+    }
+
+    public String getSpecial()
+    {
+        return this.special;
+    }
+
+    public void setSpecial(String value)
+    {
+        this.special = value;
+    }
+
+    public String getBankCardOwner()
+    {
+        return this.bankCardOwner;
+    }
+
+    public void setBankCardOwner(String value)
+    {
+        this.bankCardOwner = value;
+    }
+
+    public String getBankCode()
+    {
+        return this.bankCode;
+    }
+
+    public void setBankCode(String value)
+    {
+        this.bankCode = value;
+    }
+
+    public String getBankCardNo()
+    {
+        return this.bankCardNo;
+    }
+
+    public void setBankCardNo(String value)
+    {
+        this.bankCardNo = value;
+    }
+
+    public String getRemark()
+    {
+        return this.remark;
+    }
+
+    public void setRemark(String value)
+    {
+        this.remark = value;
+    }
+
+    public Sender getSender()
+    {
+        return this.sender;
+    }
+
+    public void setSender(Sender value)
+    {
+        this.sender = value;
+    }
+
+    public Receiver getReceiver()
+    {
+        return this.receiver;
+    }
+
+    public void setReceiver(Receiver value)
+    {
+        this.receiver = value;
+    }
+
+    public Items getItems()
+    {
+        return this.items;
+    }
+
+    public void setItems(Items value)
+    {
+        this.items = value;
+    }
+
+    public double getItemsWeight()
+    {
+        return this.itemsWeight;
+    }
+
+    public void setItemsWeight(double value)
+    {
+        this.itemsWeight = value;
+    }
+
+    public String getCertificateType()
+    {
+        return this.certificateType;
+    }
+
+    public void setCertificateType(String value)
+    {
+        this.certificateType = value;
+    }
+
+    public String getCertificateNo()
+    {
+        return this.certificateNo;
+    }
+
+    public void setCertificateNo(String value)
+    {
+        this.certificateNo = value;
+    }
+
+    public String getDeliverySite()
+    {
+        return this.deliverySite;
+    }
+
+    public void setDeliverySite(String value)
+    {
+        this.deliverySite = value;
+    }
+
+    public String getDeliveryType()
+    {
+        return this.deliveryType;
+    }
+
+    public void setDeliveryType(String value)
+    {
+        this.deliveryType = value;
+    }
+
+    public String obtainServiceType() {
+        return "KD_CREATE_WAYBILL_ORDER_NOTIFY";
+    }
+
+    public BaseResponse makeResponse(String rsp, String format) {
+        if ("xml".equalsIgnoreCase(format)) {
+			return Parser.coverXml2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderNotify.response.KdCreateWaybillOrderNotifyRsp.class);
+		}
+		return Parser.convertJson2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderNotify.response.KdCreateWaybillOrderNotifyRsp.class);
+
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Receiver.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Receiver.java
new file mode 100644
index 0000000..ec56ce3
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Receiver.java
@@ -0,0 +1,107 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
+
+
+
+public class Receiver {
+	private String name;
+	private String postCode;
+	private String mobile;
+	private String prov;
+	private String city;
+	private String county;
+	private String address;
+	private String email;
+	private String country;
+
+    public String getName()
+    {
+        return this.name;
+    }
+
+    public void setName(String value)
+    {
+        this.name = value;
+    }
+
+    public String getPostCode()
+    {
+        return this.postCode;
+    }
+
+    public void setPostCode(String value)
+    {
+        this.postCode = value;
+    }
+
+    public String getMobile()
+    {
+        return this.mobile;
+    }
+
+    public void setMobile(String value)
+    {
+        this.mobile = value;
+    }
+
+    public String getProv()
+    {
+        return this.prov;
+    }
+
+    public void setProv(String value)
+    {
+        this.prov = value;
+    }
+
+    public String getCity()
+    {
+        return this.city;
+    }
+
+    public void setCity(String value)
+    {
+        this.city = value;
+    }
+
+    public String getCounty()
+    {
+        return this.county;
+    }
+
+    public void setCounty(String value)
+    {
+        this.county = value;
+    }
+
+    public String getAddress()
+    {
+        return this.address;
+    }
+
+    public void setAddress(String value)
+    {
+        this.address = value;
+    }
+
+    public String getEmail()
+    {
+        return this.email;
+    }
+
+    public void setEmail(String value)
+    {
+        this.email = value;
+    }
+
+    public String getCountry()
+    {
+        return this.country;
+    }
+
+    public void setCountry(String value)
+    {
+        this.country = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Sender.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Sender.java
new file mode 100644
index 0000000..80c8164
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/request/Sender.java
@@ -0,0 +1,107 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.request;
+
+
+
+public class Sender {
+	private String name;
+	private String postCode;
+	private String mobile;
+	private String prov;
+	private String city;
+	private String county;
+	private String address;
+	private String email;
+	private String country;
+
+    public String getName()
+    {
+        return this.name;
+    }
+
+    public void setName(String value)
+    {
+        this.name = value;
+    }
+
+    public String getPostCode()
+    {
+        return this.postCode;
+    }
+
+    public void setPostCode(String value)
+    {
+        this.postCode = value;
+    }
+
+    public String getMobile()
+    {
+        return this.mobile;
+    }
+
+    public void setMobile(String value)
+    {
+        this.mobile = value;
+    }
+
+    public String getProv()
+    {
+        return this.prov;
+    }
+
+    public void setProv(String value)
+    {
+        this.prov = value;
+    }
+
+    public String getCity()
+    {
+        return this.city;
+    }
+
+    public void setCity(String value)
+    {
+        this.city = value;
+    }
+
+    public String getCounty()
+    {
+        return this.county;
+    }
+
+    public void setCounty(String value)
+    {
+        this.county = value;
+    }
+
+    public String getAddress()
+    {
+        return this.address;
+    }
+
+    public void setAddress(String value)
+    {
+        this.address = value;
+    }
+
+    public String getEmail()
+    {
+        return this.email;
+    }
+
+    public void setEmail(String value)
+    {
+        this.email = value;
+    }
+
+    public String getCountry()
+    {
+        return this.country;
+    }
+
+    public void setCountry(String value)
+    {
+        this.country = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/ChildMailNo.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/ChildMailNo.java
new file mode 100644
index 0000000..1821ad9
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/ChildMailNo.java
@@ -0,0 +1,19 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.response;
+
+import java.util.List;
+
+
+public class ChildMailNo {
+	private List<String> mailNo;
+
+    public List<String>  getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(List<String>  value)
+    {
+        this.mailNo = value;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/KdCreateWaybillOrderNotifyRsp.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/KdCreateWaybillOrderNotifyRsp.java
new file mode 100644
index 0000000..528cfdd
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderNotify/response/KdCreateWaybillOrderNotifyRsp.java
@@ -0,0 +1,98 @@
+package com.best.javaSdk.kdCreateWaybillOrderNotify.response;
+
+import com.best.javaSdk.kdCreateWaybillOrderNotify.response.ChildMailNo;
+import com.best.javaSdk.BaseResponse;
+
+
+public class KdCreateWaybillOrderNotifyRsp implements BaseResponse {
+	private ChildMailNo childMailNo;
+	private boolean result;
+	private String txLogisticId;
+	private String mailNo;
+	private String triSortCode;
+	private String packRule;
+	private String errorCode;
+	private String errorDescription;
+
+    public ChildMailNo getChildMailNo()
+    {
+        return this.childMailNo;
+    }
+
+    public void setChildMailNo(ChildMailNo value)
+    {
+        this.childMailNo = value;
+    }
+
+    public boolean getResult()
+    {
+        return this.result;
+    }
+
+    public void setResult(boolean value)
+    {
+        this.result = value;
+    }
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public String getTriSortCode()
+    {
+        return this.triSortCode;
+    }
+
+    public void setTriSortCode(String value)
+    {
+        this.triSortCode = value;
+    }
+
+    public String getPackRule()
+    {
+        return this.packRule;
+    }
+
+    public void setPackRule(String value)
+    {
+        this.packRule = value;
+    }
+
+    public String getErrorCode()
+    {
+        return this.errorCode;
+    }
+
+    public void setErrorCode(String value)
+    {
+        this.errorCode = value;
+    }
+
+    public String getErrorDescription()
+    {
+        return this.errorDescription;
+    }
+
+    public void setErrorDescription(String value)
+    {
+        this.errorDescription = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Item.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Item.java
new file mode 100644
index 0000000..d492fab
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Item.java
@@ -0,0 +1,74 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
+
+
+
+public class Item {
+	private long itemCount;
+	private long itemWeight;
+	private long itemLength;
+	private long itemWidth;
+	private long itemHeight;
+	private String itemName;
+
+    public long getItemCount()
+    {
+        return this.itemCount;
+    }
+
+    public void setItemCount(long value)
+    {
+        this.itemCount = value;
+    }
+
+    public long getItemWeight()
+    {
+        return this.itemWeight;
+    }
+
+    public void setItemWeight(long value)
+    {
+        this.itemWeight = value;
+    }
+
+    public long getItemLength()
+    {
+        return this.itemLength;
+    }
+
+    public void setItemLength(long value)
+    {
+        this.itemLength = value;
+    }
+
+    public long getItemWidth()
+    {
+        return this.itemWidth;
+    }
+
+    public void setItemWidth(long value)
+    {
+        this.itemWidth = value;
+    }
+
+    public long getItemHeight()
+    {
+        return this.itemHeight;
+    }
+
+    public void setItemHeight(long value)
+    {
+        this.itemHeight = value;
+    }
+
+    public String getItemName()
+    {
+        return this.itemName;
+    }
+
+    public void setItemName(String value)
+    {
+        this.itemName = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Items.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Items.java
new file mode 100644
index 0000000..84c358a
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Items.java
@@ -0,0 +1,20 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
+
+import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Item;
+import java.util.List;
+
+
+public class Items {
+	private List<Item> item;
+
+    public List<Item>  getItem()
+    {
+        return this.item;
+    }
+
+    public void setItem(List<Item>  value)
+    {
+        this.item = value;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/KdCreateWaybillOrderPdfNotifyReq.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/KdCreateWaybillOrderPdfNotifyReq.java
new file mode 100644
index 0000000..41af936
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/KdCreateWaybillOrderPdfNotifyReq.java
@@ -0,0 +1,333 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
+
+import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Sender;
+import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Receiver;
+import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request.Items;
+import com.best.javaSdk.BaseRequest;
+import com.best.javaSdk.BaseResponse;
+import com.best.javaSdk.Parser;
+
+
+public class KdCreateWaybillOrderPdfNotifyReq implements BaseRequest {
+	private String customerName;
+	private String txLogisticId;
+	private String mailNo;
+	private String tradeNo;
+	private String serviceType;
+	private long sendStartTime;
+	private long sendEndTime;
+	private String recSite;
+	private long piece;
+	private double goodsValue;
+	private double length;
+	private double itemsValue;
+	private double width;
+	private double insuranceValue;
+	private double height;
+	private String special;
+	private String bankCardOwner;
+	private String bankCode;
+	private String bankCardNo;
+	private String remark;
+	private Sender sender;
+	private Receiver receiver;
+	private Items items;
+	private double itemsWeight;
+	private String certificateType;
+	private String certificateNo;
+	private String deliveryType;
+	private String deliverySite;
+
+    public String getCustomerName()
+    {
+        return this.customerName;
+    }
+
+    public void setCustomerName(String value)
+    {
+        this.customerName = value;
+    }
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public String getTradeNo()
+    {
+        return this.tradeNo;
+    }
+
+    public void setTradeNo(String value)
+    {
+        this.tradeNo = value;
+    }
+
+    public String getServiceType()
+    {
+        return this.serviceType;
+    }
+
+    public void setServiceType(String value)
+    {
+        this.serviceType = value;
+    }
+
+    public long getSendStartTime()
+    {
+        return this.sendStartTime;
+    }
+
+    public void setSendStartTime(long value)
+    {
+        this.sendStartTime = value;
+    }
+
+    public long getSendEndTime()
+    {
+        return this.sendEndTime;
+    }
+
+    public void setSendEndTime(long value)
+    {
+        this.sendEndTime = value;
+    }
+
+    public String getRecSite()
+    {
+        return this.recSite;
+    }
+
+    public void setRecSite(String value)
+    {
+        this.recSite = value;
+    }
+
+    public long getPiece()
+    {
+        return this.piece;
+    }
+
+    public void setPiece(long value)
+    {
+        this.piece = value;
+    }
+
+    public double getGoodsValue()
+    {
+        return this.goodsValue;
+    }
+
+    public void setGoodsValue(double value)
+    {
+        this.goodsValue = value;
+    }
+
+    public double getLength()
+    {
+        return this.length;
+    }
+
+    public void setLength(double value)
+    {
+        this.length = value;
+    }
+
+    public double getItemsValue()
+    {
+        return this.itemsValue;
+    }
+
+    public void setItemsValue(double value)
+    {
+        this.itemsValue = value;
+    }
+
+    public double getWidth()
+    {
+        return this.width;
+    }
+
+    public void setWidth(double value)
+    {
+        this.width = value;
+    }
+
+    public double getInsuranceValue()
+    {
+        return this.insuranceValue;
+    }
+
+    public void setInsuranceValue(double value)
+    {
+        this.insuranceValue = value;
+    }
+
+    public double getHeight()
+    {
+        return this.height;
+    }
+
+    public void setHeight(double value)
+    {
+        this.height = value;
+    }
+
+    public String getSpecial()
+    {
+        return this.special;
+    }
+
+    public void setSpecial(String value)
+    {
+        this.special = value;
+    }
+
+    public String getBankCardOwner()
+    {
+        return this.bankCardOwner;
+    }
+
+    public void setBankCardOwner(String value)
+    {
+        this.bankCardOwner = value;
+    }
+
+    public String getBankCode()
+    {
+        return this.bankCode;
+    }
+
+    public void setBankCode(String value)
+    {
+        this.bankCode = value;
+    }
+
+    public String getBankCardNo()
+    {
+        return this.bankCardNo;
+    }
+
+    public void setBankCardNo(String value)
+    {
+        this.bankCardNo = value;
+    }
+
+    public String getRemark()
+    {
+        return this.remark;
+    }
+
+    public void setRemark(String value)
+    {
+        this.remark = value;
+    }
+
+    public Sender getSender()
+    {
+        return this.sender;
+    }
+
+    public void setSender(Sender value)
+    {
+        this.sender = value;
+    }
+
+    public Receiver getReceiver()
+    {
+        return this.receiver;
+    }
+
+    public void setReceiver(Receiver value)
+    {
+        this.receiver = value;
+    }
+
+    public Items getItems()
+    {
+        return this.items;
+    }
+
+    public void setItems(Items value)
+    {
+        this.items = value;
+    }
+
+    public double getItemsWeight()
+    {
+        return this.itemsWeight;
+    }
+
+    public void setItemsWeight(double value)
+    {
+        this.itemsWeight = value;
+    }
+
+    public String getCertificateType()
+    {
+        return this.certificateType;
+    }
+
+    public void setCertificateType(String value)
+    {
+        this.certificateType = value;
+    }
+
+    public String getCertificateNo()
+    {
+        return this.certificateNo;
+    }
+
+    public void setCertificateNo(String value)
+    {
+        this.certificateNo = value;
+    }
+
+    public String getDeliveryType()
+    {
+        return this.deliveryType;
+    }
+
+    public void setDeliveryType(String value)
+    {
+        this.deliveryType = value;
+    }
+
+    public String getDeliverySite()
+    {
+        return this.deliverySite;
+    }
+
+    public void setDeliverySite(String value)
+    {
+        this.deliverySite = value;
+    }
+
+    public String obtainServiceType() {
+        return "KD_CREATE_WAYBILL_ORDER_PDF_NOTIFY";
+    }
+
+    public BaseResponse makeResponse(String rsp, String format) {
+        if ("xml".equalsIgnoreCase(format)) {
+			return Parser.coverXml2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.KdCreateWaybillOrderPdfNotifyRsp.class);
+		}
+		return Parser.convertJson2Object(rsp, com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.KdCreateWaybillOrderPdfNotifyRsp.class);
+
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Receiver.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Receiver.java
new file mode 100644
index 0000000..4f1ce1c
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Receiver.java
@@ -0,0 +1,107 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
+
+
+
+public class Receiver {
+	private String name;
+	private String postCode;
+	private String mobile;
+	private String prov;
+	private String city;
+	private String county;
+	private String address;
+	private String email;
+	private String country;
+
+    public String getName()
+    {
+        return this.name;
+    }
+
+    public void setName(String value)
+    {
+        this.name = value;
+    }
+
+    public String getPostCode()
+    {
+        return this.postCode;
+    }
+
+    public void setPostCode(String value)
+    {
+        this.postCode = value;
+    }
+
+    public String getMobile()
+    {
+        return this.mobile;
+    }
+
+    public void setMobile(String value)
+    {
+        this.mobile = value;
+    }
+
+    public String getProv()
+    {
+        return this.prov;
+    }
+
+    public void setProv(String value)
+    {
+        this.prov = value;
+    }
+
+    public String getCity()
+    {
+        return this.city;
+    }
+
+    public void setCity(String value)
+    {
+        this.city = value;
+    }
+
+    public String getCounty()
+    {
+        return this.county;
+    }
+
+    public void setCounty(String value)
+    {
+        this.county = value;
+    }
+
+    public String getAddress()
+    {
+        return this.address;
+    }
+
+    public void setAddress(String value)
+    {
+        this.address = value;
+    }
+
+    public String getEmail()
+    {
+        return this.email;
+    }
+
+    public void setEmail(String value)
+    {
+        this.email = value;
+    }
+
+    public String getCountry()
+    {
+        return this.country;
+    }
+
+    public void setCountry(String value)
+    {
+        this.country = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Sender.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Sender.java
new file mode 100644
index 0000000..6292c54
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/request/Sender.java
@@ -0,0 +1,107 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.request;
+
+
+
+public class Sender {
+	private String name;
+	private String postCode;
+	private String mobile;
+	private String prov;
+	private String city;
+	private String county;
+	private String address;
+	private String email;
+	private String country;
+
+    public String getName()
+    {
+        return this.name;
+    }
+
+    public void setName(String value)
+    {
+        this.name = value;
+    }
+
+    public String getPostCode()
+    {
+        return this.postCode;
+    }
+
+    public void setPostCode(String value)
+    {
+        this.postCode = value;
+    }
+
+    public String getMobile()
+    {
+        return this.mobile;
+    }
+
+    public void setMobile(String value)
+    {
+        this.mobile = value;
+    }
+
+    public String getProv()
+    {
+        return this.prov;
+    }
+
+    public void setProv(String value)
+    {
+        this.prov = value;
+    }
+
+    public String getCity()
+    {
+        return this.city;
+    }
+
+    public void setCity(String value)
+    {
+        this.city = value;
+    }
+
+    public String getCounty()
+    {
+        return this.county;
+    }
+
+    public void setCounty(String value)
+    {
+        this.county = value;
+    }
+
+    public String getAddress()
+    {
+        return this.address;
+    }
+
+    public void setAddress(String value)
+    {
+        this.address = value;
+    }
+
+    public String getEmail()
+    {
+        return this.email;
+    }
+
+    public void setEmail(String value)
+    {
+        this.email = value;
+    }
+
+    public String getCountry()
+    {
+        return this.country;
+    }
+
+    public void setCountry(String value)
+    {
+        this.country = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/ChildMailNo.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/ChildMailNo.java
new file mode 100644
index 0000000..b1c418b
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/ChildMailNo.java
@@ -0,0 +1,19 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response;
+
+import java.util.List;
+
+
+public class ChildMailNo {
+	private List<String> mailNo;
+
+    public List<String>  getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(List<String>  value)
+    {
+        this.mailNo = value;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/KdCreateWaybillOrderPdfNotifyRsp.java b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/KdCreateWaybillOrderPdfNotifyRsp.java
new file mode 100644
index 0000000..4b59ff3
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdCreateWaybillOrderPdfNotify/response/KdCreateWaybillOrderPdfNotifyRsp.java
@@ -0,0 +1,120 @@
+package com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response;
+
+import com.best.javaSdk.kdCreateWaybillOrderPdfNotify.response.ChildMailNo;
+import java.util.List;
+import com.best.javaSdk.BaseResponse;
+
+
+public class KdCreateWaybillOrderPdfNotifyRsp implements BaseResponse {
+	private ChildMailNo childMailNo;
+	private boolean result;
+	private String txLogisticId;
+	private String mailNo;
+	private String errorCode;
+	private String errorDescription;
+	private String pdfStream;
+	private String triSortCode;
+	private List<String> pdfStreamList;
+	private String packRule;
+
+    public ChildMailNo getChildMailNo()
+    {
+        return this.childMailNo;
+    }
+
+    public void setChildMailNo(ChildMailNo value)
+    {
+        this.childMailNo = value;
+    }
+
+    public boolean getResult()
+    {
+        return this.result;
+    }
+
+    public void setResult(boolean value)
+    {
+        this.result = value;
+    }
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public String getErrorCode()
+    {
+        return this.errorCode;
+    }
+
+    public void setErrorCode(String value)
+    {
+        this.errorCode = value;
+    }
+
+    public String getErrorDescription()
+    {
+        return this.errorDescription;
+    }
+
+    public void setErrorDescription(String value)
+    {
+        this.errorDescription = value;
+    }
+
+    public String getPdfStream()
+    {
+        return this.pdfStream;
+    }
+
+    public void setPdfStream(String value)
+    {
+        this.pdfStream = value;
+    }
+
+    public String getTriSortCode()
+    {
+        return this.triSortCode;
+    }
+
+    public void setTriSortCode(String value)
+    {
+        this.triSortCode = value;
+    }
+
+    public List<String>  getPdfStreamList()
+    {
+        return this.pdfStreamList;
+    }
+
+    public void setPdfStreamList(List<String>  value)
+    {
+        this.pdfStreamList = value;
+    }
+    public String getPackRule()
+    {
+        return this.packRule;
+    }
+
+    public void setPackRule(String value)
+    {
+        this.packRule = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdTraceQuery/request/KdTraceQueryReq.java b/src/main/java/com/best/javaSdk/kdTraceQuery/request/KdTraceQueryReq.java
new file mode 100644
index 0000000..37f3cba
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdTraceQuery/request/KdTraceQueryReq.java
@@ -0,0 +1,44 @@
+package com.best.javaSdk.kdTraceQuery.request;
+
+import com.best.javaSdk.BaseRequest;
+import com.best.javaSdk.BaseResponse;
+import com.best.javaSdk.Parser;
+
+
+public class KdTraceQueryReq implements BaseRequest {
+	private MailNos mailNos;
+	private String langType;
+
+    public MailNos getMailNos()
+    {
+        return this.mailNos;
+    }
+
+    public void setMailNos(MailNos value)
+    {
+        this.mailNos = value;
+    }
+
+    public String getLangType()
+    {
+        return this.langType;
+    }
+
+    public void setLangType(String value)
+    {
+        this.langType = value;
+    }
+
+    public String obtainServiceType() {
+        return "KD_TRACE_QUERY";
+    }
+
+    public BaseResponse makeResponse(String rsp, String format) {
+        if ("xml".equalsIgnoreCase(format)) {
+			return Parser.coverXml2Object(rsp, com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp.class);
+		}
+		return Parser.convertJson2Object(rsp, com.best.javaSdk.kdTraceQuery.response.KdTraceQueryRsp.class);
+
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdTraceQuery/request/MailNos.java b/src/main/java/com/best/javaSdk/kdTraceQuery/request/MailNos.java
new file mode 100644
index 0000000..cfd9c31
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdTraceQuery/request/MailNos.java
@@ -0,0 +1,12 @@
+package com.best.javaSdk.kdTraceQuery.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class MailNos {
+	private List<String> mailNo;
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdTraceQuery/response/KdTraceQueryRsp.java b/src/main/java/com/best/javaSdk/kdTraceQuery/response/KdTraceQueryRsp.java
new file mode 100644
index 0000000..79038e9
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdTraceQuery/response/KdTraceQueryRsp.java
@@ -0,0 +1,19 @@
+package com.best.javaSdk.kdTraceQuery.response;
+
+import com.best.javaSdk.BaseResponse;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class KdTraceQueryRsp implements BaseResponse {
+
+    @ApiModelProperty(value = "请求结果", example = "60850007041815")
+	private boolean result;
+
+    @ApiModelProperty(value = "快递物流详情", example = "60850007041815")
+	private List<TraceLogs> traceLogs;
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdTraceQuery/response/Trace.java b/src/main/java/com/best/javaSdk/kdTraceQuery/response/Trace.java
new file mode 100644
index 0000000..e6d8967
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdTraceQuery/response/Trace.java
@@ -0,0 +1,118 @@
+package com.best.javaSdk.kdTraceQuery.response;
+
+
+
+public class Trace {
+	private String receiverType;
+	private String receiverName;
+	private String receiverSignature;
+	private String receiverImage;
+	private String packageStatusCode;
+	private String statusCodeDesc;
+	private String operateTime;
+	private String currentCity;
+	private String nextCity;
+	private String remark;
+
+    public String getReceiverType()
+    {
+        return this.receiverType;
+    }
+
+    public void setReceiverType(String value)
+    {
+        this.receiverType = value;
+    }
+
+    public String getReceiverName()
+    {
+        return this.receiverName;
+    }
+
+    public void setReceiverName(String value)
+    {
+        this.receiverName = value;
+    }
+
+    public String getReceiverSignature()
+    {
+        return this.receiverSignature;
+    }
+
+    public void setReceiverSignature(String value)
+    {
+        this.receiverSignature = value;
+    }
+
+    public String getReceiverImage()
+    {
+        return this.receiverImage;
+    }
+
+    public void setReceiverImage(String value)
+    {
+        this.receiverImage = value;
+    }
+
+    public String getPackageStatusCode()
+    {
+        return this.packageStatusCode;
+    }
+
+    public void setPackageStatusCode(String value)
+    {
+        this.packageStatusCode = value;
+    }
+
+    public String getStatusCodeDesc()
+    {
+        return this.statusCodeDesc;
+    }
+
+    public void setStatusCodeDesc(String value)
+    {
+        this.statusCodeDesc = value;
+    }
+
+    public String getOperateTime()
+    {
+        return this.operateTime;
+    }
+
+    public void setOperateTime(String value)
+    {
+        this.operateTime = value;
+    }
+
+    public String getCurrentCity()
+    {
+        return this.currentCity;
+    }
+
+    public void setCurrentCity(String value)
+    {
+        this.currentCity = value;
+    }
+
+    public String getNextCity()
+    {
+        return this.nextCity;
+    }
+
+    public void setNextCity(String value)
+    {
+        this.nextCity = value;
+    }
+
+    public String getRemark()
+    {
+        return this.remark;
+    }
+
+    public void setRemark(String value)
+    {
+        this.remark = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdTraceQuery/response/TraceLogs.java b/src/main/java/com/best/javaSdk/kdTraceQuery/response/TraceLogs.java
new file mode 100644
index 0000000..a0285d1
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdTraceQuery/response/TraceLogs.java
@@ -0,0 +1,51 @@
+package com.best.javaSdk.kdTraceQuery.response;
+
+
+public class TraceLogs {
+	private String mailNo;
+	private String txLogisticId;
+	private double weight;
+	private Traces traces;
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public double getWeight()
+    {
+        return this.weight;
+    }
+
+    public void setWeight(double value)
+    {
+        this.weight = value;
+    }
+
+    public Traces getTraces()
+    {
+        return this.traces;
+    }
+
+    public void setTraces(Traces value)
+    {
+        this.traces = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdTraceQuery/response/Traces.java b/src/main/java/com/best/javaSdk/kdTraceQuery/response/Traces.java
new file mode 100644
index 0000000..f37465c
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdTraceQuery/response/Traces.java
@@ -0,0 +1,19 @@
+package com.best.javaSdk.kdTraceQuery.response;
+
+import java.util.List;
+
+
+public class Traces {
+	private List<Trace> trace;
+
+    public List<Trace>  getTrace()
+    {
+        return this.trace;
+    }
+
+    public void setTrace(List<Trace>  value)
+    {
+        this.trace = value;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/KdUpdateOrderNotifyReq.java b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/KdUpdateOrderNotifyReq.java
new file mode 100644
index 0000000..c4d9027
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/KdUpdateOrderNotifyReq.java
@@ -0,0 +1,56 @@
+package com.best.javaSdk.kdUpdateOrderNotify.request;
+
+import com.best.javaSdk.kdUpdateOrderNotify.request.Params;
+import com.best.javaSdk.BaseRequest;
+import com.best.javaSdk.BaseResponse;
+import com.best.javaSdk.Parser;
+
+
+public class KdUpdateOrderNotifyReq implements BaseRequest {
+	private String txLogisticId;
+	private Params params;
+	private boolean pdfStream;
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public Params getParams()
+    {
+        return this.params;
+    }
+
+    public void setParams(Params value)
+    {
+        this.params = value;
+    }
+
+    public boolean getPdfStream()
+    {
+        return this.pdfStream;
+    }
+
+    public void setPdfStream(boolean value)
+    {
+        this.pdfStream = value;
+    }
+
+    public String obtainServiceType() {
+        return "KD_UPDATE_ORDER_NOTIFY";
+    }
+
+    public BaseResponse makeResponse(String rsp, String format) {
+        if ("xml".equalsIgnoreCase(format)) {
+			return Parser.coverXml2Object(rsp, com.best.javaSdk.kdUpdateOrderNotify.response.KdUpdateOrderNotifyRsp.class);
+		}
+		return Parser.convertJson2Object(rsp, com.best.javaSdk.kdUpdateOrderNotify.response.KdUpdateOrderNotifyRsp.class);
+
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/Params.java b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/Params.java
new file mode 100644
index 0000000..b9d77d4
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/request/Params.java
@@ -0,0 +1,360 @@
+package com.best.javaSdk.kdUpdateOrderNotify.request;
+
+
+
+public class Params {
+	private String mailNo;
+	private String deliveryType;
+	private String deliverySite;
+	private long sendStartTime;
+	private long sendEndTime;
+	private String recSite;
+	private double itemsValue;
+	private double insuranceValue;
+	private String senderName;
+	private String senderPostCode;
+	private String senderMobile;
+	private String senderProv;
+	private String senderCity;
+	private String senderCounty;
+	private String senderAddress;
+	private String senderEmail;
+	private String senderCountry;
+	private String receiverName;
+	private String receiverPostCode;
+	private String receiverMobile;
+	private String receiverProv;
+	private String receiverCity;
+	private String receiverCounty;
+	private String receiverAddress;
+	private String receiverEmail;
+	private String receiverCountry;
+	private long piece;
+	private double itemsWeight;
+	private double length;
+	private double width;
+	private double height;
+	private String remark;
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public String getDeliveryType()
+    {
+        return this.deliveryType;
+    }
+
+    public void setDeliveryType(String value)
+    {
+        this.deliveryType = value;
+    }
+
+    public String getDeliverySite()
+    {
+        return this.deliverySite;
+    }
+
+    public void setDeliverySite(String value)
+    {
+        this.deliverySite = value;
+    }
+
+    public long getSendStartTime()
+    {
+        return this.sendStartTime;
+    }
+
+    public void setSendStartTime(long value)
+    {
+        this.sendStartTime = value;
+    }
+
+    public long getSendEndTime()
+    {
+        return this.sendEndTime;
+    }
+
+    public void setSendEndTime(long value)
+    {
+        this.sendEndTime = value;
+    }
+
+    public String getRecSite()
+    {
+        return this.recSite;
+    }
+
+    public void setRecSite(String value)
+    {
+        this.recSite = value;
+    }
+
+    public double getItemsValue()
+    {
+        return this.itemsValue;
+    }
+
+    public void setItemsValue(double value)
+    {
+        this.itemsValue = value;
+    }
+
+    public double getInsuranceValue()
+    {
+        return this.insuranceValue;
+    }
+
+    public void setInsuranceValue(double value)
+    {
+        this.insuranceValue = value;
+    }
+
+    public String getSenderName()
+    {
+        return this.senderName;
+    }
+
+    public void setSenderName(String value)
+    {
+        this.senderName = value;
+    }
+
+    public String getSenderPostCode()
+    {
+        return this.senderPostCode;
+    }
+
+    public void setSenderPostCode(String value)
+    {
+        this.senderPostCode = value;
+    }
+
+    public String getSenderMobile()
+    {
+        return this.senderMobile;
+    }
+
+    public void setSenderMobile(String value)
+    {
+        this.senderMobile = value;
+    }
+
+    public String getSenderProv()
+    {
+        return this.senderProv;
+    }
+
+    public void setSenderProv(String value)
+    {
+        this.senderProv = value;
+    }
+
+    public String getSenderCity()
+    {
+        return this.senderCity;
+    }
+
+    public void setSenderCity(String value)
+    {
+        this.senderCity = value;
+    }
+
+    public String getSenderCounty()
+    {
+        return this.senderCounty;
+    }
+
+    public void setSenderCounty(String value)
+    {
+        this.senderCounty = value;
+    }
+
+    public String getSenderAddress()
+    {
+        return this.senderAddress;
+    }
+
+    public void setSenderAddress(String value)
+    {
+        this.senderAddress = value;
+    }
+
+    public String getSenderEmail()
+    {
+        return this.senderEmail;
+    }
+
+    public void setSenderEmail(String value)
+    {
+        this.senderEmail = value;
+    }
+
+    public String getSenderCountry()
+    {
+        return this.senderCountry;
+    }
+
+    public void setSenderCountry(String value)
+    {
+        this.senderCountry = value;
+    }
+
+    public String getReceiverName()
+    {
+        return this.receiverName;
+    }
+
+    public void setReceiverName(String value)
+    {
+        this.receiverName = value;
+    }
+
+    public String getReceiverPostCode()
+    {
+        return this.receiverPostCode;
+    }
+
+    public void setReceiverPostCode(String value)
+    {
+        this.receiverPostCode = value;
+    }
+
+    public String getReceiverMobile()
+    {
+        return this.receiverMobile;
+    }
+
+    public void setReceiverMobile(String value)
+    {
+        this.receiverMobile = value;
+    }
+
+    public String getReceiverProv()
+    {
+        return this.receiverProv;
+    }
+
+    public void setReceiverProv(String value)
+    {
+        this.receiverProv = value;
+    }
+
+    public String getReceiverCity()
+    {
+        return this.receiverCity;
+    }
+
+    public void setReceiverCity(String value)
+    {
+        this.receiverCity = value;
+    }
+
+    public String getReceiverCounty()
+    {
+        return this.receiverCounty;
+    }
+
+    public void setReceiverCounty(String value)
+    {
+        this.receiverCounty = value;
+    }
+
+    public String getReceiverAddress()
+    {
+        return this.receiverAddress;
+    }
+
+    public void setReceiverAddress(String value)
+    {
+        this.receiverAddress = value;
+    }
+
+    public String getReceiverEmail()
+    {
+        return this.receiverEmail;
+    }
+
+    public void setReceiverEmail(String value)
+    {
+        this.receiverEmail = value;
+    }
+
+    public String getReceiverCountry()
+    {
+        return this.receiverCountry;
+    }
+
+    public void setReceiverCountry(String value)
+    {
+        this.receiverCountry = value;
+    }
+
+    public long getPiece()
+    {
+        return this.piece;
+    }
+
+    public void setPiece(long value)
+    {
+        this.piece = value;
+    }
+
+    public double getItemsWeight()
+    {
+        return this.itemsWeight;
+    }
+
+    public void setItemsWeight(double value)
+    {
+        this.itemsWeight = value;
+    }
+
+    public double getLength()
+    {
+        return this.length;
+    }
+
+    public void setLength(double value)
+    {
+        this.length = value;
+    }
+
+    public double getWidth()
+    {
+        return this.width;
+    }
+
+    public void setWidth(double value)
+    {
+        this.width = value;
+    }
+
+    public double getHeight()
+    {
+        return this.height;
+    }
+
+    public void setHeight(double value)
+    {
+        this.height = value;
+    }
+
+    public String getRemark()
+    {
+        return this.remark;
+    }
+
+    public void setRemark(String value)
+    {
+        this.remark = value;
+    }
+
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/ChildMailNo.java b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/ChildMailNo.java
new file mode 100644
index 0000000..4252553
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/ChildMailNo.java
@@ -0,0 +1,19 @@
+package com.best.javaSdk.kdUpdateOrderNotify.response;
+
+import java.util.List;
+
+
+public class ChildMailNo {
+	private List<String> mailNo;
+
+    public List<String>  getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(List<String>  value)
+    {
+        this.mailNo = value;
+    }
+
+}
diff --git a/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/KdUpdateOrderNotifyRsp.java b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/KdUpdateOrderNotifyRsp.java
new file mode 100644
index 0000000..bc2d2a0
--- /dev/null
+++ b/src/main/java/com/best/javaSdk/kdUpdateOrderNotify/response/KdUpdateOrderNotifyRsp.java
@@ -0,0 +1,109 @@
+package com.best.javaSdk.kdUpdateOrderNotify.response;
+
+import com.best.javaSdk.kdUpdateOrderNotify.response.ChildMailNo;
+import java.util.List;
+import com.best.javaSdk.BaseResponse;
+
+
+public class KdUpdateOrderNotifyRsp implements BaseResponse {
+	private boolean result;
+	private String triSortCode;
+	private String txLogisticId;
+	private String mailNo;
+	private ChildMailNo childMailNo;
+	private String packRule;
+	private String errorCode;
+	private String errorDescription;
+	private List<String> pdfStreamList;
+
+    public boolean getResult()
+    {
+        return this.result;
+    }
+
+    public void setResult(boolean value)
+    {
+        this.result = value;
+    }
+
+    public String getTriSortCode()
+    {
+        return this.triSortCode;
+    }
+
+    public void setTriSortCode(String value)
+    {
+        this.triSortCode = value;
+    }
+
+    public String getTxLogisticId()
+    {
+        return this.txLogisticId;
+    }
+
+    public void setTxLogisticId(String value)
+    {
+        this.txLogisticId = value;
+    }
+
+    public String getMailNo()
+    {
+        return this.mailNo;
+    }
+
+    public void setMailNo(String value)
+    {
+        this.mailNo = value;
+    }
+
+    public ChildMailNo getChildMailNo()
+    {
+        return this.childMailNo;
+    }
+
+    public void setChildMailNo(ChildMailNo value)
+    {
+        this.childMailNo = value;
+    }
+
+    public String getPackRule()
+    {
+        return this.packRule;
+    }
+
+    public void setPackRule(String value)
+    {
+        this.packRule = value;
+    }
+
+    public String getErrorCode()
+    {
+        return this.errorCode;
+    }
+
+    public void setErrorCode(String value)
+    {
+        this.errorCode = value;
+    }
+
+    public String getErrorDescription()
+    {
+        return this.errorDescription;
+    }
+
+    public void setErrorDescription(String value)
+    {
+        this.errorDescription = value;
+    }
+
+    public List<String>  getPdfStreamList()
+    {
+        return this.pdfStreamList;
+    }
+
+    public void setPdfStreamList(List<String>  value)
+    {
+        this.pdfStreamList = value;
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f1ab545..27b958e 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -5,7 +5,7 @@
 
 spring:
   profiles:
-    active: test
+    active: dev
 
   servlet:
     multipart:

--
Gitblit v1.9.1