| | |
| | | if (ids.size() == 1) { |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(ids.get(0)); |
| | | |
| | | // 判断仓位类型是否逐仓 |
| | | if (holdOrderEntity.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { |
| | | // 逐仓平仓 |
| | | cancelHoldOrderMethod(holdOrderEntity); |
| | | if (holdOrderEntity != null) { |
| | | // 判断仓位类型是否逐仓 |
| | | if (holdOrderEntity.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { |
| | | // 逐仓平仓 |
| | | cancelHoldOrderMethod(holdOrderEntity); |
| | | } else { |
| | | // 全仓模式平仓 |
| | | closingWholeOrder(holdOrderEntity); |
| | | } |
| | | } else { |
| | | // 全仓模式平仓 |
| | | closingWholeOrder(holdOrderEntity); |
| | | log.info("持仓订单为空: {}", ids.get(0)); |
| | | } |
| | | } else { |
| | | List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectBatchIds(ids); |
| | |
| | | followOrderOperationService.closingFollowOrders(holdOrderEntity.getOrderNo()); |
| | | } else { |
| | | followFollowerProfitDao.updateFollowerProfitByTradeMemberId(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), profitOrLoss, traderInfoEntity.getMemberId(), memberEntity.getId()); |
| | | LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CLOSE_ORDER_TITLE, StrUtil.format(NoticeConstant.CLOSE_ORDER_CONTENT, contractOrderEntity.getSymbol(), contractOrderEntity.getClosingPrice(), profitOrLoss.setScale(8, BigDecimal.ROUND_DOWN).toString(), traderInfoEntity.getNickname())); |
| | | LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CLOSE_ORDER_TITLE, StrUtil.format(NoticeConstant.CLOSE_ORDER_CONTENT, contractOrderEntity.getSymbol(), contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_HALF_UP).toString(), profitOrLoss.setScale(2, BigDecimal.ROUND_HALF_UP).toString(), traderInfoEntity.getNickname())); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | log.info("profitOrLoss:{}", profitOrLoss); |
| | | |
| | | BigDecimal rewardRatio = profitOrLoss.divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 4, BigDecimal.ROUND_DOWN); |
| | | // 保证金 |
| | | BigDecimal bondAmount = CalculateUtil.getBondAmount(holdOrderEntity.getOpeningPrice(), lotNumber, closeCnt, holdOrderEntity.getLeverRatio()); |
| | | |
| | |
| | | contractOrderEntity.setClosingType(closingType); |
| | | contractOrderEntity.setSymbolCnt(closeCnt); |
| | | contractOrderEntity.setRewardAmount(profitOrLoss); |
| | | contractOrderEntity.setRewardRatio(rewardRatio); |
| | | contractOrderEntity.setBondAmount(bondAmount.add(fee)); |
| | | contractOrderEntity.setClosingFeeAmount(fee); |
| | | contractOrderEntity.setClosingTime(new Date()); |
| | |
| | | contractOrderEntity.setEntrustOpeningPrice(newPrice); |
| | | contractOrderEntity.setEntrustTime(new Date()); |
| | | contractOrderEntity.setClosingPrice(newPrice); |
| | | contractOrderEntity.setOrderType(orderType); |
| | | contractOrderEntity.setTradeType(ContractOrderEntity.TRADE_TYPE_LIMIT_PRICE); |
| | | contractOrderEntity.setOrderType(entrustOrder.getEntrustType()); |
| | | contractOrderEntity.setClosingType(closingType); |
| | | contractOrderEntity.setSymbolCnt(closeCnt); |
| | | contractOrderEntity.setRewardAmount(profitOrLoss); |
| | | contractOrderEntity.setBondAmount(bondAmount); |
| | | contractOrderEntity.setClosingTime(new Date()); |
| | | contractOrderEntity.setClosingFeeAmount(fee); |
| | | contractOrderDao.insert(contractOrderEntity); |
| | | |