From d23645e976981bc9b670eea1d469fe8a36be309c Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Wed, 17 Apr 2024 17:19:53 +0800 Subject: [PATCH] 55测试环境 --- src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 234 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 192 insertions(+), 42 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 fcd2cd8..c3f9a97 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 @@ -1,6 +1,8 @@ package com.xcong.excoin.modules.contract.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; + import com.alibaba.druid.sql.visitor.functions.If; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -13,6 +15,7 @@ import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.common.system.service.CommonService; +import com.xcong.excoin.modules.coin.service.CoinService; import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao; import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao; import com.xcong.excoin.modules.contract.dao.ContractOrderDao; @@ -37,11 +40,13 @@ import com.xcong.excoin.modules.member.entity.*; import com.xcong.excoin.modules.platform.dao.TradeSettingDao; import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; +import com.xcong.excoin.rabbit.producer.FollowProducer; import com.xcong.excoin.rabbit.producer.OrderProducer; import com.xcong.excoin.utils.*; import com.xcong.excoin.rabbit.pricequeue.OrderModel; import jnr.a64asm.Mem; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import sun.rmi.runtime.Log; @@ -101,10 +106,32 @@ @Resource private FollowFollowerOrderRelationDao followFollowerOrderRelationDao; + @Autowired + private FollowProducer followProducer; + + @Autowired + private CoinService coinService; + @Transactional(rollbackFor = Exception.class) @Override public Result submitOrder(SubmitOrderDto submitOrderDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + + //查询是否可以点击平仓按钮 + Long memberIdLong = memberEntity.getId(); + MemberEntity selectById = memberDao.selectById(memberIdLong); + Integer pcState = selectById.getPcState(); + if(MemberEntity.PCSTATE_N == pcState) { + return Result.loading("loading_type"); + } + + BigDecimal total = coinService.getAllWalletAmount(memberIdLong); + Map<String, Object> data = new HashMap<>(); + if (total.compareTo(AppContants.BASE_MIN_AMOUNT) > 0) { + data.put("baseUrl", AppContants.BASE_URL_L2); + } else { + data.put("baseUrl", AppContants.BASE_URL_L1); + } // 判断当前对应的持仓/委托 if (memberEntity.getContractPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { @@ -115,7 +142,9 @@ } // 逐仓逻辑 - return doPositionTypeForAdd(submitOrderDto, memberEntity); + Result result = doPositionTypeForAdd(submitOrderDto, memberEntity); + result.setData(data); + return result; } else { List<ContractHoldOrderEntity> holdList = contractHoldOrderDao.selectMemberHoldOrderByPositionType(ContractEntrustOrderEntity.POSITION_TYPE_ADD, memberEntity.getId()); List<ContractEntrustOrderEntity> entrustList = contractEntrustOrderDao.selectMemberEntrustOrderByPositionType(ContractEntrustOrderEntity.POSITION_TYPE_ADD, memberEntity.getId()); @@ -124,7 +153,9 @@ } // 全仓逻辑 - return doPositionTypeForWhole(submitOrderDto, memberEntity); + Result result = doPositionTypeForWhole(submitOrderDto, memberEntity); + result.setData(data); + return result; } } @@ -197,11 +228,8 @@ if (i > 0) { memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); - // 全仓爆仓 - ThreadPoolUtils.sendWholePrice(memberEntity.getId()); - // 发送预估强平价 - ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); +// ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), openFeePrice, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); @@ -211,6 +239,9 @@ } else { LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), prePaymentAmount, walletContract.getAvailableBalance().subtract(prePaymentAmount), submitOrderDto.getSymbol(), "买跌持仓", "买跌:" + submitOrderDto.getSymbol()); } + + // 全仓爆仓 + ThreadPoolUtils.sendWholePrice(memberEntity.getId()); // 提交成功 return Result.ok(MessageSourceUtils.getString("member_service_0024")); @@ -233,7 +264,7 @@ holdOrderEntity.setOpeningPrice(openingPrice); holdOrderEntity.setOpeningType(submitOrderDto.getOrderType()); holdOrderEntity.setMarkPrice(newPrice); - holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N); + holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y); holdOrderEntity.setPrePaymentAmount(prePaymentAmount); holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice)); holdOrderEntity.setOperateNo(1); @@ -251,7 +282,7 @@ memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); // 发送预估强平价 - ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); +// ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); @@ -261,6 +292,9 @@ } else { LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), prePaymentAmount, walletContract.getAvailableBalance().subtract(prePaymentAmount), submitOrderDto.getSymbol(), "买跌持仓", "买跌:" + submitOrderDto.getSymbol()); } + + // 全仓爆仓 + ThreadPoolUtils.sendWholePrice(memberEntity.getId()); // 提交成功 return Result.ok(MessageSourceUtils.getString("member_service_0024")); @@ -317,7 +351,7 @@ FollowTraderInfoEntity tradeInfo = null; if (MemberEntity.IS_TRADER_Y.equals(memberEntity.getIsTrader())) { tradeInfo = followTraderInfoDao.selectTraderInfoByMemberId(memberEntity.getId()); - if (tradeInfo.getIsOpen().equals(FollowTraderInfoEntity.ISOPEN_Y)) { + if (FollowTraderInfoEntity.ISOPEN_Y.equals(tradeInfo.getIsOpen())) { isOpenFollow = true; } } @@ -367,17 +401,8 @@ // 若该用户为交易员且开启带单模式,则发送带单异步 if (isOpenFollow) { - FollowFollowerOrderRelationEntity relationEntity = new FollowFollowerOrderRelationEntity(); - relationEntity.setIsShow(FollowFollowerOrderRelationEntity.IS_SHOW_Y); - relationEntity.setMemberId(holdOrderEntity.getMemberId()); - relationEntity.setOrderId(holdOrderEntity.getId()); - relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD); - relationEntity.setTradeId(tradeInfo.getId()); - relationEntity.setTradeMemberId(tradeInfo.getMemberId()); - relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo()); - followFollowerOrderRelationDao.insert(relationEntity); - - ThreadPoolUtils.sendFollowOrderTask(holdOrderEntity.getId()); + sendFollowOrder(tradeInfo, holdOrderEntity); +// ThreadPoolUtils.sendFollowOrderTask(holdOrderEntity.getId()); } // 提交成功 return Result.ok(MessageSourceUtils.getString("member_service_0024")); @@ -386,6 +411,20 @@ return Result.fail(MessageSourceUtils.getString("member_service_0067")); } + @Override + public void sendFollowOrder(FollowTraderInfoEntity tradeInfo, ContractHoldOrderEntity holdOrderEntity) { + FollowFollowerOrderRelationEntity relationEntity = new FollowFollowerOrderRelationEntity(); + relationEntity.setIsShow(FollowFollowerOrderRelationEntity.IS_SHOW_Y); + relationEntity.setMemberId(holdOrderEntity.getMemberId()); + relationEntity.setOrderId(holdOrderEntity.getId()); + relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD); + relationEntity.setTradeId(tradeInfo.getId()); + relationEntity.setTradeMemberId(tradeInfo.getMemberId()); + relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo()); + followFollowerOrderRelationDao.insert(relationEntity); + + followProducer.sendAddFollowOrder(holdOrderEntity.getId()); + } /** * 全仓模式--若当前已经存在持仓,则合并当前持仓 @@ -440,11 +479,18 @@ @Override public Result findHoldOrderList(String symbol, int type) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + List<ContractHoldOrderEntity> list = null; - List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol, type); + if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) { + list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(), type); + } else { + list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol, type); + } + MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); if (CollUtil.isNotEmpty(list)) { BigDecimal totalProfitOrLoss = BigDecimal.ZERO; + BigDecimal totalHoldBond = BigDecimal.ZERO; List<HoldOrderListVo> resultList = new ArrayList<>(); for (ContractHoldOrderEntity holdOrderEntity : list) { HoldOrderListVo holdOrderListVo = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToDto(holdOrderEntity); @@ -501,16 +547,30 @@ holdOrderListVo.setReturnRate(returnRate); holdOrderListVo.setProfitOrLoss(rewardRatio); if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) { - BigDecimal forcePrice = CalculateUtil.getForceSetPriceForWhole(holdOrderEntity.getSymbol(), memberEntity); + BigDecimal forcePrice = CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 1); +// contractHoldOrderDao.updateForcePriceBySymbolAndMemberId(forcePrice, memberEntity.getId(), holdOrderEntity.getSymbol()); holdOrderListVo.setForceClosingPrice(forcePrice); } resultList.add(holdOrderListVo); totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio); + totalHoldBond = totalHoldBond.add(holdOrderEntity.getHoldBond() == null ? BigDecimal.ZERO : holdOrderEntity.getHoldBond()); } Map<String, Object> result = new HashMap<>(); + if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) { + List<ContractEntrustOrderEntity> entrustOrder = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId()); + BigDecimal totalEntrustAmount = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(entrustOrder)) { + for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) { + totalEntrustAmount = totalEntrustAmount.add(contractEntrustOrderEntity.getEntrustAmount()); + } + } + BigDecimal riskRatio = totalHoldBond.divide(walletContractEntity.getTotalBalance().add(totalProfitOrLoss).subtract(totalEntrustAmount), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); + result.put("riskRatio", riskRatio); + } + result.put("hold", resultList); - result.put("totalProfitOrLoss", totalProfitOrLoss.setScale(4, BigDecimal.ROUND_DOWN).toPlainString()); + result.put("totalProfitOrLoss", totalProfitOrLoss.setScale(2, BigDecimal.ROUND_DOWN).toPlainString()); return Result.ok(result); } return Result.ok("success"); @@ -519,6 +579,15 @@ @Override public Result cancelHoldOrder(Long id) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + + //查询是否可以点击平仓按钮 + Long memberIdLong = memberEntity.getId(); + MemberEntity selectById = memberDao.selectById(memberIdLong); + Integer pcState = selectById.getPcState(); + if(MemberEntity.PCSTATE_N == pcState) { + return Result.loading("loading_type"); + } + ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), id); if (holdOrderEntity == null) { // 订单不存在 @@ -543,6 +612,13 @@ @Override public Result cancelHoldOrder(WholeCloseOrderDto wholeCloseOrderDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + //查询是否可以点击平仓按钮 + Long memberIdLong = memberEntity.getId(); + MemberEntity selectById = memberDao.selectById(memberIdLong); + Integer pcState = selectById.getPcState(); + if(MemberEntity.PCSTATE_N == pcState) { + return Result.loading("loading_type"); + } ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), wholeCloseOrderDto.getId()); if (holdOrderEntity == null) { // 订单不存在 @@ -585,7 +661,15 @@ @Override public Result cancelHoldOrderBatch(SymbolDto symbolDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); - List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbolDto.getSymbol(), 1); + //查询是否可以点击平仓按钮 + Long memberIdLong = memberEntity.getId(); + MemberEntity selectById = memberDao.selectById(memberIdLong); + Integer pcState = selectById.getPcState(); + if(MemberEntity.PCSTATE_N == pcState) { + return Result.loading("loading_type"); + } + + List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbolDto.getSymbol(), symbolDto.getType()); if (CollUtil.isEmpty(holdOrderEntities)) { return Result.fail("订单不存在"); } @@ -602,6 +686,14 @@ @Override public Result setTargetProfitOrLess(ProfitOrLessDto profitOrLessDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + //查询是否可以点击平仓按钮 + Long memberIdLong = memberEntity.getId(); + MemberEntity selectById = memberDao.selectById(memberIdLong); + Integer pcState = selectById.getPcState(); + if(MemberEntity.PCSTATE_N == pcState) { + return Result.loading("loading_type"); + } + ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), profitOrLessDto.getId()); if (holdOrderEntity == null) { return Result.fail("订单不存在"); @@ -707,6 +799,15 @@ @Override public Result changeBond(ChangeBondDto changeBondDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + + //查询是否可以点击平仓按钮 + Long memberIdLong = memberEntity.getId(); + MemberEntity selectById = memberDao.selectById(memberIdLong); + Integer pcState = selectById.getPcState(); + if(MemberEntity.PCSTATE_N == pcState) { + return Result.loading("loading_type"); + } + ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), changeBondDto.getId()); if (holdOrderEntity == null) { return Result.fail("订单不存在"); @@ -766,6 +867,10 @@ if (i > 0) { // 发送爆仓消息 sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId()); + + if (ContractOrderEntity.CONTRACTTYPE_DOCUMENTARY == holdOrderEntity.getContractType()) { + followProducer.sendChangeFollowOrderBond(changeBondDto); + } return Result.ok("调整成功"); } return Result.fail("调整失败"); @@ -779,7 +884,7 @@ BigDecimal newPriceSymbol = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol))); List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId()); - List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId()); + List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(), null); MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); // if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) { // // 当前合约委托单 @@ -801,6 +906,8 @@ // 占用保证金 -- 即持仓单中的保证金之和 BigDecimal beUsedBondAmount = BigDecimal.ZERO; + BigDecimal moreBondAmount = BigDecimal.ZERO; + BigDecimal lessBondAmount = BigDecimal.ZERO; // 总盈利 BigDecimal totalProfitOrLess = BigDecimal.ZERO; if (CollUtil.isNotEmpty(holdOrderEntities)) { @@ -814,9 +921,11 @@ BigDecimal profitOrLess = BigDecimal.ZERO; // 开多 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { + moreBondAmount = moreBondAmount.add(holdOrderEntity.getBondAmount()); profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber); // 开空 } else { + lessBondAmount = lessBondAmount.add(holdOrderEntity.getBondAmount()); profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber); } @@ -841,6 +950,16 @@ equity = BigDecimal.ZERO; } + BigDecimal available = walletContractEntity.getAvailableBalance(); + if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) { + if (totalProfitOrLess.compareTo(BigDecimal.ZERO) <= 0) { + available = available.add(totalProfitOrLess); + if (available.compareTo(BigDecimal.ZERO) <= 0) { + available = BigDecimal.ZERO; + } + } + } + // 获取当日k线的开盘价 Candlestick symbolObject = (Candlestick) redisUtils.get(symbol); BigDecimal openPrice = symbolObject.getOpen(); @@ -848,13 +967,16 @@ contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount); contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount); contractMoneyInfoVo.setEquity(equity); - contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance()); + contractMoneyInfoVo.setAvailableBalance(available); contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio()); contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio()); contractMoneyInfoVo.setNewPrice(newPriceSymbol); contractMoneyInfoVo.setUpOrDown(upOrDown); contractMoneyInfoVo.setSymbolSku(cacheSettingUtils.getSymbolSku(symbol)); contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp()); + contractMoneyInfoVo.setMoreBondAmount(moreBondAmount); + contractMoneyInfoVo.setLessBondAmount(lessBondAmount); + contractMoneyInfoVo.setProfitOrLess(totalProfitOrLess); return Result.ok(contractMoneyInfoVo); } @@ -985,8 +1107,27 @@ List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberId(member.getId()); List<ContractEntrustOrderEntity> entrustList = contractEntrustOrderDao.selectEntrustOrderListByMemberId(member.getId()); - if (CollUtil.isNotEmpty(list) || CollUtil.isNotEmpty(entrustList)) { - return Result.fail("存在持仓/委托, 无法更改"); +// if (CollUtil.isNotEmpty(list) || CollUtil.isNotEmpty(entrustList)) { +// return Result.fail("存在持仓/委托, 无法更改"); +// } + + if(CollUtil.isNotEmpty(list)) { + for(ContractHoldOrderEntity contractHoldOrderEntity : list) { + String symbol = contractHoldOrderEntity.getSymbol(); + if(StrUtil.isEmpty(symbol)) { + return Result.fail("存在持仓/委托, 无法更改"); + } + return Result.fail("币种"+symbol+"存在持仓/委托, 无法更改"); + } + } + if(CollUtil.isNotEmpty(entrustList)) { + for(ContractEntrustOrderEntity contractEntrustOrderEntity : entrustList) { + String symbol = contractEntrustOrderEntity.getSymbol(); + if(StrUtil.isEmpty(symbol)) { + return Result.fail("存在持仓/委托, 无法更改"); + } + return Result.fail("币种"+symbol+"存在持仓/委托, 无法更改"); + } } /** @@ -1019,27 +1160,36 @@ if (CollUtil.isNotEmpty(list)) { for (ContractHoldOrderEntity holdOrderEntity : list) { + BigDecimal thisTimeHold = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).multiply(tradeSettingEntity.getDoingRatio()); + MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(holdOrderEntity.getMemberId(), CoinTypeEnum.USDT.name()); + log.info("订单编号:{}, 持仓费:{}", holdOrderEntity.getOrderNo(), thisTimeHold); + BigDecimal holdAmount = holdOrderEntity.getHoldAmount(); if (holdAmount == null) { holdAmount = BigDecimal.ZERO; } - BigDecimal thisTimeHold = holdOrderEntity.getBondAmount().multiply(tradeSettingEntity.getDoingRatio()); - log.info("订单编号:{}, 持仓费:{}", holdOrderEntity.getOrderNo(), thisTimeHold); - - MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId()); - BigDecimal subBond = holdOrderEntity.getBondAmount().subtract(thisTimeHold); - - BigDecimal newForcePrice = CalculateUtil.getForceSetPrice(subBond.subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity); holdAmount = holdAmount.add(thisTimeHold); - holdOrderEntity.setBondAmount(subBond); - holdOrderEntity.setHoldAmount(holdAmount); - holdOrderEntity.setForceClosingPrice(newForcePrice); - holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1); - contractHoldOrderDao.updateById(holdOrderEntity); + if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == holdOrderEntity.getPositionType()) { - // 发送爆仓消息 - sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId()); + MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId()); + BigDecimal subBond = holdOrderEntity.getBondAmount().subtract(thisTimeHold); + BigDecimal newForcePrice = CalculateUtil.getForceSetPrice(subBond.subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity); + holdOrderEntity.setBondAmount(subBond); + holdOrderEntity.setHoldAmount(holdAmount); + holdOrderEntity.setForceClosingPrice(newForcePrice); + holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1); + contractHoldOrderDao.updateById(holdOrderEntity); + + memberWalletContractDao.increaseWalletContractBalanceById(null, thisTimeHold.negate(), null, wallet.getId()); + // 发送爆仓消息 + sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId()); + } else { +// holdOrderEntity.setHoldAmount(holdAmount); +// contractHoldOrderDao.updateById(holdOrderEntity); +// memberWalletContractDao.increaseWalletContractBalanceById(thisTimeHold.negate(), thisTimeHold.negate(), null, wallet.getId()); +// ThreadPoolUtils.sendWholePrice(holdOrderEntity.getMemberId()); + } } } } -- Gitblit v1.9.1