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