From 385eb4e47f9e2d89131f276129c1f8e6988edf23 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 28 Aug 2020 11:06:08 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java | 103 +++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 74 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java index bec0bef..1489125 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java @@ -143,28 +143,34 @@ } for (ContractHoldOrderEntity order : orderList) { Long orderId = order.getId(); - System.out.println("开多止盈订单号:" + order.getOrderNo()); - System.out.println("传来的止盈价格:" + modelMap.get(order.getId())); + log.info("开多止盈订单号:" + order.getOrderNo()); + log.info("传来的止盈价格:" + modelMap.get(order.getId())); if (null != order.getStopProfitPrice()) { BigDecimal closePrice = order.getStopProfitPrice(); BigDecimal queuePrice = modelMap.get(order.getId()); - System.out.println("订单的止盈价格:" + closePrice); + log.info("订单的止盈价格:" + closePrice); // 判断 保留七位是为了忽略以为小数 防止不精确导致的不相等 if (queuePrice.compareTo(closePrice) != 0) { // 不能止盈 - System.out.println("数据库价格:" + queuePrice.toPlainString() + "--价格不能止盈:" + closePrice); + log.info("数据库价格:" + queuePrice.toPlainString() + "--价格不能止盈:" + closePrice); //更新数据 contractHoldOrderService.updateOrderIsCanClosingAndBatchNoById(orderId); continue; } - System.out.println("执行操作"); + log.info("执行操作"); // 止盈价 String symbol = order.getSymbol(); // 本次需要退回的保证金 BigDecimal prePrice = order.getBondAmount(); Long memberId = order.getMemberId(); - MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + MemberWalletContractEntity wallet; + if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + } else { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(order.getSymbol())); + } + if (wallet != null) { // 历史订单 ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(order); @@ -192,7 +198,7 @@ // profitLossPrice = profitLossPrice.multiply(BigDecimal.ONE.add(tradeSetting.getProfitParam())); } } - //回报率 + // 回报率 BigDecimal returnRate = profitLossPrice.divide((order.getBondAmount().subtract(contractOrderEntity.getOpeningFeeAmount())), 8, BigDecimal.ROUND_DOWN); contractOrderEntity.setRewardAmount(profitLossPrice); contractOrderEntity.setRewardRatio(returnRate); @@ -257,7 +263,12 @@ // 本次需要退回的预付款 BigDecimal prePrice = order.getBondAmount(); Long memberId = order.getMemberId(); - MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + MemberWalletContractEntity wallet; + if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + } else { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(order.getSymbol())); + } if (wallet != null) { // 历史订单 ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(order); @@ -351,7 +362,12 @@ Long memberId = order.getMemberId(); // 本次需要退回的预付款 BigDecimal prePrice = order.getBondAmount(); - MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + MemberWalletContractEntity wallet; + if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + } else { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(order.getSymbol())); + } if (wallet != null) { // 历史订单 @@ -442,7 +458,12 @@ Long memberId = order.getMemberId(); // 本次需要退回的预付款 BigDecimal prePrice = order.getBondAmount(); - MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + MemberWalletContractEntity wallet; + if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, "USDT"); + } else { + wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(order.getSymbol())); + } if (wallet != null) { // 历史订单 @@ -614,9 +635,10 @@ // 手续费 BigDecimal openFeePrice = CalculateUtil.getOpenFeePrice(entrustOrder.getEntrustPrice(), entrustOrder.getSymbolSku(), entrustOrder.getSymbolCnt(), tradeSettingEntity.getFeeRatio()); - ContractHoldOrderEntity wholeHoldOrder = contractHoldOrderDao.selectWholeHoldOrderByOrderType(entrustOrder.getMemberId(), entrustOrder.getEntrustType()); + ContractHoldOrderEntity wholeHoldOrder = contractHoldOrderDao.selectWholeHoldOrderByOrderType(entrustOrder.getMemberId(), entrustOrder.getEntrustType(), entrustOrder.getSymbol()); // 判断持仓是否存在,若不存在则创建新的持仓订单 if (wholeHoldOrder == null) { + log.info("持仓不存在"); ContractHoldOrderEntity holdOrderEntity = ContractEntrustOrderEntityMapper.INSTANCE.entrustOrderToHoldOrder(entrustOrder); int type = entrustOrder.getEntrustType(); @@ -658,6 +680,7 @@ return; } + log.info("持仓存在"); ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(wholeHoldOrder); contractOrderEntity.setBondAmount(entrustOrder.getBondAmount().add(openFeePrice)); contractOrderEntity.setOpeningPrice(entrustOrder.getEntrustPrice()); @@ -683,7 +706,7 @@ wholeHoldOrder.setBondAmount(wholeHoldOrder.getBondAmount().add(bondAmount)); wholeHoldOrder.setPrePaymentAmount(prePaymentAmount); wholeHoldOrder.setOperateNo(wholeHoldOrder.getOperateNo() + 1); - contractHoldOrderService.save(wholeHoldOrder); + contractHoldOrderService.updateById(wholeHoldOrder); contractEntrustOrderService.removeById(entrustOrder.getId()); memberWalletContractService.increaseWalletContractBalanceById(null, openFeePrice.negate(), entrustOrder.getBondAmount().negate(), wallet.getId()); @@ -749,25 +772,47 @@ contractOrderEntity.setClosingPrice(nowPrice); contractOrderEntity.setClosingTime(new Date()); contractOrderEntity.setClosingFeeAmount(coinsOrder.getOpeningFeeAmount()); - contractOrderEntity.setRewardAmount(coinsOrder.getBondAmount().subtract(contractOrderEntity.getOpeningFeeAmount()).negate()); - contractOrderService.save(contractOrderEntity); - //更新用户钱包数据 - MemberWalletContractEntity usdt = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, "USDT"); + if (coinsOrder.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + contractOrderEntity.setRewardAmount(coinsOrder.getBondAmount().subtract(contractOrderEntity.getOpeningFeeAmount()).negate()); + contractOrderService.save(contractOrderEntity); - // 减去的时候用负数 - BigDecimal totalPrice = coinsOrder.getBondAmount().negate(); - memberWalletContractService.increaseWalletContractBalanceById(null, totalPrice, null, usdt.getId()); - // 流水记录 TODO - MemberAccountFlowEntity record = new MemberAccountFlowEntity(); - record.setCreateTime(new Date()); - record.setSource("系统自动平仓"); - record.setRemark("系统自动平仓"); - record.setBalance(usdt.getAvailableBalance()); - record.setMemberId(memId); - record.setSymbol(coinsOrder.getSymbol()); - record.setPrice(coinsOrder.getBondAmount()); - memberAccountFlowEntityDao.insert(record); + //更新用户钱包数据 + MemberWalletContractEntity usdt = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, "USDT"); + + // 减去的时候用负数 + BigDecimal totalPrice = coinsOrder.getBondAmount().negate(); + memberWalletContractService.increaseWalletContractBalanceById(null, totalPrice, null, usdt.getId()); + + // 流水记录 TODO + MemberAccountFlowEntity record = new MemberAccountFlowEntity(); + record.setCreateTime(new Date()); + record.setSource("系统自动平仓"); + record.setRemark("系统自动平仓"); + record.setBalance(usdt.getAvailableBalance()); + record.setMemberId(memId); + record.setSymbol(coinsOrder.getSymbol()); + record.setPrice(coinsOrder.getBondAmount()); + memberAccountFlowEntityDao.insert(record); + } else { + MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol())); + + contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount()).negate()); + contractOrderService.save(contractOrderEntity); + + memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().negate(), null, wallet.getId()); + + // 流水记录 TODO + MemberAccountFlowEntity record = new MemberAccountFlowEntity(); + record.setCreateTime(new Date()); + record.setSource("系统自动平仓"); + record.setRemark("系统自动平仓"); + record.setBalance(BigDecimal.ZERO); + record.setMemberId(memId); + record.setSymbol(coinsOrder.getSymbol()); + record.setPrice(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount())); + memberAccountFlowEntityDao.insert(record); + } } } } -- Gitblit v1.9.1