From 43385a77303aa2295d902b5a2be9e28723d08cef Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Mon, 12 Oct 2020 16:00:21 +0800
Subject: [PATCH] Merge branches 'cpv' and 'feature/撮合交易' of https://gitee.com/chonggaoxiao/new_excoin into cpv
---
src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java | 3
src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java | 14
src/main/java/com/xcong/excoin/modules/blackchain/service/EthService.java | 8
src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java | 16
src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java | 6
src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java | 1
src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java | 76 ++++-
src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml | 13
src/main/java/com/xcong/excoin/modules/member/dao/MemberCoinAddressDao.java | 1
src/main/java/com/xcong/excoin/modules/blackchain/model/EthUsdtChargeDto.java | 25 +
src/main/java/com/xcong/excoin/modules/blackchain/service/EthUsdtContract.java | 1
src/main/java/com/xcong/excoin/rabbit/producer/UsdtUpdateProducer.java | 47 +++
src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java | 1
src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java | 60 +++
src/main/java/com/xcong/excoin/quartz/job/CoinTradeInitJob.java | 3
src/main/java/com/xcong/excoin/rabbit/consumer/ExchangeConsumer.java | 26 -
src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java | 67 +++-
src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java | 47 +++
src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java | 93 ++++++
src/main/java/com/xcong/excoin/rabbit/consumer/UsdtUpdateConsumer.java | 44 ++
src/main/resources/mapper/member/MemberCoinAddressDao.xml | 7
src/main/java/com/xcong/excoin/processor/MarketService.java | 23 +
src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java | 6
src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java | 6
src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java | 3
src/main/java/com/xcong/excoin/quartz/job/NotionalPoolingJob.java | 10
src/main/resources/mapper/walletCoinOrder/OrderCoinDealDao.xml | 21 +
src/main/java/com/xcong/excoin/rabbit/consumer/RocBlockUpdateConsumer.java | 6
src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java | 1
src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java | 7
src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java | 1
src/main/java/com/xcong/excoin/quartz/job/UsdtErc20InitJob.java | 31 ++
src/main/java/com/xcong/excoin/quartz/job/KLineGeneratorJob.java | 3
src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtEthService.java | 4
src/main/java/com/xcong/excoin/rabbit/consumer/OrderSubmitConsumer.java | 48 +++
src/main/resources/application-prodapp.yml | 114 +++++++
36 files changed, 735 insertions(+), 108 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java b/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
index 3549a5f..b9d1449 100644
--- a/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
+++ b/src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
@@ -29,6 +29,20 @@
public static final String EXCHANGE_A = "biue-exchange-A";
+
+ public static final String EXCHANGE_USDT_UPDATE = "exchange_usdt_update";
+
+ public static final String QUEUE_USDT_UPDATE = "queue_usdt_update";
+
+ public static final String ROUTING_KEY_USDT_UPDATE = "routing_key_usdt_update";
+
+ public static final String EXCHANGE_USDT_ADDRESS = "exchange_usdt_address";
+
+ public static final String QUEUE_USDT_ADDRESS= "queue_usdt_address";
+
+ public static final String ROUTING_KEY_USDT_ADDRESS = "routing_key_usdt_address";
+
+
/**
* 撮合交易
*/
@@ -95,6 +109,18 @@
public static final String ROUTING_KEY_ROC = "roc-transfer-routingKey";
+ public static final String EXCHANGE_ROC_ORDER_SUBMIT = "roc-exchange-order-submit";
+
+ public static final String QUEUE_ROC_ORDER_SUBMIT = "roc-order-queue-submit";
+
+ public static final String ROUTING_KEY_ROC_ORDER_SUBMIT = "roc-order-routingKey-submit";
+
+ public static final String EXCHANGE_ROC_ORDER_CANCEL = "roc-exchange-order-cancel";
+
+ public static final String QUEUE_ROC_ORDER_CANCEL = "roc-order-queue-cancel";
+
+ public static final String ROUTING_KEY_ROC_ORDER_CANCEL = "roc-order-routingKey-cancel";
+
@Resource
private ConnectionFactory connectionFactory;
@@ -130,6 +156,73 @@
return BindingBuilder.bind(testQueue()).to(defaultExchange()).with(ROUTING_KEY_TEST);
}
+ // 交易订单
+ @Bean
+ public DirectExchange orderSubmitExchange() {
+ return new DirectExchange(EXCHANGE_ROC_ORDER_SUBMIT);
+ }
+
+
+ @Bean
+ public Queue ordereSubmitQueue() {
+ return new Queue(QUEUE_ROC_ORDER_SUBMIT, true);
+ }
+
+ @Bean
+ public Binding bindingSubmitOrder() {
+ return BindingBuilder.bind(ordereSubmitQueue()).to(orderSubmitExchange()).with(ROUTING_KEY_ROC_ORDER_SUBMIT);
+ }
+
+ // 交易订单
+ @Bean
+ public DirectExchange orderCancelExchange() {
+ return new DirectExchange(EXCHANGE_ROC_ORDER_CANCEL);
+ }
+
+
+ @Bean
+ public Queue ordereCancelQueue() {
+ return new Queue(QUEUE_ROC_ORDER_CANCEL, true);
+ }
+
+ @Bean
+ public Binding bindingCancelOrder() {
+ return BindingBuilder.bind(ordereCancelQueue()).to(orderCancelExchange()).with(ROUTING_KEY_ROC_ORDER_CANCEL);
+ }
+
+
+ @Bean
+ public DirectExchange usdtUpdateExchange() {
+ return new DirectExchange(EXCHANGE_USDT_UPDATE);
+ }
+
+
+ @Bean
+ public Queue usdtUpdateQueue() {
+ return new Queue(QUEUE_USDT_UPDATE, true);
+ }
+
+ @Bean
+ public Binding usdtUpdatebinding() {
+ return BindingBuilder.bind(usdtUpdateQueue()).to(usdtUpdateExchange()).with(ROUTING_KEY_USDT_UPDATE);
+ }
+
+ @Bean
+ public DirectExchange usdtAddressExchange() {
+ return new DirectExchange(EXCHANGE_USDT_ADDRESS);
+ }
+
+
+ @Bean
+ public Queue usdtAddressQueue() {
+ return new Queue(QUEUE_USDT_ADDRESS, true);
+ }
+
+ @Bean
+ public Binding usdtAddressbinding() {
+ return BindingBuilder.bind(usdtAddressQueue()).to(usdtAddressExchange()).with(ROUTING_KEY_USDT_ADDRESS);
+ }
+
/**
* 交换器A 可以继续添加交换器B C
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/model/EthUsdtChargeDto.java b/src/main/java/com/xcong/excoin/modules/blackchain/model/EthUsdtChargeDto.java
new file mode 100644
index 0000000..8d07d27
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/model/EthUsdtChargeDto.java
@@ -0,0 +1,25 @@
+package com.xcong.excoin.modules.blackchain.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 充值扫块dto
+ */
+@Data
+public class EthUsdtChargeDto {
+
+ private String address;
+ private String hash;
+ private BigDecimal balance;
+
+ public EthUsdtChargeDto() {
+ }
+
+ public EthUsdtChargeDto(String address, String hash, BigDecimal balance) {
+ this.address = address;
+ this.hash = hash;
+ this.balance = balance;
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/EthService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/EthService.java
index 5638359..c2c9379 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/EthService.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/EthService.java
@@ -10,6 +10,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import org.web3j.abi.FunctionEncoder;
@@ -237,8 +238,9 @@
// log.debug("transfer hexValue:" + hexValue);
- EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();
-
+ CompletableFuture<EthSendTransaction> ethSendTransactionCompletableFuture = web3j.ethSendRawTransaction(hexValue).sendAsync();
+ EthSendTransaction ethSendTransaction = ethSendTransactionCompletableFuture.get();
+ //return "hash";
if (ethSendTransaction.hasError()) {
// log.info("transfer error:", ethSendTransaction.getError().getMessage());
@@ -263,7 +265,7 @@
BigInteger nonce = ethGetTransactionCount.getTransactionCount();
BigInteger value = Convert.toWei(amount, Convert.Unit.ETHER).toBigInteger();
RawTransaction rawTransaction = RawTransaction.createEtherTransaction(nonce,
- Convert.toWei("50", Convert.Unit.GWEI).toBigInteger(),
+ Convert.toWei("70", Convert.Unit.GWEI).toBigInteger(),
Convert.toWei("60000", Convert.Unit.WEI).toBigInteger(), toAddress, value);
byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);
String hexValue = Numeric.toHexString(signedMessage);
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/EthUsdtContract.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/EthUsdtContract.java
index 1566e5c..891cc0b 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/EthUsdtContract.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/EthUsdtContract.java
@@ -301,7 +301,6 @@
public TransferEventResponse apply(Log log) {
EventValuesWithLog eventValues = extractEventParametersWithLog(TRANSFER_EVENT, log);
TransferEventResponse typedResponse = new TransferEventResponse();
- System.out.println(eventValues);
if(eventValues!=null){
typedResponse.log = log;
typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue();
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java
index 4eeff4c..ee703fc 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java
@@ -6,6 +6,7 @@
import javax.annotation.Resource;
import com.xcong.excoin.modules.blackchain.service.*;
+import com.xcong.excoin.rabbit.producer.UsdtUpdateProducer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -29,6 +30,9 @@
MemberDao memberDao;
@Resource
MemberCoinAddressDao memberMapper;
+
+ @Resource
+ private UsdtUpdateProducer usdtUpdateProducer;
@Override
public Result findBlockAddress(String symbol) {
@@ -178,6 +182,8 @@
coinAddress.setLabel(uuid);
memberMapper.insert(coinAddress);
}
+ // 发送新增的地址到监听集合
+ usdtUpdateProducer.sendAddressMsg(address);
}
break;
case "CPV":
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java
index a67b220..2ad5e2c 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtErc20UpdateService.java
@@ -1,6 +1,12 @@
package com.xcong.excoin.modules.blackchain.service;
+import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.modules.blackchain.model.EthUsdtChargeDto;
+import com.xcong.excoin.modules.member.dao.MemberCoinAddressDao;
+import com.xcong.excoin.rabbit.producer.UsdtUpdateProducer;
import com.xcong.excoin.utils.RedisUtils;
+import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
@@ -14,15 +20,24 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
@Service
public class UsdtErc20UpdateService {
+
+ @Resource
+ private UsdtUpdateProducer usdtUpdateProducer;
+
+ @Resource
+ private MemberCoinAddressDao coinWalletDao;
+
public final static List<String> ALL_ADDRESS_LIST = new ArrayList<>();
- public final static String USDT_BLOCK_NUM = "USDT_BLOCK_NUM";
+ public final static String USDT_BLOCK_NUM_GOLDEN = "USDT_BLOCK_NUM_GOLDEN";
- private final static BigInteger DIVIDE_USDT = new BigInteger("1000000");
+ private final static BigDecimal DIVIDE_USDT = new BigDecimal("1000000");
private static Web3j web3;
@@ -58,26 +73,48 @@
@Resource
private RedisUtils redisUtils;
+
+
public void updateUsdt(){
+ // 首先查询所有的钱包地址
+ List<String> tdCoinWallets = coinWalletDao.selectAllSymbolAddress(CoinTypeEnum.USDT.toString(),"ERC20");
+ if(tdCoinWallets!=null){
+ ALL_ADDRESS_LIST.addAll(tdCoinWallets);
+ }
// 获取最新区块
- String string = redisUtils.getString(USDT_BLOCK_NUM);
+ String string = redisUtils.getString(USDT_BLOCK_NUM_GOLDEN);
+ if(string==null){
+ string = "11014249";
+ }
BigInteger blockNum = new BigInteger(string);
Credentials credentials = Credentials.create(privateKey);
- EthUsdtContract contract = EthUsdtContract.load(contractAddr, web3, credentials, getStaticGasProvider());
- EthFilter filter = getFilter(new BigInteger("10943021"));
+ EthUsdtContract contract = EthUsdtContract.load(contractAddr, getInstance(), credentials, getStaticGasProvider());
+ EthFilter filter = getFilter(blockNum);
+ Map<String,BigInteger> map = new HashMap<String,BigInteger>();
+ map.put("blockNum",blockNum);
contract.transferEventFlowable(filter).subscribe(e->{
- if(e!=null){
+ if(e!=null && StringUtils.isNotBlank(e.to) && e.log.getBlockNumber()!=null){
String transactionHash = e.log.getTransactionHash();
+ BigInteger blockNumber1 = e.log.getBlockNumber();
String toAddress = e.to;
BigInteger tokenBalance = e.tokens;
- // 金额
- BigInteger divide = tokenBalance.divide(DIVIDE_USDT);
- // 发送消息队列 TODO
-
+ if(ALL_ADDRESS_LIST.contains(toAddress)){
+ System.out.println("存在本地的地址:"+toAddress);
+ // 金额
+ BigDecimal divide = new BigDecimal(tokenBalance.toString()).divide(DIVIDE_USDT);
+ // 发送消息队列
+ EthUsdtChargeDto dto = new EthUsdtChargeDto(toAddress,transactionHash,divide);
+ usdtUpdateProducer.sendMsg(JSONObject.toJSONString(dto));
+ }
+ if(map.get("blockNum").compareTo(blockNumber1)!=0){
+ redisUtils.set(USDT_BLOCK_NUM_GOLDEN,blockNumber1.toString());
+ map.put("blockNum",blockNumber1);
+ }
}
});
}
+
private static EthFilter getFilter(BigInteger startBlock) {
if (startBlock != null) {
@@ -88,7 +125,6 @@
return new EthFilter(DefaultBlockParameterName.EARLIEST,
DefaultBlockParameterName.LATEST, contractAddr);
}
-
-
}
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtEthService.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtEthService.java
index 057320d..17323b4 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtEthService.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/UsdtEthService.java
@@ -59,13 +59,13 @@
}
BigDecimal usdt = ethService.tokenGetBalance(address);
- log.info("地址:{}, 金额:{}", address, usdt);
+ //log.info("地址:{}, 金额:{}", address, usdt);
if (usdt != null && usdt.compareTo(LIMIT) > 0) {
usdt = usdt.subtract(new BigDecimal("0.01"));
// 查询eth是否足够
BigDecimal eth = EthService.getEthBlance(address);
- log.info("地址:{}, ETH:{}", address, eth);
+ //log.info("地址:{}, ETH:{}", address, eth);
if (eth != null && eth.compareTo(FEE) >= 0) {
MemberCoinAddressEntity memberCoinAddressEntity = memberCoinAddressDao.selectBlockAddressWithTag(memberId, CoinTypeEnum.USDT.name(), "ERC20");
if (memberCoinAddressEntity == null) {
diff --git a/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java b/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java
index 406e207..2d42a21 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java
@@ -9,11 +9,7 @@
import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
import com.xcong.excoin.modules.symbols.constants.SymbolsConstats;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-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.RestController;
+import org.springframework.web.bind.annotation.*;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.coin.parameter.dto.CancelEntrustWalletCoinOrderDto;
@@ -39,6 +35,7 @@
@Api(value = "币币交易接口", tags = "币币交易接口")
@RestController
@RequestMapping(value = "/api/orderCoin")
+@CrossOrigin("*")
public class OrderCoinController {
@Resource
diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java
index 20bb608..0a9e313 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinDealDao.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.modules.coin.dao;
+import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -15,7 +16,10 @@
public interface OrderCoinDealDao extends BaseMapper<OrderCoinsDealEntity>{
List<OrderCoinsDealEntity> selectAllWalletCoinOrder(@Param("memberId")Long memberId);
-
+ BigDecimal sumTodayBuyAmount(@Param("memberId")Long memberId, @Param("symbol") String symbol);
+ BigDecimal sumTodayEntrustCntBuyAmount(@Param("memberId")Long memberId, @Param("symbol") String symbol);
+ List<OrderCoinsDealEntity> selectCoinOrderDealByOrderId(@Param("orderId")Long orderId);
+
List<OrderCoinsDealEntity> selectAllWalletCoinOrderBySymbol(@Param("memberId")Long memberId,@Param("symbol")String symbol);
List<OrderCoinsDealEntity> selectAllCoinDealsOrderBySymbol(@Param("symbol")String symbol);
diff --git a/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java
index 12f59a0..dd71072 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/dao/OrderCoinsDao.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.modules.coin.dao;
+import java.math.BigDecimal;
import java.util.List;
import org.apache.ibatis.annotations.Param;
@@ -18,4 +19,6 @@
List<OrderCoinsEntity> selectAllEntrustingCoinOrderList(List<String> list);
List<OrderCoinsEntity> selectCoinOrderOnTrade(List<String> list);
+
+ void updateDeal(@Param("id") Long id, @Param("dealCnt")BigDecimal dealCnt,@Param("dealAmount")BigDecimal dealAmount);
}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java b/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java
index 1567cce..5113425 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/BlockCoinService.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.modules.coin.service;
+import com.xcong.excoin.modules.blackchain.model.EthUsdtChargeDto;
import com.xcong.excoin.modules.blackchain.model.RocTransferDetail;
public interface BlockCoinService {
@@ -20,4 +21,6 @@
public void updateRoc(RocTransferDetail transferDetail);
+ void updateEthUsdtNew(EthUsdtChargeDto ethUsdtChargeDto);
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
index 52f4c3c..16118fb 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java
@@ -101,7 +101,7 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoinEntity.getId(), newBalance, balance, 0);
- String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "ERC20", balance,null);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "ERC20", balance, null);
// 插入财务记录
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.USDT.name(), 1, 1);
@@ -151,7 +151,7 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
- String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.ETH.name(), null, balance,null);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.ETH.name(), null, balance, null);
// 插入财务记录
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.ETH.name(), 1, 1);
@@ -201,7 +201,7 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
- String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "OMNI", balance,null);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "OMNI", balance, null);
ThreadPoolUtils.sendDingTalk(5);
MemberEntity member = memberDao.selectById(memberId);
@@ -249,7 +249,7 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
- String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.BTC.name(), null, balance,null);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.BTC.name(), null, balance, null);
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.BTC.name(), 1, 1);
ThreadPoolUtils.sendDingTalk(5);
@@ -311,7 +311,7 @@
if (memberCoinAddressEntity != null) {
memberWalletCoinDao.updateBlockBalance(memberWalletCoinEntity.getId(), amount, BigDecimal.ZERO, 0);
// 添加冲币记录
- String orderNo = insertCoinCharge(EosService.ACCOUNT, memberId, amount, CoinTypeEnum.EOS.name(), memo, BigDecimal.ZERO,null);
+ String orderNo = insertCoinCharge(EosService.ACCOUNT, memberId, amount, CoinTypeEnum.EOS.name(), memo, BigDecimal.ZERO, null);
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", amount, CoinTypeEnum.EOS.name(), 1, 1);
ThreadPoolUtils.sendDingTalk(5);
@@ -388,7 +388,7 @@
if (memberCoinAddressEntity != null) {
memberWalletCoinDao.updateBlockBalance(memberWalletCoinEntity.getId(), amount, BigDecimal.ZERO, 0);
// 添加冲币记录
- String orderNo = insertCoinCharge(XrpService.ACCOUNT, memberId, amount, CoinTypeEnum.XRP.name(), memo, BigDecimal.ZERO,null);
+ String orderNo = insertCoinCharge(XrpService.ACCOUNT, memberId, amount, CoinTypeEnum.XRP.name(), memo, BigDecimal.ZERO, null);
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", amount, CoinTypeEnum.XRP.name(), 1, 1);
ThreadPoolUtils.sendDingTalk(5);
@@ -462,7 +462,7 @@
memberWalletCoinDao.updateBlockBalance(memberWalletCoinEntity.getId(), amount, BigDecimal.ZERO, 0);
// 添加冲币记录
- String orderNo = insertCoinCharge(address, memberId, amount, CoinTypeEnum.USDT.name(), "TRC20", BigDecimal.ZERO,transactionId);
+ String orderNo = insertCoinCharge(address, memberId, amount, CoinTypeEnum.USDT.name(), "TRC20", BigDecimal.ZERO, transactionId);
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", amount, CoinTypeEnum.USDT.name(), 1, 1);
ThreadPoolUtils.sendDingTalk(5);
@@ -488,23 +488,23 @@
String address = transferDetail.getAddress();
BigDecimal balance = transferDetail.getBalance();
String symbol = transferDetail.getSymbol();
- if(org.apache.commons.lang.StringUtils.isBlank(address) || org.apache.commons.lang.StringUtils.isBlank(symbol) || balance ==null ){
+ if (org.apache.commons.lang.StringUtils.isBlank(address) || org.apache.commons.lang.StringUtils.isBlank(symbol) || balance == null) {
return;
}
- if(balance.compareTo(new BigDecimal("0.0001"))<=0){
+ if (balance.compareTo(new BigDecimal("0.0001")) <= 0) {
return;
}
MemberCoinAddressEntity memberCoinAddress = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, symbol);
- if(memberCoinAddress==null){
+ if (memberCoinAddress == null) {
return;
}
Long memberId = memberCoinAddress.getMemberId();
// 查询钱包 并更新
MemberWalletCoinEntity walletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.CPV.name());
if (walletCoinEntity == null) {
- // 创建一个钱包
+ // 创建一个钱包
// 创建这个钱包
walletCoinEntity = new MemberWalletCoinEntity();
walletCoinEntity.setAvailableBalance(BigDecimal.ZERO);
@@ -518,23 +518,67 @@
memberWalletCoinDao.updateBlockBalance(walletCoinEntity.getId(), balance, BigDecimal.ZERO, 0);
- String orderNo = insertCoinCharge(address, memberId, balance, CoinTypeEnum.CPV.name(), "", BigDecimal.ZERO,null);
+ String orderNo = insertCoinCharge(address, memberId, balance, CoinTypeEnum.CPV.name(), "", BigDecimal.ZERO, null);
// 插入财务记录
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", balance, CoinTypeEnum.CPV.name(), 1, 1);
- try{
+ try {
ThreadPoolUtils.sendDingTalk(5);
MemberEntity member = memberDao.selectById(memberId);
if (StrUtil.isNotBlank(member.getPhone())) {
- String amount = balance.toPlainString() + CoinTypeEnum.CPV.name();
+ String amount = balance.toPlainString() + "ROC";
Sms106Send.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo);
} else {
SubMailSend.sendRechargeMail(member.getEmail(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo);
}
- }catch (Exception e){
+ } catch (Exception e) {
//e.printStackTrace();
}
+ }
+
+ @Override
+ @Transactional
+ public void updateEthUsdtNew(EthUsdtChargeDto ethUsdtChargeDto) {
+ String address = ethUsdtChargeDto.getAddress();
+ String hash = ethUsdtChargeDto.getHash();
+ // hash没有用过
+ Map<String,Object> param = new HashMap<>();
+ param.put("hash",hash);
+ param.put("address",address);
+ List<MemberCoinChargeEntity> memberCoinChargeEntities = memberCoinChargeDao.selectByMap(param);
+ if(CollectionUtils.isNotEmpty(memberCoinChargeEntities)){
+ return;
+ }
+ MemberCoinAddressEntity coinAddressEntity = memberCoinAddressDao.selectCoinAddressByAddressAndSymbol(address, CoinTypeEnum.USDT.toString());
+ if (coinAddressEntity == null) {
+ return;
+ }
+ Long memberId = coinAddressEntity.getMemberId();
+ BigDecimal balance = ethUsdtChargeDto.getBalance();
+ if (balance != null && balance.compareTo(new BigDecimal("0.1")) > 0) {
+ balance = balance.setScale(8, RoundingMode.CEILING);
+ BigDecimal early = BigDecimal.ZERO;
+
+ MemberWalletCoinEntity walletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, CoinTypeEnum.USDT.name());
+ if (walletCoinEntity == null) {
+ return;
+ }
+ BigDecimal newBalance = balance.subtract(early);
+ memberWalletCoinDao.updateBlockBalance(walletCoinEntity.getId(), newBalance, balance, 0);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "ERC20", balance, ethUsdtChargeDto.getHash());
+ // 插入财务记录
+ LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.USDT.name(), 1, 1);
+ ThreadPoolUtils.sendDingTalk(5);
+ MemberEntity member = memberDao.selectById(memberId);
+ if (StrUtil.isNotBlank(member.getPhone())) {
+ String amount = newBalance.toPlainString() + "USDT-ERC20";
+ Sms106Send.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo);
+ } else {
+ SubMailSend.sendRechargeMail(member.getEmail(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), orderNo);
+ }
+
+ }
}
private String generateNo() {
@@ -545,7 +589,7 @@
return String.valueOf(timestamp).substring(2) + random;
}
- public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount,String hash) {
+ public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount, String hash) {
MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity();
memberCoinChargeEntity.setAddress(address);
memberCoinChargeEntity.setMemberId(memberId);
diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
index 9a2c740..35ee332 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/OrderCoinServiceImpl.java
@@ -17,6 +17,7 @@
import com.xcong.excoin.modules.platform.entity.PlatformSymbolsCoinEntity;
import com.xcong.excoin.modules.symbols.constants.SymbolsConstats;
+import com.xcong.excoin.rabbit.producer.OrderSubmitProducer;
import com.xcong.excoin.trade.CoinTrader;
import com.xcong.excoin.trade.CoinTraderFactory;
import com.xcong.excoin.trade.ExchangeTrade;
@@ -91,6 +92,9 @@
@Resource
private MemberDao memberDao;
+
+ @Resource
+ private OrderSubmitProducer orderSubmitProducer;
@Override
@@ -465,9 +469,11 @@
// memberWalletCoinDao.updateById(walletCoin);
memberWalletCoinDao.updateWalletBalance(walletCoin.getId(),amount.negate(),amount.negate(),amount);
}
- // 加入到撮合
- CoinTrader trader = factory.getTrader(symbol);
- trader.trade(order);
+ // 加入到撮合 TODO 通过消息队列发送到交易撮合
+ //CoinTrader trader = factory.getTrader(symbol);
+ //trader.trade(order);
+ order.setSymbol(symbol);
+ orderSubmitProducer.sendMsg(JSONObject.toJSONString(order));
return Result.ok(MessageSourceUtils.getString("order_service_0011"));
}
@@ -512,7 +518,9 @@
if (ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId().equals(memberId) ) {
// 如果是撮合交易单
if (SymbolsConstats.EXCHANGE_SYMBOLS.contains(orderCoinsEntity.getSymbol())) {
- return this.cancelEntrustWalletCoinOrderForMatch(orderId);
+ orderSubmitProducer.sendCancelMsg(orderId);
+ // return this.cancelEntrustWalletCoinOrderForMatch(orderId);
+ return Result.ok(MessageSourceUtils.getString("order_service_0013"));
}
if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL || orderCoinsEntity.getOrderStatus()==OrderCoinsEntity.ORDERSTATUS_DONE) {
return Result.fail(MessageSourceUtils.getString("order_service_0012"));
@@ -590,12 +598,15 @@
@Transactional
public Result cancelEntrustWalletCoinOrderForMatch(String orderId) {
//获取用户ID
- Long memberId = LoginUserUtils.getAppLoginUser().getId();
OrderCoinsEntity orderCoinsEntity = orderCoinsDao.selectById(orderId);
+ if(orderCoinsEntity==null){
+ return Result.ok("");
+ }
+ Long memberId = orderCoinsEntity.getMemberId();
// 取消撮合订单的单
CoinTrader trader = factory.getTrader(orderCoinsEntity.getSymbol());
trader.cancelOrder(orderCoinsEntity);
- if (ObjectUtil.isNotEmpty(orderCoinsEntity) && orderCoinsEntity.getMemberId().equals(memberId)) {
+ if (ObjectUtil.isNotEmpty(orderCoinsEntity) ) {
if (orderCoinsEntity.getOrderStatus() == OrderCoinsEntity.ORDERSTATUS_CANCEL || orderCoinsEntity.getOrderStatus()==OrderCoinsEntity.ORDERSTATUS_DONE) {
return Result.fail(MessageSourceUtils.getString("order_service_0012"));
}
@@ -617,8 +628,6 @@
detail.setDealPrice(orderCoinsEntity.getDealPrice());
detail.setDealAmount(orderCoinsEntity.getDealAmount());
detail.setFeeAmount(orderCoinsEntity.getFeeAmount());
- orderCoinDealDao.insert(detail);
-
if (OrderCoinsEntity.ORDERTYPE_BUY.equals(orderCoinsEntity.getOrderType())) {
//如果是限价买入,撤单将USDT账户冻结金额返回
String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
@@ -627,21 +636,31 @@
if (ObjectUtil.isNotEmpty(walletCoin)) {
//手续费 = 开仓价*数量*手续费率
//返还金额=开仓价*未成交数量+手续费
-
+ // 这里根据成交的单计算
+ List<OrderCoinsDealEntity> orderCoinsDealEntities = orderCoinDealDao.selectCoinOrderDealByOrderId(Long.valueOf(orderId));
+ BigDecimal dealAmount = BigDecimal.ZERO;
+ if(CollectionUtils.isNotEmpty(orderCoinsDealEntities)){
+ for (OrderCoinsDealEntity orderCoinsDealEntity : orderCoinsDealEntities) {
+ dealAmount = dealAmount.add(orderCoinsDealEntity.getDealAmount());
+ }
+ }
// 市价的按成交额退款
- BigDecimal returnBalance = orderCoinsEntity.getEntrustAmount().subtract(orderCoinsEntity.getDealAmount());
+ BigDecimal returnBalance = orderCoinsEntity.getEntrustAmount().subtract(dealAmount);
+
// 需要退回的手续费
BigDecimal returnFee = BigDecimal.ZERO;
if (returnBalance.compareTo(orderCoinsEntity.getEntrustAmount()) == 0) {
returnFee = orderCoinsEntity.getFeeAmount();
} else {
// 按比例退回
- BigDecimal needFee = orderCoinsEntity.getDealAmount().divide(orderCoinsEntity.getEntrustAmount(), 8, BigDecimal.ROUND_DOWN).multiply(orderCoinsEntity.getFeeAmount());
+ BigDecimal needFee = orderCoinsEntity.getFeeAmount().multiply(dealAmount.divide(orderCoinsEntity.getEntrustAmount(), 8, BigDecimal.ROUND_DOWN));
returnFee = orderCoinsEntity.getFeeAmount().subtract(needFee);
}
+ BigDecimal avi = returnBalance.add(returnFee);
+ memberWalletCoinDao.updateWalletBalance(walletCoin.getId(),avi,null,returnBalance.negate());
walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(returnBalance).add(returnFee));
walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(returnBalance));
- memberWalletCoinDao.updateById(walletCoin);
+ //memberWalletCoinDao.updateById(walletCoin);
// 流水记录
MemberAccountFlowEntity record = new MemberAccountFlowEntity();
record.setSource(MemberAccountFlowEntity.SOURCE_CANCEL);
@@ -674,6 +693,7 @@
return Result.ok(MessageSourceUtils.getString("order_service_0013"));
}
}
+ orderCoinDealDao.insert(detail);
}
return Result.fail(MessageSourceUtils.getString("order_service_0043"));
}
@@ -932,15 +952,24 @@
}
Long memberId = buyOrderCoinsEntity.getMemberId();
if (buyOrderCoinsEntity != null) {
+ List<OrderCoinsDealEntity> orderCoinsDealEntities = orderCoinDealDao.selectCoinOrderDealByOrderId(buyOrderId);
// 比较剩余的量
- BigDecimal dealAmount = buyOrderCoinsEntity.getDealAmount();
+ BigDecimal dealAmount = BigDecimal.ZERO;
+ BigDecimal dealCnt = BigDecimal.ZERO;
+ if(CollectionUtils.isNotEmpty(orderCoinsDealEntities)){
+ for (OrderCoinsDealEntity orderCoinsDealEntity : orderCoinsDealEntities) {
+ dealAmount=dealAmount.add(orderCoinsDealEntity.getDealAmount());
+ dealCnt = dealCnt.add(orderCoinsDealEntity.getSymbolCnt());
+ }
+ }
+
// 单的总金额
BigDecimal entrustAmount = buyOrderCoinsEntity.getEntrustAmount();
BigDecimal add = dealAmount.add(buyTurnover);
BigDecimal closingPrice = buyTurnover.multiply(new BigDecimal("0.002"));
- //成交量
- BigDecimal dealCnt = buyOrderCoinsEntity.getDealCnt().add(amount);
+ //成交总量
+ dealCnt = dealCnt.add(amount);
// 创建一个完成的单
OrderCoinsDealEntity detail = new OrderCoinsDealEntity();
detail.setMemberId(buyOrderCoinsEntity.getMemberId());
@@ -973,12 +1002,8 @@
memberWalletCoinDao.updateWalletBalance(coinsEntity.getId(),subtract,subtract,subtract.negate());
}
} else {
- OrderCoinsEntity update = new OrderCoinsEntity();
- update.setId(buyOrderId);
- update.setDealAmount(add);
- update.setDealCnt(buyOrderCoinsEntity.getDealCnt().add(amount));
- update.setUpdateTime(new Date());
- orderCoinsDao.updateById(update);
+ // 更新买单
+ orderCoinsDao.updateDeal(buyOrderId,amount,buyTurnover);
}
}
// 卖单
diff --git a/src/main/java/com/xcong/excoin/modules/member/dao/MemberCoinAddressDao.java b/src/main/java/com/xcong/excoin/modules/member/dao/MemberCoinAddressDao.java
index a53bba9..baf9016 100644
--- a/src/main/java/com/xcong/excoin/modules/member/dao/MemberCoinAddressDao.java
+++ b/src/main/java/com/xcong/excoin/modules/member/dao/MemberCoinAddressDao.java
@@ -23,5 +23,6 @@
List<MemberCoinAddressEntity> selectAllBlockAddressBySymbol(@Param("symbol") String symbol);
+ List<String> selectAllSymbolAddress(@Param("symbol")String symbol,@Param("tag") String tag);
}
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
index e171de7..be91c71 100644
--- a/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java
+++ b/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java
@@ -18,5 +18,4 @@
public Result findKlineDetails(KlineDetailDto klineDetailDto);
-
}
diff --git a/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java b/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
index 37f40ed..5873683 100644
--- a/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
+++ b/src/main/java/com/xcong/excoin/processor/DefaultCoinProcessor.java
@@ -362,7 +362,11 @@
// 存储昨日K线
if("day".equals(rangeUnit)){
- redisUtils.set("CPV/USDT",kLine);
+ System.out.println("存储日K线");
+ kLine.setOpen(kLine.getClose());
+ kLine.setLow(kLine.getClose());
+ kLine.setHigh(kLine.getClose());
+ redisUtils.set("ROC/USDT",kLine);
}
}
diff --git a/src/main/java/com/xcong/excoin/processor/MarketService.java b/src/main/java/com/xcong/excoin/processor/MarketService.java
index d47b2c9..3f3f067 100644
--- a/src/main/java/com/xcong/excoin/processor/MarketService.java
+++ b/src/main/java/com/xcong/excoin/processor/MarketService.java
@@ -88,7 +88,17 @@
list = (List) data;
}
list.add(kLine);
- redisUtils.set(key, list);
+ int size = list.size();
+ if(size>500){
+ list = list.subList(size-500,size);
+ }
+ List lines = new ArrayList();
+ if(CollectionUtils.isNotEmpty(list)){
+ for(Object object:list){
+ lines.add(object);
+ }
+ }
+ redisUtils.set(key, lines);
// mongoTemplate.insert(kLine,"exchange_kline_"+symbol+"_"+kLine.getPeriod());
}
@@ -122,4 +132,15 @@
return totalVolume;
}
+
+ public static void main(String[] args) {
+ List<String> list = new ArrayList<>();
+ list.add("1");
+ list.add("2");
+ list.add("3");
+ list.add("4");
+ list.add("5");
+ list=list.subList(2,5);
+ System.out.println(list);
+ }
}
diff --git a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
index 65e8c1e..f91418b 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/BlockCoinUpdateJob.java
@@ -24,10 +24,10 @@
/**
* ETH_USDT 同步
*/
- @Scheduled(cron = "0 0/10 * * * ? ")
- public void ethUsdtUpdate() {
- blockCoinService.updateEthUsdt();
- }
+ //@Scheduled(cron = "0 0/10 * * * ? ")
+// public void ethUsdtUpdate() {
+// blockCoinService.updateEthUsdt();
+// }
/**
* eth 同步
@@ -40,7 +40,7 @@
/**
* BTC_USDT 同步
*/
- @Scheduled(cron = "0 2/10 * * * ? ")
+ //@Scheduled(cron = "0 2/10 * * * ? ")
public void btcUsdtUpdate() {
blockCoinService.updateBtcUsdt();
}
@@ -63,8 +63,8 @@
/**
* ETH_USDT 同步
*/
- @Scheduled(cron = "0 0/5 * * * ? ")
+ //Scheduled(cron = "0 0/5 * * * ? ")
public void rocUpdate() {
- blockCoinService.updateEthUsdt();
+ // blockCoinService.updateEthUsdt();
}
}
diff --git a/src/main/java/com/xcong/excoin/quartz/job/CoinTradeInitJob.java b/src/main/java/com/xcong/excoin/quartz/job/CoinTradeInitJob.java
index 75faf2a..8c8ad32 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/CoinTradeInitJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/CoinTradeInitJob.java
@@ -44,7 +44,7 @@
**/
@Slf4j
@Component
-@ConditionalOnProperty(prefix = "app", name = "trade", havingValue = "true")
+@ConditionalOnProperty(prefix = "app", name = "exchange-trade", havingValue = "true")
public class CoinTradeInitJob {
@Resource
@@ -101,6 +101,7 @@
// 创建K线生成器
CoinProcessor processor = new DefaultCoinProcessor(symbol, "USDT");
processor.setMarketService(marketService);
+ processor.setRedisUtils(redisUtils);
//processor.setExchangeRate(exchangeRate);
processor.initializeThumb();
//processor.initializeUsdRate();
diff --git a/src/main/java/com/xcong/excoin/quartz/job/KLineGeneratorJob.java b/src/main/java/com/xcong/excoin/quartz/job/KLineGeneratorJob.java
index 808ac2b..b6194ee 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/KLineGeneratorJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/KLineGeneratorJob.java
@@ -4,6 +4,7 @@
import com.xcong.excoin.modules.coin.service.OrderCoinService;
import com.xcong.excoin.processor.CoinProcessorFactory;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -19,10 +20,12 @@
*/
@Component
@Slf4j
+@ConditionalOnProperty(prefix = "app", name = "exchange-trade", havingValue = "true")
public class KLineGeneratorJob {
@Resource
private CoinProcessorFactory processorFactory;
+
/**
* 每分钟定时器,处理分钟K线
*/
diff --git a/src/main/java/com/xcong/excoin/quartz/job/NotionalPoolingJob.java b/src/main/java/com/xcong/excoin/quartz/job/NotionalPoolingJob.java
index 262123e..25b7fdc 100644
--- a/src/main/java/com/xcong/excoin/quartz/job/NotionalPoolingJob.java
+++ b/src/main/java/com/xcong/excoin/quartz/job/NotionalPoolingJob.java
@@ -38,11 +38,11 @@
}
}
- @Scheduled(cron = "0 2/8 * * * ? ")
- public void usdtEthPoolCheck() {
- log.info("USDTETH归集结果扫描开始");
- usdtEthService.usdtEthPoolCheck();
- }
+// @Scheduled(cron = "0 2/8 * * * ? ")
+// public void usdtEthPoolCheck() {
+// log.info("USDTETH归集结果扫描开始");
+// usdtEthService.usdtEthPoolCheck();
+// }
@Scheduled(cron = "0 2/30 * * * ? ")
public void poolEth() {
diff --git a/src/main/java/com/xcong/excoin/quartz/job/UsdtErc20InitJob.java b/src/main/java/com/xcong/excoin/quartz/job/UsdtErc20InitJob.java
new file mode 100644
index 0000000..aacf3ff
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/quartz/job/UsdtErc20InitJob.java
@@ -0,0 +1,31 @@
+package com.xcong.excoin.quartz.job;
+
+import com.xcong.excoin.modules.blackchain.service.UsdtErc20UpdateService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * 开启撮合交易
+ *
+ * @author wzy
+ * @date 2020-05-28
+ **/
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true")
+public class UsdtErc20InitJob {
+
+
+ @Resource
+ private UsdtErc20UpdateService usdtErc20UpdateService;
+
+ @PostConstruct
+ public void initCoinTrade() {
+ System.out.println("开启USDT同步");
+ usdtErc20UpdateService.updateUsdt();
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/ExchangeConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/ExchangeConsumer.java
index 384f1c2..a1a2d51 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/ExchangeConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/ExchangeConsumer.java
@@ -15,6 +15,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -24,11 +25,11 @@
import java.util.Set;
/**
- * @author wzy
- * @date 2020-05-25
- **/
+ * websocket 只能后台撮合交易那台开启
+ */
@Slf4j
@Component
+@ConditionalOnProperty(prefix = "app", name = "exchange-trade", havingValue = "true")
public class ExchangeConsumer {
@Resource
@@ -115,23 +116,4 @@
orderCoinService.handleOrder(exchangeTrades);
}
- /**
- * 更新最新K线
- * @param content
- */
-// @RabbitListener(queues = RabbitMqConfig.QUEUE_TRADE_PLATE)
-// public void newKling(String content) {
-// log.info("#---->{}#", content);
-// // 最新K线的币种
-// String key = "NEW_KINE_{}";
-// key = StrUtil.format(key, content);
-// Object o = redisUtils.get(key);
-// Map<String, Candlestick> currentKlineMap = (Map<String, Candlestick>)o;
-// // 推送最新K线
-// Set<Map.Entry<String, Candlestick>> entries = currentKlineMap.entrySet();
-// for(Map.Entry<String, Candlestick> map : entries){
-// tradePlateSendWebSocket.sendMessageKline(content,map.getKey(),JSONObject.toJSONString(map.getValue()),null);
-// }
-//
-// }
}
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java
index bfb2d92..6e98b44 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java
@@ -17,6 +17,7 @@
* @author helius
*/
@Component
+@Deprecated
@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job-contract", havingValue = "true")
public class OperateOrderPriceConsumer {
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/OrderSubmitConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/OrderSubmitConsumer.java
new file mode 100644
index 0000000..4f20d62
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/OrderSubmitConsumer.java
@@ -0,0 +1,48 @@
+package com.xcong.excoin.rabbit.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.configurations.RabbitMqConfig;
+import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity;
+import com.xcong.excoin.modules.coin.service.OrderCoinService;
+import com.xcong.excoin.trade.CoinTrader;
+import com.xcong.excoin.trade.CoinTraderFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 提交买卖单进入撮合系统
+ */
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "app", name = "exchange-trade", havingValue = "true")
+public class OrderSubmitConsumer {
+
+ @Resource
+ private CoinTraderFactory factory;
+
+ @Resource
+ private OrderCoinService orderCoinService;
+
+ @RabbitListener(queues = RabbitMqConfig.QUEUE_ROC_ORDER_SUBMIT)
+ public void doSomething(String content) {
+ log.info("#提交的订单---->{}#", content);
+ OrderCoinsEntity coinsEntity = JSONObject.parseObject(content, OrderCoinsEntity.class);
+ String symbol = coinsEntity.getSymbol();
+ CoinTrader trader = factory.getTrader(symbol);
+ trader.trade(coinsEntity);
+ }
+
+ /**
+ * 取消订单
+ * @param content
+ */
+ @RabbitListener(queues = RabbitMqConfig.QUEUE_ROC_ORDER_CANCEL)
+ public void doCancel(String content) {
+ log.info("#取消的订单---->{}#", content);
+ orderCoinService.cancelEntrustWalletCoinOrderForMatch(content);
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/RocBlockUpdateConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/RocBlockUpdateConsumer.java
index bbf2717..e2ee354 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/RocBlockUpdateConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/RocBlockUpdateConsumer.java
@@ -21,12 +21,10 @@
/**
- * 用户修改止损止盈价格、提价限价委托、下单爆仓价等消息
- * 后台打包开启 APP 不开启
- * @author helius
+ * ROC币种同步
*/
@Component
-//@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job-contract", havingValue = "true")
+@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true")
public class RocBlockUpdateConsumer {
@Resource
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/UsdtUpdateConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/UsdtUpdateConsumer.java
new file mode 100644
index 0000000..7288fc6
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/UsdtUpdateConsumer.java
@@ -0,0 +1,44 @@
+package com.xcong.excoin.rabbit.consumer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.configurations.RabbitMqConfig;
+import com.xcong.excoin.modules.blackchain.model.EthUsdtChargeDto;
+import com.xcong.excoin.modules.blackchain.service.UsdtErc20UpdateService;
+import com.xcong.excoin.modules.coin.service.BlockCoinService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * @author wzy
+ * @date 2020-05-25
+ **/
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "app", name = "block-job", havingValue = "true")
+public class UsdtUpdateConsumer {
+
+
+ @Resource
+ private BlockCoinService blockCoinService;
+
+
+ @RabbitListener(queues = RabbitMqConfig.QUEUE_USDT_UPDATE)
+ public void doSomething(String content) {
+ log.info("#USDT同步---->{}#", content);
+ EthUsdtChargeDto ethUsdtChargeDto = JSONObject.parseObject(content, EthUsdtChargeDto.class);
+ // 更新这个用户的余额
+ blockCoinService.updateEthUsdtNew(ethUsdtChargeDto);
+ }
+
+ @RabbitListener(queues = RabbitMqConfig.QUEUE_USDT_ADDRESS)
+ public void addUsdtAddress(String content) {
+ if(!UsdtErc20UpdateService.ALL_ADDRESS_LIST.contains(content)){
+ log.info("#添加新地址---->{}#", content);
+ UsdtErc20UpdateService.ALL_ADDRESS_LIST.add(content);
+ }
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java
index b959b0e..ffbc2be 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java
@@ -24,6 +24,7 @@
*/
@Slf4j
@Component
+@Deprecated
@ConditionalOnProperty(prefix = "app", name = "rabbit-consumer", havingValue = "true")
public class WebsocketPriceConsumer {
diff --git a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
index 9fb3756..662cd9a 100644
--- a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
+++ b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
@@ -28,6 +28,7 @@
@Slf4j
@Component
@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job-contract", havingValue = "true")
+@Deprecated
public class OrderProducerInit {
@Resource
diff --git a/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java b/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java
new file mode 100644
index 0000000..d873ca1
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/rabbit/producer/OrderSubmitProducer.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.rabbit.producer;
+
+import cn.hutool.core.util.IdUtil;
+import com.xcong.excoin.configurations.RabbitMqConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author wzy
+ * @date 2020-05-25
+ **/
+@Slf4j
+@Component
+public class OrderSubmitProducer implements RabbitTemplate.ConfirmCallback {
+
+ private RabbitTemplate rabbitTemplate;
+
+ @Autowired
+ public OrderSubmitProducer(RabbitTemplate rabbitTemplate) {
+ this.rabbitTemplate = rabbitTemplate;
+ rabbitTemplate.setConfirmCallback(this);
+ }
+
+ public void sendMsg(String content) {
+ CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
+ rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_ROC_ORDER_SUBMIT, RabbitMqConfig.ROUTING_KEY_ROC_ORDER_SUBMIT, content, correlationData);
+ }
+
+ public void sendCancelMsg(String content) {
+ CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
+ rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_ROC_ORDER_CANCEL, RabbitMqConfig.ROUTING_KEY_ROC_ORDER_CANCEL, content, correlationData);
+ }
+
+
+ @Override
+ public void confirm(CorrelationData correlationData, boolean ack, String cause) {
+ log.info("#----->{}#", correlationData);
+ if (ack) {
+ log.info("success");
+ } else {
+ log.info("--->{}", cause);
+ }
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/rabbit/producer/UsdtUpdateProducer.java b/src/main/java/com/xcong/excoin/rabbit/producer/UsdtUpdateProducer.java
new file mode 100644
index 0000000..c89f4c9
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/rabbit/producer/UsdtUpdateProducer.java
@@ -0,0 +1,47 @@
+package com.xcong.excoin.rabbit.producer;
+
+import cn.hutool.core.util.IdUtil;
+import com.xcong.excoin.configurations.RabbitMqConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author wzy
+ * @date 2020-05-25
+ **/
+@Slf4j
+@Component
+public class UsdtUpdateProducer implements RabbitTemplate.ConfirmCallback {
+
+ private RabbitTemplate rabbitTemplate;
+
+ @Autowired
+ public UsdtUpdateProducer(RabbitTemplate rabbitTemplate) {
+ this.rabbitTemplate = rabbitTemplate;
+ rabbitTemplate.setConfirmCallback(this);
+ }
+
+ public void sendMsg(String content) {
+ CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
+ rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_USDT_UPDATE, RabbitMqConfig.ROUTING_KEY_USDT_UPDATE, content, correlationData);
+ }
+
+ public void sendAddressMsg(String content) {
+ CorrelationData correlationData = new CorrelationData(IdUtil.simpleUUID());
+ rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_USDT_ADDRESS, RabbitMqConfig.ROUTING_KEY_USDT_ADDRESS, content, correlationData);
+ }
+
+
+ @Override
+ public void confirm(CorrelationData correlationData, boolean ack, String cause) {
+ log.info("#----->{}#", correlationData);
+ if (ack) {
+ log.info("success");
+ } else {
+ log.info("--->{}", cause);
+ }
+ }
+}
diff --git a/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java b/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java
index d060410..ffa7283 100644
--- a/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java
+++ b/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java
@@ -45,7 +45,7 @@
@OnOpen
public void onOpen(Session session) {
onlineCount.incrementAndGet(); // 在线数加1
- log.info("有新连接加入:{},当前在线人数为:{}", session.getId(), onlineCount.get());
+ // log.info("有新连接加入:{},当前在线人数为:{}", session.getId(), onlineCount.get());
}
/**
@@ -67,7 +67,7 @@
map.remove(session.getId());
}
}
- log.info("有一连接关闭:{},当前在线人数为:{}", session.getId(), onlineCount.get());
+ //log.info("有一连接关闭:{},当前在线人数为:{}", session.getId(), onlineCount.get());
}
/**
@@ -227,8 +227,14 @@
result.setRep(sub);
if (o != null) {
List<Candlestick> list = (List<Candlestick>) o;
+
+ if(list!=null && list.size()>300){
+ int size = list.size();
+ list = list.subList(size-300,size);
+ }
+ CandlestickModel model = null;
for (Candlestick candlestick : list) {
- CandlestickModel model = new CandlestickModel();
+ model = new CandlestickModel();
model.setAmount(candlestick.getAmount());
model.setClose(candlestick.getClose());
model.setCount(candlestick.getCount());
@@ -248,8 +254,8 @@
@OnError
public void onError(Session session, Throwable error) {
- log.error("发生错误");
- error.printStackTrace();
+ // log.error("发生错误");
+ //error.printStackTrace();
}
/**
diff --git a/src/main/resources/application-prodapp.yml b/src/main/resources/application-prodapp.yml
new file mode 100644
index 0000000..0c57f69
--- /dev/null
+++ b/src/main/resources/application-prodapp.yml
@@ -0,0 +1,114 @@
+server:
+ port: 8888
+ servlet:
+ context-path: /
+
+spring:
+ profiles:
+ active: dev
+ datasource:
+ url: jdbc:mysql://rm-bp1i2g5rg5dubo9s40o.mysql.rds.aliyuncs.com:3306/db_roc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
+ username: roc_user
+ password: roc123pasd!@
+ driver-class-name: com.mysql.jdbc.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ druid:
+ initial-size: ${spring_datasource_druid_initial_size:10}
+ max-active: ${spring_datasource_druid_max_active:20}
+ min-idle: ${spring_datasource_druid_min_idle:3}
+ #配置获取连接等待超时的时间
+ max-wait: 60000
+ pool-prepared-statements: true
+ max-pool-prepared-statement-per-connection-size: 20
+ validation-query: SELECT 'x'
+ test-on-borrow: true
+ test-on-return: true
+ test-while-idle: true
+ #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ time-between-eviction-runs-millis: 60000
+ #配置一个连接在池中最小生存的时间,单位是毫秒
+ min-evictable-idle-time-millis: 300000
+ #spring.datasource.druid.max-evguide.ftlictable-idle-time-millis=
+ filters: stat,wall
+ stat-view-servlet:
+ # 默认true 内置监控页面首页/druid/index.html
+ enabled: true
+ url-pattern: /druid/*
+ # 允许清空统计数据
+ reset-enable: true
+ login-username: root
+ login-password: 123456
+ # IP白名单 多个逗号分隔
+ allow: ${spring_datasource_stat_view_servlet_allow:}
+ # IP黑名单
+ deny: ${spring_datasource_stat_view_servlet_deny:}
+ ## 国际化配置
+ messages:
+ basename: i18n/messages
+ ## redis配置
+ redis:
+ ## Redis数据库索引(默认为0)
+ database: 1
+ ## Redis服务器地址
+ host: 47.114.114.219
+ ## Redis服务器连接端口
+ port: 6379
+ ## Redis服务器连接密码(默认为空)
+ password: biyi123
+ jedis:
+ pool:
+ ## 连接池最大连接数(使用负值表示没有限制)
+ #spring.redis.pool.max-active=8
+ max-active: 300
+ ## 连接池最大阻塞等待时间(使用负值表示没有限制)
+ #spring.redis.pool.max-wait=-1
+ max-wait: -1
+ ## 连接池中的最大空闲连接
+ #spring.redis.pool.max-idle=8
+ max-idle: 100
+ ## 连接池中的最小空闲连接
+ #spring.redis.pool.min-idle=0
+ min-idle: 8
+ ## 连接超时时间(毫秒)
+ timeout: 30000
+ rabbitmq:
+ host: 47.114.114.219
+ port: 5672
+ username: roc_user
+ password: roc123456
+ publisher-confirm-type: correlated
+
+
+#custom:
+# rabbitmq:
+# host: 120.27.238.55
+# port: 5672
+# username: ct_rabbit
+# password: 123456
+
+mybatis-plus:
+ mapper-locations: classpath:mapper/**/*.xml
+
+
+app:
+ debug: false
+ redis_expire: 3000
+ kline-update-job: false
+ newest-price-update-job: false
+ exchange-trade: false
+ day-line: false
+ other-job: false
+ loop-job: false
+ rabbit-consumer: false
+ block-job: false
+
+aliyun:
+ oss:
+ end-point: https://oss-cn-hangzhou.aliyuncs.com
+ bucket-name: https://excoin.oss-cn-hangzhou.aliyuncs.com
+ access-key-id: LTAI4GBuydqbJ5bTsDP97Lpd
+ access-key-secret: vbCjQtPxABWjqtUlQfzjlA0qAY96fh
+
+rsa:
+ public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCf8UFZK54AiK4PRu7tNd+Z8qZ77o/QXCnk25DRmygVpOEu5mGNSAvfnWmKp2pEV2RljeXq3Rid/+LQkonaebMJeXKSF0yxL/VgyeT8JaQ5gNbOrdfdlc+mFkXJyzyJt8YkvApEdPRNSU2ENBn7mgRfD0BYPM4vZ6/rv+de38FJwIDAQAB
+ private_key: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIJ/xQVkrngCIrg9G7u0135nypnvuj9BcKeTbkNGbKBWk4S7mYY1IC9+daYqnakRXZGWN5erdGJ3/4tCSidp5swl5cpIXTLEv9WDJ5PwlpDmA1s6t192Vz6YWRcnLPIm3xiS8CkR09E1JTYQ0GfuaBF8PQFg8zi9nr+u/517fwUnAgMBAAECgYBhPt9NvpI4wbanvnndLczr2GJkxfzvSE+vwLCJF4C5FusFHVsxZINggQcg1V75bwRgCiXRMyYefreCSdrCditS43PzTOmE4RRrpxLlm8oubJc0C98LQ2qlN9AsUqL5IHpVGgbHDyWAwjc1GBID6nwXKpxq1/VodFqhahG9D5EZsQJBALnkb+5VTxQbiyQI4Uc9NIvAyVcNY1OisbvY6tvNgdBbJkADgAb78M1HWxxYjUqsvzggNHc7cWqWBHMgpnJaqm8CQQCztze4D7uAk7OC9MJHY5eE980J8Kk+GEZKxz4LahzU6V6dcb9GFac3wEtgilj/tOAn9y0/Q8sm9vvCIbMDzgzJAkEAqRYcqhF26LdVDOX25DHMBgLKISDQZFbsjA13M4/usHL4i+mjHrc0BcUOHu59NpuDI65HitzLAUSLr5zXSdUmiQJAW77wOg4GCejdXsB3IhzMsHwU97sdm26nC+vVV9xvJZ6Rx8zW+f9543NOx9U5BCmhuaVtOvvwDU9PTVcI3atmSQJAXAIJ5gGdtXx0DXiX4VvzNFHqgaqHMGvXyjNVkU2FYQbSAd2A6app4uRO+BkZu9dSjh14m+oXMnV2HzAN2rRnjA==
diff --git a/src/main/resources/mapper/member/MemberCoinAddressDao.xml b/src/main/resources/mapper/member/MemberCoinAddressDao.xml
index edb4a57..0dc07a9 100644
--- a/src/main/resources/mapper/member/MemberCoinAddressDao.xml
+++ b/src/main/resources/mapper/member/MemberCoinAddressDao.xml
@@ -81,4 +81,11 @@
select * from member_coin_address
where symbol=#{symbol}
</select>
+
+ <select id="selectAllSymbolAddress" resultType="string" parameterType="map">
+ select address from member_coin_address where symbol =#{symbol}
+ <if test="tag!=null and tag !=''">
+ and tag = #{tag}
+ </if>
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/walletCoinOrder/OrderCoinDealDao.xml b/src/main/resources/mapper/walletCoinOrder/OrderCoinDealDao.xml
index aa9912f..339e355 100644
--- a/src/main/resources/mapper/walletCoinOrder/OrderCoinDealDao.xml
+++ b/src/main/resources/mapper/walletCoinOrder/OrderCoinDealDao.xml
@@ -12,6 +12,27 @@
order by create_time desc
</select>
+ <select id="sumTodayBuyAmount" resultType="java.math.BigDecimal">
+ select sum(symbol_cnt) from coins_order_deal
+ where member_id = #{memberId} and symbol=#{symbol}
+ and order_type =1
+ and order_status=3
+ and DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(now(),'%Y-%m-%d')
+ </select>
+ <select id="sumTodayEntrustCntBuyAmount" resultType="java.math.BigDecimal">
+ select sum(entrust_cnt) from coins_order
+ where member_id = #{memberId} and symbol=#{symbol}
+ and order_type =1
+ and order_status=1
+ and DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT(now(),'%Y-%m-%d')
+ </select>
+
+ <select id="selectCoinOrderDealByOrderId" resultType="com.xcong.excoin.modules.coin.entity.OrderCoinsDealEntity">
+ select * from coins_order_deal where order_id = #{orderId}
+ order by create_time desc
+ </select>
+
+
<select id="selectOrderCoinDealByTime" resultType="com.xcong.excoin.trade.ExchangeTrade">
SELECT
symbol symbol,
diff --git a/src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml b/src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml
index aa02fee..16190bd 100644
--- a/src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml
+++ b/src/main/resources/mapper/walletCoinOrder/OrderCoinsDao.xml
@@ -44,4 +44,17 @@
</foreach>
</if>
</select>
+
+ <update id="updateDeal" parameterType="map">
+ update coins_order
+ <set>
+ <if test="dealCnt!=null">
+ deal_cnt = deal_cnt+#{dealCnt},
+ </if>
+ <if test="dealAmount!=null">
+ deal_amount = deal_amount+#{dealAmount},
+ </if>
+ </set>
+ where id = #{id}
+ </update>
</mapper>
--
Gitblit v1.9.1