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.AgentReturnEntity;
|
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.AgentReturnMapper;
|
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 AgentReturnMapper agentReturnMapper;
|
|
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 rewardratioByMid = memberMapper.selectRewardratioForBasicRealDataBymid(memberId);
|
BigDecimal bd=new BigDecimal(rewardratioByMid);
|
memberAccountInfoVo.setRewardratioByMid(bd);
|
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;
|
}
|
|
@Override
|
public IPage<AgentReturnEntity> findMemberAgentReturnInfosInPage(AgentReturnEntity agentReturnEntity,
|
QueryRequest request) {
|
Page<AgentReturnEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
IPage<AgentReturnEntity> findMemberAccountInfoListInPage = agentReturnMapper.findMemberAgentReturnInfosInPage(page, agentReturnEntity);
|
return findMemberAccountInfoListInPage;
|
}
|
|
@Override
|
public IPage<ContractOrderEntity> findMemberHistoryOrderAllInfoInPage(ContractOrderEntity contractOrderEntity,
|
QueryRequest request) {
|
Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
IPage<ContractOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoAllInPage(page, contractOrderEntity);
|
return findMemberAccountInfoListInPage;
|
}
|
|
@Override
|
public IPage<ContractHoldOrderEntity> findContractHoldOrderAloneInPage(
|
ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) {
|
Page<ContractHoldOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
IPage<ContractHoldOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderEntityMapper.findContractHoldOrderAloneInPage(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<ContractOrderEntity> findHistoryOrderInfoAloneInfoInPage(ContractOrderEntity contractOrderEntity,
|
QueryRequest request) {
|
Page<ContractOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
IPage<ContractOrderEntity> findMemberAccountInfoListInPage = contractHoldOrderMapper.findHistoryOrderInfoAloneInfoInPage(page, contractOrderEntity);
|
return findMemberAccountInfoListInPage;
|
}
|
|
@Override
|
public IPage<MemberAccountMoneyChangeEntity> findMemberAgentReturnInfoAloneInPage(
|
MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) {
|
Page<MemberAccountMoneyChangeEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
|
IPage<MemberAccountMoneyChangeEntity> findMemberAccountInfoListInPage =
|
memberAccountMoneyChangeMapper.findMemberAgentReturnInfoAloneInPage(page, memberAccountMoneyChangeEntity);
|
List<MemberAccountMoneyChangeEntity> records = findMemberAccountInfoListInPage.getRecords();
|
if(records != null && records.size() > 0) {
|
for(MemberAccountMoneyChangeEntity accountMoneyChangeEntity : records) {
|
Long memberId = accountMoneyChangeEntity.getMemberId();
|
String allAmount = memberAccountMoneyChangeMapper.selectAccountMoneyChangeByMemberId(memberId);
|
accountMoneyChangeEntity.setAllAmount(allAmount);
|
}
|
}
|
|
return findMemberAccountInfoListInPage;
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|