新增获取member资产 持仓数据查询、修改 市价开仓交易接口

pull/1/head
yz 2 years ago
parent e9304484d9
commit 422c010523

@ -0,0 +1,26 @@
package com.sztzjy.forex.trading_trading.controller;
import com.sztzjy.forex.trading_trading.annotation.AnonymousAccess;
import com.sztzjy.forex.trading_trading.entity.Member;
import com.sztzjy.forex.trading_trading.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("api/member")
public class MemberController {
@Autowired
MemberService memberService;
@AnonymousAccess
@PostMapping("getMember")
public Member getMember(@RequestBody String memberId){
Member member = memberService.selectByPrimaryKey(memberId);
return member;
}
}

@ -0,0 +1,48 @@
package com.sztzjy.forex.trading_trading.controller;
import com.alibaba.fastjson.JSONObject;
import com.sztzjy.forex.trading_trading.annotation.AnonymousAccess;
import com.sztzjy.forex.trading_trading.entity.TakeStash;
import com.sztzjy.forex.trading_trading.entity.TakeStashExample;
import com.sztzjy.forex.trading_trading.service.TakeStashService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("api/takeStash")
public class TakeStashController {
@Autowired
TakeStashService takeStashService;
//获取当前持仓表 status 0为获取当前持仓/1为挂单持仓/2为历史持仓
@AnonymousAccess
@PostMapping("getTakeStashList")
public List<TakeStash> getTakeStashList(@RequestBody JSONObject jsonObject) {
String trainingId = String.valueOf(jsonObject.get("trainingId"));
String memberId = String.valueOf(jsonObject.get("memberId"));
Integer status = (Integer) jsonObject.get("status");
TakeStash takeStash = new TakeStash();
takeStash.setTrainingId(trainingId);
takeStash.setMemberId(memberId);
takeStash.setStatus(status);
List<TakeStash> takeStashList = takeStashService.findTakeStashByTrainingIdAndMemberIdAndStatus(trainingId, memberId, status);
return takeStashList;
}
//根据持仓ID获取单个持仓数据
@AnonymousAccess
@PostMapping("getTakeStash")
public TakeStash getTakeStash(@RequestBody JSONObject jsonObject) {
String trainingId = String.valueOf(jsonObject.get("trainingId"));
TakeStash takeStash = takeStashService.selectByPrimaryKey(trainingId);
return takeStash;
}
}

