Helius
2020-10-15 aa175108a395a7721080dac92cee5bf0afeaabdf
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -2,6 +2,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
import com.xcong.excoin.common.enumerates.OrderClosingTypeEnum;
@@ -299,6 +300,8 @@
            // 保证金
            BigDecimal bondAmount = CalculateUtil.getBondAmount(holdOrderEntity.getOpeningPrice(), lotNumber, closeCnt, holdOrderEntity.getLeverRatio());
            BigDecimal rewardRatio = profitOrLoss.divide(bondAmount, 8, BigDecimal.ROUND_DOWN);
            log.info("bondAmount:{}", bondAmount);
            // 平仓手续费  TODO 可能需要修复手续费
            BigDecimal fee = BigDecimal.ZERO;
@@ -319,11 +322,14 @@
            contractOrderEntity.setRewardAmount(profitOrLoss);
            contractOrderEntity.setBondAmount(bondAmount);
            contractOrderEntity.setClosingFeeAmount(fee);
            contractOrderEntity.setRewardRatio(rewardRatio);
            contractOrderDao.insert(contractOrderEntity);
            if (holdOrderEntity.getSymbolCntSale() != 0) {
                holdOrderEntity.setOpeningFeeAmount(holdOrderEntity.getOpeningFeeAmount().subtract(fee));
                holdOrderEntity.setBondAmount(holdOrderEntity.getBondAmount().subtract(bondAmount));
                BigDecimal rewardAmount = holdOrderEntity.getRewardAmount() == null ? BigDecimal.ZERO : holdOrderEntity.getRewardAmount();
                holdOrderEntity.setRewardAmount(rewardAmount.add(profitOrLoss));
                contractHoldOrderDao.updateById(holdOrderEntity);
            } else {
                contractHoldOrderDao.deleteById(holdOrderEntity.getId());
@@ -373,7 +379,7 @@
        log.info("执行平仓委托");
        Long memberId = entrustOrder.getMemberId();
        int orderType = entrustOrder.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE ? ContractHoldOrderEntity.OPENING_TYPE_MORE : ContractHoldOrderEntity.OPENING_TYPE_LESS;
        int orderType = entrustOrder.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE ? ContractOrderEntity.ORDER_TYPE_CLOSE_MORE : ContractOrderEntity.ORDER_TYPE_CLOSE_LESS;
        String symbol = entrustOrder.getSymbol();
        MemberEntity memberEntity = memberDao.selectById(memberId);
@@ -385,6 +391,13 @@
        int closeCnt = entrustOrder.getSymbolCnt();
        ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectWholeHoldOrderByOrderType(memberId, orderType, symbol);
        List<Object> types = redisUtils.lGet(AppContants.RABBIT_TYPE + holdOrderEntity.getId(), 0, -1);
        if(types.contains(9) || types.contains(10) || types.contains(11) || types.contains(12)) {
            log.info("存在止盈/止损 orderId : {}, types : {}", holdOrderEntity.getId(), JSONObject.toJSONString(types));
            return;
        }
        BigDecimal profitOrLoss;
        int closingType;
        // 平多