Helius
2021-01-28 d5b1ec5dca1aefb6425d2e12b1b2804714019c27
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;
@@ -472,9 +473,54 @@
        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());
                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());
                contractOrderEntity.setClosingFeeAmount(holdOrderEntity.getOpeningFeeAmount());
                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)