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/admin/controller/trader/AdminTraderController.java | 123 +++++++++++++++++++++++++++++++++++++----
1 files changed, 111 insertions(+), 12 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/trader/AdminTraderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/trader/AdminTraderController.java
index 3ccb69d..e4cfd50 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/trader/AdminTraderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/trader/AdminTraderController.java
@@ -5,6 +5,7 @@
import com.yami.trading.admin.model.trader.TraderModel;
import com.yami.trading.bean.contract.domain.ContractOrder;
import com.yami.trading.bean.model.User;
+import com.yami.trading.bean.trader.FollowCommissionType;
import com.yami.trading.bean.trader.domain.Trader;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.domain.Result;
@@ -22,6 +23,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
+import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@@ -55,6 +57,11 @@
Double.parseDouble(data.get("deviation_profit_ratio").toString())), 100));
data.put("profit_share_ratio",
Arith.mul(Double.parseDouble(data.get("profit_share_ratio").toString()), 100));
+ Object dailyPct = data.get("follow_commission_daily_pct");
+ if (dailyPct != null && !"".equals(String.valueOf(dailyPct))) {
+ data.put("follow_commission_daily_pct",
+ Arith.mul(Double.parseDouble(dailyPct.toString()), 100));
+ }
data.put("follower_now", Arith.add(Double.parseDouble(data.get("follower_now").toString()),
Double.parseDouble(data.get("deviation_follower_now").toString())));
data.put("follower_sum", Arith.add(Double.parseDouble(data.get("follower_sum").toString()),
@@ -125,7 +132,7 @@
int follower_max = model.getFollowerMax();
- int follow_volumn_min = model.getFollowVolumnMin();
+ double follow_volumn_min = model.getFollowVolumnMin();
double week_3_profit = model.getWeek3Profit();
@@ -209,12 +216,21 @@
trader.setDeviationFollowerSum(deviation_follower_sum);
trader.setDeviationFollowerNow(deviation_follower_now);
- trader.setProfitShareRatio(Arith.div(profit_share_ratio, 100));
trader.setState(state);
trader.setFollowerMax(follower_max);
trader.setCreateTime(sdf.parse(create_time));
trader.setImg(img);
- trader.setFollowVolumnMin(follow_volumn_min);
+ trader.setFollowVolumnMin(BigDecimal.valueOf(follow_volumn_min));
+ bindTraderFollowCommissionFromModel(trader, model);
+ if (FollowCommissionType.isLegacy(FollowCommissionType.normalizeOrLegacy(trader.getFollowCommissionType()))) {
+ trader.setProfitShareRatio(Arith.div(profit_share_ratio, 100));
+ } else {
+ trader.setProfitShareRatio(0D);
+ }
+ String fcErr = validateFollowCommission(trader);
+ if (!StringUtils.isNullOrEmpty(fcErr)) {
+ throw new BusinessException(fcErr);
+ }
trader.setChecked(1);
adminTraderService.save(trader);
@@ -296,6 +312,7 @@
}
trader.setProfitRatio(Arith.mul(trader.getProfitRatio(), 100));
trader.setProfitShareRatio(Arith.mul(trader.getProfitShareRatio(), 100));
+ trader.setFollowCommissionDailyPct(Arith.mul(trader.getFollowCommissionDailyPct(), 100));
trader.setWeek3ProfitRatio(Arith.mul(trader.getWeek3ProfitRatio(), 100));
trader.setDeviationProfitRatio(Arith.mul(trader.getDeviationWeek3ProfitRatio(), 100));
trader.setDeviationProfitRatio(Arith.mul(trader.getDeviationProfitRatio(), 100));
@@ -394,7 +411,7 @@
int follower_max = model.getFollowerMax();
- int follow_volumn_min = model.getFollowVolumnMin();
+ double follow_volumn_min = model.getFollowVolumnMin();
double week_3_profit = model.getWeek3Profit();
@@ -466,10 +483,20 @@
trader.setState(state);
trader.setFollowerMax(follower_max);
- trader.setProfitShareRatio(Arith.div(profit_share_ratio, 100));
trader.setCreateTime(sdf.parse(create_time));
trader.setImg(img);
- trader.setFollowVolumnMin(follow_volumn_min);
+ trader.setFollowVolumnMin(BigDecimal.valueOf(follow_volumn_min));
+
+ bindTraderFollowCommissionFromModel(trader, model);
+ if (FollowCommissionType.isLegacy(FollowCommissionType.normalizeOrLegacy(trader.getFollowCommissionType()))) {
+ trader.setProfitShareRatio(Arith.div(profit_share_ratio, 100));
+ } else {
+ trader.setProfitShareRatio(0D);
+ }
+ String fcErrUpdate = validateFollowCommission(trader);
+ if (!StringUtils.isNullOrEmpty(fcErrUpdate)) {
+ throw new BusinessException(fcErrUpdate);
+ }
adminTraderService.update(trader);
return Result.succeed(null,"更新成功!");
@@ -489,6 +516,7 @@
public Result check(HttpServletRequest request) {
String id = request.getParameter("uuid");
String check = request.getParameter("check");
+ String reason = request.getParameter("reason");
try {
if(StringUtils.isEmptyString(check)) {
return Result.failed("1","审核参数不能为空");
@@ -500,6 +528,12 @@
if(Integer.parseInt(check) == trader.getChecked()) {
return Result.failed("1","该记录审核状跟提交状态一致");
}
+ if(Integer.parseInt(check) == -1) {
+ if(StringUtils.isEmptyString(reason)) {
+ return Result.failed("1","驳回原因不能为空");
+ }
+ trader.setRemarks(reason);
+ }
trader.setChecked(Integer.parseInt(check));
adminTraderService.update(trader);
return Result.succeed(null,"审核成功!");
@@ -507,6 +541,33 @@
return Result.failed("1", e.getMessage());
} catch (Throwable t) {
logger.error("update error ", t);
+ return Result.failed("1", t.getMessage());
+ }
+ }
+
+ @RequestMapping(action + "updateState.action")
+ public Result updateState(HttpServletRequest request) {
+ String id = request.getParameter("uuid");
+ String state = request.getParameter("state");
+ try {
+ if (StringUtils.isEmptyString(id)) {
+ return Result.failed("1", "交易员ID不能为空");
+ }
+ if (StringUtils.isEmptyString(state)) {
+ return Result.failed("1", "带单状态不能为空");
+ }
+ if (!"0".equals(state) && !"1".equals(state) && !"2".equals(state)) {
+ return Result.failed("1", "带单状态非法");
+ }
+ Trader trader = adminTraderService.findById(id);
+ if (trader == null) {
+ return Result.failed("1", "该记录不存在");
+ }
+ trader.setState(state);
+ adminTraderService.update(trader);
+ return Result.succeed(null, "带单状态更新成功");
+ } catch (Throwable t) {
+ logger.error("updateState error", t);
return Result.failed("1", t.getMessage());
}
}
@@ -533,7 +594,7 @@
private String verification(String name, String img, String create_time, String symbols, int order_profit, int deviation_order_profit, int order_loss
, int deviation_order_loss, double week_3_order_amount, double deviation_week_3_order_amount, double week_3_order_profit, double deviation_week_3_order_profit,
int week_3_order_sum, int deviation_week_3_order_sum, double order_amount, double deviation_order_amount, int follower_sum, int deviation_follower_sum,
- int follower_now, int deviation_follower_now, double profit_share_ratio, int follower_max, int follow_volumn_min) {
+ int follower_now, int deviation_follower_now, double profit_share_ratio, int follower_max, double follow_volumn_min) {
if (StringUtils.isEmptyString(name))
@@ -572,14 +633,52 @@
return "当前跟随人数加偏差值不能小于0";
if (profit_share_ratio < 0.0D)
return "利润分成比例不能小于0";
- if (follower_max <= 0)
- return "此次跟单最多跟随人数不能小于等于0";
if (StringUtils.isEmptyString(img))
return "请上传头像";
- if (follower_max < Arith.add(follower_now, deviation_follower_now))
- return "此次跟单最多跟随人数不能小于当前跟随人数加偏差值";
if (follow_volumn_min < 0)
- return "最小跟单张数不能小于0";
+ return "最小跟单币数量不能小于0";
+ return null;
+ }
+
+ private void bindTraderFollowCommissionFromModel(Trader trader, TraderModel model) {
+ if (model.getFollowCommissionType() != null && !model.getFollowCommissionType().trim().isEmpty()) {
+ trader.setFollowCommissionType(FollowCommissionType.normalizeOrLegacy(model.getFollowCommissionType()));
+ } else if (trader.getFollowCommissionType() == null || trader.getFollowCommissionType().trim().isEmpty()) {
+ trader.setFollowCommissionType(FollowCommissionType.LEGACY);
+ }
+ if (model.getFollowCommissionMonthlyAmount() != null) {
+ trader.setFollowCommissionMonthlyAmount(model.getFollowCommissionMonthlyAmount());
+ }
+ if (model.getFollowCommissionDailyPct() != null) {
+ trader.setFollowCommissionDailyPct(Arith.div(model.getFollowCommissionDailyPct(), 100));
+ }
+ if (FollowCommissionType.isLegacy(trader.getFollowCommissionType())) {
+ trader.setFollowCommissionMonthlyAmount(BigDecimal.ZERO);
+ trader.setFollowCommissionDailyPct(0);
+ } else if (FollowCommissionType.isMonthlyFixed(trader.getFollowCommissionType())) {
+ trader.setFollowCommissionDailyPct(0);
+ } else if (FollowCommissionType.isDailyProfitPct(trader.getFollowCommissionType())) {
+ trader.setFollowCommissionMonthlyAmount(BigDecimal.ZERO);
+ }
+ }
+
+ private String validateFollowCommission(Trader t) {
+ String ct = FollowCommissionType.normalizeOrLegacy(t.getFollowCommissionType());
+ t.setFollowCommissionType(ct);
+ if (FollowCommissionType.isMonthlyFixed(ct)) {
+ if (t.getFollowCommissionMonthlyAmount() == null
+ || t.getFollowCommissionMonthlyAmount().compareTo(BigDecimal.ZERO) <= 0) {
+ return "月固定跟单费须大于0";
+ }
+ } else if (FollowCommissionType.isDailyProfitPct(ct)) {
+ if (t.getFollowCommissionDailyPct() <= 0 || t.getFollowCommissionDailyPct() > 1) {
+ return "按日总盈利提成比例须在0到100之间(按百分比填写)";
+ }
+ } else if (FollowCommissionType.isLegacy(ct)) {
+ if (t.getProfitShareRatio() <= 0 || t.getProfitShareRatio() > 1) {
+ return "单笔盈利分成比例须在0到100之间(表单按百分比填写)";
+ }
+ }
return null;
}
--
Gitblit v1.9.3