From befbf57e4112d07003bff18102f556a1e5a154de Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 22 Apr 2026 10:53:37 +0800
Subject: [PATCH] 1
---
trading-order-admin/src/main/java/com/yami/trading/api/controller/trader/ApiTraderFollowUserController.java | 120 +++++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 94 insertions(+), 26 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/trader/ApiTraderFollowUserController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/trader/ApiTraderFollowUserController.java
index 4f9b6e1..0ce6584 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/trader/ApiTraderFollowUserController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/trader/ApiTraderFollowUserController.java
@@ -6,6 +6,7 @@
import com.yami.trading.common.exception.BusinessException;
import com.yami.trading.common.web.ResultObject;
import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.contract.ContractOrderService;
import com.yami.trading.service.trader.TraderFollowUserService;
import com.yami.trading.service.trader.TraderService;
import com.yami.trading.service.user.UserService;
@@ -17,6 +18,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
/**
* 用户准备跟随交易员api接口
@@ -39,6 +41,9 @@
@Autowired
private UserService userService;
+
+ @Autowired
+ private ContractOrderService contractOrderService;
// private String trader_id;
//
@@ -78,12 +83,9 @@
@RequestMapping(action + "save.action")
public Object saveCreate(HttpServletRequest request) {
ResultObject resultObject = new ResultObject();
- String follow_type = request.getParameter("follow_type");
- String stop_loss = request.getParameter("stop_loss");
- String stop_profit = request.getParameter("stop_profit");
String symbol = request.getParameter("symbol");
String volume = request.getParameter("volume");
- String volume_max = request.getParameter("volume_max");
+ String leverRate = request.getParameter("lever_rate");
String trader_id = request.getParameter("trader_id");
String partyId = SecurityUtils.getCurrentUserId();
@@ -110,18 +112,22 @@
entity.setPartyId(partyId);
entity.setUsername(user.getUserName());
/**
- * 跟单固定张数/固定比例---选择 1,固定张数量,固定比例
+ * 当前仅支持固定币数量跟单
*/
- entity.setFollowType(follow_type);
- entity.setStopLoss(Double.parseDouble(stop_loss));
- entity.setStopProfit(Double.parseDouble(stop_profit));
+ entity.setFollowType(TraderFollowUser.FOLLOW_TYPE_FIXED);
+ entity.setStopLoss(0D);
+ entity.setStopProfit(0D);
entity.setSymbol(symbol);
- entity.setVolume(Double.parseDouble(volume));
- entity.setVolumeMax(Double.parseDouble(volume_max));
+ double investAmount = parsePositiveDouble(volume, "跟单投入币数量");
+ entity.setVolume(investAmount);
+ entity.setVolumeMax(investAmount);
+ entity.setInvestAmount(BigDecimal.valueOf(investAmount));
+ entity.setLeverRate(parsePositiveDoubleOrDefault(leverRate, 1D, "杠杆倍数"));
+ ensureTraderCannotFollow(partyId);
/**
- * 状态 是否还在跟随状随 1,跟随,取消跟随
+ * 状态 1-跟随中
*/
- entity.setState("1");
+ entity.setState(TraderFollowUser.STATE_FOLLOWING);
this.traderFollowUserService.save(entity, trader_id);
resultObject.setCode("0");
@@ -158,12 +164,9 @@
@RequestMapping(action + "changeFollow.action")
public Object changeFollow(HttpServletRequest request) {
ResultObject resultObject = new ResultObject();
- String follow_type = request.getParameter("follow_type");
- String stop_loss = request.getParameter("stop_loss");
- String stop_profit = request.getParameter("stop_profit");
String symbol = request.getParameter("symbol");
String volume = request.getParameter("volume");
- String volume_max = request.getParameter("volume_max");
+ String leverRate = request.getParameter("lever_rate");
String trader_id = request.getParameter("trader_id");
String partyId = SecurityUtils.getCurrentUserId();
@@ -177,7 +180,6 @@
// return resultObject;
// }
- User user = userService.getById(partyId);
// if (!party.getKyc_authority()) {
// resultObject.setCode("401");
// resultObject.setMsg(error);
@@ -189,18 +191,22 @@
TraderFollowUser entity = this.traderFollowUserService.findByPartyIdAndTrader_partyId(partyId,
trader.getPartyId());
/**
- * 跟单固定张数/固定比例---选择 1,固定张数�?2,固定比�?
+ * 当前仅支持固定币数量跟单
*/
- entity.setFollowType(follow_type);
- entity.setStopLoss(Double.parseDouble(stop_loss));
- entity.setStopProfit(Double.parseDouble(stop_profit));
+ entity.setFollowType(TraderFollowUser.FOLLOW_TYPE_FIXED);
+ entity.setStopLoss(0D);
+ entity.setStopProfit(0D);
entity.setSymbol(symbol);
- entity.setVolume(Double.parseDouble(volume));
- entity.setVolumeMax(Double.parseDouble(volume_max));
+ double investAmount = parsePositiveDouble(volume, "跟单投入币数量");
+ entity.setVolume(investAmount);
+ entity.setVolumeMax(investAmount);
+ entity.setInvestAmount(BigDecimal.valueOf(investAmount));
+ entity.setLeverRate(parsePositiveDoubleOrDefault(leverRate, entity.getLeverRate() > 0 ? entity.getLeverRate() : 1D, "杠杆倍数"));
+ ensureTraderCannotFollow(partyId);
/**
- * 状�?? 是否还在跟随状�?? 1,跟随�?2,取消跟�?
+ * 状态保持跟随中
*/
- entity.setState("1");
+ entity.setState(TraderFollowUser.STATE_FOLLOWING);
this.traderFollowUserService.update(entity);
resultObject.setCode("0");
@@ -232,10 +238,11 @@
TraderFollowUser traderFollowUser = this.traderFollowUserService.findByPartyIdAndTrader_partyId(partyId,
trader.getPartyId().toString());
if (traderFollowUser != null) {
- this.traderFollowUserService.deleteCancel(traderFollowUser.getUuid());
+ this.traderFollowUserService.cancelFollowAsync(traderFollowUser.getUuid(), contractOrderService);
}
resultObject.setCode("0");
+ resultObject.setMsg("已提交停止跟单请求");
} catch (BusinessException e) {
resultObject.setCode(e.getSign() + "");
resultObject.setMsg(e.getMessage());
@@ -250,4 +257,65 @@
return resultObject;
}
+ @RequestMapping(action + "status.action")
+ public Object status(HttpServletRequest request) {
+ ResultObject resultObject = new ResultObject();
+ String trader_id = request.getParameter("trader_id");
+ String partyId = SecurityUtils.getCurrentUserId();
+ try {
+ Trader trader = traderService.findById(trader_id);
+ TraderFollowUser relation = trader == null ? null
+ : traderFollowUserService.findByPartyIdAndTrader_partyId(partyId, trader.getPartyId());
+ resultObject.setCode("0");
+ resultObject.setData(relation);
+ } catch (Exception e) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ logger.error("error:", e.fillInStackTrace());
+ }
+ return resultObject;
+ }
+
+ @RequestMapping(action + "list.action")
+ public Object list() {
+ ResultObject resultObject = new ResultObject();
+ String partyId = SecurityUtils.getCurrentUserId();
+ try {
+ resultObject.setCode("0");
+ resultObject.setData(traderFollowUserService.findByPartyId(partyId));
+ } catch (Exception e) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ logger.error("error:", e.fillInStackTrace());
+ }
+ return resultObject;
+ }
+
+ private double parsePositiveDouble(String value, String fieldName) {
+ double parsed;
+ try {
+ parsed = Double.parseDouble(value == null ? "" : value.trim());
+ } catch (NumberFormatException ex) {
+ throw new BusinessException(1, fieldName + "格式不正确");
+ }
+ if (parsed <= 0) {
+ throw new BusinessException(1, fieldName + "必须大于0");
+ }
+ return parsed;
+ }
+
+ private double parsePositiveDoubleOrDefault(String value, double defaultVal, String fieldName) {
+ if (value == null || value.trim().isEmpty()) {
+ return defaultVal;
+ }
+ return parsePositiveDouble(value, fieldName);
+ }
+
+ private void ensureTraderCannotFollow(String partyId) {
+ Trader trader = traderService.findByPartyId(partyId);
+ if (trader != null && trader.getChecked() == 1) {
+ throw new BusinessException(1, "交易员身份用户不能跟单其他交易员");
+ }
+ }
+
}
--
Gitblit v1.9.3