From 71006e38797a533a59ea3e5180157e70ede50795 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 07 Jul 2020 15:26:07 +0800
Subject: [PATCH] add coin recharge sms notice
---
src/main/java/com/xcong/excoin/utils/mail/SmsSend.java | 64 +++++++++++++---
src/main/java/com/xcong/excoin/modules/coin/service/impl/BlockCoinServiceImpl.java | 41 ++++++++-
src/test/java/com/xcong/excoin/SymbolsTest.java | 97 ++++++++++++++++++++++++
3 files changed, 183 insertions(+), 19 deletions(-)
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 b1c3301..e2209a2 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
@@ -1,6 +1,8 @@
package com.xcong.excoin.modules.coin.service.impl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
import com.xcong.excoin.modules.blackchain.service.BtcService;
@@ -16,6 +18,7 @@
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.utils.LogRecordUtils;
+import com.xcong.excoin.utils.mail.SmsSend;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -23,6 +26,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
+import java.util.Date;
import java.util.List;
/**
@@ -78,10 +82,16 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoinEntity.getId(), newBalance, balance, 0);
- insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "ERC20", balance);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "ERC20", balance);
// 插入财务记录
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.USDT.name(), 1, 1);
// TODO 钉钉发送, 短信提醒
+
+ MemberEntity member = memberDao.selectById(memberId);
+ if (StrUtil.isNotBlank(member.getPhone())) {
+ String amount = newBalance.toPlainString() + "USDT-ERC20";
+ SmsSend.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), amount, orderNo);
+ }
}
}
}
@@ -120,11 +130,17 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
- insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.ETH.name(), null, balance);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.ETH.name(), null, balance);
// 插入财务记录
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.ETH.name(), 1, 1);
// TODO 钉钉消息, 短信提醒
+
+ MemberEntity member = memberDao.selectById(memberId);
+ if (StrUtil.isNotBlank(member.getPhone())) {
+ String amount = newBalance.toPlainString() + "ETH";
+ SmsSend.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), amount, orderNo);
+ }
}
}
}
@@ -162,9 +178,14 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
- insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "OMNI", balance);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.USDT.name(), "OMNI", balance);
// TODO 钉钉消息, 短信提醒
+ MemberEntity member = memberDao.selectById(memberId);
+ if (StrUtil.isNotBlank(member.getPhone())) {
+ String amount = newBalance.toPlainString() + "USDT-OMNI";
+ SmsSend.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), amount, orderNo);
+ }
}
}
}
@@ -203,11 +224,15 @@
BigDecimal newBalance = balance.subtract(early);
memberWalletCoinDao.updateBlockBalance(walletCoin.getId(), newBalance, balance, 0);
- insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.BTC.name(), null, balance);
+ String orderNo = insertCoinCharge(address, memberId, newBalance, CoinTypeEnum.BTC.name(), null, balance);
LogRecordUtils.insertMemberAccountMoneyChange(memberId, "转入", newBalance, CoinTypeEnum.BTC.name(), 1, 1);
// TODO 钉钉提醒, 短信提醒
-
+ MemberEntity member = memberDao.selectById(memberId);
+ if (StrUtil.isNotBlank(member.getPhone())) {
+ String amount = newBalance.toPlainString() + "BTC";
+ SmsSend.sendRechargeMsg(member.getPhone(), DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MINUTE_PATTERN), amount, orderNo);
+ }
}
}
}
@@ -222,7 +247,7 @@
return String.valueOf(timestamp).substring(2) + random;
}
- public void insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount) {
+ public String insertCoinCharge(String address, Long memberId, BigDecimal newBalance, String symbol, String tag, BigDecimal lastAmount) {
MemberCoinChargeEntity memberCoinChargeEntity = new MemberCoinChargeEntity();
memberCoinChargeEntity.setAddress(address);
memberCoinChargeEntity.setMemberId(memberId);
@@ -231,7 +256,9 @@
memberCoinChargeEntity.setTag(tag);
memberCoinChargeEntity.setStatus(1);
memberCoinChargeEntity.setLastAmount(lastAmount);
- memberCoinChargeEntity.setOrderCode(generateNo());
+ String orderNo = generateNo();
+ memberCoinChargeEntity.setOrderCode(orderNo);
memberCoinChargeDao.insert(memberCoinChargeEntity);
+ return orderNo;
}
}
diff --git a/src/main/java/com/xcong/excoin/utils/mail/SmsSend.java b/src/main/java/com/xcong/excoin/utils/mail/SmsSend.java
index 9d21ddc..e2e8ed2 100644
--- a/src/main/java/com/xcong/excoin/utils/mail/SmsSend.java
+++ b/src/main/java/com/xcong/excoin/utils/mail/SmsSend.java
@@ -1,5 +1,6 @@
package com.xcong.excoin.utils.mail;
+import cn.hutool.core.date.DateUtil;
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
@@ -13,6 +14,8 @@
import org.apache.http.util.EntityUtils;
import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
@@ -28,30 +31,68 @@
public static final String TYPE_MD5 = "md5";
public static final String TYPE_SHA1 = "sha1";
+
+ private static final String APP_ID = "51258";
+ private static final String APP_KEY = "a9b6e0758dc40d3c346887fc0e154642";
+ private static final String SIGN_TYPE = "";
/**
* API 请求接口配置
*/
private static final String URL = "https://api.mysubmail.com/message/xsend";
+ /**
+ * 发送验证码
+ *
+ * @param telphone 手机号
+ * @param code 验证码
+ * @param time 超时时间
+ * @return
+ */
public static boolean sendVerifyCode(String telphone, String code, int time) {
TreeMap<String, Object> requestData = new TreeMap<String, Object>();
JSONObject vars = new JSONObject();
- String appid = "51258";
- String appkey = "a9b6e0758dc40d3c346887fc0e154642";
String project = "2CHnV3";
- String signtype = "";
vars.put("code", code);
vars.put("time", time);
- requestData.put("appid", appid);
+ requestData.put("appid", APP_ID);
requestData.put("project", project);
requestData.put("to", telphone);
if (!vars.isEmpty()) {
requestData.put("vars", vars.toString());
}
+ return requestSend(requestData);
+ }
+ /**
+ * 发送充值成功消息
+ *
+ * @param phone 手机号
+ * @param time 充值时间
+ * @param amount 金额
+ * @param orderNo 订单号
+ */
+ public static void sendRechargeMsg(String phone, String time, String amount, String orderNo) {
+ TreeMap<String, Object> requestData = new TreeMap<String, Object>();
+ JSONObject vars = new JSONObject();
+ vars.put("time", time);
+ vars.put("price", amount);
+ vars.put("orderNo", orderNo);
+ String project = "Cqky91";
+ requestData.put("appid", APP_ID);
+ requestData.put("project", project);
+ requestData.put("to", phone);
+ if (!vars.isEmpty()) {
+ requestData.put("vars", vars.toString());
+ }
+
+ requestSend(requestData);
+ }
+
+
+ private static boolean requestSend(TreeMap<String, Object> requestData) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
@SuppressWarnings("deprecation")
ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
@@ -62,17 +103,17 @@
builder.addTextBody(key, String.valueOf(value), contentType);
}
}
- if (signtype.equals(TYPE_MD5) || signtype.equals(TYPE_SHA1)) {
+ if (SIGN_TYPE.equals(TYPE_MD5) || SIGN_TYPE.equals(TYPE_SHA1)) {
String timestamp = getTimestamp();
requestData.put("timestamp", timestamp);
- requestData.put("sign_type", signtype);
- String signStr = appid + appkey + RequestEncoder.formatRequest(requestData) + appid + appkey;
+ requestData.put("sign_type", SIGN_TYPE);
+ String signStr = APP_ID + APP_KEY + RequestEncoder.formatRequest(requestData) + APP_ID + APP_KEY;
builder.addTextBody("timestamp", timestamp);
- builder.addTextBody("sign_type", signtype);
- builder.addTextBody("signature", RequestEncoder.encode(signtype, signStr), contentType);
+ builder.addTextBody("sign_type", SIGN_TYPE);
+ builder.addTextBody("signature", RequestEncoder.encode(SIGN_TYPE, signStr), contentType);
} else {
- builder.addTextBody("signature", appkey, contentType);
+ builder.addTextBody("signature", APP_KEY, contentType);
}
HttpPost httpPost = new HttpPost(URL);
@@ -97,7 +138,6 @@
/**
* 获取时间戳
- *
*/
private static String getTimestamp() {
CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
@@ -119,6 +159,6 @@
}
public static void main(String[] args) {
- sendVerifyCode("15773002834", "123456", 2);
+// sendVerifyCode("15773002834", "123456", 2);
}
}
diff --git a/src/test/java/com/xcong/excoin/SymbolsTest.java b/src/test/java/com/xcong/excoin/SymbolsTest.java
index 663e834..cfe29de 100644
--- a/src/test/java/com/xcong/excoin/SymbolsTest.java
+++ b/src/test/java/com/xcong/excoin/SymbolsTest.java
@@ -1,17 +1,69 @@
package com.xcong.excoin;
+import cn.hutool.core.collection.CollUtil;
+import com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.common.system.service.CommonService;
+import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
+import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
+import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
+import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
+import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberLevelRateDao;
+import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
+import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.modules.symbols.service.SymbolsService;
+import com.xcong.excoin.rabbit.producer.OrderProducer;
+import com.xcong.excoin.utils.CacheSettingUtils;
+import com.xcong.excoin.utils.CoinTypeConvert;
+import com.xcong.excoin.utils.RedisUtils;
+import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
/**
* @author wzy
* @date 2020-05-26
**/
+@Slf4j
@SpringBootTest
public class SymbolsTest {
+
+ @Resource
+ private ContractHoldOrderDao contractHoldOrderDao;
+
+ @Resource
+ private ContractOrderDao contractOrderDao;
+
+ @Resource
+ private ContractEntrustOrderDao contractEntrustOrderDao;
+
+ @Resource
+ private CommonService commonService;
+
+ @Resource
+ private MemberWalletContractDao memberWalletContractDao;
+
+ @Resource
+ private MemberLevelRateDao memberLevelRateDao;
+
+ @Resource
+ private CacheSettingUtils cacheSettingUtils;
+
+ @Resource
+ private RedisUtils redisUtils;
+
+ @Resource
+ private OrderProducer producer;
+
+ @Resource
+ private MemberDao memberDao;
@Resource
private SymbolsService symbolsService;
@@ -20,4 +72,49 @@
public void symbolsTest() {
symbolsService.updateSymbolsKine("1min");
}
+
+ @Test
+ public void moneyTest() {
+ MemberEntity memberEntity = memberDao.selectById(11L);
+ PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
+
+ List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
+
+ BigDecimal beUsedBondAmount = BigDecimal.ZERO;
+ // 总盈利
+ BigDecimal totalProfitOrLess = BigDecimal.ZERO;
+ if (CollUtil.isNotEmpty(holdOrderEntities)) {
+ for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) {
+ // 获取最新价
+ BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol())));
+ BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol());
+ beUsedBondAmount = beUsedBondAmount.add(holdOrderEntity.getBondAmount());
+
+ // 单个订单盈利
+ BigDecimal profitOrLess = BigDecimal.ZERO;
+ // 开多
+ if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
+ profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber);
+ // 开空
+ } else {
+ profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber);
+ }
+
+ if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) {
+ if (profitOrLess.compareTo(BigDecimal.ZERO) > 0) {
+ profitOrLess = profitOrLess.multiply(BigDecimal.ONE.subtract(tradeSetting.getForceParam()));
+ } else {
+ profitOrLess = profitOrLess.multiply(BigDecimal.ONE.add(tradeSetting.getForceParam()));
+ }
+ }
+
+ totalProfitOrLess = totalProfitOrLess.add(profitOrLess);
+ }
+ }
+ MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
+
+ log.info("--->{}", walletContractEntity.getTotalBalance());
+ log.info("----->{}", totalProfitOrLess);
+
+ }
}
--
Gitblit v1.9.1