From 46a4a7b1a83d733aee95dcfe156ff3f1302632ac Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Tue, 02 Jun 2020 16:14:29 +0800 Subject: [PATCH] add changeBond interface --- src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java index 8f2c8e0..10e2f85 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java @@ -15,6 +15,7 @@ import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper; +import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto; import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto; import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo; @@ -378,4 +379,56 @@ return Result.fail("设置失败"); } + + @Transactional(rollbackFor = Exception.class) + @Override + public Result changeBond(ChangeBondDto changeBondDto) { + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), changeBondDto.getId()); + if (holdOrderEntity == null) { + return Result.fail("订单不存在"); + } + + MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); + + // 增加保证金 + if (ChangeBondDto.TYPE_ADD == changeBondDto.getType()) { + if (changeBondDto.getAmount().compareTo(walletContract.getAvailableBalance()) > 0) { + return Result.fail("可用余额不足"); + } + walletContract.setAvailableBalance(walletContract.getAvailableBalance().subtract(changeBondDto.getAmount())); + walletContract.setFrozenBalance(walletContract.getFrozenBalance().add(changeBondDto.getAmount())); + holdOrderEntity.setBondAmount(holdOrderEntity.getBondAmount().add(changeBondDto.getAmount())); + // 减少保证金 + } else { + if (holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount()).subtract(changeBondDto.getAmount()).compareTo(BigDecimal.ZERO) < 0) { + return Result.fail("超出保证金最大减少金额"); + } + walletContract.setAvailableBalance(walletContract.getAvailableBalance().add(changeBondDto.getAmount())); + walletContract.setFrozenBalance(walletContract.getFrozenBalance().subtract(changeBondDto.getAmount())); + holdOrderEntity.setBondAmount(holdOrderEntity.getBondAmount().subtract(changeBondDto.getAmount())); + } + + BigDecimal forceClosingPrice = CalculateUtil.getForceSetPrice(holdOrderEntity.getBondAmount(), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity); + holdOrderEntity.setForceClosingPrice(forceClosingPrice); + holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1); + + int i = contractHoldOrderDao.updateById(holdOrderEntity); + int j = memberWalletContractDao.updateById(walletContract); + + OrderModel model = null; + // 开多 + if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { + model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.toPlainString(), holdOrderEntity.getSymbol()); + // 开空 + } else { + model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.toPlainString(), holdOrderEntity.getSymbol()); + } + producer.sendPriceOperate(JSONObject.toJSONString(model)); + + if (i > 0 && j > 0) { + return Result.ok("调整成功"); + } + return Result.fail("调整失败"); + } } -- Gitblit v1.9.1