From cf200a1f92c01ba22c326c49391f748ffb006910 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Mon, 05 Jul 2021 17:28:35 +0800 Subject: [PATCH] 20210617 开售开关 --- src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java | 122 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 119 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java b/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java index 1be5517..2d949d6 100644 --- a/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java @@ -2,18 +2,27 @@ import java.math.BigDecimal; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.springframework.stereotype.Service; +import javax.validation.constraints.NotNull; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.FebsResponse; 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.documentary.entity.FollowFollowerProfitEntity; +import com.xcong.excoin.modules.documentary.mapper.FollowFollowerProfitMapper; import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; import com.xcong.excoin.modules.member.entity.MemberAuthenticationEntity; import com.xcong.excoin.modules.member.entity.MemberEntity; @@ -30,9 +39,11 @@ 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 com.xcong.excoin.modules.trademanage.vo.PositionSettingVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; @Service @@ -49,9 +60,12 @@ private final ContractOrderMapper contractHoldOrderMapper; + private final AgentReturnMapper agentReturnMapper; private final MemberAuthenticationMapper memberAuthenticationMapper; + + private final FollowFollowerProfitMapper followFollowerProfitMapper; private final RedisUtils redisUtils; @@ -77,8 +91,23 @@ String realName = firstName + secondName; holdOrderEntity.setRealName(realName); } - - + //如果是跟单合约,显示他的交易员的邀请码 + int contractType = holdOrderEntity.getContractType(); + Long holdOrderEntityMemberId = holdOrderEntity.getMemberId(); + MemberEntity holdOrderEntityMember = memberMapper.selectById(holdOrderEntityMemberId); + Integer isTrader = holdOrderEntityMember.getIsTrader(); + if(MemberEntity.ISTRADER_N == isTrader) { + if(ContractHoldOrderEntity.CONTRACTTYPE_FOLLOW == contractType) { + //获取对应的【follow_follower_profit】跟随者收益关系表 + QueryWrapper<FollowFollowerProfitEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("member_id",holdOrderEntity.getMemberId()); + FollowFollowerProfitEntity followFollowerProfitEntity = followFollowerProfitMapper.selectOne(queryWrapper); + Long tradeMemberId = followFollowerProfitEntity.getTradeMemberId(); + MemberEntity selectByIdTrader = memberMapper.selectById(tradeMemberId); + String inviteId = selectByIdTrader.getInviteId(); + holdOrderEntity.setInviteIdTrader(inviteId); + } + } // 获取最新价 BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol()))); BigDecimal lotNumber = holdOrderEntity.getSymbolSku(); @@ -1162,6 +1191,93 @@ } return findMemberAccountInfoListInPage; } + + @Override + public IPage<PositionSettingVo> getPositionSettingList(MemberEntity memberEntity, QueryRequest request) { + + Page<PositionSettingVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<PositionSettingVo> positionSettingVoIPage = contractHoldOrderMapper.getPositionSettingList(page, memberEntity); + if(StrUtil.isNotEmpty(memberEntity.getAccounts())) { + positionSettingVoIPage = contractHoldOrderMapper.getPositionSettingsList(page, memberEntity); + } + List<PositionSettingVo> records = positionSettingVoIPage.getRecords(); + if(records != null && records.size() > 0) { + for(PositionSettingVo positionSettingVo : records) { + Long memberId = positionSettingVo.getId(); + MemberEntity selectById = memberMapper.selectById(memberId); + //当前持仓总盈亏 + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("member_id", memberId); + BigDecimal sumRewardAmount = BigDecimal.ZERO; + List<ContractHoldOrderEntity> contractHoldOrderEntitys = contractHoldOrderEntityMapper.selectByMap(columnMap ); + for(ContractHoldOrderEntity holdOrderEntity : contractHoldOrderEntitys) { + // 获取最新价 + 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)); + } + } + sumRewardAmount = sumRewardAmount.add(rewardRatio); + } + positionSettingVo.setSumRewardAmount(sumRewardAmount); + } + //降序 +// Collections.sort(records, new Comparator<PositionSettingVo>() {//调用sort()方法,并实现Comparator接口中的compare()方法 +// @Override +// public int compare(PositionSettingVo lhs, PositionSettingVo rhs) { +// int value = Integer.valueOf(rhs.getSumRewardAmount().intValue()) +// - Integer.valueOf(lhs.getSumRewardAmount().intValue()); +// return value; +// } +// }); + //升序 + CollUtil.sortByProperty(records, "sumRewardAmount"); + //CollUtil.sortByProperty(records, "accountType"); + } +// positionSettingVoIPage.setRecords(records); + return positionSettingVoIPage; + } + + @Override + @Transactional + public FebsResponse disagreePositionSetting(@NotNull(message = "{required}") Long id) { + MemberEntity memberEntity = memberMapper.selectById(id); + if(ObjectUtil.isEmpty(memberEntity)) { + return new FebsResponse().fail().message("会员信息不存在"); + } + memberEntity.setPcState(MemberEntity.PCSTATE_N); + memberMapper.updateById(memberEntity); + return new FebsResponse().success(); + } + + @Override + public FebsResponse agreePositionSetting(@NotNull(message = "{required}") Long id) { + MemberEntity memberEntity = memberMapper.selectById(id); + if(ObjectUtil.isEmpty(memberEntity)) { + return new FebsResponse().fail().message("会员信息不存在"); + } + memberEntity.setPcState(MemberEntity.PCSTATE_Y); + memberMapper.updateById(memberEntity); + return new FebsResponse().success(); + } -- Gitblit v1.9.1