Helius
2021-02-03 4b8f7eb7057b6f0b6abc26effa5956e1d6589b26
src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
@@ -12,6 +12,7 @@
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.rabbit.pricequeue.whole.HoldOrderDataModel;
import com.xcong.excoin.rabbit.pricequeue.whole.WholeDataQueue;
import com.xcong.excoin.rabbit.pricequeue.whole.WholePriceDataModel;
@@ -42,6 +43,9 @@
    private MemberDao memberDao;
    @Resource
    private MemberWalletContractDao memberWalletContractDao;
    @Resource
    private CacheSettingUtils cacheSettingUtils;
    /**
     * @param symbol
     * @param price
@@ -296,6 +300,8 @@
            if (CollUtil.isNotEmpty(list)) {
                BigDecimal totalProfitOrLoss = BigDecimal.ZERO;
                MemberEntity memberEntity = memberDao.selectById(Long.parseLong(entry.getKey()));
                Map<String, BigDecimal> prices = new HashMap<>();
                for (HoldOrderDataModel holdOrderData : list) {
                    String price = redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderData.getSymbol()));
@@ -311,6 +317,16 @@
                        // (开仓价-最新价)*规格*张数
                        rewardRatio = holdOrderData.getOpeningPrice().subtract(newPrice).multiply(holdOrderData.getSymbolSku()).multiply(new BigDecimal(holdOrderData.getSymbolCntSale()));
                    }
                    if (memberEntity.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
                        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
                        if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                            rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                        } else {
//                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.add(tradeSettingEntity.getProfitParam()));
                        }
                    }
                    holdOrderData.setRewardAmount(rewardRatio);
                    holdOrderData.setClosingPrice(newPrice);
                    totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio).setScale(8, BigDecimal.ROUND_DOWN);
@@ -323,12 +339,18 @@
                    continue;
                }
                dataModelMap.remove(entry.getKey());
                redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
                log.info("全仓爆仓触发:{}", JSONObject.toJSONString(wholePriceData));
                wholePriceData.setPrices(prices);
                contractHoldOrderDao.updateMemberAllHoldOrderClosingStatus(wholePriceData.getMemberId());
                orderProducer.sendWholeBomb(JSONObject.toJSONString(wholePriceData));
                synchronized (this) {
                    log.info("爆仓啥的:{}", entry.getKey());
                    if (entry.getKey() != null) {
                        dataModelMap.remove(entry.getKey());
                        wholePriceData.setEquity(wholePriceData.getBalance().add(totalProfitOrLoss));
                        redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
                        log.info("全仓爆仓触发:{}", JSONObject.toJSONString(wholePriceData));
                        wholePriceData.setPrices(prices);
                        contractHoldOrderDao.updateMemberAllHoldOrderClosingStatus(wholePriceData.getMemberId());
                        orderProducer.sendWholeBomb(JSONObject.toJSONString(wholePriceData));
                    }
                }
            }
        }
    }