xiaoyong931011
2021-01-26 04dae77fdfb98be5614e63f6698ef74a374bad8f
src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
@@ -134,6 +134,7 @@
                    log.info("钱包地址不存在:{}", followerSetting.getMemberId());
                    continue;
                }
                MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(followerSetting.getMemberId(), holdOrderEntity.getSymbol());
                // 开仓手续费 建仓价*规格*手数*手续费率
                BigDecimal openFeePrice = openPrice.multiply(lotNumber)
@@ -143,20 +144,20 @@
                // 保证金
                BigDecimal bondAmount = openPrice.multiply(lotNumber).multiply(new BigDecimal(symbolCnt))
                        .multiply(BigDecimal.ONE.divide(new BigDecimal(holdOrderEntity.getLeverRatio())))
                        .multiply(BigDecimal.ONE.divide(new BigDecimal(levelRateEntity.getLevelRateUp())))
                        .setScale(8, BigDecimal.ROUND_DOWN);
                // 预付款
                BigDecimal prePaymentAmount = bondAmount.add(openFeePrice).add(openFeePrice);
                if (prePaymentAmount.compareTo(walletContract.getAvailableBalance()) > -1) {
                    log.info("可用金额不足");
                    LogRecordUtils.insertFollowerNotice(followerSetting.getMemberId(), NoticeConstant.MONEY_NOT_ENOUGH_TITLE, StrUtil.format(NoticeConstant.MONEY_NOT_ENOUGH_CONTENT, followTraderInfoEntity.getNickname()));
                    continue;
                }
                MemberEntity memberEntity = memberDao.selectById(followerSetting.getMemberId());
                // 强平价
                BigDecimal forceClosingPrice = CalculateUtil.getForceSetPrice(bondAmount, openPrice, symbolCnt, lotNumber, holdOrderEntity.getOpeningType(), memberEntity);
                MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), holdOrderEntity.getSymbol());
                ContractHoldOrderEntity followHoldOrder = new ContractHoldOrderEntity();
                followHoldOrder.setMemberId(memberEntity.getId());
                followHoldOrder.setOrderNo(commonService.generateOrderNo(memberEntity.getId()));
@@ -164,6 +165,7 @@
                followHoldOrder.setTradeType(ContractHoldOrderEntity.TRADE_TYPE_MARK);
                followHoldOrder.setSymbol(holdOrderEntity.getSymbol());
                followHoldOrder.setSymbolCnt(symbolCnt);
                followHoldOrder.setSymbolCntSale(symbolCnt);
                followHoldOrder.setSymbolSku(lotNumber);
                followHoldOrder.setLeverRatio(levelRateEntity.getLevelRateUp());
                followHoldOrder.setForceClosingPrice(forceClosingPrice);
@@ -196,7 +198,7 @@
                    followFollowerOrderRelationDao.insert(relationEntity);
                    // 发送爆仓消息
                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
                    sendOrderBombMsg(followHoldOrder.getId(), followHoldOrder.getOpeningType(), forceClosingPrice, followHoldOrder.getSymbol(), followHoldOrder.getOperateNo(), followHoldOrder.getMemberId());
                    // 计算佣金
                    ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
@@ -214,14 +216,14 @@
        }
    }
    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo) {
    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo, Long memberId) {
        OrderModel model = null;
        // 开多
        if (ContractHoldOrderEntity.OPENING_TYPE_MORE == type) {
            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
            // 开空
        } else {
            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
        }
        producer.sendPriceOperate(JSONObject.toJSONString(model));
    }