Helius
2021-03-04 28526645c827a6160ea51d6d4e290e9a355d7e4f
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -37,11 +37,13 @@
import com.xcong.excoin.modules.member.entity.*;
import com.xcong.excoin.modules.platform.dao.TradeSettingDao;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.rabbit.producer.FollowProducer;
import com.xcong.excoin.rabbit.producer.OrderProducer;
import com.xcong.excoin.utils.*;
import com.xcong.excoin.rabbit.pricequeue.OrderModel;
import jnr.a64asm.Mem;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sun.rmi.runtime.Log;
@@ -100,6 +102,9 @@
    private FollowTraderInfoDao followTraderInfoDao;
    @Resource
    private FollowFollowerOrderRelationDao followFollowerOrderRelationDao;
    @Autowired
    private FollowProducer followProducer;
    @Transactional(rollbackFor = Exception.class)
    @Override
@@ -233,7 +238,7 @@
        holdOrderEntity.setOpeningPrice(openingPrice);
        holdOrderEntity.setOpeningType(submitOrderDto.getOrderType());
        holdOrderEntity.setMarkPrice(newPrice);
        holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N);
        holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y);
        holdOrderEntity.setPrePaymentAmount(prePaymentAmount);
        holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice));
        holdOrderEntity.setOperateNo(1);
@@ -320,7 +325,7 @@
        FollowTraderInfoEntity tradeInfo = null;
        if (MemberEntity.IS_TRADER_Y.equals(memberEntity.getIsTrader())) {
            tradeInfo = followTraderInfoDao.selectTraderInfoByMemberId(memberEntity.getId());
            if (tradeInfo.getIsOpen().equals(FollowTraderInfoEntity.ISOPEN_Y)) {
            if (FollowTraderInfoEntity.ISOPEN_Y.equals(tradeInfo.getIsOpen())) {
                isOpenFollow = true;
            }
        }
@@ -380,7 +385,8 @@
                relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo());
                followFollowerOrderRelationDao.insert(relationEntity);
                ThreadPoolUtils.sendFollowOrderTask(holdOrderEntity.getId());
                followProducer.sendAddFollowOrder(holdOrderEntity.getId());
//                ThreadPoolUtils.sendFollowOrderTask(holdOrderEntity.getId());
            }
            // 提交成功
            return Result.ok(MessageSourceUtils.getString("member_service_0024"));
@@ -525,7 +531,7 @@
                BigDecimal totalEntrustAmount = BigDecimal.ZERO;
                if (CollUtil.isNotEmpty(entrustOrder)) {
                    for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) {
                        totalEntrustAmount.add(contractEntrustOrderEntity.getEntrustAmount());
                        totalEntrustAmount = totalEntrustAmount.add(contractEntrustOrderEntity.getEntrustAmount());
                    }
                }
                BigDecimal riskRatio = totalHoldBond.divide(walletContractEntity.getTotalBalance().add(totalProfitOrLoss).subtract(totalEntrustAmount), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100));
@@ -824,6 +830,8 @@
        // 占用保证金 -- 即持仓单中的保证金之和
        BigDecimal beUsedBondAmount = BigDecimal.ZERO;
        BigDecimal moreBondAmount = BigDecimal.ZERO;
        BigDecimal lessBondAmount = BigDecimal.ZERO;
        // 总盈利
        BigDecimal totalProfitOrLess = BigDecimal.ZERO;
        if (CollUtil.isNotEmpty(holdOrderEntities)) {
@@ -837,9 +845,11 @@
                BigDecimal profitOrLess = BigDecimal.ZERO;
                // 开多
                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
                    moreBondAmount = moreBondAmount.add(holdOrderEntity.getBondAmount());
                    profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
                    // 开空
                } else {
                    lessBondAmount = lessBondAmount.add(holdOrderEntity.getBondAmount());
                    profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
                }
@@ -863,10 +873,13 @@
        if (equity.compareTo(BigDecimal.ZERO) <= 0) {
            equity = BigDecimal.ZERO;
        }
        BigDecimal available = walletContractEntity.getAvailableBalance().add(totalProfitOrLess);
        if (available.compareTo(BigDecimal.ZERO) <= 0) {
            available = BigDecimal.ZERO;
        BigDecimal available = walletContractEntity.getAvailableBalance();
        if (totalProfitOrLess.compareTo(BigDecimal.ZERO) <= 0) {
            available = available.add(totalProfitOrLess);
            if (available.compareTo(BigDecimal.ZERO) <= 0) {
                available = BigDecimal.ZERO;
            }
        }
        
        // 获取当日k线的开盘价
@@ -876,13 +889,15 @@
        contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount);
        contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount);
        contractMoneyInfoVo.setEquity(equity);
        contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance());
        contractMoneyInfoVo.setAvailableBalance(available);
        contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio());
        contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio());
        contractMoneyInfoVo.setNewPrice(newPriceSymbol);
        contractMoneyInfoVo.setUpOrDown(upOrDown);
        contractMoneyInfoVo.setSymbolSku(cacheSettingUtils.getSymbolSku(symbol));
        contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp());
        contractMoneyInfoVo.setMoreBondAmount(moreBondAmount);
        contractMoneyInfoVo.setLessBondAmount(lessBondAmount);
        return Result.ok(contractMoneyInfoVo);
    }
@@ -1066,8 +1081,10 @@
                holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1);
                contractHoldOrderDao.updateById(holdOrderEntity);
                // 发送爆仓消息
                sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
                if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == holdOrderEntity.getPositionType()) {
                    // 发送爆仓消息
                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
                }
            }
        }
    }