| | |
| | | import com.xcong.excoin.common.response.Result; |
| | | import com.xcong.excoin.common.system.service.CommonService; |
| | | import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao; |
| | | import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao; |
| | | import com.xcong.excoin.modules.contract.dao.ContractOrderDao; |
| | | import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity; |
| | | import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; |
| | | import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; |
| | | import com.xcong.excoin.modules.contract.mapper.ContractEntrustOrderEntityMapper; |
| | | import com.xcong.excoin.modules.contract.parameter.dto.SubmitCloseEntrustDto; |
| | | import com.xcong.excoin.modules.contract.parameter.dto.SubmitEntrustDto; |
| | | import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto; |
| | | import com.xcong.excoin.modules.contract.parameter.dto.WholeCloseOrderDto; |
| | | import com.xcong.excoin.modules.contract.parameter.vo.ContractEntrustVo; |
| | | import com.xcong.excoin.modules.contract.service.ContractEntrustOrderService; |
| | | import com.xcong.excoin.modules.contract.service.ContractHoldOrderService; |
| | | import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; |
| | | import com.xcong.excoin.modules.member.entity.MemberEntity; |
| | | import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; |
| | |
| | | @Resource |
| | | private OrderProducer producer; |
| | | |
| | | @Resource |
| | | private ContractHoldOrderDao contractHoldOrderDao; |
| | | |
| | | @Resource |
| | | private ContractHoldOrderService contractHoldOrderService; |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public Result addContractEntrustOrder(SubmitEntrustDto submitEntrustDto) { |
| | |
| | | // 开多委托价不能大于当前价 |
| | | if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) { |
| | | if (submitEntrustDto.getEntrustPrice().compareTo(newPrice) > -1) { |
| | | return Result.fail(MessageSourceUtils.getString("entrust_price_judge_more")); |
| | | SubmitOrderDto submitOrderDto = new SubmitOrderDto(); |
| | | submitOrderDto.setOrderType(submitEntrustDto.getEntrustType()); |
| | | submitOrderDto.setSymbol(submitEntrustDto.getSymbol()); |
| | | submitOrderDto.setSymbolCnt(submitEntrustDto.getSymbolCnt()); |
| | | submitOrderDto.setLeverRatio(submitEntrustDto.getLeverRatio()); |
| | | return contractHoldOrderService.submitOrder(submitOrderDto); |
| | | } |
| | | } |
| | | |
| | | // 开空委托价不能小于当前价 |
| | | if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS) { |
| | | if (submitEntrustDto.getEntrustPrice().compareTo(newPrice) < 1) { |
| | | return Result.fail(MessageSourceUtils.getString("entrust_price_judge_less")); |
| | | SubmitOrderDto submitOrderDto = new SubmitOrderDto(); |
| | | submitOrderDto.setOrderType(submitEntrustDto.getEntrustType()); |
| | | submitOrderDto.setSymbol(submitEntrustDto.getSymbol()); |
| | | submitOrderDto.setSymbolCnt(submitEntrustDto.getSymbolCnt()); |
| | | submitOrderDto.setLeverRatio(submitEntrustDto.getLeverRatio()); |
| | | return contractHoldOrderService.submitOrder(submitOrderDto); |
| | | } |
| | | } |
| | | |
| | |
| | | public List<ContractEntrustOrderEntity> selectEntrustOrderListByIds(List<Long> list) { |
| | | return contractEntrustOrderDao.selectEntrustOrderListByIds(list); |
| | | } |
| | | |
| | | @Override |
| | | public Result addCloseContractEntrustOrder(SubmitCloseEntrustDto submitCloseEntrustDto) { |
| | | MemberEntity member = LoginUserUtils.getAppLoginUser(); |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(member.getId(), submitCloseEntrustDto.getId()); |
| | | if (holdOrderEntity == null) { |
| | | return Result.fail("订单不存在"); |
| | | } |
| | | |
| | | if(holdOrderEntity.getSymbolCntSale() - submitCloseEntrustDto.getSymbolCnt() < 0) { |
| | | return Result.fail("可平张数不足"); |
| | | } |
| | | |
| | | // 获取最新价 |
| | | BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitCloseEntrustDto.getSymbol()))); |
| | | |
| | | int closeType; |
| | | if (holdOrderEntity.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { |
| | | // 开多, 若委托价低于当前价则立即成交 |
| | | if (submitCloseEntrustDto.getEntrustPrice().compareTo(newPrice) <= 0) { |
| | | WholeCloseOrderDto wholeCloseOrderDto = new WholeCloseOrderDto(); |
| | | wholeCloseOrderDto.setCount(submitCloseEntrustDto.getSymbolCnt()); |
| | | wholeCloseOrderDto.setId(submitCloseEntrustDto.getId()); |
| | | return contractHoldOrderService.cancelHoldOrder(wholeCloseOrderDto); |
| | | } |
| | | |
| | | closeType = ContractOrderEntity.ORDER_TYPE_CLOSE_MORE; |
| | | } else { |
| | | // 开空, 若委托价高于当前价则立即成交 |
| | | if (submitCloseEntrustDto.getEntrustPrice().compareTo(newPrice) >= 0) { |
| | | WholeCloseOrderDto wholeCloseOrderDto = new WholeCloseOrderDto(); |
| | | wholeCloseOrderDto.setCount(submitCloseEntrustDto.getSymbolCnt()); |
| | | wholeCloseOrderDto.setId(submitCloseEntrustDto.getId()); |
| | | return contractHoldOrderService.cancelHoldOrder(wholeCloseOrderDto); |
| | | } |
| | | |
| | | closeType = ContractOrderEntity.ORDER_TYPE_CLOSE_LESS; |
| | | } |
| | | |
| | | |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(member.getId(), CoinTypeConvert.convertContractTypeToCoin(holdOrderEntity.getSymbol())); |
| | | |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitCloseEntrustDto.getSymbol()); |
| | | BigDecimal bondAmount = CalculateUtil.getBondAmount(holdOrderEntity.getOpeningPrice(), lotNumber, submitCloseEntrustDto.getSymbolCnt(), holdOrderEntity.getLeverRatio()); |
| | | |
| | | ContractEntrustOrderEntity entrustOrder = new ContractEntrustOrderEntity(); |
| | | entrustOrder.setOrderNo(holdOrderEntity.getOrderNo()); |
| | | entrustOrder.setEntrustAmount(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); |
| | | |
| | | int i = contractEntrustOrderDao.insert(entrustOrder); |
| | | |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(null, null, bondAmount, walletContract.getId()); |
| | | |
| | | if (i > 0) { |
| | | // 发送委托消息 |
| | | } |
| | | return Result.ok("委托成功"); |
| | | } |
| | | } |