src/main/java/com/xcong/excoin/modules/documentary/controller/TraderController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/dto/TradeOrderInfoDto.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/vo/MyFollowOrderVo.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/vo/TradeHistoryOrderInfoVo.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/vo/TradeOrderInfoVo.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/xcong/excoin/modules/documentary/vo/TradeProfitInfoVo.java | ●●●●● patch | view | raw | blame | history |
src/main/java/com/xcong/excoin/modules/documentary/controller/TraderController.java
@@ -10,17 +10,16 @@ import org.springframework.web.bind.annotation.RestController; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.documentary.dto.UpdateDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.TradeOrderInfoDto; import com.xcong.excoin.modules.documentary.dto.UpdateTradeSetInfoDto; import com.xcong.excoin.modules.documentary.service.DocumentaryService; import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetInfoVo; import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo; import com.xcong.excoin.modules.documentary.vo.TradeHistoryOrderInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeOrderInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeProfitInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeSetInfoVo; import com.xcong.excoin.modules.documentary.vo.TraderStatusVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; @@ -46,6 +45,36 @@ } /** * 交易员设置--头部 */ @ApiOperation(value="交易员设置--头部", notes="交易员设置--头部") @ApiResponses({@ApiResponse( code = 200, message = "success", response = TradeProfitInfoVo.class)}) @GetMapping(value = "/getTradeProfitInfo") public Result getTradeProfitInfo() { return documentaryService.getTradeProfitInfo(); } /** * 交易员设置--当前带单 */ @ApiOperation(value="交易员设置--当前带单", notes="交易员设置--当前带单") @ApiResponses({@ApiResponse( code = 200, message = "success", response = TradeOrderInfoVo.class)}) @GetMapping(value = "/getTradeOrderInfo") public Result getTradeOrderInfo(@RequestBody @Valid TradeOrderInfoDto tradeOrderInfoDto) { return documentaryService.getTradeOrderInfo(tradeOrderInfoDto); } /** * 交易员设置--历史带单 */ @ApiOperation(value="交易员设置--历史带单", notes="交易员设置--历史带单") @ApiResponses({@ApiResponse( code = 200, message = "success", response = TradeHistoryOrderInfoVo.class)}) @GetMapping(value = "/getTradeHistoryOrderInfo") public Result getTradeHistoryOrderInfo(@RequestBody @Valid TradeOrderInfoDto tradeOrderInfoDto) { return documentaryService.getTradeHistoryOrderInfo(tradeOrderInfoDto); } /** * 成为交易员---立即入驻 */ @ApiOperation(value="成为交易员---立即入驻", notes="成为交易员---立即入驻") src/main/java/com/xcong/excoin/modules/documentary/dto/TradeOrderInfoDto.java
New file @@ -0,0 +1,22 @@ package com.xcong.excoin.modules.documentary.dto; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "TradeOrderInfoDto", description = "参数接受类") public class TradeOrderInfoDto { @NotNull @Min(1) @ApiModelProperty(value = "第几页", example = "1") private int pageNum; @NotNull @ApiModelProperty(value = "每页数量", example = "10") private int pageSize; } src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java
@@ -11,6 +11,7 @@ import com.xcong.excoin.modules.documentary.dto.HistoryOrderRecordsDto; import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto; import com.xcong.excoin.modules.documentary.dto.MyFollowTraderInfoDto; import com.xcong.excoin.modules.documentary.dto.TradeOrderInfoDto; import com.xcong.excoin.modules.documentary.dto.UpdateDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.UpdateTradeSetInfoDto; import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; @@ -53,4 +54,10 @@ public Result updateTradeSetInfo(@Valid UpdateTradeSetInfoDto updateTradeSetInfoDto); public Result getTradeProfitInfo(); public Result getTradeOrderInfo(@Valid TradeOrderInfoDto tradeOrderInfoDto); public Result getTradeHistoryOrderInfo(@Valid TradeOrderInfoDto tradeOrderInfoDto); } src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java
@@ -10,7 +10,6 @@ import javax.annotation.Resource; import javax.validation.Valid; import org.apache.http.impl.NoConnectionReuseStrategy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -36,6 +35,7 @@ import com.xcong.excoin.modules.documentary.dto.HistoryOrderRecordsDto; import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto; import com.xcong.excoin.modules.documentary.dto.MyFollowTraderInfoDto; import com.xcong.excoin.modules.documentary.dto.TradeOrderInfoDto; import com.xcong.excoin.modules.documentary.dto.UpdateDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.UpdateTradeSetInfoDto; import com.xcong.excoin.modules.documentary.entity.FollowFollowerOrderRelationEntity; @@ -53,6 +53,9 @@ import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo; import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo; import com.xcong.excoin.modules.documentary.vo.MyFollowTraderInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeHistoryOrderInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeOrderInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeProfitInfoVo; import com.xcong.excoin.modules.documentary.vo.TradeSetInfoVo; import com.xcong.excoin.modules.documentary.vo.TraderStatusVo; import com.xcong.excoin.modules.member.dao.MemberDao; @@ -258,6 +261,7 @@ MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo(); //获取交易员信息 Long orderId = contractOrderEntity.getId(); myFollowOrderVo.setOrderId(orderId); FollowFollowerOrderRelationEntity FollowFollowerOrderRelation = followFollowerOrderRelationDao.selectHistoryOneByorderId(orderId); Long tradeId = FollowFollowerOrderRelation.getTradeId(); FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId); @@ -311,6 +315,7 @@ MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo(); //获取交易员信息 Long orderId = contractHoldOrderEntity.getId(); myFollowOrderVo.setOrderId(orderId); FollowFollowerOrderRelationEntity FollowFollowerOrderRelation = followFollowerOrderRelationDao.selectNowOneByorderId(orderId); Long tradeId = FollowFollowerOrderRelation.getTradeId(); FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId); @@ -680,6 +685,164 @@ followTraderInfoDao.updateById(followTraderInfoEntity); return Result.ok(MessageSourceUtils.getString("member_service_0024")); } @Override public Result getTradeProfitInfo() { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); TradeProfitInfoVo tradeProfitInfoVo = new TradeProfitInfoVo(); //获取【交易员信息表】数据 FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId); if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) { String avatar = followTraderInfoEntity.getAvatar(); tradeProfitInfoVo.setAvatar(avatar); String nickname = followTraderInfoEntity.getNickname(); tradeProfitInfoVo.setNickname(nickname); String declaration = followTraderInfoEntity.getDeclaration(); tradeProfitInfoVo.setDeclaration(declaration); } //获取【交易员收益信息】数据 FollowTraderProfitInfoVo followTraderProfitInfoVo = followTraderProfitInfoDao.selectOneByMemberId(memberId); if(ObjectUtil.isNotEmpty(followTraderProfitInfoVo)) { BigDecimal totalProfitRatio = followTraderProfitInfoVo.getTotalProfitRatio(); tradeProfitInfoVo.setTotalProfitRatio(totalProfitRatio); BigDecimal totalProfit = followTraderProfitInfoVo.getTotalProfit(); tradeProfitInfoVo.setTotalProfit(totalProfit); BigDecimal followerTotalProfit = followTraderProfitInfoVo.getFollowerTotalProfit(); tradeProfitInfoVo.setFollowerTotalProfit(followerTotalProfit); BigDecimal winRate = followTraderProfitInfoVo.getWinRate(); tradeProfitInfoVo.setWinRate(winRate); BigDecimal totalFollowerCnt = followTraderProfitInfoVo.getTotalFollowerCnt(); tradeProfitInfoVo.setTotalFollowerCnt(totalFollowerCnt); BigDecimal totalOrderCnt = followTraderProfitInfoVo.getTotalOrderCnt(); tradeProfitInfoVo.setTotalOrderCnt(totalOrderCnt); } return Result.ok(tradeProfitInfoVo); } @Override public Result getTradeOrderInfo(@Valid TradeOrderInfoDto tradeOrderInfoDto) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); MemberEntity member = memberDao.selectById(memberId); List<TradeOrderInfoVo> myFollowOrderVos = new ArrayList<>(); //当前跟单 Page<ContractHoldOrderEntity> page = new Page<>(tradeOrderInfoDto.getPageNum(), tradeOrderInfoDto.getPageSize()); IPage<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getMyFollowOrderNowRecords(page, memberId); List<ContractHoldOrderEntity> records = contractHoldOrderEntitys.getRecords(); if(CollUtil.isNotEmpty(records)) { for(ContractHoldOrderEntity contractHoldOrderEntity : records) { TradeOrderInfoVo myFollowOrderVo = new TradeOrderInfoVo(); //获取交易员信息 Long orderId = contractHoldOrderEntity.getId(); myFollowOrderVo.setOrderId(orderId); FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId); String nickname = followTraderInfoEntity.getNickname(); myFollowOrderVo.setNickname(nickname); String symbol = contractHoldOrderEntity.getSymbol(); myFollowOrderVo.setSymbol(symbol); int orderType = contractHoldOrderEntity.getOpeningType(); myFollowOrderVo.setOrderType(orderType); int leverRatio = contractHoldOrderEntity.getLeverRatio(); myFollowOrderVo.setLeverRatio(leverRatio); int symbolCnt = contractHoldOrderEntity.getSymbolCnt(); myFollowOrderVo.setSymbolCnt(symbolCnt); BigDecimal bondAmount = contractHoldOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setBondAmount(bondAmount); BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setOpeningPrice(openingPrice); String orderNo = contractHoldOrderEntity.getOrderNo(); myFollowOrderVo.setOrderNo(orderNo); Date openingTime = contractHoldOrderEntity.getCreateTime(); myFollowOrderVo.setOpeningTime(openingTime); // 获取最新价 BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol()))); myFollowOrderVo.setNewPrice(newPrice); BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol()); // 盈亏 BigDecimal rewardRatio = BigDecimal.ZERO; // 开多 if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) { // (最新价-开仓价)*规格*张数 rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); // 开空 } else { // (开仓价-最新价)*规格*张数 rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt())); } if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) { PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) { rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam())); } } myFollowOrderVo.setRewardAmount(rewardRatio.setScale(2, BigDecimal.ROUND_DOWN)); // 回报率 BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); myFollowOrderVo.setRewardRatio(returnRate.setScale(2, BigDecimal.ROUND_DOWN)); myFollowOrderVos.add(myFollowOrderVo); } } return Result.ok(myFollowOrderVos); } @Override public Result getTradeHistoryOrderInfo(@Valid TradeOrderInfoDto tradeOrderInfoDto) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); List<TradeHistoryOrderInfoVo> myFollowOrderVos = new ArrayList<>(); //历史跟单 Page<ContractOrderEntity> page = new Page<>(tradeOrderInfoDto.getPageNum(), tradeOrderInfoDto.getPageSize()); IPage<ContractOrderEntity> contractOrderEntitys = followFollowerProfitDao.getMyFollowOrderHistoryRecords(page, memberId); List<ContractOrderEntity> records = contractOrderEntitys.getRecords(); if(CollUtil.isNotEmpty(records)) { for(ContractOrderEntity contractOrderEntity : records) { TradeHistoryOrderInfoVo myFollowOrderVo = new TradeHistoryOrderInfoVo(); //获取交易员信息 FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId); String nickname = followTraderInfoEntity.getNickname(); myFollowOrderVo.setNickname(nickname); Long orderId = contractOrderEntity.getId(); myFollowOrderVo.setOrderId(orderId); String symbol = contractOrderEntity.getSymbol(); myFollowOrderVo.setSymbol(symbol); int orderType = contractOrderEntity.getOrderType(); myFollowOrderVo.setOrderType(orderType); int leverRatio = contractOrderEntity.getLeverRatio(); myFollowOrderVo.setLeverRatio(leverRatio); BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setRewardAmount(rewardAmount); BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setRewardRatio(rewardRatio); int symbolCnt = contractOrderEntity.getSymbolCnt(); myFollowOrderVo.setSymbolCnt(symbolCnt); BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setBondAmount(bondAmount); BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setOpeningPrice(openingPrice); BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_DOWN); myFollowOrderVo.setClosingPrice(closingPrice); Date openingTime = contractOrderEntity.getOpeningTime(); myFollowOrderVo.setOpeningTime(openingTime); Date closingTime = contractOrderEntity.getClosingTime(); myFollowOrderVo.setClosingTime(closingTime); String orderNo = contractOrderEntity.getOrderNo(); myFollowOrderVo.setOrderNo(orderNo); myFollowOrderVos.add(myFollowOrderVo); } } return Result.ok(myFollowOrderVos); } src/main/java/com/xcong/excoin/modules/documentary/vo/MyFollowOrderVo.java
@@ -54,6 +54,9 @@ @ApiModelProperty("订单编号") private String orderNo; @ApiModelProperty("订单ID") private long orderId; @ApiModelProperty("交易员") private String nickname; src/main/java/com/xcong/excoin/modules/documentary/vo/TradeHistoryOrderInfoVo.java
New file @@ -0,0 +1,62 @@ package com.xcong.excoin.modules.documentary.vo; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "TradeHistoryOrderInfoVo", description = "历史带单") public class TradeHistoryOrderInfoVo { @ApiModelProperty("币种") private String symbol; @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空") private int orderType; @ApiModelProperty("杠杆") private int leverRatio; @ApiModelProperty("开仓价") private BigDecimal openingPrice; @ApiModelProperty("平仓价") private BigDecimal closingPrice; @ApiModelProperty("盈亏金额") private BigDecimal rewardAmount; @ApiModelProperty("盈亏比例") private BigDecimal rewardRatio; @ApiModelProperty("张数") private int symbolCnt; @ApiModelProperty("保证金") private BigDecimal bondAmount; @ApiModelProperty("当前价") private BigDecimal newPrice; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("开仓时间") private Date openingTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("平仓时间") private Date closingTime; @ApiModelProperty("订单编号") private String orderNo; @ApiModelProperty("订单Id") private long orderId; @ApiModelProperty("交易员") private String nickname; } src/main/java/com/xcong/excoin/modules/documentary/vo/TradeOrderInfoVo.java
New file @@ -0,0 +1,62 @@ package com.xcong.excoin.modules.documentary.vo; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "TradeOrderInfoVo", description = "返回类") public class TradeOrderInfoVo { @ApiModelProperty("币种") private String symbol; @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空") private int orderType; @ApiModelProperty("杠杆") private int leverRatio; @ApiModelProperty("开仓价") private BigDecimal openingPrice; @ApiModelProperty("平仓价") private BigDecimal closingPrice; @ApiModelProperty("盈亏金额") private BigDecimal rewardAmount; @ApiModelProperty("盈亏比例") private BigDecimal rewardRatio; @ApiModelProperty("张数") private int symbolCnt; @ApiModelProperty("保证金") private BigDecimal bondAmount; @ApiModelProperty("当前价") private BigDecimal newPrice; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("开仓时间") private Date openingTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @ApiModelProperty("平仓时间") private Date closingTime; @ApiModelProperty("订单编号") private String orderNo; @ApiModelProperty("订单Id") private long orderId; @ApiModelProperty("交易员") private String nickname; } src/main/java/com/xcong/excoin/modules/documentary/vo/TradeProfitInfoVo.java
New file @@ -0,0 +1,59 @@ package com.xcong.excoin.modules.documentary.vo; import java.math.BigDecimal; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "TradeProfitInfoVo", description = "返回类") public class TradeProfitInfoVo { /** * 累计收益率 */ @ApiModelProperty("累计收益率") private BigDecimal totalProfitRatio; /** * 带单总收益 */ @ApiModelProperty("带单总收益") private BigDecimal totalProfit; /** * 跟随者总收益 */ @ApiModelProperty("跟随者总收益") private BigDecimal followerTotalProfit; /** * 胜率 */ @ApiModelProperty("胜率") private BigDecimal winRate; /** * 累计跟随人数 */ @ApiModelProperty("累计跟随人数") private BigDecimal totalFollowerCnt; /** * 交易笔数 */ @ApiModelProperty("交易笔数") private BigDecimal totalOrderCnt; /** * 头像 */ @ApiModelProperty("头像") private String avatar; /** * 名称 */ @ApiModelProperty("名称") private String nickname; /** * 宣言 */ @ApiModelProperty("宣言") private String declaration; }