From e08d29b508b4bbed9434328284d9939e6ad8b3ce Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 29 Jul 2020 19:09:37 +0800
Subject: [PATCH] 20200729 代码提交

---
 src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java |  275 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 275 insertions(+), 0 deletions(-)

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 f2c4ef9..e5ee7d0 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,10 @@
 package com.xcong.excoin.modules.documentary.service.impl;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
@@ -14,23 +18,37 @@
 import com.xcong.excoin.common.response.Result;
 import com.xcong.excoin.modules.coin.dao.OrderCoinsDao;
 import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
+import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
+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.FollowTraderInfoDao;
 import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitDetailDao;
 import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao;
 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.entity.FollowFollowerProfitEntity;
 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.FollowInfoVo;
 import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo;
 import com.xcong.excoin.modules.documentary.vo.FollowTraderProfitInfoVo;
 import com.xcong.excoin.modules.documentary.vo.HistoryOrderRecordsVo;
 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.member.dao.MemberDao;
 import com.xcong.excoin.modules.member.entity.MemberEntity;
+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.RedisUtils;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
@@ -49,6 +67,12 @@
 	private FollowFollowerProfitDao followFollowerProfitDao;
 	@Resource
 	private OrderCoinsDao orderCoinsDao;
+	@Resource
+	private RedisUtils redisUtils;
+    @Resource
+    private CacheSettingUtils cacheSettingUtils;
+    @Resource
+    private ContractHoldOrderDao contractHoldOrderDao;
 	
 	@Override
 	public Result getMemberIsTradeInfo() {
@@ -106,8 +130,259 @@
 		
 		Page<FollowRecordsVo> page = new Page<>(followRecordsDto.getPageNum(), followRecordsDto.getPageSize());
 		IPage<FollowRecordsVo> historyOrderRecordsVoList = followFollowerProfitDao.selectFollowRecords(page, followRecordsDto.getTradeMemberId());
+		
+		List<FollowRecordsVo> records = historyOrderRecordsVoList.getRecords();
+		if(CollUtil.isNotEmpty(records)) {
+			for(FollowRecordsVo followRecordsVo : records) {
+				Long memberId =followRecordsVo.getMemberId();
+				MemberEntity member = memberDao.selectById(memberId);
+				String email = member.getEmail();
+				String phone = member.getPhone();
+				if(StrUtil.isNotEmpty(email)) {
+					followRecordsVo.setAccount(email);
+				}else {
+					followRecordsVo.setAccount(phone);
+				}
+			}
+		}
 		return Result.ok(historyOrderRecordsVoList);
 	}
+
+	@Override
+	public Result getFollowInfo() {
+		//获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        MemberEntity member = memberDao.selectById(memberId);
+        
+        FollowInfoVo followInfoVo = new FollowInfoVo();
+        followInfoVo.setMemberId(memberId);
+        String email = member.getEmail();
+		String phone = member.getPhone();
+		if(StrUtil.isNotEmpty(email)) {
+			followInfoVo.setNickname(email);
+		}else {
+			followInfoVo.setNickname(phone);
+		}
+		
+		BigDecimal totalPrincipals =  BigDecimal.ZERO;
+		BigDecimal totalProfits =  BigDecimal.ZERO;
+		Map<String, Object> columnMap = new HashMap<>();
+		columnMap.put("member_id", memberId);
+		List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap);
+		if(CollUtil.isNotEmpty(selectByMap)) {
+			for(FollowFollowerProfitEntity followFollowerProfitEntity : selectByMap) {
+				BigDecimal totalPrincipal = followFollowerProfitEntity.getTotalPrincipal();
+				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));
+		followInfoVo.setTotalProfit(totalProfits.setScale(4, BigDecimal.ROUND_DOWN));
+		
+		return Result.ok(followInfoVo);
+	}
+
+	@Override
+	public Result getMyFollowOrderRecords(@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);
+        	
+        	List<ContractOrderEntity> records = contractOrderEntitys.getRecords();
+        	if(CollUtil.isNotEmpty(records)) {
+        		for(ContractOrderEntity contractOrderEntity : records) {
+        			MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo();
+        			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(4, BigDecimal.ROUND_DOWN);
+        			myFollowOrderVo.setRewardAmount(rewardAmount);
+        			BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN);
+        			myFollowOrderVo.setRewardRatio(rewardRatio);
+        			int symbolCnt = contractOrderEntity.getSymbolCnt();
+        			myFollowOrderVo.setSymbolCnt(symbolCnt);
+        			BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(4, BigDecimal.ROUND_DOWN);
+        			myFollowOrderVo.setBondAmount(bondAmount);
+        			BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(4, BigDecimal.ROUND_DOWN);
+        			myFollowOrderVo.setOpeningPrice(openingPrice);
+        			BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(4, 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);
+        		}
+        	}
+        }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 getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto) {
+		//获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        MemberEntity member = memberDao.selectById(memberId);
+        Page<FollowFollowerProfitEntity> page = new Page<>(myFollowTraderInfoDto.getPageNum(), myFollowTraderInfoDto.getPageSize());
+		IPage<FollowFollowerProfitEntity> followFollowerProfitEntitys = followFollowerProfitDao.selectFollowFollowerProfitEntitys(page, memberId);
+        
+		List<FollowFollowerProfitEntity> records = followFollowerProfitEntitys.getRecords();
+		if(CollUtil.isNotEmpty(records)) {
+			Page<MyFollowTraderInfoVo> result = new Page<>();
+	        List<MyFollowTraderInfoVo> myFollowOrderVos = result.getRecords();
+	        
+			for(FollowFollowerProfitEntity FollowFollowerProfitEntity : records) {
+				MyFollowTraderInfoVo myFollowTraderInfoVo = new MyFollowTraderInfoVo();
+				
+				Long tradeId = FollowFollowerProfitEntity.getTradeId();
+				FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId);
+				String avatar = followTraderInfoEntity.getAvatar();
+				myFollowTraderInfoVo.setAvatar(avatar);
+				
+				String nickname = followTraderInfoEntity.getNickname();
+				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);
+			}
+		}
+		return null;
+	}
 	
 	
 	

--
Gitblit v1.9.1