| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | |
| | | 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()), |
| | |
| | | |
| | | int follower_max = model.getFollowerMax(); |
| | | |
| | | int follow_volumn_min = model.getFollowVolumnMin(); |
| | | double follow_volumn_min = model.getFollowVolumnMin(); |
| | | |
| | | double week_3_profit = model.getWeek3Profit(); |
| | | |
| | |
| | | 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); |
| | |
| | | } |
| | | 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)); |
| | |
| | | |
| | | int follower_max = model.getFollowerMax(); |
| | | |
| | | int follow_volumn_min = model.getFollowVolumnMin(); |
| | | double follow_volumn_min = model.getFollowVolumnMin(); |
| | | |
| | | double week_3_profit = model.getWeek3Profit(); |
| | | |
| | |
| | | |
| | | 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,"更新成功!"); |
| | |
| | | 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","审核参数不能为空"); |
| | |
| | | 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,"审核成功!"); |
| | |
| | | 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()); |
| | | } |
| | | } |
| | |
| | | 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)) |
| | |
| | | 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; |
| | | } |
| | | |