Helius
2020-08-29 5c96a980c662796045c1b741015e58790409e191
modify
1 files modified
57 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java 57 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -738,6 +738,37 @@
                    contractHoldOrderService.updateOrderIsCanClosingAndBatchNoById(orderId);
                    continue;
                }
                if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == coinsOrder.getPositionType()) {
                    bombOrder(coinsOrder);
                } else {
                    List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(coinsOrder.getMemberId(), coinsOrder.getSymbol());
                    if (CollectionUtils.isNotEmpty(holdOrderEntities)) {
                        for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) {
                            bombOrder(holdOrderEntity);
                        }
                        MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(coinsOrder.getMemberId(), CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol()));
                        // 流水记录 TODO
                        MemberAccountFlowEntity record = new MemberAccountFlowEntity();
                        record.setCreateTime(new Date());
                        record.setSource("系统自动平仓");
                        record.setRemark("系统自动平仓");
                        record.setBalance(BigDecimal.ZERO);
                        record.setMemberId(coinsOrder.getMemberId());
                        record.setSymbol(coinsOrder.getSymbol());
                        record.setPrice(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount()));
                        memberAccountFlowEntityDao.insert(record);
                    }
                }
            }
        }
    }
    private void bombOrder(ContractHoldOrderEntity coinsOrder) {
        Long orderId = coinsOrder.getId();
                boolean isDone = false;
                Long memId = coinsOrder.getMemberId();
                BigDecimal nowPrice = coinsOrder.getForceClosingPrice();
@@ -797,23 +828,21 @@
                    } else {
                        MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol()));
                        contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount()).negate());
                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()));
                }
                contractOrderEntity.setRewardAmount(rewardRatio);
                        contractOrderService.save(contractOrderEntity);
                        memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().negate(), null, wallet.getId());
                        // 流水记录 TODO
                        MemberAccountFlowEntity record = new MemberAccountFlowEntity();
                        record.setCreateTime(new Date());
                        record.setSource("系统自动平仓");
                        record.setRemark("系统自动平仓");
                        record.setBalance(BigDecimal.ZERO);
                        record.setMemberId(memId);
                        record.setSymbol(coinsOrder.getSymbol());
                        record.setPrice(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount()));
                        memberAccountFlowEntityDao.insert(record);
                    }
                }
            }
        }
    }