From 9d106fb0a35d09ba57a81b40d936bf4a34c0c8ab Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 27 May 2020 18:44:26 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/chonggaoxiao/new_excoin.git

---
 src/test/java/com/xcong/excoin/SmsTest.java                                                 |   14 
 src/main/java/com/xcong/excoin/utils/api/response/HistoryTradess.java                       |   37 
 src/main/java/com/xcong/excoin/utils/api/response/Batchcancel.java                          |   22 
 src/main/java/com/xcong/excoin/utils/api/response/Accounts.java                             |   48 
 src/main/java/com/xcong/excoin/utils/api/response/Balance.java                              |   57 
 src/main/java/com/xcong/excoin/utils/api/response/Merged.java                               |  121 +
 src/main/java/com/xcong/excoin/utils/api/response/ApiResponse.java                          |   19 
 src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java                  |   12 
 src/main/java/com/xcong/excoin/utils/api/response/SubmitcancelResponse.java                 |   47 
 src/main/java/com/xcong/excoin/utils/mail/SubMailSend.java                                  |  133 +
 src/main/resources/mapper/platform/PlatformSymbolsContractDao.xml                           |    5 
 src/main/java/com/xcong/excoin/utils/api/response/Currencys.java                            |    4 
 src/main/java/com/xcong/excoin/utils/api/response/MergedResponse.java                       |   77 +
 src/main/java/com/xcong/excoin/utils/api/response/BatchcancelResponse.java                  |   47 
 src/main/java/com/xcong/excoin/utils/api/response/Symbol.java                               |    9 
 src/main/resources/logback-spring.xml                                                       |    1 
 src/main/java/com/xcong/excoin/utils/api/ApiException.java                                  |   33 
 src/main/java/com/xcong/excoin/utils/api/response/TradeBean.java                            |   60 
 src/main/java/com/xcong/excoin/utils/api/response/Depth.java                                |   57 
 src/main/java/com/xcong/excoin/utils/api/response/Place.java                                |    4 
 src/main/java/com/xcong/excoin/utils/api/response/SymbolsResponse.java                      |   67 +
 src/main/java/com/xcong/excoin/utils/api/response/OrdersDetail.java                         |  178 ++
 src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleDetailVo.java              |   44 
 src/main/java/com/xcong/excoin/utils/api/response/DepthResponse.java                        |   78 +
 src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java         |   84 +
 src/main/java/com/xcong/excoin/utils/api/response/Account.java                              |    8 
 src/main/java/com/xcong/excoin/utils/api/response/HistoryTrade.java                         |   57 
 src/main/java/com/xcong/excoin/utils/api/response/CurrencysResponse.java                    |   55 
 src/main/java/com/xcong/excoin/utils/mail/RequestEncoder.java                               |   71 +
 src/main/java/com/xcong/excoin/modules/symbols/dao/PlatformSymbolsContractDao.java          |   11 
 src/main/java/com/xcong/excoin/utils/api/response/Details.java                              |   98 +
 src/main/java/com/xcong/excoin/utils/api/request/IntrustOrdersDetailRequest.java            |   62 
 src/main/java/com/xcong/excoin/utils/api/response/AccountsResponse.java                     |   56 
 src/test/java/com/xcong/excoin/HuobiTest.java                                               |   39 
 src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleVo.java                    |   25 
 src/main/java/com/xcong/excoin/modules/symbols/Entity/PlatformSymbolsContractEntity.java    |   21 
 src/main/java/com/xcong/excoin/utils/api/response/Symbols.java                              |   98 +
 src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetailResponse.java     |   47 
 src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java      |    9 
 pom.xml                                                                                     |   61 
 lib/taobao-sdk-java.jar                                                                     |    0 
 src/main/java/com/xcong/excoin/utils/api/response/Trade.java                                |   38 
 src/main/java/com/xcong/excoin/utils/api/response/TradeResponse.java                        |   70 +
 src/main/java/com/xcong/excoin/utils/api/response/KlineResponse.java                        |   55 
 src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetail.java             |  112 +
 src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleCommitDto.java            |    8 
 src/main/java/com/xcong/excoin/utils/api/request/CreateOrderRequest.java                    |   52 
 src/main/java/com/xcong/excoin/utils/api/response/BalanceBean.java                          |   37 
 src/main/java/com/xcong/excoin/utils/api/response/Kline.java                                |   68 +
 src/main/java/com/xcong/excoin/utils/api/response/BatchcancelBean.java                      |   34 
 src/main/java/com/xcong/excoin/utils/api/response/IntrustDetailResponse.java                |   47 
 src/main/java/com/xcong/excoin/utils/api/response/IntrustDetail.java                        |  194 ++
 src/main/java/com/xcong/excoin/utils/api/response/KlineReturn.java                          |   66 
 src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java                           |  151 ++
 src/test/java/com/xcong/excoin/SymbolsTest.java                                             |   23 
 src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java |   60 
 src/main/java/com/xcong/excoin/utils/api/response/OrdersDetailResponse.java                 |   50 
 src/main/java/com/xcong/excoin/utils/api/response/BalanceResponse.java                      |   47 
 src/main/java/com/xcong/excoin/utils/api/response/TimestampResponse.java                    |   45 
 src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleDto.java                  |    4 
 src/main/java/com/xcong/excoin/utils/api/response/DetailResponse.java                       |   67 +
 src/main/java/com/xcong/excoin/modules/home/service/MemberQuickBuySaleService.java          |    2 
 src/main/java/com/xcong/excoin/modules/home/controller/MemberQuickBuySaleController.java    |   21 
 src/main/java/com/xcong/excoin/utils/api/request/DepthRequest.java                          |   26 
 src/main/java/com/xcong/excoin/modules/platform/entity/PlatformBannerEntity.java            |   46 
 src/main/java/com/xcong/excoin/utils/api/ApiClient.java                                     |  607 +++++++++
 src/main/java/com/xcong/excoin/utils/api/response/HistoryTradeResponse.java                 |   67 +
 67 files changed, 3,906 insertions(+), 67 deletions(-)

diff --git a/lib/taobao-sdk-java.jar b/lib/taobao-sdk-java.jar
new file mode 100644
index 0000000..c0fe315
--- /dev/null
+++ b/lib/taobao-sdk-java.jar
Binary files differ
diff --git a/pom.xml b/pom.xml
index bf79f7b..8ea3105 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,8 @@
         <netty.version>4.1.33.Final</netty.version>
         <dom4j.version>1.6.1</dom4j.version>
         <m2e.apt.activation>jdt_apt</m2e.apt.activation>
+        <okhttp.version>3.6.0</okhttp.version>
+        <aliyun-oss.version>3.8.0</aliyun-oss.version>
     </properties>
 
     <dependencies>
