|  |  | 
 |  |  | 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;
 | 
 |  |  | 
 |  |  | 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;
 | 
 |  |  | 
 |  |  | 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;
 | 
 |  |  | 
 |  |  | 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;
 | 
 |  |  | 
 |  |  |     private CacheSettingUtils cacheSettingUtils;
 | 
 |  |  |     @Resource
 | 
 |  |  |     private ContractHoldOrderDao contractHoldOrderDao;
 | 
 |  |  |     @Resource
 | 
 |  |  |     private MemberLevelRateDao memberLevelRateDao;
 | 
 |  |  |     @Resource
 | 
 |  |  |     private MemberWalletContractDao memberWalletContractDao;
 | 
 |  |  |     @Resource
 | 
 |  |  |     private FollowFollowerSettingDao followFollowerSettingDao;
 | 
 |  |  |      | 
 |  |  |     
 | 
 |  |  |     @Override
 | 
 |  |  |     public Result getMemberIsTradeInfo() {
 | 
 |  |  | 
 |  |  |                 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));
 | 
 |  |  | 
 |  |  |     }
 | 
 |  |  | 
 | 
 |  |  |     @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);
 | 
 |  |  |             
 | 
 |  |  | 
 |  |  |                     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);
 | 
 |  |  |         
 | 
 |  |  |     }
 | 
 |  |  | 
 |  |  |     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();
 | 
 |  |  | 
 |  |  |                 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"));
 | 
 |  |  |     }
 | 
 |  |  |     
 | 
 |  |  |     
 | 
 |  |  |     
 |