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.MemberAuthenticationEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.mapper.MemberAccountMoneyChangeMapper; import com.xcong.excoin.modules.member.mapper.MemberAuthenticationMapper; 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 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 MemberAuthenticationMapper memberAuthenticationMapper; private final RedisUtils redisUtils; @Override public IPage findContractHoldOrderListInPage( ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderEntityMapper.selectContractHoldOrderListInPage(page, contractHoldOrderEntity); List 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 findMemberAccountInfoListInPage(MemberEntity memberEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage selectMemberListInPage = memberMapper.findMemberAccountInfoListInPage(page, memberEntity); List 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 columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberWalletAgentMapper.selectByMap(columnMap); if(selectByMap.size() > 0) { BigDecimal availableBalance = selectByMap.get(0).getAvailableBalance(); memberAccountInfoVo.setAgentAvailableBalance(availableBalance); } } } return selectMemberListInPage; } @Override public IPage findMemberAgentReturnInfoInPage( MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = memberAccountMoneyChangeMapper.findMemberAccountInfoListInPage(page, memberAccountMoneyChangeEntity); return findMemberAccountInfoListInPage; } @Override public IPage findMemberHistoryOrderInfoInPage( ContractOrderEntity contractOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoInPage(page, contractOrderEntity); return findMemberAccountInfoListInPage; } @Override public IPage findMemberAgentReturnInfosInPage(AgentReturnEntity agentReturnEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = agentReturnMapper.findMemberAgentReturnInfosInPage(page, agentReturnEntity); return findMemberAccountInfoListInPage; } @Override public IPage findMemberHistoryOrderAllInfoInPage(ContractOrderEntity contractOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderMapper.findMemberHistoryOrderInfoAllInPage(page, contractOrderEntity); return findMemberAccountInfoListInPage; } @Override public IPage findContractHoldOrderAloneInPage( ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderEntityMapper.findContractHoldOrderAloneInPage(page, contractHoldOrderEntity); List records = findMemberAccountInfoListInPage.getRecords(); if (records != null) { for (ContractHoldOrderEntity holdOrderEntity : records) { Long memberId = holdOrderEntity.getMemberId(); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; holdOrderEntity.setRealName(realName); } 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 findHistoryOrderInfoAloneInfoInPage(ContractOrderEntity contractOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderMapper.findHistoryOrderInfoAloneInfoInPage(page, contractOrderEntity); List records = findMemberAccountInfoListInPage.getRecords(); if(records != null && records.size() > 0) { for(ContractOrderEntity contractOrderEntitys : records) { Long memberId = contractOrderEntitys.getMemberId(); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; contractOrderEntitys.setRealName(realName); } } } return findMemberAccountInfoListInPage; } @Override public IPage findMemberAgentReturnInfoAloneInPage( MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = memberAccountMoneyChangeMapper.findMemberAgentReturnInfoAloneInPage(page, memberAccountMoneyChangeEntity); List records = findMemberAccountInfoListInPage.getRecords(); if(records != null && records.size() > 0) { String selectYJByMemberId = agentReturnMapper.selectYJByMemberId(); for(MemberAccountMoneyChangeEntity accountMoneyChangeEntity : records) { Long memberId = accountMoneyChangeEntity.getMemberId(); String allAmount = memberAccountMoneyChangeMapper.selectAccountMoneyChangeByMemberId(memberId); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; accountMoneyChangeEntity.setRealName(realName); } accountMoneyChangeEntity.setAllAmount(allAmount); if(memberId == 8) { accountMoneyChangeEntity.setAmount(BigDecimal.ZERO); accountMoneyChangeEntity.setAllAmount(selectYJByMemberId); } } } return findMemberAccountInfoListInPage; } @Override public IPage findmemberAccountInfoAloneListInPage(MemberEntity memberEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage selectMemberListInPage = memberMapper.findMemberAccountInfoAloneListInPage(page, memberEntity); List records = selectMemberListInPage.getRecords(); if(records.size() > 0) { for(MemberAccountInfoVo memberAccountInfoVo : records) { Long memberId = memberAccountInfoVo.getId(); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; memberAccountInfoVo.setRealName(realName); } //总盈亏 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); } List selectByMaps = memberWalletAgentMapper.selectByMap(columnMap); if(selectByMaps.size() > 0) { BigDecimal availableBalance = selectByMaps.get(0).getAvailableBalance(); memberAccountInfoVo.setAgentAvailableBalance(availableBalance); } } } return selectMemberListInPage; } @Override public IPage findContractHoldOrderAloneTestInPage( ContractHoldOrderEntity contractHoldOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderEntityMapper.findContractHoldOrderAloneTestInPage(page, contractHoldOrderEntity); List records = findMemberAccountInfoListInPage.getRecords(); if (records != null) { for (ContractHoldOrderEntity holdOrderEntity : records) { Long memberId = holdOrderEntity.getMemberId(); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; holdOrderEntity.setRealName(realName); } 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 findhistoryOrderInfoAloneTestInfoInPage(ContractOrderEntity contractOrderEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = contractHoldOrderMapper.findhistoryOrderInfoAloneTestInfoInPage(page, contractOrderEntity); List records = findMemberAccountInfoListInPage.getRecords(); if(records != null && records.size() > 0) { for(ContractOrderEntity contractOrderEntitys : records) { Long memberId = contractOrderEntitys.getMemberId(); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; contractOrderEntitys.setRealName(realName); } } } return findMemberAccountInfoListInPage; } @Override public IPage findMemberAgentReturnInfoAloneTestInPage( MemberAccountMoneyChangeEntity memberAccountMoneyChangeEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage findMemberAccountInfoListInPage = memberAccountMoneyChangeMapper.findMemberAgentReturnInfoAloneTestInPage(page, memberAccountMoneyChangeEntity); List records = findMemberAccountInfoListInPage.getRecords(); if(records != null && records.size() > 0) { String selectYJByMemberId = agentReturnMapper.selectYJByMemberId(); for(MemberAccountMoneyChangeEntity accountMoneyChangeEntity : records) { Long memberId = accountMoneyChangeEntity.getMemberId(); String allAmount = memberAccountMoneyChangeMapper.selectAccountMoneyChangeByMemberId(memberId); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; accountMoneyChangeEntity.setRealName(realName); } accountMoneyChangeEntity.setAllAmount(allAmount); if(memberId == 8) { accountMoneyChangeEntity.setAmount(BigDecimal.ZERO); accountMoneyChangeEntity.setAllAmount(selectYJByMemberId); } } } return findMemberAccountInfoListInPage; } @Override public IPage findmemberAccountInfoAloneTestListInPage(MemberEntity memberEntity, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); IPage selectMemberListInPage = memberMapper.findmemberAccountInfoAloneTestListInPage(page, memberEntity); List records = selectMemberListInPage.getRecords(); if(records.size() > 0) { for(MemberAccountInfoVo memberAccountInfoVo : records) { Long memberId = memberAccountInfoVo.getId(); Map columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); if(selectByMap != null && selectByMap.size() > 0) { MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); String firstName = memberAuthenticationEntity.getFirstName(); String secondName = memberAuthenticationEntity.getSecondName(); String realName = firstName + secondName; memberAccountInfoVo.setRealName(realName); } //总盈亏 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); } List selectByMaps = memberWalletAgentMapper.selectByMap(columnMap); if(selectByMaps.size() > 0) { BigDecimal availableBalance = selectByMaps.get(0).getAvailableBalance(); memberAccountInfoVo.setAgentAvailableBalance(availableBalance); } } } return selectMemberListInPage; } }