From 0a87c3811a648e46105687aa1fab02f605f7e5c0 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Wed, 17 Dec 2025 16:49:40 +0800
Subject: [PATCH] 借款还款
---
trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java | 5 +
trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/internal/LoanServiceImpl.java | 95 +++++++++++++++++++++++++++++++
trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java | 37 ++++++++++++
trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanService.java | 6 ++
trading-order-bean/src/main/java/com/yami/trading/bean/loan/SimpleLoanOrder.java | 2
5 files changed, 143 insertions(+), 2 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java
index 7ae26ca..079f455 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanController.java
@@ -26,6 +26,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.token.TokenService;
import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -222,6 +223,42 @@
}
/**
+ * 提交还款申请
+ * @param request 请求对象
+ * @return 申请结果
+ */
+ @GetMapping("/api/loan!refund.action")
+ public ResultObject refund(HttpServletRequest request) {
+ ResultObject resultObject = new ResultObject();
+
+ String partyId = SecurityUtils.getCurrentUserId();
+ if(null==partyId) {
+ resultObject.setCode("1");
+ resultObject.setMsg("通过Token获取partyId为空!");
+ return resultObject;
+ }
+
+ String orderNo=getParamValue(request,resultObject,"orderNo");
+ if(null==orderNo) return resultObject;
+
+ try {
+ boolean flag = loanService.refundLoanOrder(orderNo, partyId);
+ if (flag) {
+ resultObject.setMsg("提交成功");
+ } else {
+ resultObject.setCode("1");
+ resultObject.setMsg("提交失败");
+ }
+ } catch(Throwable e) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ logger.error("error:", e);
+ }
+
+ return resultObject;
+ }
+
+ /**
* 查看借贷申请单列表
* @param request 请求对象
* @return 申请单列表
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanService.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanService.java
index 7918877..a4d5f20 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanService.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/LoanService.java
@@ -48,6 +48,12 @@
* @return 添加是否成功
*/
public Boolean addLoanOrder(SimpleLoanOrder simpleLoanOrder);
+
+ /**
+ * 还款申请
+ * @return 添加是否成功
+ */
+ public Boolean refundLoanOrder(String orderNo, String userId);
/**
* 修改借贷申请单
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/internal/LoanServiceImpl.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/internal/LoanServiceImpl.java
index 97e67d1..b44d529 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/internal/LoanServiceImpl.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/loan/internal/LoanServiceImpl.java
@@ -21,6 +21,7 @@
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.BusinessException;
import com.yami.trading.common.exception.YamiShopBindException;
+import com.yami.trading.common.util.Arith;
import com.yami.trading.dao.loan.LoanParamMapper;
import com.yami.trading.service.MoneyLogService;
import com.yami.trading.service.WalletService;
@@ -104,6 +105,7 @@
stateMap.put(3, "驳回");
stateMap.put(4, "已逾期");
stateMap.put(5, "已还款");
+ stateMap.put(6, "提交还款申请");
repayments.put(1,"到期还本息");
repayments.put(2,"到期还本金");
@@ -161,6 +163,61 @@
System.out.println(update);
return true;
+ }
+
+ @Override
+ public Boolean refundLoanOrder(String orderNo, String userId) {
+ try {
+ if(null==orderNo || (orderNo=orderNo.trim()).isEmpty()) {
+ throw new BusinessException("申请单ID不能为空!");
+ }
+ SimpleLoanOrder loanOrder = getLoanOrder(null, orderNo);
+ if(loanOrder == null) {
+ throw new BusinessException("找不到订单!");
+ }
+
+ //利息
+ double interest = loanOrder.getQuota().multiply(loanOrder.getDailyRate()).doubleValue();
+ //还款金额
+ double amt = loanOrder.getQuota().doubleValue() + interest;
+ BigDecimal amtBD = new BigDecimal(amt).negate();
+ if (!loanOrder.getSymbol().equalsIgnoreCase("usdt")) {
+ ExchangeRate exchangeRate = exchangeRateService.findBy(ExchangeRate.IN, loanOrder.getSymbol().toUpperCase());
+ if (exchangeRate == null) {
+ throw new YamiShopBindException("汇率未设置");
+ }
+ BigDecimal money = BigDecimal.valueOf(amt).divide(exchangeRate.getRata(), 8, RoundingMode.HALF_UP);
+ amt = money.doubleValue();
+ }
+
+ //通过
+ Wallet wallet = this.walletService.saveWalletByPartyId(loanOrder.getPartyId());
+ if (wallet.getMoney().compareTo(BigDecimal.valueOf(amt)) < 0) {
+ throw new YamiShopBindException("余额不足!");
+ }
+
+ double amountBefore = wallet.getMoney().doubleValue();
+ this.walletService.update(wallet.getUserId(), Arith.sub(0, amt));
+ MoneyLog log = new MoneyLog();
+ log.setCategory(Constants.MONEYLOG_CATEGORY_LOAN);
+ log.setAmountBefore(new BigDecimal(amountBefore));
+ log.setAmount(amtBD);
+ log.setAmountAfter(BigDecimal.valueOf(amountBefore - amt));
+ log.setLog("借贷还款,订单号[" + loanOrder.getUuid() + "]");
+ log.setUserId(loanOrder.getPartyId());
+ log.setWalletType(loanOrder.getSymbol().toUpperCase());
+ log.setContentType(Constants.MONEYLOG_CONTENT_LOAN_REPAY);
+ moneyLogService.save(log);
+
+ int count = jdbcTemplate.update("UPDATE T_SIMPLE_LOAN_ORDER SET state=? WHERE UUID=?",6, orderNo);
+ if(1!=count) {
+ return false;
+ }
+ return true;
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ return false;
}
@Override
@@ -433,7 +490,7 @@
}
int state=Integer.parseInt(status);
- if (state==2) {
+ if (state==2) { //放款
SimpleLoanOrder loanOrder = getLoanOrder(null, orderId);
if(loanOrder == null) {
throw new BusinessException("找不到订单!");
@@ -469,6 +526,42 @@
log.setWalletType(loanOrder.getSymbol().toUpperCase());
log.setContentType(Constants.MONEYLOG_CONTENT_LOAN_ADD);
moneyLogService.save(log);
+ } else if (state==7) { //拒绝还款
+ SimpleLoanOrder loanOrder = getLoanOrder(null, orderId);
+ if(loanOrder == null) {
+ throw new BusinessException("找不到订单!");
+ }
+
+ //利息
+ double interest = loanOrder.getQuota().multiply(loanOrder.getDailyRate()).doubleValue();
+ //退回金额
+ double amt = loanOrder.getQuota().doubleValue() + interest;
+ BigDecimal amtBD = new BigDecimal(amt);
+ if (!loanOrder.getSymbol().equalsIgnoreCase("usdt")) {
+ ExchangeRate exchangeRate = exchangeRateService.findBy(ExchangeRate.IN, loanOrder.getSymbol().toUpperCase());
+ if (exchangeRate == null) {
+ throw new YamiShopBindException("汇率未设置");
+ }
+ BigDecimal money = BigDecimal.valueOf(amt).divide(exchangeRate.getRata(), 8, RoundingMode.HALF_UP);
+ amt = money.doubleValue();
+ }
+
+ //通过
+ Wallet wallet = this.walletService.saveWalletByPartyId(loanOrder.getPartyId());
+ double amountBefore = wallet.getMoney().doubleValue();
+ this.walletService.update(wallet.getUserId(), amt);
+ MoneyLog log = new MoneyLog();
+ log.setCategory(Constants.MONEYLOG_CATEGORY_LOAN);
+ log.setAmountBefore(new BigDecimal(amountBefore));
+ log.setAmount(amtBD);
+ log.setAmountAfter(BigDecimal.valueOf(amountBefore + amt));
+ log.setLog("借贷还款退回,订单号[" + loanOrder.getUuid() + "]");
+ log.setUserId(loanOrder.getPartyId());
+ log.setWalletType(loanOrder.getSymbol().toUpperCase());
+ log.setContentType(Constants.MONEYLOG_CONTENT_LOAN_REPAY_RETURN);
+ moneyLogService.save(log);
+
+ state=2; //状态退回待还款
}
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/loan/SimpleLoanOrder.java b/trading-order-bean/src/main/java/com/yami/trading/bean/loan/SimpleLoanOrder.java
index 5fa6d45..d3887d1 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/loan/SimpleLoanOrder.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/loan/SimpleLoanOrder.java
@@ -53,7 +53,7 @@
/**
* 审核状态
* 1:未审,2:通过,3:驳回
- * 1审批中,2还款中,3审批失败,4已逾期 5 已还款
+ * 1审批中,2还款中,3审批失败,4已逾期 5 已还款 6.提交还款申请
*/
@TableField("STATE")
private Integer state;
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java b/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
index a47d300..a5da832 100644
--- a/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
+++ b/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
@@ -69,6 +69,11 @@
* 质押借币 - 还款
*/
public static final String MONEYLOG_CONTENT_LOAN_REPAY = "loan_repay";
+
+ /**
+ * 质押借币 - 还款退回
+ */
+ public static final String MONEYLOG_CONTENT_LOAN_REPAY_RETURN = "loan_repay_return";
/**
* 质押借币
*/
--
Gitblit v1.9.3