From effab9619e17b97ac98b035eaa64ba99b27f5dc6 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 14 Apr 2026 11:13:28 +0800
Subject: [PATCH] 1
---
trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java | 10 +++
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java | 2
trading-order-service/src/main/java/com/yami/trading/service/notify/WalletTransactionMailNotificationService.java | 82 +++++++++++++++++++++++++++
trading-order-service/src/main/java/com/yami/trading/service/c2c/impl/C2cOrderServiceImpl.java | 22 +++++++
trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java | 13 ++++
trading-order-admin/src/main/resources/application-dev.yml | 4
6 files changed, 130 insertions(+), 3 deletions(-)
diff --git a/trading-order-admin/src/main/resources/application-dev.yml b/trading-order-admin/src/main/resources/application-dev.yml
index 5d74014..df25ed8 100644
--- a/trading-order-admin/src/main/resources/application-dev.yml
+++ b/trading-order-admin/src/main/resources/application-dev.yml
@@ -117,8 +117,8 @@
images.dir: /www/wwwroot/img/
admin_url: https://localhost:8080/admin
web_url: http://localhost:8080/wap/
-images_http: https://img.1mcrypto.com/
-api_http: https://api.1mcrypto.com/
+images_http: https://img.dpcex.com/
+api_http: https://api.dpcex.com/
email:
host: smtp.gmail.com
username: coinzne.com@gmail.com
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/c2c/impl/C2cOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/c2c/impl/C2cOrderServiceImpl.java
index c7c437c..10173c6 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/c2c/impl/C2cOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/c2c/impl/C2cOrderServiceImpl.java
@@ -34,6 +34,7 @@
import com.yami.trading.service.RealNameAuthRecordService;
import com.yami.trading.service.RechargeBlockchainOrderService;
import com.yami.trading.service.WalletService;
+import com.yami.trading.service.notify.WalletTransactionMailNotificationService;
import com.yami.trading.service.c2c.C2cAdvertService;
import com.yami.trading.service.c2c.C2cOrderService;
import com.yami.trading.service.c2c.C2cPaymentMethodService;
@@ -100,6 +101,9 @@
@Autowired
LogService logService;
+
+ @Autowired
+ private WalletTransactionMailNotificationService walletTransactionMailNotificationService;
@Autowired
C2cUserService c2cUserService;
@@ -627,6 +631,24 @@
log.setLog(logStr);
log.setCreateTime(new Date());
logService.save(log);
+
+ if (order_user != null) {
+ if ("recharge".equals(c2cOrder.getDirection())) {
+ String sym = StringUtils.isEmptyString(c2cOrder.getSymbol()) ? "USDT" : c2cOrder.getSymbol().toUpperCase();
+ walletTransactionMailNotificationService.sendRechargeSuccess(
+ order_user,
+ c2cOrder.getOrderNo(),
+ BigDecimal.valueOf(c2cOrder.getCoinAmount()),
+ sym);
+ } else if ("withdraw".equals(c2cOrder.getDirection())) {
+ walletTransactionMailNotificationService.sendWithdrawSuccess(
+ order_user,
+ c2cOrder.getOrderNo(),
+ BigDecimal.valueOf(c2cOrder.getCoinAmount()),
+ BigDecimal.ZERO,
+ "USDT");
+ }
+ }
}
/**
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
index 51a8f29..ff6eec0 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
@@ -775,7 +775,7 @@
if (ObjectUtils.isNotEmpty(syspara) && "1".equals(syspara.getSvalue())) {
return closePrice.multiply(closeVolume).multiply(BigDecimal.valueOf(item.getUnitPercentage()))
.setScale(8, RoundingMode.HALF_UP);
- }
+ }
return BigDecimal.valueOf(item.getUnitFee()).multiply(closePrice).multiply(closeVolume)
.setScale(8, RoundingMode.HALF_UP);
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java
index ee38008..fc17333 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java
@@ -17,6 +17,7 @@
import com.yami.trading.common.util.RandomUtil;
import com.yami.trading.dao.user.RechargeBlockchainOrderMapper;
import com.yami.trading.service.*;
+import com.yami.trading.service.notify.WalletTransactionMailNotificationService;
import com.yami.trading.service.c2c.C2cOrderService;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.syspara.SysparaService;
@@ -74,6 +75,9 @@
@Autowired
DataService dataService;
+
+ @Autowired
+ private WalletTransactionMailNotificationService walletTransactionMailNotificationService;
@Override
@@ -232,6 +236,10 @@
}
}
userService.updateById(party);
+ BigDecimal mailAmount = BigDecimal.valueOf(amount1);
+ String mailAsset = "usdc".equalsIgnoreCase(recharge.getSymbol()) ? "USDT (from USDC)" : "USDT";
+ walletTransactionMailNotificationService.sendRechargeSuccess(
+ party, recharge.getOrderNo(), mailAmount, mailAsset);
} else {
List<Realtime> realtime_list = this.dataService.realtime(recharge.getSymbol());
@@ -351,6 +359,11 @@
}
}
userService.updateById(party);
+ walletTransactionMailNotificationService.sendRechargeSuccess(
+ party,
+ recharge.getOrderNo(),
+ BigDecimal.valueOf(recharge.getVolume()),
+ recharge.getSymbol().toUpperCase());
}
Log log = new Log();
log.setCategory(Constants.LOG_CATEGORY_OPERATION);
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
index 991ab21..7652faa 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java
@@ -25,6 +25,7 @@
import com.yami.trading.common.util.StringUtils;
import com.yami.trading.dao.user.WithdrawMapper;
import com.yami.trading.service.*;
+import com.yami.trading.service.notify.WalletTransactionMailNotificationService;
import com.yami.trading.service.syspara.SysparaService;
import com.yami.trading.service.system.LogService;
import com.yami.trading.service.system.TipService;
@@ -72,6 +73,8 @@
WalletLogService walletLogService;
@Autowired
LogService logService;
+ @Autowired
+ private WalletTransactionMailNotificationService walletTransactionMailNotificationService;
@Override
public Page listRecord(Page page, String status, String roleName,
@@ -117,6 +120,13 @@
log.setLog("通过提现申请。订单号[" + withdraw.getOrderNo() + "]。");
logService.save(log);
tipService.deleteTip(withdraw.getUuid().toString());
+ String asset = symbol.toUpperCase();
+ walletTransactionMailNotificationService.sendWithdrawSuccess(
+ user,
+ withdraw.getOrderNo(),
+ withdraw.getAmount(),
+ withdraw.getAmountFee(),
+ asset);
}
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/notify/WalletTransactionMailNotificationService.java b/trading-order-service/src/main/java/com/yami/trading/service/notify/WalletTransactionMailNotificationService.java
new file mode 100644
index 0000000..ff9cb37
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/notify/WalletTransactionMailNotificationService.java
@@ -0,0 +1,82 @@
+package com.yami.trading.service.notify;
+
+import com.yami.trading.bean.model.User;
+import com.yami.trading.service.EmailSendService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+
+/**
+ * Sends English notification emails for successful deposits and withdrawals.
+ * Recipient: {@link User#getUserMail()} if set, otherwise {@link User#getUserName()} when it looks like an email.
+ */
+@Service
+@Slf4j
+public class WalletTransactionMailNotificationService {
+
+ @Autowired
+ private EmailSendService emailSendService;
+
+ public void sendRechargeSuccess(User user, String orderNo, BigDecimal amount, String assetDescription) {
+ String to = resolveRecipientEmail(user);
+ if (to == null) {
+ log.warn("Skip deposit success email: no email for userId={}", user != null ? user.getUserId() : null);
+ return;
+ }
+ String subject = "Deposit successful";
+ String amt = amount == null ? "-" : amount.stripTrailingZeros().toPlainString();
+ String asset = assetDescription == null ? "" : assetDescription;
+ String body = "Hello,\n\n"
+ + "Your deposit has been credited successfully.\n\n"
+ + "Order number: " + orderNo + "\n"
+ + "Amount: " + amt + " " + asset + "\n\n"
+ + "If you did not make this transaction, please contact support immediately.\n\n"
+ + "Best regards";
+ try {
+ emailSendService.sendEmail(to, subject, body);
+ } catch (Exception e) {
+ log.error("Failed to send deposit success email, orderNo={}", orderNo, e);
+ }
+ }
+
+ public void sendWithdrawSuccess(User user, String orderNo, BigDecimal amount, BigDecimal fee, String assetDescription) {
+ String to = resolveRecipientEmail(user);
+ if (to == null) {
+ log.warn("Skip withdrawal success email: no email for userId={}", user != null ? user.getUserId() : null);
+ return;
+ }
+ String subject = "Withdrawal successful";
+ String amt = amount == null ? "-" : amount.stripTrailingZeros().toPlainString();
+ String feeStr = (fee == null || fee.compareTo(BigDecimal.ZERO) == 0)
+ ? "none"
+ : fee.stripTrailingZeros().toPlainString();
+ String asset = assetDescription == null ? "" : assetDescription;
+ String body = "Hello,\n\n"
+ + "Your withdrawal has been completed successfully.\n\n"
+ + "Order number: " + orderNo + "\n"
+ + "Amount: " + amt + " " + asset + "\n"
+ + "Fee: " + feeStr + "\n\n"
+ + "If you did not request this withdrawal, please contact support immediately.\n\n"
+ + "Best regards";
+ try {
+ emailSendService.sendEmail(to, subject, body);
+ } catch (Exception e) {
+ log.error("Failed to send withdrawal success email, orderNo={}", orderNo, e);
+ }
+ }
+
+ private static String resolveRecipientEmail(User user) {
+ if (user == null) {
+ return null;
+ }
+ if (user.getUserMail() != null && !user.getUserMail().trim().isEmpty()) {
+ return user.getUserMail().trim();
+ }
+ if (user.getUserName() != null && user.getUserName().contains("@")) {
+ return user.getUserName().trim();
+ }
+ return null;
+ }
+}
--
Gitblit v1.9.3