trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiContractApplyOrderController.java
@@ -231,7 +231,7 @@ log.error("错误信息: {}", e.getMessage(), e); throw e; // 重新抛出自定义异常 } catch (Exception e) { log.error("系统异常: {}", e.getMessage(), e); log.error("系统异常: {}", e.getMessage() != null ? e.getMessage() : e.getClass().getSimpleName(), e); throw new YamiShopBindException("Operation failed, please try again later"); } finally { // 确保释放锁 trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderCalculationServiceImpl.java
@@ -19,6 +19,7 @@ import java.math.RoundingMode; import java.util.Date; import java.util.List; import java.util.Objects; @Slf4j @Service @@ -242,13 +243,13 @@ if (ContractOrder.STATE_SUBMITTED.equals(contractOrder.getState())) { contractOrderService.wrapProfit(contractOrder); } if (order.getUuid().equals(contractOrder.getUuid())) { if (Objects.equals(order.getUuid(), contractOrder.getUuid())) { continue; } otherEquity = otherEquity.add(defaultZero(contractOrder.getProfit()).add(defaultZero(contractOrder.getDeposit()))); } BigDecimal baseEquity = defaultZero(wallet.getMoney()) BigDecimal baseEquity = defaultZero(wallet != null ? wallet.getMoney() : null) .add(otherEquity) .add(defaultZero(order.getDeposit())); BigDecimal priceOffset = baseEquity.divide(volumeFactor, 10, RoundingMode.HALF_UP); trading-order-service/src/main/java/com/yami/trading/service/contract/ContractOrderService.java
@@ -855,7 +855,7 @@ } else { applyLimitOpenToOrder(order, applyOrder); } //计算强平价格 //计算强平价格(全仓模式下需合并已有持仓,uuid 可能尚未生成,比较时需用 Objects.equals) getStrongPrice(order); save(order); refreshOrder(applyOrder, order); trading-order-service/src/main/java/com/yami/trading/service/impl/WalletServiceImpl.java
@@ -712,14 +712,17 @@ BigDecimal orderVolume = BigDecimal.ONE; if (order.getLeverRate() != null && order.getLeverRate().compareTo(BigDecimal.ZERO) != 0) { if (order.getLeverRate() != null && order.getLeverRate().compareTo(BigDecimal.ZERO) != 0 && order.getVolumeOpen() != null) { orderVolume = order.getVolumeOpen().divide(order.getLeverRate(), 2, BigDecimal.ROUND_HALF_UP); } else { } else if (order.getVolumeOpen() != null) { orderVolume = order.getVolumeOpen(); } BigDecimal moneyContract = orderVolume.multiply(order.getUnitAmount()).add(order.getProfit()); BigDecimal moneyContractDeposit = order.getDeposit(); BigDecimal moneyContractProfit = order.getProfit(); BigDecimal unitAmount = order.getUnitAmount() != null ? order.getUnitAmount() : BigDecimal.ZERO; BigDecimal profit = order.getProfit() != null ? order.getProfit() : BigDecimal.ZERO; BigDecimal moneyContract = orderVolume.multiply(unitAmount).add(profit); BigDecimal moneyContractDeposit = order.getDeposit() != null ? order.getDeposit() : BigDecimal.ZERO; BigDecimal moneyContractProfit = profit; moneysContract.put("money_contract", moneyContract);