Helius
2020-09-02 68d946debea91cc5afb2f7a870bf04b393335926
modify
3 files modified
41 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java 31 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/CalculateUtil.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -213,6 +213,7 @@
        int i = contractEntrustOrderDao.insert(entrustOrderEntity);
        memberWalletContractDao.increaseWalletContractBalanceById(entrustTotalAmount.negate(), null, entrustOrderEntity.getBondAmount(), walletContract.getId());
        if (i > 0) {
            CalculateUtil.getForceSetPriceForWhole(submitEntrustDto.getSymbol(), memberEntity);
            // 发送委托单队列消息
            if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) {
@@ -284,6 +285,9 @@
        contractEntrustOrderDao.deleteById(entrustOrderEntity.getId());
        if (i > 0) {
            if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == entrustOrderEntity.getPositionType()) {
                CalculateUtil.getForceSetPriceForWhole(entrustOrderEntity.getSymbol(), memberEntity);
            }
            return Result.ok(MessageSourceUtils.getString("cancellation_success"));
        }
        return Result.fail(MessageSourceUtils.getString("cancellation_fail"));
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -892,21 +892,30 @@
            } else {
                MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol()));
                BigDecimal rewardRatio = BigDecimal.ZERO;
                // 开多
                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == coinsOrder.getOpeningType()) {
                    // (最新价-开仓价)*规格*张数
                    rewardRatio = nowPrice.subtract(coinsOrder.getOpeningPrice()).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
                    // 开空
                } else {
                    // (开仓价-最新价)*规格*张数
                    rewardRatio = coinsOrder.getOpeningPrice().subtract(nowPrice).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
//                BigDecimal rewardRatio = BigDecimal.ZERO;
//                // 开多
//                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == coinsOrder.getOpeningType()) {
//                    // (最新价-开仓价)*规格*张数
//                    rewardRatio = nowPrice.subtract(coinsOrder.getOpeningPrice()).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
//                    // 开空
//                } else {
//                    // (开仓价-最新价)*规格*张数
//                    rewardRatio = coinsOrder.getOpeningPrice().subtract(nowPrice).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
//                }
                // 委托单总委托金额
                BigDecimal totalPrePayment = BigDecimal.ZERO;
                List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memId);
                if (CollUtil.isNotEmpty(entrustOrderEntities)) {
                    for (ContractEntrustOrderEntity entrustOrderEntity : entrustOrderEntities) {
                        totalPrePayment = totalPrePayment.add(entrustOrderEntity.getEntrustAmount());
                    }
                }
                contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(contractOrderEntity.getOpeningFeeAmount()).negate());
                contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(totalPrePayment).subtract(contractOrderEntity.getOpeningFeeAmount()).negate());
                contractOrderService.save(contractOrderEntity);
                memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().negate(), null, wallet.getId());
                memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().subtract(totalPrePayment).negate(), null, wallet.getId());
            }
        }
    }
src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -99,7 +99,7 @@
            int subCnt = 0;
            BigDecimal openPrice = BigDecimal.ZERO;
            int type = 1;
            BigDecimal feeAmount = BigDecimal.ZERO;
            BigDecimal bondAmount = BigDecimal.ZERO;
            BigDecimal sku = BigDecimal.ZERO;
            Long id = 0L;
@@ -118,12 +118,12 @@
                    subCnt = maxCnt - holdOrderEntity.getSymbolCntSale();
                }
                feeAmount = feeAmount.add(holdOrderEntity.getOpeningFeeAmount());
                bondAmount = bondAmount.add(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()));
                sku = holdOrderEntity.getSymbolSku();
            }
            BigDecimal forceSetPrice = BigDecimal.ZERO;
            if (subCnt != 0) {
                forceSetPrice = getForceSetPrice(walletContract.getTotalBalance().subtract(feeAmount), openPrice, subCnt, sku, type, memberEntity);
                forceSetPrice = getForceSetPrice(walletContract.getAvailableBalance().add(bondAmount), openPrice, subCnt, sku, type, memberEntity);
            }
            log.info("强平价:{}", forceSetPrice);