| | |
| | |
|
| | |
|
| | | 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;
|
| | |
| | | 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
|
| | |
| | |
|
| | | private final ContractOrderMapper contractHoldOrderMapper;
|
| | |
|
| | | |
| | | private final AgentReturnMapper agentReturnMapper;
|
| | |
|
| | | private final MemberAuthenticationMapper memberAuthenticationMapper;
|
| | | |
| | | private final FollowFollowerProfitMapper followFollowerProfitMapper;
|
| | |
|
| | | private final RedisUtils redisUtils;
|
| | |
|
| | |
| | | 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();
|
| | |
| | | for(MemberAccountInfoVo memberAccountInfoVo : records) {
|
| | |
|
| | | Long memberId = memberAccountInfoVo.getId();
|
| | | List<MemberAccountInfoVo> walletContracts = memberMapper.selectWalletContractByMemberId(memberId);
|
| | | BigDecimal walletAvailableBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletTotalBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletFrozenBalance = BigDecimal.ZERO;
|
| | | if(CollUtil.isNotEmpty(walletContracts)) {
|
| | | for(MemberAccountInfoVo walletContract : walletContracts) {
|
| | | walletAvailableBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletAvailableBalance()).add(walletAvailableBalance);
|
| | | walletTotalBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletTotalBalance()).add(walletTotalBalance);
|
| | | walletFrozenBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletFrozenBalance()).add(walletFrozenBalance);
|
| | | }
|
| | | memberAccountInfoVo.setWalletAvailableBalance(walletAvailableBalance);
|
| | | memberAccountInfoVo.setWalletTotalBalance(walletTotalBalance);
|
| | | memberAccountInfoVo.setWalletFrozenBalance(walletFrozenBalance);
|
| | | }
|
| | | String walletAvailableBalance = memberMapper.selectWalletAvailableBalanceBymemberId(memberId);
|
| | | String walletTotalBalance = memberMapper.selectWalletTotalBalanceBymemberId(memberId);
|
| | | String walletFrozenBalance = memberMapper.selectWalletFrozenBalanceBymemberId(memberId);
|
| | | |
| | | memberAccountInfoVo.setWalletCoinAvailableBalance(new BigDecimal(walletAvailableBalance));
|
| | | memberAccountInfoVo.setWalletCoinTotalBalance(new BigDecimal(walletTotalBalance));
|
| | | memberAccountInfoVo.setWalletCoinFrozenBalance(new BigDecimal(walletFrozenBalance));
|
| | |
|
| | | Map<String, Object> columnMap = new HashMap<>();
|
| | | columnMap.put("member_id", memberId);
|
| | |
| | | for(MemberAccountInfoVo memberAccountInfoVo : records) {
|
| | |
|
| | | Long memberId = memberAccountInfoVo.getId();
|
| | | List<MemberAccountInfoVo> walletContracts = memberMapper.selectWalletContractByMemberId(memberId);
|
| | | BigDecimal walletAvailableBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletTotalBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletFrozenBalance = BigDecimal.ZERO;
|
| | | if(CollUtil.isNotEmpty(walletContracts)) {
|
| | | for(MemberAccountInfoVo walletContract : walletContracts) {
|
| | | walletAvailableBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletAvailableBalance()).add(walletAvailableBalance);
|
| | | walletTotalBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletTotalBalance()).add(walletTotalBalance);
|
| | | walletFrozenBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletFrozenBalance()).add(walletFrozenBalance);
|
| | | }
|
| | | memberAccountInfoVo.setWalletAvailableBalance(walletAvailableBalance);
|
| | | memberAccountInfoVo.setWalletTotalBalance(walletTotalBalance);
|
| | | memberAccountInfoVo.setWalletFrozenBalance(walletFrozenBalance);
|
| | | }
|
| | | String walletAvailableBalance = memberMapper.selectWalletAvailableBalanceBymemberId(memberId);
|
| | | String walletTotalBalance = memberMapper.selectWalletTotalBalanceBymemberId(memberId);
|
| | | String walletFrozenBalance = memberMapper.selectWalletFrozenBalanceBymemberId(memberId);
|
| | | |
| | | memberAccountInfoVo.setWalletCoinAvailableBalance(new BigDecimal(walletAvailableBalance));
|
| | | memberAccountInfoVo.setWalletCoinTotalBalance(new BigDecimal(walletTotalBalance));
|
| | | memberAccountInfoVo.setWalletCoinFrozenBalance(new BigDecimal(walletFrozenBalance));
|
| | |
|
| | | Map<String, Object> columnMap = new HashMap<>();
|
| | | columnMap.put("member_id", memberId);
|
| | |
| | | for(MemberAccountInfoVo memberAccountInfoVo : records) {
|
| | | Long memberId = memberAccountInfoVo.getId();
|
| | |
|
| | | List<MemberAccountInfoVo> walletContracts = memberMapper.selectWalletContractByMemberId(memberId);
|
| | | BigDecimal walletAvailableBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletTotalBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletFrozenBalance = BigDecimal.ZERO;
|
| | | if(CollUtil.isNotEmpty(walletContracts)) {
|
| | | for(MemberAccountInfoVo walletContract : walletContracts) {
|
| | | walletAvailableBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletAvailableBalance()).add(walletAvailableBalance);
|
| | | walletTotalBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletTotalBalance()).add(walletTotalBalance);
|
| | | walletFrozenBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletFrozenBalance()).add(walletFrozenBalance);
|
| | | }
|
| | | memberAccountInfoVo.setWalletAvailableBalance(walletAvailableBalance);
|
| | | memberAccountInfoVo.setWalletTotalBalance(walletTotalBalance);
|
| | | memberAccountInfoVo.setWalletFrozenBalance(walletFrozenBalance);
|
| | | }
|
| | | String walletAvailableBalance = memberMapper.selectWalletAvailableBalanceBymemberId(memberId);
|
| | | String walletTotalBalance = memberMapper.selectWalletTotalBalanceBymemberId(memberId);
|
| | | String walletFrozenBalance = memberMapper.selectWalletFrozenBalanceBymemberId(memberId);
|
| | | |
| | | memberAccountInfoVo.setWalletCoinAvailableBalance(new BigDecimal(walletAvailableBalance));
|
| | | memberAccountInfoVo.setWalletCoinTotalBalance(new BigDecimal(walletTotalBalance));
|
| | | memberAccountInfoVo.setWalletCoinFrozenBalance(new BigDecimal(walletFrozenBalance));
|
| | |
|
| | | Map<String, Object> columnMap = new HashMap<>();
|
| | | columnMap.put("member_id", memberId);
|
| | |
| | | if(records.size() > 0) {
|
| | | for(MemberAccountInfoVo memberAccountInfoVo : records) {
|
| | | Long memberId = memberAccountInfoVo.getId();
|
| | | List<MemberAccountInfoVo> walletContracts = memberMapper.selectWalletContractByMemberId(memberId);
|
| | | BigDecimal walletAvailableBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletTotalBalance = BigDecimal.ZERO;
|
| | | BigDecimal walletFrozenBalance = BigDecimal.ZERO;
|
| | | if(CollUtil.isNotEmpty(walletContracts)) {
|
| | | for(MemberAccountInfoVo walletContract : walletContracts) {
|
| | | walletAvailableBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletAvailableBalance()).add(walletAvailableBalance);
|
| | | walletTotalBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletTotalBalance()).add(walletTotalBalance);
|
| | | walletFrozenBalance = (ObjectUtil.isEmpty(walletContract.getWalletAvailableBalance()) ? BigDecimal.ZERO:walletContract.getWalletFrozenBalance()).add(walletFrozenBalance);
|
| | | }
|
| | | memberAccountInfoVo.setWalletAvailableBalance(walletAvailableBalance);
|
| | | memberAccountInfoVo.setWalletTotalBalance(walletTotalBalance);
|
| | | memberAccountInfoVo.setWalletFrozenBalance(walletFrozenBalance);
|
| | | }
|
| | | |
| | | String walletAvailableBalance = memberMapper.selectWalletAvailableBalanceBymemberId(memberId);
|
| | | String walletTotalBalance = memberMapper.selectWalletTotalBalanceBymemberId(memberId);
|
| | | String walletFrozenBalance = memberMapper.selectWalletFrozenBalanceBymemberId(memberId);
|
| | | |
| | | memberAccountInfoVo.setWalletCoinAvailableBalance(new BigDecimal(walletAvailableBalance));
|
| | | memberAccountInfoVo.setWalletCoinTotalBalance(new BigDecimal(walletTotalBalance));
|
| | | memberAccountInfoVo.setWalletCoinFrozenBalance(new BigDecimal(walletFrozenBalance));
|
| | |
|
| | | Map<String, Object> columnMap = new HashMap<>();
|
| | | columnMap.put("member_id", memberId);
|
| | |
| | | }
|
| | | 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();
|
| | | }
|
| | |
|
| | |
|
| | |
|