From 7fdce27927b4dfee1e1c8bfd0755e1e5dd28ce93 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 30 Jul 2020 16:52:01 +0800 Subject: [PATCH] 20200730 代码提交 --- src/main/java/com/xcong/excoin/modules/documentary/dto/UpdateDocumentaryOrderSetDto.java | 38 +++ src/main/java/com/xcong/excoin/modules/documentary/dto/CancelDocumentaryOrderSetDto.java | 17 + src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java | 17 + src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java | 2 src/main/java/com/xcong/excoin/modules/documentary/dto/DocumentaryOrderSetDto.java | 40 +++ src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml | 10 src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java | 6 src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java | 4 src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml | 18 + src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java | 78 ++++++ src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java | 356 ++++++++++++++++++++----------- src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderSetInfoVo.java | 32 ++ src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderInfoVo.java | 22 ++ 13 files changed, 500 insertions(+), 140 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java b/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java index afc32f9..521122f 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java @@ -12,13 +12,19 @@ import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto; import com.xcong.excoin.modules.coin.parameter.vo.MemberAgentIntoInfoVo; +import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto; +import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto; 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.UpdateDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.service.DocumentaryService; +import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderInfoVo; +import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetInfoVo; import com.xcong.excoin.modules.documentary.vo.FollowInfoVo; import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo; +import com.xcong.excoin.modules.documentary.vo.FollowTraderProfitInfoVo; import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo; import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo; import com.xcong.excoin.modules.documentary.vo.MyFollowTraderInfoVo; @@ -52,7 +58,7 @@ * 交易员列表 */ @ApiOperation(value="交易员列表", notes="交易员列表") - @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberIsTradeVo.class)}) + @ApiResponses({@ApiResponse( code = 200, message = "success", response = FollowTraderProfitInfoVo.class)}) @PostMapping(value = "/getFollowTraderProfitInfo") public Result getFollowTraderProfitInfo(@RequestBody @Valid RecordsPageDto recordsPageDto) { return documentaryService.getFollowTraderProfitInfo(recordsPageDto); @@ -91,14 +97,25 @@ } /** - * 我的跟单--我的跟单 + * 我的跟单--我的跟单--当前跟单 * @return */ - @ApiOperation(value="我的跟单--我的跟单", notes="我的跟单--我的跟单") + @ApiOperation(value="我的跟单--我的跟单--当前跟单", notes="我的跟单--我的跟单--当前跟单") @ApiResponses({@ApiResponse( code = 200, message = "success", response = MyFollowOrderVo.class)}) - @PostMapping(value = "/getMyFollowOrderRecords") - public Result getMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) { - return documentaryService.getMyFollowOrderRecords(myFollowOrderDto); + @PostMapping(value = "/getNowMyFollowOrderRecords") + public Result getNowMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) { + return documentaryService.getNowMyFollowOrderRecords(myFollowOrderDto); + } + + /** + * 我的跟单--我的跟单--历史跟单 + * @return + */ + @ApiOperation(value="我的跟单--我的跟单--历史跟单", notes="我的跟单--我的跟单--历史跟单") + @ApiResponses({@ApiResponse( code = 200, message = "success", response = MyFollowOrderVo.class)}) + @PostMapping(value = "/getHistoryMyFollowOrderRecords") + public Result getHistoryMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) { + return documentaryService.getHistoryMyFollowOrderRecords(myFollowOrderDto); } /** @@ -111,6 +128,55 @@ return documentaryService.getMyFollowTraderInfo(myFollowTraderInfoDto); } + /** + * 跟单---跟单设置--跟单合约 + */ + @ApiOperation(value="跟单---跟单设置--跟单合约", notes="跟单---跟单设置--跟单合约") + @ApiResponses({@ApiResponse( code = 200, message = "success", response = DocumentaryOrderInfoVo.class)}) + @GetMapping(value = "/getDocumentaryOrderInfo") + public Result getDocumentaryOrderInfo() { + return documentaryService.getDocumentaryOrderInfo(); + } + + /** + * 跟单---跟单设置 + */ + @ApiOperation(value="跟单---跟单设置", notes="跟单---跟单设置") + @PostMapping(value = "/getDocumentaryOrderSet") + public Result getDocumentaryOrderSet(@RequestBody @Valid DocumentaryOrderSetDto documentaryOrderSetDto) { + return documentaryService.getDocumentaryOrderSet(documentaryOrderSetDto); + } + + /** + * 跟单---跟单设置--进入编辑 + */ + @ApiOperation(value="跟单---跟单设置--进入编辑", notes="跟单---跟单设置--进入编辑") + @ApiResponses({@ApiResponse( code = 200, message = "success", response = DocumentaryOrderSetInfoVo.class)}) + @GetMapping(value = "/getDocumentaryOrderSetInfo") + public Result getDocumentaryOrderSetInfo() { + return documentaryService.getDocumentaryOrderSetInfo(); + } + + /** + * 跟单---跟单设置--取消跟随 + */ + @ApiOperation(value="跟单---跟单设置--取消跟随", notes="跟单---跟单设置--取消跟随") + @PostMapping(value = "/cancelDocumentaryOrderSetInfo") + public Result cancelDocumentaryOrderSetInfo(@RequestBody @Valid CancelDocumentaryOrderSetDto cancelDocumentaryOrderSetDto) { + return documentaryService.cancelDocumentaryOrderSetInfo(cancelDocumentaryOrderSetDto); + } + + /** + * 跟单---跟单设置--更新 + */ + @ApiOperation(value="跟单---跟单设置--更新", notes="跟单---跟单设置--更新") + @PostMapping(value = "/updateDocumentaryOrderSetInfo") + public Result updateDocumentaryOrderSetInfo(@RequestBody @Valid UpdateDocumentaryOrderSetDto updateDocumentaryOrderSetDto) { + return documentaryService.updateDocumentaryOrderSetInfo(updateDocumentaryOrderSetDto); + } + + + diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java index 86126a7..79a96df 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java @@ -30,5 +30,7 @@ IPage<FollowFollowerProfitEntity> selectFollowFollowerProfitEntitys(Page<FollowFollowerProfitEntity> page, @Param("memberId")Long memberId); + + FollowFollowerProfitEntity selectDocumentaryOrderSetInfoBymemberIdAndTradeId(@Param("memberId")Long memberId, @Param("traderId")Long traderId); } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java index 9c14875..aa057fc 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java @@ -3,8 +3,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity; +import io.lettuce.core.dynamic.annotation.Param; + /** * @author helius */ public interface FollowFollowerSettingDao extends BaseMapper<FollowFollowerSettingEntity> { + + FollowFollowerSettingEntity selectDocumentaryOrderSetInfoBymemberId(@Param("memberId")Long memberId); + + FollowFollowerSettingEntity selectOneBymemberIdAndTradeId(@Param("memberId")Long memberId, @Param("traderId")Long traderId); } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dto/CancelDocumentaryOrderSetDto.java b/src/main/java/com/xcong/excoin/modules/documentary/dto/CancelDocumentaryOrderSetDto.java new file mode 100644 index 0000000..c8ace6c --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/dto/CancelDocumentaryOrderSetDto.java @@ -0,0 +1,17 @@ +package com.xcong.excoin.modules.documentary.dto; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "CancelDocumentaryOrderSetDto", description = "参数接受类") +public class CancelDocumentaryOrderSetDto { + + @NotNull + @ApiModelProperty(value = "交易员ID", example = "1") + private Long traderId; + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dto/DocumentaryOrderSetDto.java b/src/main/java/com/xcong/excoin/modules/documentary/dto/DocumentaryOrderSetDto.java new file mode 100644 index 0000000..10bc431 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/dto/DocumentaryOrderSetDto.java @@ -0,0 +1,40 @@ +package com.xcong.excoin.modules.documentary.dto; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "DocumentaryOrderSetDto", description = "参数接受类") +public class DocumentaryOrderSetDto { + + @NotNull + @ApiModelProperty(value = "交易员ID", example = "1") + private Long traderId; + + @NotNull + @ApiModelProperty(value = "跟单合约(多个,且逗号隔开)", example = "BTC/USDT") + private String symbols; + + @NotNull + @ApiModelProperty(value = "杠杆", example = "50") + private int levelRate; + + @NotNull + @ApiModelProperty(value = "跟单方式类型1:固定张数2:固定比例", example = "1") + private Integer followType; + + + @NotNull + @ApiModelProperty(value = "跟单张数或比例", example = "2") + private Integer followCnt; + + @NotNull + @ApiModelProperty(value = "跟单最大持仓张数数量", example = "2") + private int maxFollowCnt; + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java b/src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java index f940068..8514a42 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java @@ -24,8 +24,4 @@ @ApiModelProperty(value = "会员ID", example = "12543") private Long memberId; - @NotNull - @ApiModelProperty(value = "类型 1:当前跟单2:历史跟单", example = "1") - private int orderType; - } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dto/UpdateDocumentaryOrderSetDto.java b/src/main/java/com/xcong/excoin/modules/documentary/dto/UpdateDocumentaryOrderSetDto.java new file mode 100644 index 0000000..16ad748 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/dto/UpdateDocumentaryOrderSetDto.java @@ -0,0 +1,38 @@ +package com.xcong.excoin.modules.documentary.dto; + +import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "UpdateDocumentaryOrderSetDto", description = "参数接受类") +public class UpdateDocumentaryOrderSetDto { + + @NotNull + @ApiModelProperty(value = "交易员ID", example = "1") + private Long traderId; + + @NotNull + @ApiModelProperty(value = "跟单合约(多个,且逗号隔开)", example = "BTC/USDT") + private String symbols; + + @NotNull + @ApiModelProperty(value = "杠杆", example = "50") + private int levelRate; + + @NotNull + @ApiModelProperty(value = "跟单方式类型1:固定张数2:固定比例", example = "1") + private Integer followType; + + + @NotNull + @ApiModelProperty(value = "跟单张数或比例", example = "2") + private Integer followCnt; + + @NotNull + @ApiModelProperty(value = "跟单最大持仓张数数量", example = "2") + private int maxFollowCnt; + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java b/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java index 72b253a..6e38977 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java @@ -5,10 +5,13 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto; +import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto; +import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto; 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.UpdateDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; public interface DocumentaryService extends IService<FollowTraderProfitInfoEntity> { @@ -23,8 +26,20 @@ public Result getFollowInfo(); - public Result getMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto); + public Result getNowMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto); + + public Result getHistoryMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto); public Result getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto); + public Result getDocumentaryOrderInfo(); + + public Result getDocumentaryOrderSet(@Valid DocumentaryOrderSetDto documentaryOrderSetDto); + + public Result getDocumentaryOrderSetInfo(); + + public Result cancelDocumentaryOrderSetInfo(@Valid CancelDocumentaryOrderSetDto cancelDocumentaryOrderSetDto); + + public Result updateDocumentaryOrderSetInfo(@Valid UpdateDocumentaryOrderSetDto updateDocumentaryOrderSetDto); + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java index 36fb9b9..721d0f4 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java @@ -1,6 +1,7 @@ package com.xcong.excoin.modules.documentary.service.impl; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -10,6 +11,7 @@ import javax.validation.Valid; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -22,17 +24,24 @@ import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao; +import com.xcong.excoin.modules.documentary.dao.FollowFollowerSettingDao; import com.xcong.excoin.modules.documentary.dao.FollowTraderInfoDao; import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitDetailDao; import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao; +import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto; +import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto; 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.UpdateDocumentaryOrderSetDto; import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity; +import com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity; import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; import com.xcong.excoin.modules.documentary.service.DocumentaryService; +import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderInfoVo; +import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetInfoVo; import com.xcong.excoin.modules.documentary.vo.FollowInfoVo; import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo; import com.xcong.excoin.modules.documentary.vo.FollowTraderProfitInfoVo; @@ -41,10 +50,15 @@ import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo; import com.xcong.excoin.modules.documentary.vo.MyFollowTraderInfoVo; import com.xcong.excoin.modules.member.dao.MemberDao; +import com.xcong.excoin.modules.member.dao.MemberLevelRateDao; +import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberLevelRateEntity; +import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; import com.xcong.excoin.utils.CacheSettingUtils; import com.xcong.excoin.utils.CoinTypeConvert; +import com.xcong.excoin.utils.MessageSourceUtils; import com.xcong.excoin.utils.RedisUtils; import cn.hutool.core.collection.CollUtil; @@ -73,6 +87,13 @@ private CacheSettingUtils cacheSettingUtils; @Resource private ContractHoldOrderDao contractHoldOrderDao; + @Resource + private MemberLevelRateDao memberLevelRateDao; + @Resource + private MemberWalletContractDao memberWalletContractDao; + @Resource + private FollowFollowerSettingDao followFollowerSettingDao; + @Override public Result getMemberIsTradeInfo() { @@ -172,35 +193,6 @@ totalPrincipals = totalPrincipals.add(totalPrincipal); BigDecimal totalProfit = followFollowerProfitEntity.getTotalProfit(); totalProfits = totalProfits.add(totalProfit); - - //当前跟单 - List<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getFollowOrderNowRecords(memberId); - if(CollUtil.isNotEmpty(contractHoldOrderEntitys)) { - for(ContractHoldOrderEntity contractHoldOrderEntity : contractHoldOrderEntitys) { - // 获取最新价 - BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol()))); - 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())); - } - } - totalProfits = totalProfits.add(rewardRatio); - } - } } } followInfoVo.setTotalPrincipal(totalPrincipals.setScale(4, BigDecimal.ROUND_DOWN)); @@ -210,16 +202,12 @@ } @Override - public Result getMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto) { + public Result getHistoryMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); - MemberEntity member = memberDao.selectById(memberId); - - int type = myFollowOrderDto.getOrderType(); Page<MyFollowOrderVo> result = new Page<>(); List<MyFollowOrderVo> myFollowOrderVos = result.getRecords(); //历史跟单 - if(type == 2) { Page<ContractOrderEntity> page = new Page<>(myFollowOrderDto.getPageNum(), myFollowOrderDto.getPageSize()); IPage<ContractOrderEntity> contractOrderEntitys = followFollowerProfitDao.getMyFollowOrderHistoryRecords(page, memberId); @@ -254,64 +242,73 @@ myFollowOrderVos.add(myFollowOrderVo); } } - }else { - //当前跟单 - Page<ContractHoldOrderEntity> page = new Page<>(myFollowOrderDto.getPageNum(), myFollowOrderDto.getPageSize()); - IPage<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getMyFollowOrderNowRecords(page, myFollowOrderDto.getMemberId()); - - List<ContractHoldOrderEntity> records = contractHoldOrderEntitys.getRecords(); - if(CollUtil.isNotEmpty(records)) { - for(ContractHoldOrderEntity contractHoldOrderEntity : records) { - MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo(); - 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(4, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setBondAmount(bondAmount); - BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(4, 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()))); - 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(4, BigDecimal.ROUND_DOWN)); - - // 回报率 - BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); - myFollowOrderVo.setRewardRatio(returnRate.setScale(4, BigDecimal.ROUND_DOWN)); - - myFollowOrderVos.add(myFollowOrderVo); - } - } - } - + return Result.ok(myFollowOrderVos); + + } + @Override + public Result getNowMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto) { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + MemberEntity member = memberDao.selectById(memberId); + + Page<MyFollowOrderVo> result = new Page<>(); + List<MyFollowOrderVo> myFollowOrderVos = result.getRecords(); + //当前跟单 + Page<ContractHoldOrderEntity> page = new Page<>(myFollowOrderDto.getPageNum(), myFollowOrderDto.getPageSize()); + IPage<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getMyFollowOrderNowRecords(page, myFollowOrderDto.getMemberId()); + + List<ContractHoldOrderEntity> records = contractHoldOrderEntitys.getRecords(); + if(CollUtil.isNotEmpty(records)) { + for(ContractHoldOrderEntity contractHoldOrderEntity : records) { + MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo(); + 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(4, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setBondAmount(bondAmount); + BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(4, 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()))); + 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(4, BigDecimal.ROUND_DOWN)); + + // 回报率 + BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); + myFollowOrderVo.setRewardRatio(returnRate.setScale(4, BigDecimal.ROUND_DOWN)); + + myFollowOrderVos.add(myFollowOrderVo); + } + } + return Result.ok(myFollowOrderVos); } @@ -320,7 +317,6 @@ public Result getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto) { //获取用户ID Long memberId = LoginUserUtils.getAppLoginUser().getId(); - MemberEntity member = memberDao.selectById(memberId); Page<MyFollowTraderInfoVo> result = new Page<>(); List<MyFollowTraderInfoVo> myFollowOrderVos = result.getRecords(); @@ -340,44 +336,148 @@ myFollowTraderInfoVo.setNickname(nickname); BigDecimal totalPrincipal = FollowFollowerProfitEntity.getTotalPrincipal(); myFollowTraderInfoVo.setTotalPrincipal(totalPrincipal); - - BigDecimal totalProfit = BigDecimal.ZERO; - Map<String, Object> columnMap = new HashMap<>(); - columnMap.put("member_id", memberId); - contractHoldOrderDao.selectByMap(columnMap ); - List<ContractHoldOrderEntity> contractHoldOrderEntitys = contractHoldOrderDao.selectByMap(columnMap ); - if(CollUtil.isNotEmpty(contractHoldOrderEntitys)) { - for(ContractHoldOrderEntity contractHoldOrderEntity : contractHoldOrderEntitys) { - // 获取最新价 - BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol()))); - 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())); - } - } - totalProfit = totalProfit.add(rewardRatio); - } - myFollowTraderInfoVo.setTotalProfit(totalProfit.setScale(4, BigDecimal.ROUND_DOWN)); - } - myFollowOrderVos.add(myFollowTraderInfoVo); - } + BigDecimal totalProfit = FollowFollowerProfitEntity.getTotalProfit(); + myFollowTraderInfoVo.setTotalProfit(totalProfit.setScale(4, BigDecimal.ROUND_DOWN)); + myFollowOrderVos.add(myFollowTraderInfoVo); + } } return Result.ok(result); } + + @Override + public Result getDocumentaryOrderInfo() { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("member_id", memberId); + List<DocumentaryOrderInfoVo> list = new ArrayList<>(); + //获取对应的杠杆等信息和可用余额 + BigDecimal availableBalance = BigDecimal.ZERO; + List<MemberWalletContractEntity> selectByMap = memberWalletContractDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(selectByMap)) { + for(MemberWalletContractEntity MemberWalletContractEntity : selectByMap) { + availableBalance = MemberWalletContractEntity.getAvailableBalance(); + } + } + List<MemberLevelRateEntity> memberLevelRateEntitys = memberLevelRateDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(memberLevelRateEntitys)) { + for(MemberLevelRateEntity memberLevelRateEntity : memberLevelRateEntitys) { + DocumentaryOrderInfoVo documentaryOrderInfoVo = new DocumentaryOrderInfoVo(); + String symbol = memberLevelRateEntity.getSymbol(); + documentaryOrderInfoVo.setSymbol(symbol); + int levelRateDown = memberLevelRateEntity.getLevelRateDown(); + documentaryOrderInfoVo.setLevelRate(levelRateDown); + documentaryOrderInfoVo.setAvaliableCoin(availableBalance); + list.add(documentaryOrderInfoVo); + } + } + return Result.ok(list); + } + + @Override + @Transactional + public Result getDocumentaryOrderSet(@Valid DocumentaryOrderSetDto documentaryOrderSetDto) { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + //新增【跟随者设置】数据 + FollowFollowerSettingEntity followFollowerSettingEntity = new FollowFollowerSettingEntity(); + followFollowerSettingEntity.setMemberId(memberId); + Long traderId = documentaryOrderSetDto.getTraderId(); + followFollowerSettingEntity.setTradeId(traderId); + FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(traderId); + Long traderMemberId = followTraderInfoEntity.getMemberId(); + followFollowerSettingEntity.setTradeMemberId(traderMemberId); + followFollowerSettingEntity.setSymbols(documentaryOrderSetDto.getSymbols()); + followFollowerSettingEntity.setFollowType(documentaryOrderSetDto.getFollowType()); + followFollowerSettingEntity.setFollowCnt(documentaryOrderSetDto.getFollowCnt()); + followFollowerSettingEntity.setMaxFollowCnt(documentaryOrderSetDto.getMaxFollowCnt()); + followFollowerSettingDao.insert(followFollowerSettingEntity); + //更新【跟随者收益】数据 + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("member_id", memberId); + List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(selectByMap)) { + FollowFollowerProfitEntity followFollowerProfitEntity = selectByMap.get(0); + followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y); + followFollowerProfitDao.updateById(followFollowerProfitEntity); + }else { + FollowFollowerProfitEntity followFollowerProfitEntity = new FollowFollowerProfitEntity(); + followFollowerProfitEntity.setMemberId(memberId); + followFollowerProfitEntity.setTradeId(traderId); + followFollowerProfitEntity.setTradeMemberId(traderMemberId); + followFollowerProfitEntity.setTotalPrincipal(BigDecimal.ZERO); + followFollowerProfitEntity.setTotalProfit(BigDecimal.ZERO); + followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y); + followFollowerProfitDao.insert(followFollowerProfitEntity); + } + return Result.ok(MessageSourceUtils.getString("member_service_0024")); + } + + @Override + public Result getDocumentaryOrderSetInfo() { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + DocumentaryOrderSetInfoVo documentaryOrderSetInfoVo = new DocumentaryOrderSetInfoVo(); + //获取【跟随者设置】数据 + FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectDocumentaryOrderSetInfoBymemberId(memberId); + Long tradeId = followFollowerSettingEntity.getTradeId(); + documentaryOrderSetInfoVo.setTraderId(tradeId); + + FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId); + String avatar = followTraderInfoEntity.getAvatar(); + documentaryOrderSetInfoVo.setAvatar(avatar); + + String nickname = followTraderInfoEntity.getNickname(); + documentaryOrderSetInfoVo.setNickname(nickname); + + String symbols = followFollowerSettingEntity.getSymbols(); + documentaryOrderSetInfoVo.setSymbols(symbols); + + Integer followType = followFollowerSettingEntity.getFollowType(); + documentaryOrderSetInfoVo.setFollowType(followType); + + Integer followCnt = followFollowerSettingEntity.getFollowCnt(); + documentaryOrderSetInfoVo.setFollowCnt(followCnt); + + Integer maxFollowCnt = followFollowerSettingEntity.getMaxFollowCnt(); + documentaryOrderSetInfoVo.setMaxFollowCnt(maxFollowCnt); + + + return Result.ok(documentaryOrderSetInfoVo); + } + + @Override + @Transactional + public Result cancelDocumentaryOrderSetInfo(@Valid CancelDocumentaryOrderSetDto cancelDocumentaryOrderSetDto) { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + Long traderId = cancelDocumentaryOrderSetDto.getTraderId(); + //删除【跟随者设置】数据 + FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectOneBymemberIdAndTradeId(memberId,traderId); + followFollowerSettingDao.deleteById(followFollowerSettingEntity.getId()); + //更新【跟随者收益】数据 + FollowFollowerProfitEntity followFollowerProfitEntity = followFollowerProfitDao.selectDocumentaryOrderSetInfoBymemberIdAndTradeId(memberId,traderId); + followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_N); + followFollowerProfitDao.updateById(followFollowerProfitEntity); + return null; + } + + @Override + @Transactional + public Result updateDocumentaryOrderSetInfo(@Valid UpdateDocumentaryOrderSetDto updateDocumentaryOrderSetDto) { + //获取用户ID + Long memberId = LoginUserUtils.getAppLoginUser().getId(); + Long traderId = updateDocumentaryOrderSetDto.getTraderId(); + //更新【跟随者设置】数据 + FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectOneBymemberIdAndTradeId(memberId, traderId); + followFollowerSettingEntity.setSymbols(updateDocumentaryOrderSetDto.getSymbols()); + followFollowerSettingEntity.setFollowType(updateDocumentaryOrderSetDto.getFollowType()); + followFollowerSettingEntity.setFollowCnt(updateDocumentaryOrderSetDto.getFollowCnt()); + followFollowerSettingEntity.setMaxFollowCnt(updateDocumentaryOrderSetDto.getMaxFollowCnt()); + followFollowerSettingDao.updateById(followFollowerSettingEntity); + + return Result.ok(MessageSourceUtils.getString("member_service_0024")); + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderInfoVo.java b/src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderInfoVo.java new file mode 100644 index 0000000..9ad6b7b --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderInfoVo.java @@ -0,0 +1,22 @@ +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 = "DocumentaryOrderInfoVo", description = "参数返回类") +public class DocumentaryOrderInfoVo { + + @ApiModelProperty("币种") + private String symbol; + + @ApiModelProperty("杠杆") + private int levelRate; + + @ApiModelProperty("可用余额") + private BigDecimal avaliableCoin; + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderSetInfoVo.java b/src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderSetInfoVo.java new file mode 100644 index 0000000..779a8df --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderSetInfoVo.java @@ -0,0 +1,32 @@ +package com.xcong.excoin.modules.documentary.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "DocumentaryOrderSetInfoVo", description = "参数返回类") +public class DocumentaryOrderSetInfoVo { + + @ApiModelProperty(value = "交易员ID", example = "1") + private Long traderId; + + @ApiModelProperty("头像") + private String avatar; + + @ApiModelProperty("名称") + private String nickname; + + @ApiModelProperty(value = "跟单合约(多个,且逗号隔开)", example = "BTC/USDT") + private String symbols; + + @ApiModelProperty(value = "跟单方式类型1:固定张数2:固定比例", example = "1") + private Integer followType; + + @ApiModelProperty(value = "跟单张数或比例", example = "2") + private Integer followCnt; + + @ApiModelProperty(value = "跟单最大持仓张数数量", example = "2") + private int maxFollowCnt; + +} diff --git a/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml b/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml index 5465376..11172c4 100644 --- a/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml +++ b/src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml @@ -63,5 +63,15 @@ and contract_type = 2 order by opening_time desc </select> + + <select id="selectDocumentaryOrderSetInfoBymemberIdAndTradeId" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity"> + SELECT + * + FROM + follow_follower_profit + WHERE + member_id = #{memberId} + and trade_id = #{traderId} + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml b/src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml index fa41a98..d7a9724 100644 --- a/src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml +++ b/src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml @@ -1,5 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.documentary.dao.FollowFollowerSettingDao"> - + <select id="selectDocumentaryOrderSetInfoBymemberId" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity"> + SELECT + * + FROM + follow_follower_setting + WHERE + member_id = #{memberId} + </select> + <select id="selectOneBymemberIdAndTradeId" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity"> + SELECT + * + FROM + follow_follower_setting + WHERE + member_id = #{memberId} + and trader_id = #{traderId} + </select> </mapper> \ No newline at end of file -- Gitblit v1.9.1