package com.yami.trading.api.controller.trader;
|
|
import com.yami.trading.bean.model.User;
|
import com.yami.trading.bean.trader.domain.Trader;
|
import com.yami.trading.bean.trader.domain.TraderFollowUser;
|
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;
|
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.LogFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
|
/**
|
* 用户准备跟随交易员api接口
|
*/
|
@RestController
|
@CrossOrigin
|
@RequestMapping()
|
public class ApiTraderFollowUserController {
|
private static final long serialVersionUID = 623416500874018208L;
|
/**
|
* 交易员api接口
|
*/
|
private static Log logger = LogFactory.getLog(ApiTraderFollowUserController.class);
|
|
@Autowired
|
private TraderFollowUserService traderFollowUserService;
|
|
@Autowired
|
private TraderService traderService;
|
|
@Autowired
|
private UserService userService;
|
|
@Autowired
|
private ContractOrderService contractOrderService;
|
|
// private String trader_id;
|
//
|
// private String trader_name;
|
//
|
// /**
|
// * 跟随购买品种 symbol
|
// */
|
// private String symbol;
|
// /**
|
// * 跟单固定张数/固定比例---选择 1,固定张数�?2,固定比�?
|
// */
|
// private String follow_type;
|
//
|
// /**
|
// * 跟单张数或比�?---具体�?
|
// */
|
// private double volume;
|
// /**
|
// * �?大持仓张�?
|
// */
|
// private double volume_max;
|
// /**
|
// * 止盈百分�?
|
// */
|
// private double stop_profit;
|
// /**
|
// * 止损百分�?
|
// */
|
// private double stop_loss;
|
|
private final String action = "/api/traderFollowUser!";
|
|
/**
|
* 用户跟随交易员
|
*/
|
@RequestMapping(action + "save.action")
|
public Object saveCreate(HttpServletRequest request) {
|
ResultObject resultObject = new ResultObject();
|
String symbol = request.getParameter("symbol");
|
String volume = request.getParameter("volume");
|
String leverRate = request.getParameter("lever_rate");
|
String trader_id = request.getParameter("trader_id");
|
|
String partyId = SecurityUtils.getCurrentUserId();
|
try {
|
|
// Object object = this.sessionTokenService.cacheGet(session_token);
|
// this.sessionTokenService.del(session_token);
|
// if ((object == null) || (!this.getLoginPartyId().equals((String) object))) {
|
// resultObject.setCode("1");
|
// resultObject.setMsg("请稍后再试");
|
// return resultObject;
|
// }
|
|
User user = userService.getById(partyId);
|
|
// if (!party.getKyc_authority()) {
|
// resultObject.setCode("401");
|
// resultObject.setMsg(error);
|
// this.result = JsonUtils.getJsonString(resultObject);
|
// out.println(this.result);
|
// return null;
|
// }
|
TraderFollowUser entity = new TraderFollowUser();
|
entity.setPartyId(partyId);
|
entity.setUsername(user.getUserName());
|
/**
|
* 当前仅支持固定币数量跟单
|
*/
|
entity.setFollowType(TraderFollowUser.FOLLOW_TYPE_FIXED);
|
entity.setStopLoss(0D);
|
entity.setStopProfit(0D);
|
entity.setSymbol(symbol);
|
double investAmount = parsePositiveDouble(volume, "跟单投入币数量");
|
entity.setVolume(investAmount);
|
entity.setVolumeMax(investAmount);
|
entity.setInvestAmount(BigDecimal.valueOf(investAmount));
|
entity.setLeverRate(parsePositiveDoubleOrDefault(leverRate, 1D, "杠杆倍数"));
|
ensureTraderCannotFollow(partyId);
|
/**
|
* 状态 1-跟随中
|
*/
|
entity.setState(TraderFollowUser.STATE_FOLLOWING);
|
|
this.traderFollowUserService.save(entity, trader_id);
|
resultObject.setCode("0");
|
} catch (BusinessException e) {
|
resultObject.setCode(e.getSign() + "");
|
resultObject.setMsg(e.getMessage());
|
} catch (Exception e) {
|
resultObject.setCode("1");
|
resultObject.setMsg("程序错误");
|
logger.error("error:", e.fillInStackTrace());
|
} finally {
|
|
}
|
|
return resultObject;
|
}
|
|
@RequestMapping(action + "choose.action")
|
public Object chooseDays(HttpServletRequest request) {
|
ResultObject resultObject = new ResultObject();
|
String daysSetting = request.getParameter("daysSetting");
|
String partyId = SecurityUtils.getCurrentUserId();
|
User user = userService.findByUserId(partyId);
|
user.setDaysSetting(daysSetting);
|
|
userService.updateById(user);
|
|
resultObject.setCode("0");
|
resultObject.setMsg("设置成功!");
|
|
return resultObject;
|
}
|
|
@RequestMapping(action + "changeFollow.action")
|
public Object changeFollow(HttpServletRequest request) {
|
ResultObject resultObject = new ResultObject();
|
String symbol = request.getParameter("symbol");
|
String volume = request.getParameter("volume");
|
String leverRate = request.getParameter("lever_rate");
|
String trader_id = request.getParameter("trader_id");
|
|
String partyId = SecurityUtils.getCurrentUserId();
|
try {
|
|
// Object object = this.sessionTokenService.cacheGet(session_token);
|
// this.sessionTokenService.del(session_token);
|
// if ((object == null) || (!this.getLoginPartyId().equals((String) object))) {
|
// resultObject.setCode("1");
|
// resultObject.setMsg("请稍后再试");
|
// return resultObject;
|
// }
|
|
// if (!party.getKyc_authority()) {
|
// resultObject.setCode("401");
|
// resultObject.setMsg(error);
|
// this.result = JsonUtils.getJsonString(resultObject);
|
// out.println(this.result);
|
// return null;
|
// }
|
Trader trader = this.traderService.findById(trader_id);
|
TraderFollowUser entity = this.traderFollowUserService.findByPartyIdAndTrader_partyId(partyId,
|
trader.getPartyId());
|
/**
|
* 当前仅支持固定币数量跟单
|
*/
|
entity.setFollowType(TraderFollowUser.FOLLOW_TYPE_FIXED);
|
entity.setStopLoss(0D);
|
entity.setStopProfit(0D);
|
entity.setSymbol(symbol);
|
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);
|
/**
|
* 状态保持跟随中
|
*/
|
entity.setState(TraderFollowUser.STATE_FOLLOWING);
|
|
this.traderFollowUserService.update(entity);
|
resultObject.setCode("0");
|
} catch (BusinessException e) {
|
resultObject.setCode(e.getSign() + "");
|
resultObject.setMsg(e.getMessage());
|
} catch (Exception e) {
|
resultObject.setCode("1");
|
resultObject.setMsg("程序错误");
|
logger.error("error:", e.fillInStackTrace());
|
} finally {
|
|
}
|
|
return resultObject;
|
}
|
|
/**
|
* 取消跟随
|
*/
|
@RequestMapping(action + "cancelFollow.action")
|
public Object cancelFollow(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 traderFollowUser = this.traderFollowUserService.findByPartyIdAndTrader_partyId(partyId,
|
trader.getPartyId().toString());
|
if (traderFollowUser != null) {
|
this.traderFollowUserService.cancelFollowAsync(traderFollowUser.getUuid(), contractOrderService);
|
}
|
|
resultObject.setCode("0");
|
resultObject.setMsg("已提交停止跟单请求");
|
} catch (BusinessException e) {
|
resultObject.setCode(e.getSign() + "");
|
resultObject.setMsg(e.getMessage());
|
} catch (Exception e) {
|
resultObject.setCode("1");
|
resultObject.setMsg("程序错误");
|
logger.error("error:", e.fillInStackTrace());
|
} finally {
|
|
}
|
|
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, "交易员身份用户不能跟单其他交易员");
|
}
|
}
|
|
}
|