@ -2,29 +2,20 @@ package com.sztzjy.forex.trading_trading.controller;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.sztzjy.forex.trading_trading.annotation.AnonymousAccess;
import com.sztzjy.forex.trading_trading.common.mql5API.Mql5API;
import com.sztzjy.forex.trading_trading.entity.Member;
import com.sztzjy.forex.trading_trading.entity.TakeStash;
import com.sztzjy.forex.trading_trading.entity.mql5Entity.ExchangeFrateEntity;
import com.sztzjy.forex.trading_trading.entity.mql5Entity.ForexData;
import com.sztzjy.forex.trading_trading.service.MemberService;
import com.sztzjy.forex.trading_trading.service.TakeStashService;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
//学生端 交易
@RestController
@ -57,19 +48,28 @@ public class TradingController {
//市场报价交易 交易量为1为1000美元
@AnonymousAccess
@PostMapping("TransactionMarketQuotation")
@PostMapping("transactionMarketQuotation")
public JSONObject getMarketQuotation(@RequestBody JSONObject jsonObject) {
String tradingCode = String.valueOf(jsonObject.get("tradingCode")); //交易品种
String transactionType = String.valueOf(jsonObject.get("transactionType")); //交易类型
Double transactionVolume = (Double) jsonObject.get("transactionVolume"); //买卖手(量)
String buySellType = String.valueOf(jsonObject.get("buySellType")); //买入卖出类型
String stopLoss = String.valueOf(jsonObject.get("stopLoss"));
String stopWin = String.valueOf(jsonObject.get("stopWin"));
Double stopLoss = (Double) jsonObject.get("stopLoss");
Double stopWin = (Double) jsonObject.get("stopWin");
String memberId = String.valueOf(jsonObject.get("memberId"));
String trainingId = jsonObject.get("trainingId").toString();
Member member = memberService.getMemberByMemberIdAndTrainingId(memberId, trainingId);
Double availableFunds = member.getAvailableFunds(); //获取账户可用资金
ForexData forexData = getMarketQuotationByCode(tradingCode); //获取当前买卖价格
if (null != stopLoss || null != stopWin) { //判断止损止赢是否合理 如果stopLoss stopWin都为null则跳过
boolean winOrLossStopBoolean = getWinOrLossStop(stopLoss, stopWin, buySellType, forexData);
if (winOrLossStopBoolean == false) {
return JSONObject.parseObject("止损或获利输入错误");
}
}
//如果方式为卖 则止损高于卖价 获利低于买价
if (transactionType.equals("sjkc")) {//市价开仓
if (tradingCode.startsWith("USD")) { //美元在前
if (availableFunds < transactionVolume * 1000) { //判断可用资金是否足够
@ -120,9 +120,39 @@ public class TradingController {
return null;
}
//修改当前持仓
@AnonymousAccess
@PostMapping("updateTakeStash")
public JSONObject updateTakeStash(@RequestBody JSONObject jsonObject){
String stashId= String.valueOf(jsonObject.get("stashId"));
Double stopLoss = (Double) jsonObject.get("stopLoss");
Double stopWin = (Double) jsonObject.get("stopWin");
String tradingCode = String.valueOf(jsonObject.get("tradingCode"));
String buySellType = String.valueOf(jsonObject.get("buySellType"));
ForexData forexData = getMarketQuotationByCode(tradingCode);
if (null != stopLoss || null != stopWin) { //判断止损止赢是否合理 如果stopLoss stopWin都为null则跳过
boolean winOrLossStopBoolean = getWinOrLossStop(stopLoss, stopWin, buySellType, forexData);
if (winOrLossStopBoolean == false) {
return JSONObject.parseObject("止损或获利输入错误");
}
}
TakeStash takeStash=new TakeStash();
takeStash.setStashId(stashId);
takeStash.setStopLoss(stopLoss);
takeStashService.updateByPrimaryKey(takeStash);
return JSONObject.parseObject("修改持仓成功");
}
//当前持仓平仓 status设置为2
public JSONObject pingcangTakeStash(@RequestBody JSONObject jsonObject){
return null;
}
//返回持仓对象
private TakeStash returnTakeStash(String memberId, String trainingId, String tradingCode, String buySellType, Double transactionVolume, Double buyOrSellPic, String stopLoss, String stopWin) {
private TakeStash returnTakeStash(String memberId, String trainingId, String tradingCode, String buySellType, Double transactionVolume, Double buyOrSellPic, Double stopLoss, Double stopWin) {
TakeStash takeStash = new TakeStash();
Date now = new Date();
String orderNumberStr = DateUtil.format(now, "yyyyMMddHHmmss") + System.currentTimeMillis();
@ -133,8 +163,8 @@ public class TradingController {
takeStash.setBuySellType(buySellType);
takeStash.setVolumeTransaction(transactionVolume);
takeStash.setPriceTransaction(buyOrSellPic);
takeStash.setStopLoss(Double.parseDouble(stopLoss));
takeStash.setStopWin(Double.parseDouble(stopWin));
takeStash.setStopLoss(stopLoss);
takeStash.setStopWin(stopWin);
takeStash.setTimeTransaction(now);
takeStash.setStatus(0);
return takeStash;
@ -147,4 +177,53 @@ public class TradingController {
member.setMarginUsed(marginUsed + availableFunds); //设置已用保证金
memberService.updateByPrimaryKey(member);
}
//判断止损止赢 逻辑:如果方式为买 则止损低于买价 获利高于买价 / 如果方式为卖 则止损高于卖价 获利低于买价 (可以只传一个参数)
private boolean getWinOrLossStop(Double stopLoss, Double stopWin, String buySellType, ForexData forexData) {
if ("buy".equals(buySellType)) {
Double buyPic = Double.valueOf(forexData.getBuyPic());
//判断stopLoss 和stopWin 是否为空
if(null!=stopLoss && null!=stopWin){
if (stopLoss < buyPic && stopWin > buyPic) {
return true;
}
return false;
}
if (null == stopLoss) {
if (stopWin > buyPic) {
return true;
}
return false;
}
if (null == stopWin) {
if (stopLoss < buyPic) {
return true;
}
return false;
}
} else if ("sell".equals(buySellType)) {
Double sellPic = Double.valueOf(forexData.getSellPic());
if(null!=stopLoss && null!=stopWin){
if (stopLoss > sellPic && stopWin < sellPic) {
return true;
}
return false;
}
if (null == stopLoss) {
if(stopWin<sellPic){
return true;
}
return false;
}
if (null == stopWin) {
if(stopLoss > sellPic){
return true;
}
return false;
}
}
return false;
}
}

@ -25,4 +25,9 @@ public class MemberService {
public void updateByPrimaryKey(Member member){
memberMapper.updateByPrimaryKey(member);
}
public Member selectByPrimaryKey(String memberId){
Member member = memberMapper.selectByPrimaryKey(memberId);
return member;
}
}

@ -2,16 +2,36 @@ package com.sztzjy.forex.trading_trading.service;
import com.sztzjy.forex.trading_trading.entity.MemberExample;
import com.sztzjy.forex.trading_trading.entity.TakeStash;
import com.sztzjy.forex.trading_trading.entity.TakeStashExample;
import com.sztzjy.forex.trading_trading.mappers.TakeStashMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TakeStashService {
@Autowired
TakeStashMapper takeStashMapper;
public void insertTakeStash(TakeStash takeStash){
int insert = takeStashMapper.insert(takeStash);
takeStashMapper.insert(takeStash);
}
public List<TakeStash> findTakeStashByTrainingIdAndMemberIdAndStatus(String trainingId, String memberId, Integer status) {
TakeStashExample example=new TakeStashExample();
TakeStashExample.Criteria criteria = example.createCriteria();
criteria.andMemberIdEqualTo(memberId).andTrainingIdEqualTo(trainingId).andStatusEqualTo(status);
List<TakeStash> takeStashes = takeStashMapper.selectByExample(example);
return takeStashes;
}
public TakeStash selectByPrimaryKey(String stashId){
TakeStash takeStash = takeStashMapper.selectByPrimaryKey(stashId);
return takeStash;
}
public void updateByPrimaryKey(TakeStash takeStash){
takeStashMapper.updateByPrimaryKey(takeStash);
}
}

Loading…
Cancel
Save