Helius
2021-01-29 bee6b602b0bf4dfb7956a61b39ba03a240d89d6f
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -35,6 +35,7 @@
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;
@@ -352,6 +353,8 @@
            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);
@@ -467,14 +470,61 @@
        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)