| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.xcong.excoin.common.contants.AppContants; |
| | | import com.xcong.excoin.common.enumerates.CoinTypeEnum; |
| | | import com.xcong.excoin.common.enumerates.OrderClosingTypeEnum; |
| | |
| | | |
| | | MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId()); |
| | | |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(holdOrderEntity.getMemberId(), CoinTypeConvert.convertContractTypeToCoin(symbol)); |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(holdOrderEntity.getMemberId(), CoinTypeEnum.USDT.name()); |
| | | if (walletContract != null) { |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(symbol); |
| | | // 盈亏 |
| | |
| | | contractOrderEntity.setClosingType(closingType); |
| | | contractOrderEntity.setSymbolCnt(closeCnt); |
| | | contractOrderEntity.setRewardAmount(profitOrLoss); |
| | | contractOrderEntity.setBondAmount(bondAmount); |
| | | contractOrderEntity.setBondAmount(bondAmount.add(fee)); |
| | | contractOrderEntity.setClosingFeeAmount(fee); |
| | | contractOrderDao.insert(contractOrderEntity); |
| | | |
| | | if (holdOrderEntity.getSymbolCntSale() != 0) { |
| | | holdOrderEntity.setOpeningFeeAmount(holdOrderEntity.getOpeningFeeAmount().subtract(fee)); |
| | | holdOrderEntity.setBondAmount(holdOrderEntity.getBondAmount().subtract(bondAmount)); |
| | | BigDecimal rewardAmount = holdOrderEntity.getRewardAmount() == null ? BigDecimal.ZERO : holdOrderEntity.getRewardAmount(); |
| | | holdOrderEntity.setRewardAmount(rewardAmount.add(profitOrLoss)); |
| | | contractHoldOrderDao.updateById(holdOrderEntity); |
| | | } else { |
| | | contractHoldOrderDao.deleteById(holdOrderEntity.getId()); |
| | |
| | | String symbol = entrustOrder.getSymbol(); |
| | | |
| | | MemberEntity memberEntity = memberDao.selectById(memberId); |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(symbol)); |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name()); |
| | | |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(symbol); |
| | | |
| | |
| | | int closeCnt = entrustOrder.getSymbolCnt(); |
| | | |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectWholeHoldOrderByOrderType(memberId, orderType, symbol); |
| | | |
| | | List<Object> types = redisUtils.lGet(AppContants.RABBIT_TYPE + holdOrderEntity.getId(), 0, -1); |
| | | if(types.contains(9) || types.contains(10) || types.contains(11) || types.contains(12)) { |
| | | log.info("存在止盈/止损 orderId : {}, types : {}", holdOrderEntity.getId(), JSONObject.toJSONString(types)); |
| | | return; |
| | | } |
| | | |
| | | BigDecimal profitOrLoss; |
| | | int closingType; |
| | | // 平多 |
| | |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), fee, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void wholeBombOrder(List<OrderModel> list) { |
| | | |
| | | for (OrderModel orderModel : list) { |
| | | MemberEntity memberEntity = memberDao.selectById(orderModel.getMemberId()); |
| | | Long memberId = memberEntity.getId(); |
| | | List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberId, null); |
| | | |
| | | BigDecimal currentPrice = new BigDecimal(orderModel.getPrice()); |
| | | if (CollUtil.isNotEmpty(holdOrderEntities)) { |
| | | PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting(); |
| | | for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol()); |
| | | |
| | | // 单个订单盈利 |
| | | BigDecimal profitOrLess = BigDecimal.ZERO; |
| | | // 开多 |
| | | if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { |
| | | profitOrLess = currentPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber); |
| | | // 开空 |
| | | } else { |
| | | profitOrLess = holdOrderEntity.getOpeningPrice().subtract(currentPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber); |
| | | } |
| | | |
| | | if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) { |
| | | if (profitOrLess.compareTo(BigDecimal.ZERO) > 0) { |
| | | profitOrLess = profitOrLess.multiply(BigDecimal.ONE.subtract(tradeSetting.getForceParam())); |
| | | } else { |
| | | profitOrLess = profitOrLess.multiply(BigDecimal.ONE.add(tradeSetting.getForceParam())); |
| | | } |
| | | } |
| | | |
| | | ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity); |
| | | } |
| | | } else { |
| | | log.info("无当前持仓"); |
| | | } |
| | | } |
| | | } |
| | | } |