Helius
2020-08-25 adb99db2cb5359416713a1bd3a13423ddf0f0d80
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -131,7 +131,7 @@
        log.info("全仓逻辑");
        // 获取最新价
        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitOrderDto.getSymbol())));
        MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
        MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(submitOrderDto.getSymbol()));
        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
        MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
@@ -161,6 +161,12 @@
            BigDecimal subBondAmount = bondAmount.subtract(wholeHoldOrder.getBondAmount());
            log.info("保证金差值:{}", subBondAmount);
            if (subBondAmount.compareTo(walletContract.getAvailableBalance()) > -1) {
                // 可用余额不足
                return Result.fail(MessageSourceUtils.getString("member_service_0085"));
            }
//            BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity);
//            log.info("新预估强平价:{}", forceClosingPrice);
@@ -557,14 +563,17 @@
        }
        log.info("--->{},{}", holdOrderEntity.getSymbolCntSale(), wholeCloseOrderDto.getCount());
        int sub = holdOrderEntity.getSymbolCntSale() - wholeCloseOrderDto.getCount();
        log.info("剩余张数:{}", sub);
        // 判断当前持仓张数是否等于平仓张数,若等于则直接更新该订单为不可平状态,否则更新可平张数
        if (wholeCloseOrderDto.getCount() == holdOrderEntity.getSymbolCntSale()) {
            contractHoldOrderDao.updateHoldOrderIsCanClosingById(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N, wholeCloseOrderDto.getId());
        } else {
            // 更新可平张数
            holdOrderEntity.setSymbolCntSale(holdOrderEntity.getSymbolCntSale() - wholeCloseOrderDto.getCount());
            contractHoldOrderDao.updateById(holdOrderEntity);
        if (sub == 0) {
            holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N);
        }
        // 更新可平张数
        holdOrderEntity.setSymbolCntSale(sub);
        holdOrderEntity.setSymbolCnt(sub);
        contractHoldOrderDao.updateById(holdOrderEntity);
        // 将待平张数放入缓存
        redisUtils.set(AppContants.CLOSING_ORDER_PREFIX + holdOrderEntity.getId(), wholeCloseOrderDto.getCount());
@@ -572,7 +581,7 @@
        // 发送平仓消息
        List<Long> ids = new ArrayList<>();
        ids.add(wholeCloseOrderDto.getId());
//        producer.sendCloseTrade(JSONObject.toJSONString(ids));
        producer.sendCloseTrade(JSONObject.toJSONString(ids));
        // 平仓成功
        return Result.ok(MessageSourceUtils.getString("order_service_0044"));
@@ -747,11 +756,20 @@
        PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
        BigDecimal newPriceSymbol = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol)));
        // 当前合约委托单
        List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
        // 当前持仓列表
        List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
        List<ContractEntrustOrderEntity> entrustOrderEntities;
        List<ContractHoldOrderEntity> holdOrderEntities;
        MemberWalletContractEntity walletContractEntity;
        if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) {
            // 当前合约委托单
            entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
            // 当前持仓列表
            holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
            walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
        } else {
            entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol);
            holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(), symbol);
            walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(symbol));
        }
        // 冻结保证金 -- 即委托单中的保证金之和
        BigDecimal frozenBondAmount = BigDecimal.ZERO;
@@ -793,8 +811,6 @@
                totalProfitOrLess = totalProfitOrLess.add(profitOrLess);
            }
        }
        MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
        MemberLevelRateEntity rateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), symbol);
@@ -946,6 +962,7 @@
        updateEntity.setId(member.getId());
        int i = memberDao.updateById(updateEntity);
        if (i > 0) {
            member.setContractPositionType(positionType);
            LoginUserUtils.resetAppLoginUser(member);
            return Result.ok(MessageSourceUtils.getString("member_service_0040"));
        }