| | |
| | | import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; |
| | | import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity; |
| | | import com.xcong.excoin.rabbit.pricequeue.OrderModel; |
| | | import com.xcong.excoin.rabbit.pricequeue.whole.HoldOrderDataModel; |
| | | import com.xcong.excoin.rabbit.pricequeue.whole.WholePriceDataModel; |
| | | import com.xcong.excoin.utils.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author wzy |
| | |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(changeAmount, total, null, walletContract.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholePrice(memberEntity.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholeForceClosingPrice(holdOrderEntity.getSymbol(), memberEntity); |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), fee, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); |
| | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(changeAmount, total, null, walletContract.getId()); |
| | | |
| | | contractEntrustOrderDao.deleteById(entrustOrder.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholePrice(memberEntity.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholeForceClosingPrice(holdOrderEntity.getSymbol(), memberEntity); |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), fee, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void wholeBombOrder(WholePriceDataModel wholePriceData) { |
| | | MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(wholePriceData.getMemberId(), CoinTypeEnum.USDT.name()); |
| | | |
| | | List<HoldOrderDataModel> list = wholePriceData.getList(); |
| | | if (CollUtil.isNotEmpty(list)) { |
| | | for (HoldOrderDataModel holdOrderDataModel : list) { |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(holdOrderDataModel.getId()); |
| | | |
| | | contractHoldOrderDao.deleteById(holdOrderDataModel.getId()); |
| | | |
| | | ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity); |
| | | |
| | | if (holdOrderEntity.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { |
| | | contractOrderEntity.setClosingType(4); |
| | | } else { |
| | | contractOrderEntity.setClosingType(5); |
| | | } |
| | | |
| | | BigDecimal rewardRatio = holdOrderDataModel.getRewardAmount().divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); |
| | | contractOrderEntity.setRewardRatio(rewardRatio); |
| | | contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount().add(contractOrderEntity.getBondAmount())); |
| | | contractOrderEntity.setClosingPrice(holdOrderDataModel.getClosingPrice()); |
| | | // contractOrderEntity.setForceClosingPrice(holdOrderDataModel.getClosingPrice()); |
| | | |
| | | // 订单状态转换 |
| | | if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) { |
| | | contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_MORE); |
| | | } else { |
| | | contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_LESS); |
| | | } |
| | | contractOrderEntity.setClosingTime(new Date()); |
| | | |
| | | contractOrderDao.insert(contractOrderEntity); |
| | | } |
| | | |
| | | List<ContractEntrustOrderEntity> entrustOrder = contractEntrustOrderDao.selectEntrustOrderListByMemberId(wholePriceData.getMemberId()); |
| | | BigDecimal totalAmount = BigDecimal.ZERO; |
| | | if (CollUtil.isNotEmpty(entrustOrder)) { |
| | | for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) { |
| | | totalAmount.add(contractEntrustOrderEntity.getEntrustAmount()); |
| | | } |
| | | } |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().subtract(totalAmount).negate(), null, wallet.getId()); |
| | | } |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | |
| | | Long memberId = memberEntity.getId(); |
| | | List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberId, null); |
| | | MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name()); |
| | | |
| | | Map<Object, Object> value = redisUtils.hmget(AppContants.WHOLE_BOMB_PREFIX + memberId); |
| | | if (CollUtil.isNotEmpty(holdOrderEntities)) { |
| | | PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting(); |
| | | BigDecimal maxLess = BigDecimal.ZERO; |
| | | ContractOrderEntity maxLessEntity = null; |
| | | BigDecimal totalProfitOrLess = BigDecimal.ZERO; |
| | | for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { |
| | | // 删除次仓订单 |
| | | contractHoldOrderDao.deleteById(holdOrderEntity.getId()); |
| | | BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol()); |
| | | BigDecimal currentPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol()))); |
| | | String symbolPrice = (String) value.get(holdOrderEntity.getSymbol()); |
| | | log.info("symbolPrice : {}, symbol : {}", symbolPrice, holdOrderEntity.getSymbol()); |
| | | BigDecimal currentPrice = new BigDecimal(symbolPrice); |
| | | |
| | | // 单个订单盈利 |
| | | // BigDecimal profitOrLess = BigDecimal.ZERO; |
| | | // // 开多 |
| | | // if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { |
| | | // profitOrLess = currentPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber); |
| | | // // 开空 |
| | | // } else { |
| | | // profitOrLess = holdOrderEntity.getOpeningPrice().subtract(currentPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).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())); |
| | | // } |
| | | // } |
| | | BigDecimal profitOrLess = CalculateUtil.calOrderProfitOrLess(holdOrderEntity.getOpeningType(), currentPrice, holdOrderEntity.getOpeningPrice(), lotNumber, holdOrderEntity.getSymbolCntSale(), memberEntity.getIsProfit()); |
| | | log.info("profitOrLess ---> {}", profitOrLess); |
| | | ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity); |
| | |
| | | contractOrderEntity.setRewardRatio(rewardRatio); |
| | | contractOrderEntity.setRewardAmount(profitOrLess); |
| | | contractOrderEntity.setClosingPrice(currentPrice); |
| | | contractOrderEntity.setForceClosingPrice(currentPrice); |
| | | |
| | | // 订单状态转换 |
| | | if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) { |
| | |
| | | } |
| | | } |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(BigDecimal.ZERO, wallet.getTotalBalance().subtract(totalAmount).negate(), null, wallet.getId()); |
| | | memberWalletContractDao.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().subtract(totalAmount).negate(), null, wallet.getId()); |
| | | |
| | | redisUtils.del(AppContants.WHOLE_BOMB_PREFIX + memberId); |
| | | } else { |