xiaoyong931011
2021-03-22 ab73f4ca26fd897ef67756cbf0a95d15757b002e
src/main/java/com/xcong/excoin/modules/trademanage/service/impl/TradeManageServiceImpl.java
@@ -2,6 +2,8 @@
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -39,6 +41,7 @@
import com.xcong.excoin.modules.trademanage.vo.PositionSettingVo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
@@ -56,6 +59,7 @@
   private final MemberAccountMoneyChangeMapper memberAccountMoneyChangeMapper;
   
   private final ContractOrderMapper contractHoldOrderMapper;
   
   private final AgentReturnMapper agentReturnMapper;
   
@@ -1183,11 +1187,55 @@
      if(records != null && records.size() > 0) {
         for(PositionSettingVo positionSettingVo : records) {
            Long memberId = positionSettingVo.getId();
            MemberEntity selectById = memberMapper.selectById(memberId);
            //当前持仓总盈亏
            BigDecimal sumRewardAmount = contractHoldOrderMapper.selectRewardAmountBymemberId(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;
   }