package com.xcong.excoin.modules.trademanage.service.impl; 
 | 
  
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.HashMap; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
import com.xcong.excoin.common.entity.QueryRequest; 
 | 
import com.xcong.excoin.common.utils.CoinTypeConvert; 
 | 
import com.xcong.excoin.common.utils.RedisUtils; 
 | 
import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; 
 | 
import com.xcong.excoin.modules.member.entity.MemberEntity; 
 | 
import com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper; 
 | 
import com.xcong.excoin.modules.member.mapper.MemberMapper; 
 | 
import com.xcong.excoin.modules.trademanage.entity.ContractHoldOrderEntity; 
 | 
import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity; 
 | 
import com.xcong.excoin.modules.trademanage.entity.MemberWalletAgentEntity; 
 | 
import com.xcong.excoin.modules.trademanage.mapper.ContractHoldOrderEntityMapper; 
 | 
import com.xcong.excoin.modules.trademanage.mapper.ContractOrderMapper; 
 | 
import com.xcong.excoin.modules.trademanage.mapper.MemberWalletAgentMapper; 
 | 
import com.xcong.excoin.modules.trademanage.service.TradeManageService; 
 | 
import com.xcong.excoin.modules.trademanage.vo.MemberAccountInfoVo; 
 | 
import lombok.RequiredArgsConstructor; 
 | 
  
 | 
@Service 
 | 
@RequiredArgsConstructor 
 | 
public class TradeManageServiceImpl extends ServiceImpl<ContractHoldOrderEntityMapper, ContractHoldOrderEntity> implements TradeManageService{ 
 | 
  
 | 
    private final ContractHoldOrderEntityMapper contractHoldOrderEntityMapper; 
 | 
     
 | 
    private final MemberMapper memberMapper; 
 | 
     
 | 
    private final MemberWalletAgentMapper memberWalletAgentMapper; 
 | 
  
 | 
    private final MemberAccountMoneyChangeMapper memberAccountMoneyChangeMapper; 
 | 
     
 | 
    private final ContractOrderMapper contractHoldOrderMapper; 
 | 
     
 | 
    private final RedisUtils redisUtils; 
 | 
     
 | 
    @Override 
 | 
    public IPage<ContractHoldOrderEntity> findContractHoldOrderListInPage( 
 | 
            ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { 
 | 
        Page<ContractHoldOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); 
 | 
        IPage<ContractHoldOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderEntityMapper.selectContractHoldOrderListInPage(page, contractHoldOrderEntity); 
 | 
        List<ContractHoldOrderEntity> records = findMemberAccountInfoListInPage.getRecords(); 
 | 
         
 | 
        if (records != null) { 
 | 
            for (ContractHoldOrderEntity holdOrderEntity : records) { 
 | 
                MemberEntity selectById = memberMapper.selectById(holdOrderEntity.getMemberId()); 
 | 
                // 获取最新价 
 | 
                BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol()))); 
 | 
                BigDecimal lotNumber = holdOrderEntity.getSymbolSku(); 
 | 
                // 盈亏 
 | 
                BigDecimal rewardRatio = BigDecimal.ZERO; 
 | 
                // 开多 
 | 
                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { 
 | 
                    // (最新价-开仓价)*规格*张数 
 | 
                    rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())); 
 | 
                    // 开空 
 | 
                } else { 
 | 
                    // (开仓价-最新价)*规格*张数 
 | 
                    rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())); 
 | 
                } 
 | 
  
 | 
                if (selectById.getIsProfit() == MemberEntity.IS_PROFIT_Y) { 
 | 
                   String selectTradeSetting = memberMapper.selectTradeSetting(); 
 | 
                    BigDecimal profitParam=new BigDecimal(selectTradeSetting);   
 | 
                    if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) { 
 | 
                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(profitParam)); 
 | 
                    } else { 
 | 
                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.add(profitParam)); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                holdOrderEntity.setRewardRatio(rewardRatio); 
 | 
            } 
 | 
        } 
 | 
        return findMemberAccountInfoListInPage; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public IPage<MemberAccountInfoVo> findMemberAccountInfoListInPage(MemberEntity memberEntity, QueryRequest request) { 
 | 
        Page<MemberEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); 
 | 
        IPage<MemberAccountInfoVo> selectMemberListInPage = memberMapper.findMemberAccountInfoListInPage(page, memberEntity); 
 | 
        List<MemberAccountInfoVo> records = selectMemberListInPage.getRecords(); 
 | 
        if(records.size() > 0) { 
 | 
            for(MemberAccountInfoVo memberAccountInfoVo : records) { 
 | 
                Long memberId = memberAccountInfoVo.getId(); 
 | 
                String inviteId = memberMapper.selectAgentForAccount(memberId); 
 | 
                if("".equals(inviteId) || inviteId == null) { 
 | 
                    memberAccountInfoVo.setIsSuAccount(0); 
 | 
                }else { 
 | 
                    memberAccountInfoVo.setIsSuAccount(1); 
 | 
                } 
 | 
                Map<String, Object> columnMap = new HashMap<>(); 
 | 
                columnMap.put("member_id", memberId); 
 | 
                List<MemberWalletAgentEntity> selectByMap = memberWalletAgentMapper.selectByMap(columnMap); 
 | 
                if(selectByMap.size() > 0) { 
 | 
                    BigDecimal availableBalance = selectByMap.get(0).getAvailableBalance(); 
 | 
                    memberAccountInfoVo.setAgentAvailableBalance(availableBalance); 
 | 
                } 
 | 
                 
 | 
            } 
 | 
        } 
 | 
        return selectMemberListInPage; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public IPage<MemberAccountMoneyChangeEntity> findMemberAgentReturnInfoInPage( 
 | 
            MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) { 
 | 
        Page<MemberAccountMoneyChangeEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); 
 | 
        IPage<MemberAccountMoneyChangeEntity> findMemberAccountInfoListInPage = memberAccountMoneyChangeMapper.findMemberAccountInfoListInPage(page, memberAccountMoneyChangeEntity); 
 | 
        return findMemberAccountInfoListInPage; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public IPage<ContractOrderEntity> findMemberHistoryOrderInfoInPage( 
 | 
            ContractOrderEntity contractOrderEntity, QueryRequest request) { 
 | 
        Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); 
 | 
        IPage<ContractOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoInPage(page, contractOrderEntity); 
 | 
        return findMemberAccountInfoListInPage; 
 | 
    } 
 | 
  
 | 
} 
 |