1
zj
4 days ago effab9619e17b97ac98b035eaa64ba99b27f5dc6
1
5 files modified
1 files added
131 ■■■■■ changed files
trading-order-admin/src/main/resources/application-dev.yml 4 ●●●● patch | view | raw | blame | history
trading-order-service/src/main/java/com/yami/trading/service/c2c/impl/C2cOrderServiceImpl.java 22 ●●●●● patch | view | raw | blame | history
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java patch | view | raw | blame | history
trading-order-service/src/main/java/com/yami/trading/service/impl/RechargeBlockchainOrderServiceImpl.java 13 ●●●●● patch | view | raw | blame | history
trading-order-service/src/main/java/com/yami/trading/service/impl/WithdrawServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
trading-order-service/src/main/java/com/yami/trading/service/notify/WalletTransactionMailNotificationService.java 82 ●●●●● patch | view | raw | blame | history
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
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");
            }
        }
    }
    /**
trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
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);
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);
        }
    }
trading-order-service/src/main/java/com/yami/trading/service/notify/WalletTransactionMailNotificationService.java
New file
@@ -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;
    }
}