@@ -166,6 +168,10 @@
             <artifactId>fastjson</artifactId>
             <version>${fastjson.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
@@ -183,7 +189,60 @@
             <artifactId>netty-all</artifactId>
             <version>${netty.version}</version>
         </dependency>
-        
+
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>${okhttp.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>${aliyun-oss.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.huobi.sdk</groupId>
+            <artifactId>huobi-client</artifactId>
+            <version>1.0.8-SNAPSHOT</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/lib/huobi-client-1.0.8-SNAPSHOT.jar</systemPath>
+        </dependency>
+
+        <!-- submail邮件 start -->
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.ezmorph</groupId>
+            <artifactId>ezmorph</artifactId>
+            <version>1.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.json-lib</groupId>
+            <artifactId>json-lib</artifactId>
+            <version>2.2.3</version>
+            <classifier>jdk15</classifier>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.3.5</version>
+        </dependency>
+        <!-- submail邮件 end -->
     </dependencies>
 
     <build>
diff --git a/src/main/java/com/xcong/excoin/modules/home/controller/MemberQuickBuySaleController.java b/src/main/java/com/xcong/excoin/modules/home/controller/MemberQuickBuySaleController.java
index a1a9da2..a6dbf07 100644
--- a/src/main/java/com/xcong/excoin/modules/home/controller/MemberQuickBuySaleController.java
+++ b/src/main/java/com/xcong/excoin/modules/home/controller/MemberQuickBuySaleController.java
@@ -5,9 +5,11 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.alibaba.druid.util.StringUtils;
@@ -55,8 +57,6 @@
 		if (StringUtils.isEmpty(tradePasswordWeb)) {
 			return Result.fail("请输入交易密码");
 		}
-		// System.out.println("交易密码:"+MD5.GetMD5Code(tradePasswordWeb)+" tradePassword =
-		// "+tradePassword);
 		// 验证交易密码
 		if (!tradePassword.equals(SecureUtil.md5(tradePasswordWeb))) {
 			return Result.fail("请输入正确的交易密码");
@@ -67,7 +67,7 @@
 	
 	@ApiOperation(value = "commitPay", notes = "USDT充值支付确认")
 	@RequestMapping(value = "/commitPay", method = RequestMethod.POST)
-	public Result commitPay(@RequestBody MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) {
+	public Result commitPay(@RequestBody @Valid MemberQuickBuySaleCommitDto memberQuickBuySaleCommitDto) {
 		return memberQuickBuySaleService.commitPay(memberQuickBuySaleCommitDto);
 	}
 	
@@ -77,22 +77,27 @@
 		return memberQuickBuySaleService.selectById(id);
 	}
 	
+	@ApiOperation(value = "selectAll", notes = "查询用户所有的买卖记录")
+	@GetMapping(value = "/selectAll")
+	public Result selectAll(@RequestParam(value = "type") String type) {
+		return memberQuickBuySaleService.selectAll(type);
+	}
+	
 	@ApiOperation(value = "cancel", notes = "充值撤销")
-	@GetMapping(value = "/cancel/{id}")
-	public Result cancel(@PathVariable(value = "id") Long id) {
+	@GetMapping(value = "/cancel")
+	public Result cancel(@RequestParam(value = "id") Long id) {
 		return memberQuickBuySaleService.cancelRecharge(id);
 	}
 	
-	@ApiOperation(value = "sell", notes = "USDT快速充值")
+	@ApiOperation(value = "sell", notes = "USDT快速卖出")
 	@RequestMapping(value = "/sell", method = RequestMethod.POST)
-	public Result sell(MemberQuickBuySaleDto memberQuickBuySaleDto) {
+	public Result sell(@RequestBody @Valid MemberQuickBuySaleDto memberQuickBuySaleDto) {
 		// 获取当前登录用户
 		MemberEntity member = LoginUserUtils.getAppLoginUser();
 		if (MemberEntity.CERTIFY_STATUS_Y.equals(member.getCertifyStatus())) {
 			return Result.fail("请先实名认证");
 		}
 		String tradePasswordWeb = memberQuickBuySaleDto.getTradePassword();
-		
 		// 验证支付密码
 		String tradePassword = member.getTradePassword();
 		
diff --git a/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleCommitDto.java b/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleCommitDto.java
index 2746b33..3d3a550 100644
--- a/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleCommitDto.java
+++ b/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleCommitDto.java
@@ -1,22 +1,28 @@
 package com.xcong.excoin.modules.home.dto;
 
+import javax.validation.constraints.NotNull;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
-@ApiModel(value = "确认快捷买入接收参数", description = "确认快捷买入接收参数")
+@ApiModel(value = "MemberQuickBuySaleCommitDto", description = "确认快捷买入接收参数")
 public class MemberQuickBuySaleCommitDto {
 
+	@NotNull(message = "订单id不能为空")
 	@ApiModelProperty(value = "主键",example = "1")
 	private Long id;
 	
+	@NotNull(message = "付款方式不能为空")
 	@ApiModelProperty(value = "付款方式 1-支付宝2-微信3-银行卡",example = "1")
     private int paymentType;
 	
+	@NotNull(message = "收款账号不能为空")
 	@ApiModelProperty(value = "收款账号",example = "13000000000")
     private String paymentAccount;
 	
+	@NotNull(message = "收款人姓名不能为空")
 	@ApiModelProperty(value = "收款人姓名",example = "张三")
     private String paymentName;
 }
diff --git a/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleDto.java b/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleDto.java
index c2df2b4..4e48a48 100644
--- a/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleDto.java
+++ b/src/main/java/com/xcong/excoin/modules/home/dto/MemberQuickBuySaleDto.java
@@ -12,10 +12,6 @@
 @ApiModel(value = "会员快捷买入卖出参数接收类", description = "会员快捷买入卖出参数接收类")
 public class MemberQuickBuySaleDto {
 	
-	@NotNull(message = "用户Id不能为空")
-	@ApiModelProperty(value = "用户Id",example = "1")
-    private Long memberId;
-	
 	@NotNull(message = "金额不能为空")
 	@ApiModelProperty(value = "金额(人民币)",example = "700")
     private BigDecimal amountCny;
diff --git a/src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java b/src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java
index c1a10dd..c79e48e 100644
--- a/src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java
+++ b/src/main/java/com/xcong/excoin/modules/home/mapper/MemberQuickBuySaleEntityMapper.java
@@ -1,12 +1,13 @@
 package com.xcong.excoin.modules.home.mapper;
 
-import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity;
+import java.util.List;
+
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
 import com.xcong.excoin.modules.home.dto.MemberQuickBuySaleDto;
 import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity;
-import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleVo;
+import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleDetailVo;
 
 
 @Mapper
@@ -14,8 +15,10 @@
 
     public static final MemberQuickBuySaleEntityMapper INSTANCE = Mappers.getMapper(MemberQuickBuySaleEntityMapper.class);
 
-    public abstract MemberQuickBuySaleVo entityToVo(MemberQuickBuySaleEntity memberQuickBuySaleEntity);
+    public abstract MemberQuickBuySaleDetailVo entityToVo(MemberQuickBuySaleEntity memberQuickBuySaleEntity);
     
     public abstract MemberQuickBuySaleEntity dtoToEntity(MemberQuickBuySaleDto dto);
+    
+    public abstract List<MemberQuickBuySaleDetailVo> entityListToVoList(List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList);
 
 }
diff --git a/src/main/java/com/xcong/excoin/modules/home/service/MemberQuickBuySaleService.java b/src/main/java/com/xcong/excoin/modules/home/service/MemberQuickBuySaleService.java
index d7bf632..4e8327e 100644
--- a/src/main/java/com/xcong/excoin/modules/home/service/MemberQuickBuySaleService.java
+++ b/src/main/java/com/xcong/excoin/modules/home/service/MemberQuickBuySaleService.java
@@ -15,6 +15,8 @@
 	
 	public Result selectById(Long id);
 	
+	public Result selectAll(String type);
+	
 	public Result cancelRecharge(Long id);
 	
 	public Result sell(MemberEntity member,MemberQuickBuySaleDto memberQuickBuySaleDto);
diff --git a/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java b/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
index 5842411..7dbddec 100644
--- a/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -8,6 +8,7 @@
 
 import org.springframework.stereotype.Service;
 
+import com.alibaba.druid.util.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -22,6 +23,7 @@
 import com.xcong.excoin.modules.home.entity.MemberQuickBuySaleEntity;
 import com.xcong.excoin.modules.home.mapper.MemberQuickBuySaleEntityMapper;
 import com.xcong.excoin.modules.home.service.MemberQuickBuySaleService;
+import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleDetailVo;
 import com.xcong.excoin.modules.home.vo.MemberQuickBuySaleVo;
 import com.xcong.excoin.modules.member.dao.MemberDao;
 import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
@@ -56,6 +58,7 @@
 		memberQuickBuySaleEntity.setMemberId(member.getId());
 		memberQuickBuySaleEntity.setAmountUsdt(memberQuickBuySaleDto.getAmountUsdt());
 		memberQuickBuySaleEntity.setAmountCny(memberQuickBuySaleDto.getAmountCny());
+		memberQuickBuySaleEntity.setUnitPrice(memberQuickBuySaleDto.getUnitPrice());
 		memberQuickBuySaleEntity.setCreateTime(new Date());
 		memberQuickBuySaleEntity.setOrderNo(chargeNo);
 		memberQuickBuySaleEntity.setOrderType("B");
@@ -63,26 +66,10 @@
 		int ran = (int) (Math.random() * 10000000);
 		memberQuickBuySaleEntity.setPaymentCode(ran + "");
 		
-		// 收款信息
-		QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>();
-		queryWrapper.eq("status", "1");
-		List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper);
-		// 随机一个
-		if (CollectionUtils.isEmpty(paymentMethodList)) {
-			return Result.fail("收款方式为空");
-		}
-//		int total = paymentMethodList.size();
-//		int index = (int) (Math.random() * total);
-//		PlatformPaymentMethodEntity paymemtMethod = paymentMethodList.get(index);
-//		memberQuickBuySaleEntity.setPaymentName(paymemtMethod.getName());
-//		memberQuickBuySaleEntity.setPaymentAccount(paymemtMethod.getAccount());
 		memberQuickBuySaleDao.insert(memberQuickBuySaleEntity);
-		MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
+		MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo();
+		memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId());
 		// 返回前台付款方式
-//		memberQuickBuySaleVo.setPlatforPaymentMethodList(paymentMethodList);
-//		memberQuickBuySaleEntity.setReceiveMethod(payMethodList.get(index));
-		// 返回前台付款方式
-//				memberChargeUsdt.setReceiveMethod(payMethodList.get(index));
 		return Result.ok(memberQuickBuySaleVo);
 	}
 
@@ -105,12 +92,35 @@
 	@Override
 	public Result selectById(Long id) {
 		MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectById(id);
-		MemberQuickBuySaleVo memberQuickBuySaleVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
+		MemberQuickBuySaleDetailVo memberQuickBuySaleDetailVo = MemberQuickBuySaleEntityMapper.INSTANCE.entityToVo(memberQuickBuySaleEntity);
+		// 收款信息
+		QueryWrapper<PlatformPaymentMethodEntity> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("status", "1");
+		List<PlatformPaymentMethodEntity> paymentMethodList = platformPaymentMethodDao.selectList(queryWrapper);
+		// 随机一个
+		if (CollectionUtils.isEmpty(paymentMethodList)) {
+			return Result.fail("收款方式为空");
+		}
+		memberQuickBuySaleDetailVo.setPlatforPaymentMethodList(paymentMethodList);
 		long startTime = memberQuickBuySaleEntity.getCreateTime().getTime();
 		long nowTime = new Date().getTime();
 		long third = 30*60*1000;
-		memberQuickBuySaleVo.setTimeLeft((third-nowTime+startTime)/1000);
-		return Result.ok(memberQuickBuySaleVo);
+		memberQuickBuySaleDetailVo.setTimeLeft((third-nowTime+startTime)/1000);
+		return Result.ok(memberQuickBuySaleDetailVo);
+	}
+	
+	@Override
+	public Result selectAll(String type) {
+		MemberEntity member = LoginUserUtils.getAppLoginUser();
+		QueryWrapper<MemberQuickBuySaleEntity> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("member_id", member.getId());
+		if(!StringUtils.isEmpty(type)) {
+			queryWrapper.eq("order_type", type);
+		}
+		queryWrapper.orderByDesc("id");
+		List<MemberQuickBuySaleEntity> memberQuickBuySaleEntityList = memberQuickBuySaleDao.selectList(queryWrapper);
+		List<MemberQuickBuySaleDetailVo> memberQuickBuySaleDetailVoList = MemberQuickBuySaleEntityMapper.INSTANCE.entityListToVoList(memberQuickBuySaleEntityList);
+		return Result.ok(memberQuickBuySaleDetailVoList);
 	}
 
 	@Override
@@ -130,7 +140,6 @@
 		if (extractUsdt.compareTo(walletCoin.getAvailableBalance())==1) {
 			return Result.fail("您当前可用USDT额度不够");
 		}
-
 
 		// 判断是否存在收款方式
 		List<MemberPaymentMethodEntity> payMentMethodList = memberPaymentMethodDao.selectByMemberId(member.getId());
@@ -171,11 +180,8 @@
 	public Result cancelRecharge(Long id) {
 		// 获取当前登录用户
 		MemberEntity member = LoginUserUtils.getAppLoginUser();
-		if(member==null) {
-			return Result.fail("登录用户已失效");
-		}
-		MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(id,member.getId());
-		memberQuickBuySaleEntity.setOrderStatus(1);
+		MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id);
+		memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
 		memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
 		
 		// 判断是否存在足够余额
diff --git a/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleDetailVo.java b/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleDetailVo.java
new file mode 100644
index 0000000..db8e91f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleDetailVo.java
@@ -0,0 +1,44 @@
+package com.xcong.excoin.modules.home.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+@Data
+@ApiModel(value = "会员快捷买入卖出", description = "会员快捷买入卖出类")
+public class MemberQuickBuySaleDetailVo {
+
+	@ApiModelProperty(value = "订单Id")
+    private Long id;
+	@ApiModelProperty(value = "用户id")
+    private Long memberId;
+    @ApiModelProperty(value = "金额(人民币)")
+    private BigDecimal amountCny;
+    @ApiModelProperty(value = "金额(USDT)")
+    private BigDecimal amountUsdt;
+    @ApiModelProperty(value = "付款方式 1-支付宝2-微信3-银行卡")
+    private Integer paymentType;
+    @ApiModelProperty(value = "支付码")
+    private String paymentCode;
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+    @ApiModelProperty(value = "订单状态 1-新建2-已付款3-已审核4-撤单5-系统取消")
+    private int orderStatus;
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+    @ApiModelProperty(value = "订单类型 B买入 S卖出")
+    private String orderType;
+	@ApiModelProperty(value = "剩余时间")
+    private Long timeLeft;
+	@ApiModelProperty(value = "下单时间")
+	@JsonFormat(pattern = "MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+	@ApiModelProperty(value = "平台收款方式")
+	private List<PlatformPaymentMethodEntity> platforPaymentMethodList;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleVo.java b/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleVo.java
index 0e4bd89..6d41454 100644
--- a/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleVo.java
+++ b/src/main/java/com/xcong/excoin/modules/home/vo/MemberQuickBuySaleVo.java
@@ -1,6 +1,5 @@
 package com.xcong.excoin.modules.home.vo;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 import com.xcong.excoin.modules.platform.entity.PlatformPaymentMethodEntity;
@@ -12,28 +11,8 @@
 @ApiModel(value = "会员快捷买入卖出", description = "会员快捷买入卖出类")
 public class MemberQuickBuySaleVo {
 
-	@ApiModelProperty(value = "用户Id")
-    private Long memberId;
-	@ApiModelProperty(value = "金额(人民币)")
-    private BigDecimal amountCny;
-	@ApiModelProperty(value = "金额(USDT)")
-    private BigDecimal amountUsdt;
-	@ApiModelProperty(value = "付款方式 1-支付宝2-微信3-银行卡")
-    private int paymentType;
-	@ApiModelProperty(value = "收款账号")
-    private String paymentAccount;
-	@ApiModelProperty(value = "收款人姓名")
-    private String paymentName;
-	@ApiModelProperty(value = "支付码")
-    private String paymentCode;
-	@ApiModelProperty(value = "单价")
-    private BigDecimal unitPrice;
-	@ApiModelProperty(value = "订单状态 1-新建2-已付款3-已审核4-撤单5-系统取消")
-    private int orderStatus;
-	@ApiModelProperty(value = "订单编号")
-    private String orderNo;
-	@ApiModelProperty(value = "订单类型 B买入 S卖出")
-    private String orderType;
+	@ApiModelProperty(value = "订单Id")
+    private Long id;
 	@ApiModelProperty(value = "剩余时间")
     private Long timeLeft;
 	@ApiModelProperty(value = "平台收款方式")
diff --git a/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformBannerEntity.java b/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformBannerEntity.java
new file mode 100644
index 0000000..f3ef012
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/platform/entity/PlatformBannerEntity.java
@@ -0,0 +1,46 @@
+package com.xcong.excoin.modules.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import lombok.Data;
+@Data
+@TableName("platform_banner")
+public class PlatformBannerEntity{
+
+	
+	@TableId(value = "id",type = IdType.AUTO)
+	private Long id;
+
+	/**
+	 * 标题
+	 */
+	private String name;
+	/**
+	 * 图片链接
+	 */
+	private String image_url;
+	/**
+	 * 是否可跳转 1-是2-否
+	 */
+	private String is_jump;
+	/**
+	 * 跳转外部或内部 1-内2-外
+	 */
+	private int is_inside;
+	/**
+	 * 跳转链接
+	 */
+	private String jump_url;
+	/**
+	 * 显示端口 1-pc2-手机
+	 */
+	private int show_port;
+	/**
+	 * 联系方式
+	 */
+	private String sort;
+	
+	private String is_top;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/symbols/Entity/PlatformSymbolsContractEntity.java b/src/main/java/com/xcong/excoin/modules/symbols/Entity/PlatformSymbolsContractEntity.java
new file mode 100644
index 0000000..5ce143a
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/symbols/Entity/PlatformSymbolsContractEntity.java
@@ -0,0 +1,21 @@
+package com.xcong.excoin.modules.symbols.Entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author wzy
+ * @date 2020-05-26
+ **/
+@Data
+@TableName("platform_symbols_contract")
+public class PlatformSymbolsContractEntity implements Serializable {
+
+    private static final long serialVersionUID = -1L;
+
+    private Long id;
+
+    private String name;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/symbols/dao/PlatformSymbolsContractDao.java b/src/main/java/com/xcong/excoin/modules/symbols/dao/PlatformSymbolsContractDao.java
new file mode 100644
index 0000000..0e44d1a
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/symbols/dao/PlatformSymbolsContractDao.java
@@ -0,0 +1,11 @@
+package com.xcong.excoin.modules.symbols.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.excoin.modules.symbols.Entity.PlatformSymbolsContractEntity;
+
+/**
+ *
+ * @author wzy
+ */
+public interface PlatformSymbolsContractDao extends BaseMapper<PlatformSymbolsContractEntity> {
+}
diff --git a/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java b/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java
new file mode 100644
index 0000000..852438f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java
@@ -0,0 +1,12 @@
+package com.xcong.excoin.modules.symbols.service;
+
+
+/**
+ * @author wzy
+ * @date 2020-05-26
+ **/
+public interface SymbolsService {
+
+    public void updateSymbolsKine(String time);
+
+}
diff --git a/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java b/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java
new file mode 100644
index 0000000..dbc30d6
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java
@@ -0,0 +1,84 @@
+package com.xcong.excoin.modules.symbols.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huobi.client.model.Candlestick;
+import com.xcong.excoin.common.enumerates.SymbolEnum;
+import com.xcong.excoin.modules.symbols.service.SymbolsService;
+import com.xcong.excoin.utils.RedisUtils;
+import com.xcong.excoin.utils.api.ApiClient;
+import com.xcong.excoin.utils.api.response.Kline;
+import com.xcong.excoin.utils.api.response.KlineResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2020-05-26
+ **/
+@Slf4j
+@Service
+public class SymbolsServiceImpl implements SymbolsService {
+
+    @Resource
+    private RedisUtils redisUtils;
+
+    private static final String API_KEY = "3938f004-bfe31905-f7581c1a-6abe0";
+    private static final String API_SECRET = "a0f7a154-ghxertfvbf-6ce2d90c-a0bab";
+
+
+    private static volatile ApiClient client;
+
+    private static ApiClient getClient() {
+        if (client == null) {
+            synchronized (ApiClient.class) {
+                if (client == null) {
+                    client = new ApiClient(API_KEY, API_SECRET);
+                }
+            }
+        }
+        return client;
+    }
+
+
+    @Override
+    public void updateSymbolsKine(String time) {
+        synchronized (this) {
+            //更新币币交易K线历史数据
+            for (SymbolEnum symbol : SymbolEnum.values()) {
+                log.info(symbol.getValue());
+                String[] symbols = symbol.getValue().toLowerCase().split("/");
+                ApiClient client = new ApiClient(API_KEY, API_SECRET);
+                KlineResponse kline = client.kline(symbols[0] + symbols[1], time, 1000 + "");
+                log.info("{}", JSONObject.toJSONString(kline));
+                if (kline != null) {
+                    if ("ok".equalsIgnoreCase(kline.getStatus())) {
+                        List<Kline> klines = (List<Kline>) kline.data;
+                        List<Candlestick> list = new ArrayList<Candlestick>();
+                        Candlestick candlestick = null;
+                        for (Kline kline1 : klines) {
+                            candlestick = new Candlestick();
+                            candlestick.setAmount(BigDecimal.valueOf(kline1.getAmount()));
+                            candlestick.setClose(BigDecimal.valueOf(kline1.getClose()));
+                            candlestick.setCount(kline1.getCount());
+                            candlestick.setHigh(BigDecimal.valueOf(kline1.getHigh()));
+                            candlestick.setLow(BigDecimal.valueOf(kline1.getLow()));
+                            candlestick.setVolume(BigDecimal.valueOf(kline1.getVol()));
+                            candlestick.setTimestamp(kline1.getId() * 1000);
+                            candlestick.setOpen(BigDecimal.valueOf(kline1.getOpen()));
+                            list.add(candlestick);
+                        }
+
+                        if (klines.size() > 0) {
+//                            redisUtils.set("KINE_" + symbol.getValue() + "_" + time, list);
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java
new file mode 100644
index 0000000..29be0f6
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/quartz/job/KlineDataUpdateJob.java
@@ -0,0 +1,151 @@
+package com.xcong.excoin.quartz.job;
+
+import com.xcong.excoin.modules.symbols.service.SymbolsService;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * k线数据更新任务
+ *
+ * @author wzy
+ * @date 2020-05-26
+ **/
+@Component
+public class KlineDataUpdateJob {
+
+    @Resource
+    private SymbolsService symbolsService;
+
+
+    private static boolean min1 = true;
+    private static boolean min5 = true;
+    private static boolean min30 = true;
+    private static boolean min60 = true;
+    private static boolean hour4 = true;
+    private static boolean day1 = true;
+    private static boolean week = true;
+
+
+    /**
+     * 定时更新每一分钟的K线数据
+     */
+    @Scheduled(cron = "0/1 * * * * ? ")
+    public void updateSymbolsKineOneMin() {
+        if (min1) {
+            min1 = false;
+            try {
+                symbolsService.updateSymbolsKine("1min");
+            } catch (Exception e) {
+                // e.printStackTrace();
+            } finally {
+                min1 = true;
+            }
+        }
+    }
+
+    /**
+     * 定时更新每十分钟的K线数据
+     */
+    @Scheduled(cron = "0/10 * * * * ? ")
+    public void updateSymbolsKineFiveMin() {
+        if (min5) {
+            min5 = false;
+            try {
+                symbolsService.updateSymbolsKine("5min");
+            } catch (Exception e) {
+                //e.printStackTrace();
+            } finally {
+                min5 = true;
+            }
+        }
+    }
+
+    /**
+     * 定时更新每30分钟的K线数据
+     */
+    @Scheduled(cron = "0/120 * * * * ? ")
+    public void updateSymbolsKineMin() {
+        if (min30) {
+            min30 = false;
+            try {
+                symbolsService.updateSymbolsKine("30min");
+            } catch (Exception e) {
+                //e.printStackTrace();
+            } finally {
+                min30 = true;
+            }
+        }
+    }
+
+    /**
+     * 定时更新1小时的K线数据
+     */
+    @Scheduled(cron = "* 0/2 * * * ? ")
+    public void updateSymbolsKineOneHour() {
+        if (min60) {
+            min60 = false;
+            try {
+                symbolsService.updateSymbolsKine("60min");
+            } catch (Exception e) {
+                //e.printStackTrace();
+            } finally {
+                min60 = true;
+            }
+        }
+    }
+
+    /**
+     * 定时更新4小时的K线数据
+     */
+    @Scheduled(cron = "* 0/1 * * * ? ")
+    public void updateSymbolsKineFourHour() {
+        if (hour4) {
+            hour4 = false;
+            try {
+                symbolsService.updateSymbolsKine("4hour");
+            } catch (Exception e) {
+                //e.printStackTrace();
+            } finally {
+                hour4 = true;
+            }
+        }
+    }
+
+
+    /**
+     * 定时更新1天的K线数据
+     */
+    @Scheduled(cron = "* 0/1 * * * ? ")
+    public void updateSymbolsKineOneDay() {
+        if (day1) {
+            day1 = false;
+            try {
+                symbolsService.updateSymbolsKine("1day");
+            } catch (Exception e) {
+                //e.printStackTrace();
+            } finally {
+                day1 = true;
+            }
+        }
+    }
+
+    /**
+     * 定时更新1周的K线数据
+     */
+    @Scheduled(cron = "* 0/1 * * * ? ")
+    public void updateSymbolsKineOneWeek() {
+        if (week) {
+            week = false;
+            try {
+                symbolsService.updateSymbolsKine("1week");
+            } catch (Exception e) {
+                // e.printStackTrace();
+            } finally {
+                week = true;
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/ApiClient.java b/src/main/java/com/xcong/excoin/utils/api/ApiClient.java
new file mode 100644
index 0000000..39f72d9
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/ApiClient.java
@@ -0,0 +1,607 @@
+package com.xcong.excoin.utils.api;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.xcong.excoin.utils.api.request.CreateOrderRequest;
+import com.xcong.excoin.utils.api.request.IntrustOrdersDetailRequest;
+import com.xcong.excoin.utils.api.response.*;
+import okhttp3.*;
+import okhttp3.OkHttpClient.Builder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import javax.xml.bind.DatatypeConverter;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * API client.
+ *
+ * @Date 2018/1/14
+ * @Time 16:02
+ */
+public class ApiClient {
+
+    static final int CONN_TIMEOUT = 50;
+    static final int READ_TIMEOUT = 50;
+    static final int WRITE_TIMEOUT = 50;
+
+
+    // static final String API_URL = "https://api.huobi.pro:443";
+    // static final String API_URL = "https://api.huobi.pro";
+    // static final String API_URL = "https://api.hbdm.com";
+    // static final String API_URL = "https://api.huobi.br.com";
+    // static final String API_URL = "https://api.btcgateway.pro";
+    static final String API_URL = "https://api.hadax.com";
+    static final String API_HOST = getHost();
+
+    static final MediaType JSON = MediaType.parse("application/json");
+    static final OkHttpClient client = createOkHttpClient();
+
+    final String accessKeyId;
+    final String accessKeySecret;
+    final String assetPassword;
+
+    /**
+     * 创建一个ApiClient实例
+     *
+     * @param accessKeyId     AccessKeyId
+     * @param accessKeySecret AccessKeySecret
+     */
+    public ApiClient(String accessKeyId, String accessKeySecret) {
+        this.accessKeyId = accessKeyId;
+        this.accessKeySecret = accessKeySecret;
+        this.assetPassword = null;
+    }
+
+    /**
+     * 创建一个ApiClient实例
+     *
+     * @param accessKeyId     AccessKeyId
+     * @param accessKeySecret AccessKeySecret
+     * @param assetPassword   AssetPassword
+     */
+    public ApiClient(String accessKeyId, String accessKeySecret, String assetPassword) {
+        this.accessKeyId = accessKeyId;
+        this.accessKeySecret = accessKeySecret;
+        this.assetPassword = assetPassword;
+    }
+
+    /**
+     * 查询交易对
+     *
+     * @return List of symbols.
+     */
+    public List<Symbol> getSymbols() {
+        ApiResponse<List<Symbol>> resp =
+                get("/v1/common/symbols", null, new TypeReference<ApiResponse<List<Symbol>>>() {
+                });
+        return resp.checkAndReturn();
+    }
+
+    /**
+     * 查询所有账户信息
+     *
+     * @return List of accounts.
+     */
+    public List<Account> getAccounts() {
+        ApiResponse<List<Account>> resp =
+                get("/v1/account/accounts", null, new TypeReference<ApiResponse<List<Account>>>() {
+                });
+        return resp.checkAndReturn();
+    }
+
+    /**
+     * 创建订单
+     *
+     * @param request CreateOrderRequest object.
+     * @return Order id.
+     */
+    public Long createOrder(CreateOrderRequest request) {
+        ApiResponse<Long> resp =
+                post("/v1/order/orders/place", request, new TypeReference<ApiResponse<Long>>() {
+                });
+        return resp.checkAndReturn();
+    }
+
+    /**
+     * 执行订单
+     *
+     * @param orderId The id of created order.
+     * @return Order id.
+     */
+    public String placeOrder(long orderId) {
+        ApiResponse<String> resp = post("/v1/order/orders/" + orderId + "/place", null,
+                new TypeReference<ApiResponse<String>>() {
+                });
+        return resp.checkAndReturn();
+    }
+
+
+    // ----------------------------------------行情API-------------------------------------------
+
+    /**
+     * GET /market/history/kline 获取K线数据
+     *
+     * @param symbol
+     * @param period
+     * @param size
+     * @return
+     */
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    public KlineResponse kline(String symbol, String period, String size) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        map.put("period", period);
+        map.put("size", size);
+        KlineResponse resp = get("/market/history/kline", map, new TypeReference<KlineResponse<List<Kline>>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /market/detail/merged 获取聚合行情(Ticker)
+     *
+     * @param symbol
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public MergedResponse merged(String symbol) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        MergedResponse resp = get("/market/detail/merged", map, new TypeReference<MergedResponse<List<Merged>>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /market/depth 获取 Market Depth 数据
+     *
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public DepthResponse depth(String symbol, String type, String depth) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        map.put("type", type);
+        map.put("depth", depth);
+        DepthResponse resp = get("/market/depth", map, new TypeReference<DepthResponse<List<Depth>>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /market/trade 获取 Trade Detail 数据
+     *
+     * @param symbol
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public TradeResponse trade(String symbol) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        TradeResponse resp = get("/market/trade", map, new TypeReference<TradeResponse>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /market/history/trade 批量获取最近的交易记录
+     *
+     * @param symbol
+     * @param size
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public HistoryTradeResponse historyTrade(String symbol, String size) {
+//    	System.out.println("symbol = "+symbol+"  size = "+size);
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        map.put("size", size);
+        HistoryTradeResponse resp = get("/market/history/trade", map, new TypeReference<HistoryTradeResponse>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /market/detail 获取 Market Detail 24小时成交量数据
+     *
+     * @param symbol
+     * @return
+     */
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    public DetailResponse detail(String symbol) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        DetailResponse resp = get("/market/detail", map, new TypeReference<DetailResponse<Details>>() {
+        });
+        return resp;
+    }
+
+
+    /**
+     * GET /v1/common/symbols 查询系统支持的所有交易对及精度
+     *
+     * @param symbol
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public SymbolsResponse symbols(String symbol) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        SymbolsResponse resp = get("/v1/common/symbols", map, new TypeReference<SymbolsResponse<Symbols>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /v1/common/currencys 查询系统支持的所有币种
+     *
+     * @param symbol
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public CurrencysResponse currencys(String symbol) {
+        HashMap map = new HashMap();
+        map.put("symbol", symbol);
+        CurrencysResponse resp = get("/v1/common/currencys", map, new TypeReference<CurrencysResponse>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /v1/common/timestamp 查询系统当前时间
+     *
+     * @return
+     */
+    public TimestampResponse timestamp() {
+        TimestampResponse resp = get("/v1/common/timestamp", null, new TypeReference<TimestampResponse>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /v1/account/accounts 查询当前用户的所有账户(即account-id)
+     *
+     * @return
+     */
+    @SuppressWarnings({"rawtypes"})
+    public AccountsResponse accounts() {
+        AccountsResponse resp = get("/v1/account/accounts", null, new TypeReference<AccountsResponse<List<Accounts>>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /v1/account/accounts/{account-id}/balance 查询指定账户的余额
+     *
+     * @param accountId
+     * @return
+     */
+    @SuppressWarnings({"rawtypes"})
+    public BalanceResponse balance(String accountId) {
+        BalanceResponse resp = get("/v1/account/accounts/" + accountId + "/balance", null, new TypeReference<BalanceResponse<Balance>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * POST /v1/order/orders/{order-id}/submitcancel 申请撤销一个订单请求
+     *
+     * @param orderId
+     * @return
+     */
+    public SubmitcancelResponse submitcancel(String orderId) {
+        SubmitcancelResponse resp = post("/v1/order/orders/" + orderId + "/submitcancel", null, new TypeReference<SubmitcancelResponse>() {
+        });
+        return resp;
+    }
+
+    /**
+     * POST /v1/order/orders/batchcancel 批量撤销订单
+     *
+     * @param orderList
+     * @return
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public BatchcancelResponse submitcancels(List orderList) {
+        Map<String, List> parameterMap = new HashMap();
+        parameterMap.put("order-ids", orderList);
+        BatchcancelResponse resp = post("/v1/order/orders/batchcancel", parameterMap, new TypeReference<BatchcancelResponse<Batchcancel<List, List<BatchcancelBean>>>>() {
+        });
+        return resp;
+    }
+
+    /**
+     * GET /v1/order/orders/{order-id} 查询某个订单详情
+     *
+     * @param orderId
+     * @return
+     */
+    @SuppressWarnings({"rawtypes"})
+    public OrdersDetailResponse ordersDetail(String orderId) {
+        OrdersDetailResponse resp = get("/v1/order/orders/" + orderId, null, new TypeReference<OrdersDetailResponse>() {
+        });
+        return resp;
+    }
+
+
+    /**
+     * GET /v1/order/orders/{order-id}/matchresults 查询某个订单的成交明细
+     *
+     * @param orderId
+     * @return
+     */
+    @SuppressWarnings({"rawtypes"})
+    public MatchresultsOrdersDetailResponse matchresults(String orderId) {
+        MatchresultsOrdersDetailResponse resp = get("/v1/order/orders/" + orderId + "/matchresults", null, new TypeReference<MatchresultsOrdersDetailResponse>() {
+        });
+        return resp;
+    }
+
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    public IntrustDetailResponse intrustOrdersDetail(IntrustOrdersDetailRequest req) {
+        HashMap map = new HashMap();
+        map.put("symbol", req.symbol);
+        map.put("states", req.states);
+        if (req.startDate != null) {
+            map.put("startDate", req.startDate);
+        }
+        if (req.startDate != null) {
+            map.put("start-date", req.startDate);
+        }
+        if (req.endDate != null) {
+            map.put("end-date", req.endDate);
+        }
+        if (req.types != null) {
+            map.put("types", req.types);
+        }
+        if (req.from != null) {
+            map.put("from", req.from);
+        }
+        if (req.direct != null) {
+            map.put("direct", req.direct);
+        }
+        if (req.size != null) {
+            map.put("size", req.size);
+        }
+        IntrustDetailResponse resp = get("/v1/order/orders/", map, new TypeReference<IntrustDetailResponse<List<IntrustDetail>>>() {
+        });
+        return resp;
+    }
+
+//  public IntrustDetailResponse getALlOrdersDetail(String orderId) {
+//    IntrustDetailResponse resp = get("/v1/order/orders/"+orderId, null,new TypeReference<IntrustDetailResponse>() {});
+//    return resp;
+//  }
+
+
+    // send a GET request.
+    <T> T get(String uri, Map<String, String> params, TypeReference<T> ref) {
+        if (params == null) {
+            params = new HashMap<>();
+        }
+        return call("GET", uri, null, params, ref);
+    }
+
+    // send a POST request.
+    <T> T post(String uri, Object object, TypeReference<T> ref) {
+        return call("POST", uri, object, new HashMap<String, String>(), ref);
+    }
+
+    // call api by endpoint.
+    <T> T call(String method, String uri, Object object, Map<String, String> params,
+               TypeReference<T> ref) {
+        ApiSignature sign = new ApiSignature();
+        sign.createSignature(this.accessKeyId, this.accessKeySecret, method, API_HOST, uri, params);
+        try {
+            Request.Builder builder = null;
+            if ("POST".equals(method)) {
+                RequestBody body = RequestBody.create(JSON, JsonUtil.writeValue(object));
+                builder = new Request.Builder().url(API_URL + uri + "?" + toQueryString(params)).post(body);
+            } else {
+                builder = new Request.Builder().url(API_URL + uri + "?" + toQueryString(params)).get();
+            }
+            if (this.assetPassword != null) {
+                builder.addHeader("AuthData", authData());
+            }
+            Request request = builder.build();
+            Response response = client.newCall(request).execute();
+            String s = response.body().string();
+            //System.out.println("-----s:"+JsonUtil.writeValue(s));
+            return JsonUtil.readValue(s, ref);
+        } catch (IOException e) {
+            // throw new ApiException(e);
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    String authData() {
+        MessageDigest md = null;
+        try {
+            md = MessageDigest.getInstance("MD5");
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        }
+        md.update(this.assetPassword.getBytes(StandardCharsets.UTF_8));
+        md.update("hello, moto".getBytes(StandardCharsets.UTF_8));
+        Map<String, String> map = new HashMap<>();
+        map.put("assetPwd", DatatypeConverter.printHexBinary(md.digest()).toLowerCase());
+        try {
+            return ApiSignature.urlEncode(JsonUtil.writeValue(map));
+        } catch (IOException e) {
+            throw new RuntimeException("Get json failed: " + e.getMessage());
+        }
+    }
+
+    // Encode as "a=1&b=%20&c=&d=AAA"
+    String toQueryString(Map<String, String> params) {
+        return String.join("&", params.entrySet().stream().map((entry) -> {
+            return entry.getKey() + "=" + ApiSignature.urlEncode(entry.getValue());
+        }).collect(Collectors.toList()));
+    }
+
+    // create OkHttpClient:
+    static OkHttpClient createOkHttpClient() {
+        return new Builder().connectTimeout(CONN_TIMEOUT, TimeUnit.SECONDS)
+                .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS).writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
+                .build();
+    }
+
+    static String getHost() {
+        String host = null;
+        try {
+            host = new URL(API_URL).getHost();
+        } catch (MalformedURLException e) {
+            System.err.println("parse API_URL error,system exit!,please check API_URL:" + API_URL);
+            System.exit(0);
+        }
+        return host;
+    }
+
+}
+
+
+/**
+ * API签名,签名规范:
+ * <p>
+ * http://docs.aws.amazon.com/zh_cn/general/latest/gr/signature-version-2.html
+ *
+ * @Date 2018/1/14
+ * @Time 16:02
+ */
+class ApiSignature {
+
+    final Logger log = LoggerFactory.getLogger(getClass());
+
+    static final DateTimeFormatter DT_FORMAT = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
+    static final ZoneId ZONE_GMT = ZoneId.of("Z");
+
+    /**
+     * 创建一个有效的签名。该方法为客户端调用,将在传入的params中添加AccessKeyId、Timestamp、SignatureVersion、SignatureMethod、Signature参数。
+     *
+     * @param appKey       AppKeyId.
+     * @param appSecretKey AppKeySecret.
+     * @param method       请求方法,"GET"或"POST"
+     * @param host         请求域名,例如"be.huobi.com"
+     * @param uri          请求路径,注意不含?以及后的参数,例如"/v1/api/info"
+     * @param params       原始请求参数,以Key-Value存储,注意Value不要编码
+     */
+    public void createSignature(String appKey, String appSecretKey, String method, String host,
+                                String uri, Map<String, String> params) {
+        StringBuilder sb = new StringBuilder(1024);
+        sb.append(method.toUpperCase()).append('\n') // GET
+                .append(host.toLowerCase()).append('\n') // Host
+                .append(uri).append('\n'); // /path
+        params.remove("Signature");
+        params.put("AccessKeyId", appKey);
+        params.put("SignatureVersion", "2");
+        params.put("SignatureMethod", "HmacSHA256");
+        params.put("Timestamp", gmtNow());
+        // build signature:
+        SortedMap<String, String> map = new TreeMap<>(params);
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            sb.append(key).append('=').append(urlEncode(value)).append('&');
+        }
+        // remove last '&':
+        sb.deleteCharAt(sb.length() - 1);
+        // sign:
+        Mac hmacSha256 = null;
+        try {
+            hmacSha256 = Mac.getInstance("HmacSHA256");
+            SecretKeySpec secKey =
+                    new SecretKeySpec(appSecretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
+            hmacSha256.init(secKey);
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("No such algorithm: " + e.getMessage());
+        } catch (InvalidKeyException e) {
+            throw new RuntimeException("Invalid key: " + e.getMessage());
+        }
+        String payload = sb.toString();
+        byte[] hash = hmacSha256.doFinal(payload.getBytes(StandardCharsets.UTF_8));
+        String actualSign = Base64.getEncoder().encodeToString(hash);
+        params.put("Signature", actualSign);
+
+
+        if (log.isDebugEnabled()) {
+            log.debug("Dump parameters:");
+            for (Map.Entry<String, String> entry : params.entrySet()) {
+                log.debug("  key: " + entry.getKey() + ", value: " + entry.getValue());
+            }
+        }
+    }
+
+
+    /**
+     * 使用标准URL Encode编码。注意和JDK默认的不同,空格被编码为%20而不是+。
+     *
+     * @param s String字符串
+     * @return URL编码后的字符串
+     */
+    public static String urlEncode(String s) {
+        try {
+            return URLEncoder.encode(s, "UTF-8").replaceAll("\\+", "%20");
+        } catch (UnsupportedEncodingException e) {
+            throw new IllegalArgumentException("UTF-8 encoding not supported!");
+        }
+    }
+
+    /**
+     * Return epoch seconds
+     */
+    long epochNow() {
+        return Instant.now().getEpochSecond();
+    }
+
+    String gmtNow() {
+        return Instant.ofEpochSecond(epochNow()).atZone(ZONE_GMT).format(DT_FORMAT);
+    }
+}
+
+
+class JsonUtil {
+
+    public static String writeValue(Object obj) throws IOException {
+        return objectMapper.writeValueAsString(obj);
+    }
+
+    public static <T> T readValue(String s, TypeReference<T> ref) throws IOException {
+        return objectMapper.readValue(s, ref);
+    }
+
+    static final ObjectMapper objectMapper = createObjectMapper();
+
+    static ObjectMapper createObjectMapper() {
+        final ObjectMapper mapper = new ObjectMapper();
+        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
+        mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
+        // disabled features:
+        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+        mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+        return mapper;
+    }
+
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/ApiException.java b/src/main/java/com/xcong/excoin/utils/api/ApiException.java
new file mode 100644
index 0000000..f3c436b
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/ApiException.java
@@ -0,0 +1,33 @@
+package com.xcong.excoin.utils.api;
+
+/**
+ * ApiException if api returns error.
+ *
+ * @Date 2018/1/14
+ * @Time 16:02
+ */
+
+public class ApiException extends RuntimeException {
+
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 8196662756375909063L;
+	
+	final String errCode;
+
+    public ApiException(String errCode, String errMsg) {
+        super(errMsg);
+        this.errCode = errCode;
+    }
+
+    public ApiException(Exception e) {
+        super(e);
+        this.errCode = e.getClass().getName();
+    }
+
+    public String getErrCode() {
+        return this.errCode;
+    }
+
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/request/CreateOrderRequest.java b/src/main/java/com/xcong/excoin/utils/api/request/CreateOrderRequest.java
new file mode 100644
index 0000000..9426571
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/request/CreateOrderRequest.java
@@ -0,0 +1,52 @@
+package com.xcong.excoin.utils.api.request;
+
+public class CreateOrderRequest {
+    public static interface OrderType {
+        /**
+         * 限价买入
+         */
+        static final String BUY_LIMIT = "buy-limit";
+        /**
+         * 限价卖出
+         */
+        static final String SELL_LIMIT = "sell-limit";
+        /**
+         * 市价买入
+         */
+        static final String BUY_MARKET = "buy-market";
+        /**
+         * 市价卖出
+         */
+        static final String SELL_MARKET = "sell-market";
+    }
+
+    /**
+     * 交易对,必填,例如:"ethcny",
+     */
+    public String symbol;
+
+    /**
+     * 账户ID,必填,例如:"12345"
+     */
+    public String accountId;
+
+    /**
+     * 当订单类型为buy-limit,sell-limit时,表示订单数量, 当订单类型为buy-market时,表示订单总金额, 当订单类型为sell-market时,表示订单总数量
+     */
+    public String amount;
+
+    /**
+     * 订单价格,仅针对限价单有效,例如:"1234.56"
+     */
+    public String price = "0.0";
+
+    /**
+     * 订单类型,取值范围"buy-market,sell-market,buy-limit,sell-limit"
+     */
+    public String type;
+
+    /**
+     * 订单来源,例如:"api"
+     */
+    public String source = "com/huobi/client/api";
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/request/DepthRequest.java b/src/main/java/com/xcong/excoin/utils/api/request/DepthRequest.java
new file mode 100644
index 0000000..2f75636
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/request/DepthRequest.java
@@ -0,0 +1,26 @@
+package com.xcong.excoin.utils.api.request;
+
+public class DepthRequest {
+
+    //交易对
+    public String symbol;
+
+    //Depth 类型 step0, step1, step2, step3, step4, step5(合并深度0-5);step0时,不合并深度
+    public String type;
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/request/IntrustOrdersDetailRequest.java b/src/main/java/com/xcong/excoin/utils/api/request/IntrustOrdersDetailRequest.java
new file mode 100644
index 0000000..b364539
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/request/IntrustOrdersDetailRequest.java
@@ -0,0 +1,62 @@
+package com.xcong.excoin.utils.api.request;
+
+
+public class IntrustOrdersDetailRequest {
+
+    public static interface OrderType {
+        /**
+         * 限价买入
+         */
+        static final String BUY_LIMIT = "buy-limit";
+        /**
+         * 限价卖出
+         */
+        static final String SELL_LIMIT = "sell-limit";
+        /**
+         * 市价买入
+         */
+        static final String BUY_MARKET = "buy-market";
+        /**
+         * 市价卖出
+         */
+        static final String SELL_MARKET = "sell-market";
+    }
+
+    public static interface OrderStates {
+        /**
+         * pre-submitted 准备提交
+         */
+        static final String PRE_SUBMITTED = "pre-submitted";
+        /**
+         * submitted 已提交
+         */
+        static final String SUBMITTED = "submitted";
+        /**
+         * partial-filled 部分成交
+         */
+        static final String PARTIAL_FILLED = "partial-filled";
+        /**
+         * partial-canceled 部分成交撤销
+         */
+        static final String PARTIAL_CANCELED = "partial-canceled";
+
+        /**
+         * filled 完全成交
+         */
+        static final String FILLED = "filled";
+        /**
+         * canceled 已撤销
+         */
+        static final String CANCELED = "canceled";
+    }
+
+    public String symbol;       //true	string	交易对		btcusdt, bccbtc, rcneth ...
+    public String types;       //false	string	查询的订单类型组合,使用','分割		buy-market:市价买, sell-market:市价卖, buy-limit:限价买, sell-limit:限价卖
+    public String startDate;   //false	string	查询开始日期, 日期格式yyyy-mm-dd
+    public String endDate;       //false	string	查询结束日期, 日期格式yyyy-mm-dd
+    public String states;       //true	string	查询的订单状态组合,使用','分割		pre-submitted 准备提交, submitted 已提交, partial-filled 部分成交,
+    // partial-canceled 部分成交撤销, filled 完全成交, canceled 已撤销
+    public String from;           //false	string	查询起始 ID
+    public String direct;       //false	string	查询方向		prev 向前,next 向后
+    public String size;           //false	string	查询记录大小
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Account.java b/src/main/java/com/xcong/excoin/utils/api/response/Account.java
new file mode 100644
index 0000000..a5d8c39
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Account.java
@@ -0,0 +1,8 @@
+package com.xcong.excoin.utils.api.response;
+
+
+public class Account {
+    public long id;
+    public String type;
+    public String state;
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Accounts.java b/src/main/java/com/xcong/excoin/utils/api/response/Accounts.java
new file mode 100644
index 0000000..b5ac8ee
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Accounts.java
@@ -0,0 +1,48 @@
+package com.xcong.excoin.utils.api.response;
+
+
+public class Accounts {
+    /**
+     * id : 100009
+     * type : spot
+     * state : working
+     * user-id : 1000
+     */
+
+    private int id;
+    private String type;
+    private String state;
+    private int userid;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public int getUserid() {
+        return userid;
+    }
+
+    public void setUserid(int userid) {
+        this.userid = userid;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/AccountsResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/AccountsResponse.java
new file mode 100644
index 0000000..6d1aed2
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/AccountsResponse.java
@@ -0,0 +1,56 @@
+package com.xcong.excoin.utils.api.response;
+
+
+import com.xcong.excoin.utils.api.ApiException;
+
+public class AccountsResponse<T> {
+
+    /**
+     * status : ok
+     * data : [{"id":100009,"type":"spot","state":"working","user-id":1000}]
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public T checkAndReturn() {
+        if ("ok".equals(status)) {
+            return data;
+        }
+        throw new ApiException(errCode, errMsg);
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/ApiResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/ApiResponse.java
new file mode 100644
index 0000000..5731897
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/ApiResponse.java
@@ -0,0 +1,19 @@
+package com.xcong.excoin.utils.api.response;
+
+
+import com.xcong.excoin.utils.api.ApiException;
+
+public class ApiResponse<T> {
+
+    public String status;
+    public String errCode;
+    public String errMsg;
+    public T data;
+
+    public T checkAndReturn() {
+        if ("ok".equals(status)) {
+            return data;
+        }
+        throw new ApiException(errCode, errMsg);
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Balance.java b/src/main/java/com/xcong/excoin/utils/api/response/Balance.java
new file mode 100644
index 0000000..9f2f7c1
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Balance.java
@@ -0,0 +1,57 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Balance<T> {
+    /**
+     * id : 100009
+     * type : spot
+     * state : working
+     * list : [{"currency":"usdt","type":"trade","balance":"500009195917.4362872650"}]
+     * user-id : 1000
+     */
+
+    private String id;
+    private String type;
+    private String state;
+    private String userid;
+    private T list;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getUserid() {
+        return userid;
+    }
+
+    public void setUserid(String userid) {
+        this.userid = userid;
+    }
+
+    public T getList() {
+        return list;
+    }
+
+    public void setList(T list) {
+        this.list = list;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/BalanceBean.java b/src/main/java/com/xcong/excoin/utils/api/response/BalanceBean.java
new file mode 100644
index 0000000..16a430d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/BalanceBean.java
@@ -0,0 +1,37 @@
+package com.xcong.excoin.utils.api.response;
+
+public class BalanceBean {
+    /**
+     * currency : usdt
+     * type : trade
+     * balance : 500009195917.4362872650
+     */
+
+    private String currency;
+    private String type;
+    private String balance;
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getBalance() {
+        return balance;
+    }
+
+    public void setBalance(String balance) {
+        this.balance = balance;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/BalanceResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/BalanceResponse.java
new file mode 100644
index 0000000..7f9e8cb
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/BalanceResponse.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.utils.api.response;
+
+public class BalanceResponse<T> {
+
+
+    /**
+     * status : ok
+     * data : {"id":"100009","type":"spot","state":"working","list":[{"currency":"usdt","type":"trade","balance":"500009195917.4362872650"}],"user-id":"1000"}
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Batchcancel.java b/src/main/java/com/xcong/excoin/utils/api/response/Batchcancel.java
new file mode 100644
index 0000000..5ac256a
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Batchcancel.java
@@ -0,0 +1,22 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Batchcancel<T1, T2> {
+    private T1 success;
+    private T2 failed;
+
+    public T1 getSuccess() {
+        return success;
+    }
+
+    public void setSuccess(T1 success) {
+        this.success = success;
+    }
+
+    public T2 getFailed() {
+        return failed;
+    }
+
+    public void setFailed(T2 failed) {
+        this.failed = failed;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/BatchcancelBean.java b/src/main/java/com/xcong/excoin/utils/api/response/BatchcancelBean.java
new file mode 100644
index 0000000..f536f0d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/BatchcancelBean.java
@@ -0,0 +1,34 @@
+package com.xcong.excoin.utils.api.response;
+
+/** @Author ISME @Date 2018/1/14 @Time 17:53 */
+public class BatchcancelBean {
+	/** err-msg : 记录无效 order-id : 2 err-code : base-record-invalid */
+	private String errMsg;
+
+	private String orderId;
+	private String errCode;
+
+	public String getErrMsg() {
+		return errMsg;
+	}
+
+	public void setErrMsg(String errMsg) {
+		this.errMsg = errMsg;
+	}
+
+	public String getOrderId() {
+		return orderId;
+	}
+
+	public void setOrderId(String orderId) {
+		this.orderId = orderId;
+	}
+
+	public String getErrCode() {
+		return errCode;
+	}
+
+	public void setErrCode(String errCode) {
+		this.errCode = errCode;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/BatchcancelResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/BatchcancelResponse.java
new file mode 100644
index 0000000..d32d0a0
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/BatchcancelResponse.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.utils.api.response;
+
+public class BatchcancelResponse<T> {
+
+
+    /**
+     * status : ok
+     * data : {"success":["1","3"],"failed":[{"err-msg":"记录无效","order-id":"2","err-code":"base-record-invalid"}]}
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Currencys.java b/src/main/java/com/xcong/excoin/utils/api/response/Currencys.java
new file mode 100644
index 0000000..3c5f82d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Currencys.java
@@ -0,0 +1,4 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Currencys {
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/CurrencysResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/CurrencysResponse.java
new file mode 100644
index 0000000..9497ab8
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/CurrencysResponse.java
@@ -0,0 +1,55 @@
+package com.xcong.excoin.utils.api.response;
+
+import java.util.List;
+
+/**
+ * @Author ISME
+ * @Date 2018/1/14
+ * @Time 15:46
+ */
+
+public class CurrencysResponse {
+
+
+    /**
+     * status : ok
+     * data : ["usdt","eth","etc"]
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private List<String> data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public List<String> getData() {
+        return data;
+    }
+
+    public void setData(List<String> data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Depth.java b/src/main/java/com/xcong/excoin/utils/api/response/Depth.java
new file mode 100644
index 0000000..14fed2b
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Depth.java
@@ -0,0 +1,57 @@
+package com.xcong.excoin.utils.api.response;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Author ISME
+ * @Date 2018/1/14
+ * @Time 14:39
+ */
+
+public class Depth {
+
+    /**
+     * id : 1489464585407
+     * ts : 1489464585407
+     * bids : [[7964,0.0678],[7963,0.9162]]
+     * asks : [[7979,0.0736],[8020,13.6584]]
+     */
+
+    private String id;
+    private String ts;
+    private List<List<BigDecimal>> bids;
+    private List<List<BigDecimal>> asks;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTs() {
+        return ts;
+    }
+
+    public void setTs(String ts) {
+        this.ts = ts;
+    }
+
+    public List<List<BigDecimal>> getBids() {
+        return bids;
+    }
+
+    public void setBids(List<List<BigDecimal>> bids) {
+        this.bids = bids;
+    }
+
+    public List<List<BigDecimal>> getAsks() {
+        return asks;
+    }
+
+    public void setAsks(List<List<BigDecimal>> asks) {
+        this.asks = asks;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/DepthResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/DepthResponse.java
new file mode 100644
index 0000000..2cc35a8
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/DepthResponse.java
@@ -0,0 +1,78 @@
+package com.xcong.excoin.utils.api.response;
+
+public class DepthResponse<T> {
+
+
+    /**
+     * status : ok
+     * ch : market.btcusdt.depth.step1
+     * ts : 1489472598812
+     * tick : {"id":"1489464585407","ts":"1489464585407","bids":[[7964,0.0678],[7963,0.9162]],"asks":[[7979,0.0736],[8020,13.6584]]}
+     */
+
+    private String status;
+    private String ch;
+    private String ts;
+    public String errCode;
+    public String errMsg;
+
+    /**
+     * tick 说明:
+     * "tick": {
+     * "id": 消息id,
+     * "ts": 消息生成时间,单位:毫秒,
+     * "bids": 买盘,[price(成交价), amount(成交量)], 按price降序,
+     * "asks": 卖盘,[price(成交价), amount(成交量)], 按price升序
+     * }
+     */
+    private Depth tick;
+
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public String getTs() {
+        return ts;
+    }
+
+    public void setTs(String ts) {
+        this.ts = ts;
+    }
+
+    public Depth getTick() {
+        return tick;
+    }
+
+    public void setTick(Depth tick) {
+        this.tick = tick;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/DetailResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/DetailResponse.java
new file mode 100644
index 0000000..db6c564
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/DetailResponse.java
@@ -0,0 +1,67 @@
+package com.xcong.excoin.utils.api.response;
+
+public class DetailResponse<T> {
+
+
+    /**
+     * status : ok
+     * ch : market.btcusdt.detail
+     * ts : 1489473538996
+     * tick : {"amount":4316.4346,"open":8090.54,"close":7962.62,"high":8119,"ts":1489464451000,"id":1489464451,"count":9595,"low":7875,"vol":3.449727690576E7}
+     */
+
+    private String status;
+    private String ch;
+    private long ts;
+    public String errCode;
+    public String errMsg;
+    private T tick;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+
+    public T getTick() {
+        return tick;
+    }
+
+    public void setTick(T tick) {
+        this.tick = tick;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Details.java b/src/main/java/com/xcong/excoin/utils/api/response/Details.java
new file mode 100644
index 0000000..2fa3fed
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Details.java
@@ -0,0 +1,98 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Details {
+
+    /**
+     * amount : 4316.4346
+     * open : 8090.54
+     * close : 7962.62
+     * high : 8119
+     * ts : 1489464451000
+     * id : 1489464451
+     * count : 9595
+     * low : 7875
+     * vol : 3.449727690576E7
+     */
+
+    private double amount;
+    private double open;
+    private double close;
+    private int high;
+    private long ts;
+    private long id;
+    private int count;
+    private int low;
+    private double vol;
+
+    public double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+
+    public double getOpen() {
+        return open;
+    }
+
+    public void setOpen(double open) {
+        this.open = open;
+    }
+
+    public double getClose() {
+        return close;
+    }
+
+    public void setClose(double close) {
+        this.close = close;
+    }
+
+    public int getHigh() {
+        return high;
+    }
+
+    public void setHigh(int high) {
+        this.high = high;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public int getLow() {
+        return low;
+    }
+
+    public void setLow(int low) {
+        this.low = low;
+    }
+
+    public double getVol() {
+        return vol;
+    }
+
+    public void setVol(double vol) {
+        this.vol = vol;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/HistoryTrade.java b/src/main/java/com/xcong/excoin/utils/api/response/HistoryTrade.java
new file mode 100644
index 0000000..ebe5b55
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/HistoryTrade.java
@@ -0,0 +1,57 @@
+package com.xcong.excoin.utils.api.response;
+
+public class HistoryTrade {
+    /**
+     * id : 17592256642623
+     * amount : 0.04
+     * price : 1997
+     * direction : buy
+     * ts : 1502448920106
+     */
+
+    private long id;
+    private double amount;
+    private int price;
+    private String direction;
+    private long ts;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+
+    public int getPrice() {
+        return price;
+    }
+
+    public void setPrice(int price) {
+        this.price = price;
+    }
+
+    public String getDirection() {
+        return direction;
+    }
+
+    public void setDirection(String direction) {
+        this.direction = direction;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/HistoryTradeResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/HistoryTradeResponse.java
new file mode 100644
index 0000000..7007b27
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/HistoryTradeResponse.java
@@ -0,0 +1,67 @@
+package com.xcong.excoin.utils.api.response;
+
+public class HistoryTradeResponse<T> {
+
+
+    /**
+     * status : ok
+     * ch : market.ethusdt.trade.detail
+     * ts : 1502448925216
+     * data : [{"id":31459998,"ts":1502448920106,"data":[{"id":17592256642623,"amount":0.04,"price":1997,"direction":"buy","ts":1502448920106}]}]
+     */
+
+    private String status;
+    private String ch;
+    private long ts;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/HistoryTradess.java b/src/main/java/com/xcong/excoin/utils/api/response/HistoryTradess.java
new file mode 100644
index 0000000..56eb132
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/HistoryTradess.java
@@ -0,0 +1,37 @@
+package com.xcong.excoin.utils.api.response;
+
+public class HistoryTradess {
+    /**
+     * id : 31459998
+     * ts : 1502448920106
+     * data : [{"id":17592256642623,"amount":0.04,"price":1997,"direction":"buy","ts":1502448920106}]
+     */
+
+    private long id;
+    private long ts;
+    private HistoryTrade data;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public HistoryTrade getData() {
+        return data;
+    }
+
+    public void setData(HistoryTrade data) {
+        this.data = data;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/IntrustDetail.java b/src/main/java/com/xcong/excoin/utils/api/response/IntrustDetail.java
new file mode 100644
index 0000000..7eeb618
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/IntrustDetail.java
@@ -0,0 +1,194 @@
+package com.xcong.excoin.utils.api.response;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * @Author ISME
+ * @Date 2018/1/14
+ * @Time 19:20
+ */
+
+public class IntrustDetail {
+
+    /**
+     * id : 59378
+     * symbol : ethusdt
+     * account-id : 100009
+     * amount : 10.1000000000
+     * price : 100.1000000000
+     * created-at : 1494901162595
+     * type : buy-limit
+     * field-amount : 10.1000000000
+     * field-cash-amount : 1011.0100000000
+     * field-fees : 0.0202000000
+     * finished-at : 1494901400468
+     * user-id : 1000
+     * source : api
+     * state : filled
+     * canceled-at : 0
+     * exchange : huobi
+     * batch :
+     */
+
+    private long id;
+    private String symbol;
+    @SerializedName("account-id")
+    private int accountid;
+    private String amount;
+    private String price;
+    @SerializedName("created-at")
+    private long createdat;
+    private String type;
+    @SerializedName("field-amount")
+    private String fieldamount;
+    @SerializedName("field-cash-amount")
+    private String fieldcashamount;
+    @SerializedName("field-fees")
+    private String fieldfees;
+    @SerializedName("finished-at")
+    private long finishedat;
+    @SerializedName("user-id")
+    private int userid;
+    private String source;
+    private String state;
+    @SerializedName("canceled-at")
+    private int canceledat;
+    private String exchange;
+    private String batch;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public int getAccountid() {
+        return accountid;
+    }
+
+    public void setAccountid(int accountid) {
+        this.accountid = accountid;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public long getCreatedat() {
+        return createdat;
+    }
+
+    public void setCreatedat(long createdat) {
+        this.createdat = createdat;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getFieldamount() {
+        return fieldamount;
+    }
+
+    public void setFieldamount(String fieldamount) {
+        this.fieldamount = fieldamount;
+    }
+
+    public String getFieldcashamount() {
+        return fieldcashamount;
+    }
+
+    public void setFieldcashamount(String fieldcashamount) {
+        this.fieldcashamount = fieldcashamount;
+    }
+
+    public String getFieldfees() {
+        return fieldfees;
+    }
+
+    public void setFieldfees(String fieldfees) {
+        this.fieldfees = fieldfees;
+    }
+
+    public long getFinishedat() {
+        return finishedat;
+    }
+
+    public void setFinishedat(long finishedat) {
+        this.finishedat = finishedat;
+    }
+
+    public int getUserid() {
+        return userid;
+    }
+
+    public void setUserid(int userid) {
+        this.userid = userid;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public int getCanceledat() {
+        return canceledat;
+    }
+
+    public void setCanceledat(int canceledat) {
+        this.canceledat = canceledat;
+    }
+
+    public String getExchange() {
+        return exchange;
+    }
+
+    public void setExchange(String exchange) {
+        this.exchange = exchange;
+    }
+
+    public String getBatch() {
+        return batch;
+    }
+
+    public void setBatch(String batch) {
+        this.batch = batch;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/IntrustDetailResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/IntrustDetailResponse.java
new file mode 100644
index 0000000..90aabe5
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/IntrustDetailResponse.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.utils.api.response;
+
+public class IntrustDetailResponse<T> {
+
+
+    /**
+     * status : ok
+     * data : [{"id":59378,"symbol":"ethusdt","account-id":100009,"amount":"10.1000000000","price":"100.1000000000","created-at":1494901162595,"type":"buy-limit","field-amount":"10.1000000000","field-cash-amount":"1011.0100000000","field-fees":"0.0202000000","finished-at":1494901400468,"user-id":1000,"source":"api","state":"filled","canceled-at":0,"exchange":"huobi","batch":""}]
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Kline.java b/src/main/java/com/xcong/excoin/utils/api/response/Kline.java
new file mode 100644
index 0000000..5df66f8
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Kline.java
@@ -0,0 +1,68 @@
+package com.xcong.excoin.utils.api.response;
+public class Kline {
+
+
+    private long id;
+    private float amount;
+    private int count;
+    private float open;
+    private float close;
+    private float low;
+    private float high;
+    private float vol;
+	public long getId() {
+		return id;
+	}
+	public void setId(long id) {
+		this.id = id;
+	}
+	public float getAmount() {
+		return amount;
+	}
+	public void setAmount(float amount) {
+		this.amount = amount;
+	}
+	public int getCount() {
+		return count;
+	}
+	public void setCount(int count) {
+		this.count = count;
+	}
+	public float getOpen() {
+		return open;
+	}
+	public void setOpen(float open) {
+		this.open = open;
+	}
+	public float getClose() {
+		return close;
+	}
+	public void setClose(float close) {
+		this.close = close;
+	}
+	public float getLow() {
+		return low;
+	}
+	public void setLow(float low) {
+		this.low = low;
+	}
+	public float getHigh() {
+		return high;
+	}
+	public void setHigh(float high) {
+		this.high = high;
+	}
+	public float getVol() {
+		return vol;
+	}
+	public void setVol(float vol) {
+		this.vol = vol;
+	}
+	@Override
+	public String toString() {
+		return "Kline [id=" + id + ", amount=" + amount + ", count=" + count + ", open=" + open + ", close=" + close
+				+ ", low=" + low + ", high=" + high + ", vol=" + vol + "]";
+	}
+
+    
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/KlineResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/KlineResponse.java
new file mode 100644
index 0000000..91b2a4e
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/KlineResponse.java
@@ -0,0 +1,55 @@
+package com.xcong.excoin.utils.api.response;
+
+
+import com.xcong.excoin.utils.api.ApiException;
+
+public class KlineResponse<T> {
+
+    private String status;
+    /**
+     * 接口名
+     */
+    private String ch;
+    /**
+     * 时间格式
+     */
+    private String ts;
+    public String errCode;
+    public String errMsg;
+    /**
+     * 数据
+     */
+    public T data;
+
+    public T checkAndReturn() {
+        if ("ok".equals(status)) {
+            return data;
+        }
+        throw new ApiException(errCode, errMsg);
+    }
+
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public String getTs() {
+        return ts;
+    }
+
+    public void setTs(String ts) {
+        this.ts = ts;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/KlineReturn.java b/src/main/java/com/xcong/excoin/utils/api/response/KlineReturn.java
new file mode 100644
index 0000000..efea294
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/KlineReturn.java
@@ -0,0 +1,66 @@
+package com.xcong.excoin.utils.api.response;
+public class KlineReturn {
+
+
+    private long time;
+    private float open;
+    private float high;
+    private float low;
+    private float close;
+    private float volume;
+    
+    private float amount;
+//    private int count;
+    
+	
+	public float getOpen() {
+		return open;
+	}
+	public void setOpen(float open) {
+		this.open = open;
+	}
+	public float getClose() {
+		return close;
+	}
+	public void setClose(float close) {
+		this.close = close;
+	}
+	public float getLow() {
+		return low;
+	}
+	public void setLow(float low) {
+		this.low = low;
+	}
+	public float getHigh() {
+		return high;
+	}
+	public void setHigh(float high) {
+		this.high = high;
+	}
+	public long getTime() {
+		return time;
+	}
+	public void setTime(long time) {
+		this.time = time;
+	}
+	public float getVolume() {
+		return volume;
+	}
+	public void setVolume(float volume) {
+		this.volume = volume;
+	}
+	public float getAmount() {
+		return amount;
+	}
+	public void setAmount(float amount) {
+		this.amount = amount;
+	}
+	@Override
+	public String toString() {
+		return "KlineReturn [time=" + time + ", open=" + open + ", high=" + high + ", low=" + low + ", close=" + close
+				+ ", volume=" + volume + "]";
+	}
+	
+
+    
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetail.java b/src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetail.java
new file mode 100644
index 0000000..6985876
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetail.java
@@ -0,0 +1,112 @@
+package com.xcong.excoin.utils.api.response;
+
+public class MatchresultsOrdersDetail {
+    /**
+     * id : 29553
+     * order-id : 59378
+     * match-id : 59335
+     * symbol : ethusdt
+     * type : buy-limit
+     * source : api
+     * price : 100.1000000000
+     * filled-amount : 9.1155000000
+     * filled-fees : 0.0182310000
+     * created-at : 1494901400435
+     */
+
+    private long id;
+    @com.google.gson.annotations.SerializedName("order-id")
+    private long orderid;
+    @com.google.gson.annotations.SerializedName("match-id")
+    private long matchid;
+    private String symbol;
+    private String type;
+    private String source;
+    private String price;
+    @com.google.gson.annotations.SerializedName("filled-amount")
+    private String filledamount;
+    @com.google.gson.annotations.SerializedName("filled-fees")
+    private String filledfees;
+    @com.google.gson.annotations.SerializedName("created-at")
+    private long createdat;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getOrderid() {
+        return orderid;
+    }
+
+    public void setOrderid(long orderid) {
+        this.orderid = orderid;
+    }
+
+    public long getMatchid() {
+        return matchid;
+    }
+
+    public void setMatchid(long matchid) {
+        this.matchid = matchid;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public String getFilledamount() {
+        return filledamount;
+    }
+
+    public void setFilledamount(String filledamount) {
+        this.filledamount = filledamount;
+    }
+
+    public String getFilledfees() {
+        return filledfees;
+    }
+
+    public void setFilledfees(String filledfees) {
+        this.filledfees = filledfees;
+    }
+
+    public long getCreatedat() {
+        return createdat;
+    }
+
+    public void setCreatedat(long createdat) {
+        this.createdat = createdat;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetailResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetailResponse.java
new file mode 100644
index 0000000..f968c0c
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/MatchresultsOrdersDetailResponse.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.utils.api.response;
+
+public class MatchresultsOrdersDetailResponse<T> {
+
+
+    /**
+     * status : ok
+     * data : [{"id":29553,"order-id":59378,"match-id":59335,"symbol":"ethusdt","type":"buy-limit","source":"api","price":"100.1000000000","filled-amount":"9.1155000000","filled-fees":"0.0182310000","created-at":1494901400435}]
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Merged.java b/src/main/java/com/xcong/excoin/utils/api/response/Merged.java
new file mode 100644
index 0000000..3682ed9
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Merged.java
@@ -0,0 +1,121 @@
+package com.xcong.excoin.utils.api.response;
+
+import java.util.List;
+
+
+public class Merged {
+
+    /**
+     * id : 1499225271
+     * ts : 1499225271000
+     * close : 1885
+     * open : 1960
+     * high : 1985
+     * low : 1856
+     * amount : 81486.2926
+     * count : 42122
+     * vol : 1.57052744857082E8
+     * ask : [1885,21.8804]
+     * bid : [1884,1.6702]
+     */
+
+    private long id;
+    private long ts;
+    private int close;
+    private int open;
+    private int high;
+    private int low;
+    private double amount;
+    private int count;
+    private double vol;
+    private List<Integer> ask;
+    private List<Integer> bid;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public int getClose() {
+        return close;
+    }
+
+    public void setClose(int close) {
+        this.close = close;
+    }
+
+    public int getOpen() {
+        return open;
+    }
+
+    public void setOpen(int open) {
+        this.open = open;
+    }
+
+    public int getHigh() {
+        return high;
+    }
+
+    public void setHigh(int high) {
+        this.high = high;
+    }
+
+    public int getLow() {
+        return low;
+    }
+
+    public void setLow(int low) {
+        this.low = low;
+    }
+
+    public double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public double getVol() {
+        return vol;
+    }
+
+    public void setVol(double vol) {
+        this.vol = vol;
+    }
+
+    public List<Integer> getAsk() {
+        return ask;
+    }
+
+    public void setAsk(List<Integer> ask) {
+        this.ask = ask;
+    }
+
+    public List<Integer> getBid() {
+        return bid;
+    }
+
+    public void setBid(List<Integer> bid) {
+        this.bid = bid;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/MergedResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/MergedResponse.java
new file mode 100644
index 0000000..c30306a
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/MergedResponse.java
@@ -0,0 +1,77 @@
+package com.xcong.excoin.utils.api.response;
+
+
+import com.xcong.excoin.utils.api.ApiException;
+
+public class MergedResponse<T> {
+
+    /**
+     * status : ok
+     * ch : market.ethusdt.detail.merged
+     * ts : 1499225276950
+     * tick : {"id":1499225271,"ts":1499225271000,"close":1885,"open":1960,"high":1985,"low":1856,"amount":81486.2926,"count":42122,"vol":1.57052744857082E8,"ask":[1885,21.8804],"bid":[1884,1.6702]}
+     */
+
+    private String status;
+    private String ch;
+    private long ts;
+    public String errCode;
+    public String errMsg;
+    public Object tick;
+
+    public Object checkAndReturn() {
+        if ("ok".equals(status)) {
+            return tick;
+        }
+        throw new ApiException(errCode, errMsg);
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+
+	public Object getTick() {
+		return tick;
+	}
+
+	public void setTick(Object tick) {
+		this.tick = tick;
+	}
+
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/OrdersDetail.java b/src/main/java/com/xcong/excoin/utils/api/response/OrdersDetail.java
new file mode 100644
index 0000000..226da84
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/OrdersDetail.java
@@ -0,0 +1,178 @@
+package com.xcong.excoin.utils.api.response;
+
+public class OrdersDetail {
+
+    /**
+     * id : 59378
+     * symbol : ethusdt
+     * account-id : 100009
+     * amount : 10.1000000000
+     * price : 100.1000000000
+     * created-at : 1494901162595
+     * type : buy-limit
+     * field-amount : 10.1000000000
+     * field-cash-amount : 1011.0100000000
+     * field-fees : 0.0202000000
+     * finished-at : 1494901400468
+     * user-id : 1000
+     * source : api
+     * state : filled
+     * canceled-at : 0
+     * exchange : huobi
+     * batch :
+     */
+
+    private long id;
+    private String symbol;
+    private int accountid;
+    private String amount;
+    private String price;
+    private long createdat;
+    private String type;
+    private String fieldamount;
+    private String fieldcashamount;
+    private String fieldfees;
+    private long finishedat;
+    private int userid;
+    private String source;
+    private String state;
+    private long canceledat;
+    private String exchange;
+    private String batch;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getSymbol() {
+        return symbol;
+    }
+
+    public void setSymbol(String symbol) {
+        this.symbol = symbol;
+    }
+
+    public int getAccountid() {
+        return accountid;
+    }
+
+    public void setAccountid(int accountid) {
+        this.accountid = accountid;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getPrice() {
+        return price;
+    }
+
+    public void setPrice(String price) {
+        this.price = price;
+    }
+
+    public long getCreatedat() {
+        return createdat;
+    }
+
+    public void setCreatedat(long createdat) {
+        this.createdat = createdat;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getFieldamount() {
+        return fieldamount;
+    }
+
+    public void setFieldamount(String fieldamount) {
+        this.fieldamount = fieldamount;
+    }
+
+    public String getFieldcashamount() {
+        return fieldcashamount;
+    }
+
+    public void setFieldcashamount(String fieldcashamount) {
+        this.fieldcashamount = fieldcashamount;
+    }
+
+    public String getFieldfees() {
+        return fieldfees;
+    }
+
+    public void setFieldfees(String fieldfees) {
+        this.fieldfees = fieldfees;
+    }
+
+    public long getFinishedat() {
+        return finishedat;
+    }
+
+    public void setFinishedat(long finishedat) {
+        this.finishedat = finishedat;
+    }
+
+    public int getUserid() {
+        return userid;
+    }
+
+    public void setUserid(int userid) {
+        this.userid = userid;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public long getCanceledat() {
+        return canceledat;
+    }
+
+    public void setCanceledat(long canceledat) {
+        this.canceledat = canceledat;
+    }
+
+    public String getExchange() {
+        return exchange;
+    }
+
+    public void setExchange(String exchange) {
+        this.exchange = exchange;
+    }
+
+    public String getBatch() {
+        return batch;
+    }
+
+    public void setBatch(String batch) {
+        this.batch = batch;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/OrdersDetailResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/OrdersDetailResponse.java
new file mode 100644
index 0000000..585601e
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/OrdersDetailResponse.java
@@ -0,0 +1,50 @@
+package com.xcong.excoin.utils.api.response;
+
+public class OrdersDetailResponse<T> {
+
+    /**
+     * status : ok
+     * data : {"id":59378,"symbol":"ethusdt","account-id":100009,"amount":"10.1000000000","price":"100.1000000000","created-at":1494901162595,"type":"buy-limit","field-amount":"10.1000000000","field-cash-amount":"1011.0100000000","field-fees":"0.0202000000","finished-at":1494901400468,"user-id":1000,"source":"api","state":"filled","canceled-at":0,"exchange":"huobi","batch":""}
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private T data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public static class DataBean {
+
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Place.java b/src/main/java/com/xcong/excoin/utils/api/response/Place.java
new file mode 100644
index 0000000..be261e7
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Place.java
@@ -0,0 +1,4 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Place {
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/SubmitcancelResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/SubmitcancelResponse.java
new file mode 100644
index 0000000..9036e4c
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/SubmitcancelResponse.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.utils.api.response;
+
+public class SubmitcancelResponse {
+
+
+    /**
+     * status : ok
+     * data : 59378
+     */
+
+    private String status;
+    public String errCode;
+    public String errMsg;
+    private String data;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Symbol.java b/src/main/java/com/xcong/excoin/utils/api/response/Symbol.java
new file mode 100644
index 0000000..7f98dba
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Symbol.java
@@ -0,0 +1,9 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Symbol {
+
+    public String baseCurrency;
+    public String quoteCurrency;
+    public String symbol;
+
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Symbols.java b/src/main/java/com/xcong/excoin/utils/api/response/Symbols.java
new file mode 100644
index 0000000..fc6004d
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Symbols.java
@@ -0,0 +1,98 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Symbols {
+
+    /**
+     * amount : 4316.4346
+     * open : 8090.54
+     * close : 7962.62
+     * high : 8119
+     * ts : 1489464451000
+     * id : 1489464451
+     * count : 9595
+     * low : 7875
+     * vol : 3.449727690576E7
+     */
+
+    private double amount;
+    private double open;
+    private double close;
+    private int high;
+    private long ts;
+    private long id;
+    private int count;
+    private int low;
+    private double vol;
+
+    public double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+
+    public double getOpen() {
+        return open;
+    }
+
+    public void setOpen(double open) {
+        this.open = open;
+    }
+
+    public double getClose() {
+        return close;
+    }
+
+    public void setClose(double close) {
+        this.close = close;
+    }
+
+    public int getHigh() {
+        return high;
+    }
+
+    public void setHigh(int high) {
+        this.high = high;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public int getLow() {
+        return low;
+    }
+
+    public void setLow(int low) {
+        this.low = low;
+    }
+
+    public double getVol() {
+        return vol;
+    }
+
+    public void setVol(double vol) {
+        this.vol = vol;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/SymbolsResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/SymbolsResponse.java
new file mode 100644
index 0000000..3488aa3
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/SymbolsResponse.java
@@ -0,0 +1,67 @@
+package com.xcong.excoin.utils.api.response;
+
+public class SymbolsResponse<T> {
+
+
+    /**
+     * status : ok
+     * ch : market.btcusdt.detail
+     * ts : 1489473538996
+     * tick : {"amount":4316.4346,"open":8090.54,"close":7962.62,"high":8119,"ts":1489464451000,"id":1489464451,"count":9595,"low":7875,"vol":3.449727690576E7}
+     */
+
+    private String status;
+    private String ch;
+    private long ts;
+    public String errCode;
+    public String errMsg;
+    private T tick;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+
+    public T getTick() {
+        return tick;
+    }
+
+    public void setTick(T tick) {
+        this.tick = tick;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/TimestampResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/TimestampResponse.java
new file mode 100644
index 0000000..bb1d71c
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/TimestampResponse.java
@@ -0,0 +1,45 @@
+package com.xcong.excoin.utils.api.response;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @Author ISME
+ * @Date 2018/1/14
+ * @Time 15:53
+ */
+
+public class TimestampResponse {
+
+    /**
+     * status : ok
+     * data : 1494900087029
+     */
+
+    private String status;
+    private long data;
+    @SuppressWarnings("unused")
+	private String dateTime;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public long getData() {
+        return data;
+    }
+
+    public void setData(long data) {
+        this.data = data;
+    }
+
+    public String getDateTime() {
+        SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd hh:mm:ss");
+        Date date = new Date(data);
+        return sdf.format(date);
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/Trade.java b/src/main/java/com/xcong/excoin/utils/api/response/Trade.java
new file mode 100644
index 0000000..ecb844e
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/Trade.java
@@ -0,0 +1,38 @@
+package com.xcong.excoin.utils.api.response;
+
+public class Trade<T> {
+
+    /**
+     * id : 600848670
+     * ts : 1489464451000
+     * data : [{"id":600848670,"price":7962.62,"amount":0.0122,"direction":"buy","ts":1489464451000}]
+     */
+
+    private long id;
+    private long ts;
+    private T data;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/TradeBean.java b/src/main/java/com/xcong/excoin/utils/api/response/TradeBean.java
new file mode 100644
index 0000000..1dc6bfb
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/TradeBean.java
@@ -0,0 +1,60 @@
+package com.xcong.excoin.utils.api.response;
+
+public class TradeBean {
+
+    /**
+     * id : 600848670
+     * price : 7962.62
+     * amount : 0.0122
+     * direction : buy
+     * ts : 1489464451000
+     */
+
+    private long id;
+    private double price;
+    private double amount;
+    private String direction;
+    private long ts;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public double getPrice() {
+        return price;
+    }
+
+    public void setPrice(double price) {
+        this.price = price;
+    }
+
+    public double getAmount() {
+        return amount;
+    }
+
+    public void setAmount(double amount) {
+        this.amount = amount;
+    }
+
+    public String getDirection() {
+        return direction;
+    }
+
+    public void setDirection(String direction) {
+        this.direction = direction;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+
+}
diff --git a/src/main/java/com/xcong/excoin/utils/api/response/TradeResponse.java b/src/main/java/com/xcong/excoin/utils/api/response/TradeResponse.java
new file mode 100644
index 0000000..21a09ce
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/api/response/TradeResponse.java
@@ -0,0 +1,70 @@
+package com.xcong.excoin.utils.api.response;
+
+public class TradeResponse {
+
+
+    /**
+     * status : ok
+     * ch : market.btcusdt.trade.detail
+     * ts : 1489473346905
+     * tick : {"id":600848670,"ts":1489464451000,"data":[{"id":600848670,"price":7962.62,"amount":0.0122,"direction":"buy","ts":1489464451000}]}
+     */
+
+    private String status;
+    private String ch;
+    private long ts;
+    public String errCode;
+    public String errMsg;
+    @SuppressWarnings("rawtypes")
+	private Trade tick;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getCh() {
+        return ch;
+    }
+
+    public void setCh(String ch) {
+        this.ch = ch;
+    }
+
+    public long getTs() {
+        return ts;
+    }
+
+    public void setTs(long ts) {
+        this.ts = ts;
+    }
+
+    public String getErrCode() {
+        return errCode;
+    }
+
+    public void setErrCode(String errCode) {
+        this.errCode = errCode;
+    }
+
+    public String getErrMsg() {
+        return errMsg;
+    }
+
+    public void setErrMsg(String errMsg) {
+        this.errMsg = errMsg;
+    }
+
+    @SuppressWarnings("rawtypes")
+	public Trade getTick() {
+        return tick;
+    }
+
+    @SuppressWarnings("rawtypes")
+	public void setTick(Trade tick) {
+        this.tick = tick;
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/utils/mail/RequestEncoder.java b/src/main/java/com/xcong/excoin/utils/mail/RequestEncoder.java
new file mode 100644
index 0000000..16318f4
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/mail/RequestEncoder.java
@@ -0,0 +1,71 @@
+package com.xcong.excoin.utils.mail;
+
+import java.security.MessageDigest;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 处理请求数据
+ * @author submail
+ *
+ */
+public class RequestEncoder {
+	
+	private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
+			'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+	public static final String MD5 = "MD5";
+	public static final String SHA1 = "SHA1";
+	/**
+	 * 编码的字符串
+	 *
+	 * @param algorithm
+	 * @param str
+	 * @return String
+	 */
+	public static String encode(String algorithm, String str) {
+		if (str == null) {
+			return null;
+		}
+		try {
+			MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
+			messageDigest.update(str.getBytes("UTF-8"));
+			return getFormattedText(messageDigest.digest());
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+
+	}
+	
+	/**
+	 *获取原始字节并将其格式化。
+	 * @param bytes
+	 *            the raw bytes from the digest.
+	 * @return the formatted bytes.
+	 */
+	private static String getFormattedText(byte[] bytes) {
+		int len = bytes.length;
+		StringBuilder buf = new StringBuilder(len * 2);
+		for (int j = 0; j < len; j++) { 			buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
+			buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
+		}
+		return buf.toString();
+	}
+	
+	public static String formatRequest(Map<String, Object> data){
+		Set<String> keySet = data.keySet();
+		Iterator<String> it = keySet.iterator();
+		StringBuffer sb = new StringBuffer();
+		while(it.hasNext()){
+			String key = it.next();
+			Object value = data.get(key);
+			if(value instanceof String){
+				sb.append(key + "=" + value + "&");
+			}
+		}
+		if(sb.length() != 0){
+			return sb.substring(0, sb.length() - 1);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/com/xcong/excoin/utils/mail/SubMailSend.java b/src/main/java/com/xcong/excoin/utils/mail/SubMailSend.java
new file mode 100644
index 0000000..0ba66e9
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/utils/mail/SubMailSend.java
@@ -0,0 +1,133 @@
+package com.xcong.excoin.utils.mail;
+
+
+import net.sf.json.JSONObject;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * 邮件发送
+ *
+ * @author wzy
+ * @date 2020-05-27
+ **/
+public class SubMailSend {
+
+    /**
+     * 时间戳接口配置
+     */
+    public static final String TIMESTAMP = "https://api.mysubmail.com/service/timestamp";
+    /**
+     * API 请求接口配置
+     */
+    private static final String URL = "https://api.mysubmail.com/mail/xsend";
+
+    public static final String TYPE_MD5 = "md5";
+    public static final String TYPE_SHA1 = "sha1";
+
+    public static boolean sendMail(String to, String code) {
+        TreeMap<String, Object> requestData = new TreeMap<String, Object>();
+        JSONObject vars = new JSONObject();
+        vars.put("code", code);
+
+        String appid = "16082";
+        String appkey = "f34c792a1112c16c190ed7190d386c4f";
+        String project = "fMBQk1";
+        String signtype = "";
+        String from = "ex@submail.excoin.site";
+
+        requestData.put("appid", appid);
+        requestData.put("project", project);
+        requestData.put("to", to);
+        requestData.put("from", from);
+        if (!vars.isEmpty()) {
+            requestData.put("vars", vars.toString());
+        }
+        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+        @SuppressWarnings("deprecation")
+        ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
+        for (Map.Entry<String, Object> entry : requestData.entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            if (value instanceof String) {
+                builder.addTextBody(key, String.valueOf(value), contentType);
+            }
+        }
+        if (signtype.equals(TYPE_MD5) || signtype.equals(TYPE_SHA1)) {
+            String timestamp = getTimestamp();
+            requestData.put("timestamp", timestamp);
+            requestData.put("sign_type", signtype);
+            String signStr = appid + appkey + RequestEncoder.formatRequest(requestData) + appid + appkey;
+
+            builder.addTextBody("timestamp", timestamp);
+            builder.addTextBody("sign_type", signtype);
+            builder.addTextBody("signature", RequestEncoder.encode(signtype, signStr), contentType);
+        } else {
+            builder.addTextBody("signature", appkey, contentType);
+        }
+
+        HttpPost httpPost = new HttpPost(URL);
+        httpPost.addHeader("charset", "UTF-8");
+        httpPost.setEntity(builder.build());
+        try {
+            CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
+            HttpResponse response = closeableHttpClient.execute(httpPost);
+            HttpEntity httpEntity = response.getEntity();
+            if (httpEntity != null) {
+                String jsonStr = EntityUtils.toString(httpEntity, "UTF-8");
+                if ("success".equals(JSONObject.fromObject(jsonStr).getString("status"))) {
+                    return true;
+                }
+            }
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+
+    /**
+     * 获取时间戳
+     *
+     * @return
+     */
+    private static String getTimestamp() {
+        CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
+        HttpGet httpget = new HttpGet(TIMESTAMP);
+        try {
+            HttpResponse response = closeableHttpClient.execute(httpget);
+            HttpEntity httpEntity = response.getEntity();
+            String jsonStr = EntityUtils.toString(httpEntity, "UTF-8");
+            if (jsonStr != null) {
+                JSONObject json = JSONObject.fromObject(jsonStr);
+                return json.getString("timestamp");
+            }
+            closeableHttpClient.close();
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(sendMail("123@123.com", "123456"));
+    }
+}
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index 63b057d..c7d14c3 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -3,6 +3,7 @@
     <contextName>logback</contextName>
     <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
     <property name="log.path" value="logs" />
+    <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
 
     <!-- 彩色日志 -->
     <!-- 彩色日志依赖的渲染类 -->
diff --git a/src/main/resources/mapper/platform/PlatformSymbolsContractDao.xml b/src/main/resources/mapper/platform/PlatformSymbolsContractDao.xml
new file mode 100644
index 0000000..e58929c
--- /dev/null
+++ b/src/main/resources/mapper/platform/PlatformSymbolsContractDao.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xcong.excoin.modules.symbols.dao.PlatformSymbolsContractDao">
+
+</mapper>
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/HuobiTest.java b/src/test/java/com/xcong/excoin/HuobiTest.java
new file mode 100644
index 0000000..1491015
--- /dev/null
+++ b/src/test/java/com/xcong/excoin/HuobiTest.java
@@ -0,0 +1,39 @@
+package com.xcong.excoin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huobi.client.SubscriptionClient;
+import com.huobi.client.SubscriptionOptions;
+import com.huobi.client.model.Candlestick;
+import com.huobi.client.model.enums.CandlestickInterval;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * @author wzy
+ * @date 2020-05-22
+ **/
+@Slf4j
+@SpringBootTest
+public class HuobiTest {
+
+    @Test
+    public void websocketTest() {
+    }
+
+    public static void main(String[] args) {
+        System.out.println("========价格更新开启=======");
+        SubscriptionOptions subscriptionOptions = new SubscriptionOptions();
+        //3秒重试
+        subscriptionOptions.setConnectionDelayOnFailure(5);
+        subscriptionOptions.setUri("wss://api.hadax.com/ws");
+        SubscriptionClient subscriptionClient = SubscriptionClient.create("", "", subscriptionOptions);
+//        subscriptionClient.subscribeTradeEvent("btcusdt,ethusdt,xrpusdt,ltcusdt,bchusdt,eosusdt,etcusdt", tradeEvent -> {
+//            log.info("{}", JSONObject.toJSONString(tradeEvent));
+//        });
+
+        subscriptionClient.subscribeCandlestickEvent("btcusdt,ethusdt,eosusdt,etcusdt,ltcusdt,bchusdt,xrpusdt", CandlestickInterval.DAY1, (candlestickEvent) -> {
+            log.info("{}", JSONObject.toJSONString(candlestickEvent));
+        });
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/SmsTest.java b/src/test/java/com/xcong/excoin/SmsTest.java
new file mode 100644
index 0000000..f421845
--- /dev/null
+++ b/src/test/java/com/xcong/excoin/SmsTest.java
@@ -0,0 +1,14 @@
+package com.xcong.excoin;
+
+import cn.hutool.core.text.UnicodeUtil;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+/**
+ * @author wzy
+ * @date 2020-05-26
+ **/
+@SpringBootTest
+public class SmsTest {
+
+}
diff --git a/src/test/java/com/xcong/excoin/SymbolsTest.java b/src/test/java/com/xcong/excoin/SymbolsTest.java
new file mode 100644
index 0000000..663e834
--- /dev/null
+++ b/src/test/java/com/xcong/excoin/SymbolsTest.java
@@ -0,0 +1,23 @@
+package com.xcong.excoin;
+
+import com.xcong.excoin.modules.symbols.service.SymbolsService;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+
+/**
+ * @author wzy
+ * @date 2020-05-26
+ **/
+@SpringBootTest
+public class SymbolsTest {
+
+    @Resource
+    private SymbolsService symbolsService;
+
+    @Test
+    public void symbolsTest() {
+        symbolsService.updateSymbolsKine("1min");
+    }
+}

--
Gitblit v1.9.1