| | |
| | | package com.xcong.excoin.modules.contract.service.impl; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.xcong.excoin.common.LoginUserUtils; |
| | |
| | | |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(submitEntrustDto.getSymbol())); |
| | | |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectWholeHoldOrderByOrderType(memberEntity.getId(), submitEntrustDto.getEntrustType()); |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectWholeHoldOrderByOrderType(memberEntity.getId(), submitEntrustDto.getEntrustType(), submitEntrustDto.getSymbol()); |
| | | |
| | | BigDecimal bondAmount; |
| | | BigDecimal openFeePrice; |
| | |
| | | MemberWalletContractEntity walletContractEntity; |
| | | if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == entrustOrderEntity.getPositionType()) { |
| | | walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), MemberWalletCoinEnum.WALLETCOINCODE.getValue()); |
| | | |
| | | BigDecimal total = entrustOrderEntity.getEntrustAmount(); |
| | | memberWalletContractDao.increaseWalletContractBalanceById(total, null, entrustOrderEntity.getBondAmount().negate(), walletContractEntity.getId()); |
| | | |
| | | // 插入财务流水 |
| | | LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), total, walletContractEntity.getAvailableBalance().add(total), entrustOrderEntity.getSymbol(), "撤销委托单", "撤销委托单"); |
| | | } else { |
| | | walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(entrustOrderEntity.getSymbol())); |
| | | } |
| | | |
| | | BigDecimal total = entrustOrderEntity.getEntrustAmount(); |
| | | memberWalletContractDao.increaseWalletContractBalanceById(total, null, entrustOrderEntity.getBondAmount().negate(), walletContractEntity.getId()); |
| | | |
| | | ContractOrderEntity orderEntity = ContractEntrustOrderEntityMapper.INSTANCE.entrustOrderToOrder(entrustOrderEntity); |
| | | orderEntity.setTradeType(ContractOrderEntity.TRADE_TYPE_MARK_PRICE); |
| | | orderEntity.setOrderStatus(ContractOrderEntity.ORDER_STATUS_CANCEL); |
| | | |
| | | if (entrustOrderEntity.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE) { |
| | | orderEntity.setClosingType(RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue()); |
| | | } |
| | | |
| | | if (entrustOrderEntity.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_LESS) { |
| | | orderEntity.setClosingType(RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue()); |
| | | } |
| | | |
| | | int i = contractOrderDao.insert(orderEntity); |
| | | |
| | | contractEntrustOrderDao.deleteById(entrustOrderEntity.getId()); |
| | | |
| | | // 插入财务流水 |
| | | LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), total, walletContractEntity.getAvailableBalance().add(total), entrustOrderEntity.getSymbol(), "撤销委托单", "撤销委托单"); |
| | | if (i > 0) { |
| | | return Result.ok(MessageSourceUtils.getString("cancellation_success")); |
| | | } |
| | |
| | | return Result.fail("可平张数不足"); |
| | | } |
| | | |
| | | List<ContractEntrustOrderEntity> entrustOrders = contractEntrustOrderDao.selectEntrustOrderByOrderNo(holdOrderEntity.getOrderNo()); |
| | | if (CollUtil.isNotEmpty(entrustOrders)) { |
| | | int entrustCnt = 0; |
| | | for (ContractEntrustOrderEntity entrustOrder : entrustOrders) { |
| | | entrustCnt += entrustOrder.getSymbolCnt(); |
| | | } |
| | | |
| | | |
| | | if (submitCloseEntrustDto.getSymbolCnt() > holdOrderEntity.getSymbolCntSale() - entrustCnt) { |
| | | return Result.fail("当前存在多个委托,无法提交该数量委托"); |
| | | } |
| | | } |
| | | |
| | | |
| | | // 获取最新价 |
| | | BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitCloseEntrustDto.getSymbol()))); |
| | | BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol()))); |
| | | |
| | | int closeType; |
| | | if (holdOrderEntity.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { |
| | |
| | | |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(member.getId(), CoinTypeConvert.convertContractTypeToCoin(holdOrderEntity.getSymbol())); |
| | | |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitCloseEntrustDto.getSymbol()); |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol()); |
| | | BigDecimal bondAmount = CalculateUtil.getBondAmount(holdOrderEntity.getOpeningPrice(), lotNumber, submitCloseEntrustDto.getSymbolCnt(), holdOrderEntity.getLeverRatio()); |
| | | |
| | | ContractEntrustOrderEntity entrustOrder = new ContractEntrustOrderEntity(); |
| | | entrustOrder.setOrderNo(holdOrderEntity.getOrderNo()); |
| | | entrustOrder.setEntrustAmount(bondAmount); |
| | | entrustOrder.setBondAmount(bondAmount); |
| | | entrustOrder.setPositionType(ContractEntrustOrderEntity.POSITION_TYPE_ALL); |
| | | entrustOrder.setMemberId(member.getId()); |
| | | entrustOrder.setEntrustPrice(submitCloseEntrustDto.getEntrustPrice()); |
| | | entrustOrder.setLeverRatio(holdOrderEntity.getLeverRatio()); |
| | | entrustOrder.setSymbolSku(holdOrderEntity.getSymbolSku()); |
| | | entrustOrder.setEntrustType(closeType); |
| | | entrustOrder.setSymbolCnt(submitCloseEntrustDto.getSymbolCnt()); |
| | | entrustOrder.setSymbol(holdOrderEntity.getSymbol()); |
| | | |
| | | int i = contractEntrustOrderDao.insert(entrustOrder); |
| | | |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(null, null, bondAmount, walletContract.getId()); |
| | | // memberWalletContractDao.increaseWalletContractBalanceById(null, null, bondAmount, walletContract.getId()); |
| | | |
| | | if (i > 0) { |
| | | // 发送委托消息 |
| | | if (holdOrderEntity.getOpeningType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) { |
| | | OrderModel model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); |
| | | OrderModel model = new OrderModel(entrustOrder.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_MORE.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); |
| | | producer.sendPriceOperate(JSONObject.toJSONString(model)); |
| | | } else { |
| | | OrderModel model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); |
| | | OrderModel model = new OrderModel(entrustOrder.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_LESS.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol()); |
| | | producer.sendPriceOperate(JSONObject.toJSONString(model)); |
| | | } |
| | | } |