xiaoyong931011
2020-07-30 7fdce27927b4dfee1e1c8bfd0755e1e5dd28ce93
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,7 +242,17 @@
                 myFollowOrderVos.add(myFollowOrderVo);
              }
           }
        }else {
      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());
@@ -310,7 +308,6 @@
                 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,45 +336,149 @@
            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);
                 }
            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"));
   }