1
zj
2025-07-10 8d9197af3ec0b06565aa44aae631f0f8a661897b
src/main/java/project/contract/internal/ContractApplyOrderServiceImpl.java
@@ -1,5 +1,7 @@
package project.contract.internal;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@@ -93,46 +95,50 @@
         }
      }
      List<ContractOrder> order_state0_list = contractOrderService.findSubmitted(order.getPartyId().toString(),
            order.getSymbol(), order.getDirection());
      for (int i = 0; i < order_state0_list.size(); i++) {
         Double source_lever_rate = order.getLever_rate();
         source_lever_rate = source_lever_rate == null ? 0d : source_lever_rate;
         Double target_lever_rate = order_state0_list.get(i).getLever_rate();
         target_lever_rate = target_lever_rate == null ? 0d : target_lever_rate;
         if (source_lever_rate.compareTo(target_lever_rate) != 0) {
            throw new BusinessException("存在不同杠杆的持仓单");
         }
      }
      List<ContractApplyOrder> applyOrder_submitted_list = this.findSubmitted(order.getPartyId().toString(),
            order.getSymbol(), "open", order.getDirection());
      for (int i = 0; i < applyOrder_submitted_list.size(); i++) {
         Double source_lever_rate = order.getLever_rate();
         source_lever_rate = source_lever_rate == null ? 0d : source_lever_rate;
         Double target_lever_rate = applyOrder_submitted_list.get(i).getLever_rate();
         target_lever_rate = target_lever_rate == null ? 0d : target_lever_rate;
         if (source_lever_rate.compareTo(target_lever_rate) != 0) {
            throw new BusinessException("存在不同杠杆的持仓单");
         }
      }
//      List<ContractOrder> order_state0_list = contractOrderService.findSubmitted(order.getPartyId().toString(),
//            order.getSymbol(), order.getDirection());
//      for (int i = 0; i < order_state0_list.size(); i++) {
//         Double source_lever_rate = order.getLever_rate();
//         source_lever_rate = source_lever_rate == null ? 0d : source_lever_rate;
//
//         Double target_lever_rate = order_state0_list.get(i).getLever_rate();
//         target_lever_rate = target_lever_rate == null ? 0d : target_lever_rate;
//         if (source_lever_rate.compareTo(target_lever_rate) != 0) {
//            throw new BusinessException("存在不同杠杆的持仓单");
//         }
//      }
//      List<ContractApplyOrder> applyOrder_submitted_list = this.findSubmitted(order.getPartyId().toString(),
//            order.getSymbol(), "open", order.getDirection());
//      for (int i = 0; i < applyOrder_submitted_list.size(); i++) {
//         Double source_lever_rate = order.getLever_rate();
//         source_lever_rate = source_lever_rate == null ? 0d : source_lever_rate;
//
//         Double target_lever_rate = applyOrder_submitted_list.get(i).getLever_rate();
//         target_lever_rate = target_lever_rate == null ? 0d : target_lever_rate;
//         if (source_lever_rate.compareTo(target_lever_rate) != 0) {
//            throw new BusinessException("存在不同杠杆的持仓单");
//         }
//      }
      order.setOrder_no(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
      order.setUnit_amount(item.getUnit_amount());
      order.setFee(Arith.mul(item.getUnit_fee(), order.getVolume()));
      order.setDeposit(Arith.mul(item.getUnit_amount(), order.getVolume()));
      double mul = Arith.mul(item.getUnit_amount(), order.getVolume());
      order.setDeposit(Arith.div(mul,order.getLever_rate()));
      double fee = calculateFee(order.getLever_rate(), order.getDeposit());
//      order.setFee(Arith.mul(item.getUnit_fee(), order.getVolume()));
      order.setFee(fee);
      if (order.getLever_rate() != null) {
            /**
             * 加上杠杆
             */
         order.setVolume(Arith.mul(order.getVolume(), order.getLever_rate()));
            Syspara syspara = sysparaService.find("perpetual_contracts");
            if(ObjectUtils.isEmpty(syspara)||"0".equals(syspara.getValue())) {
                order.setFee(Arith.mul(order.getFee(), order.getLever_rate()));
            }
//            Syspara syspara = sysparaService.find("perpetual_contracts");
//            if(ObjectUtils.isEmpty(syspara)||"0".equals(syspara.getValue())) {
//                order.setFee(Arith.mul(order.getFee(), order.getLever_rate()));
//            }
      }
      order.setVolume(order.getVolume());
      order.setVolume_open(order.getVolume());
      order.setCreate_time(new Date());
@@ -179,6 +185,24 @@
      insertContractApplyOrder(order);
   }
   public double calculateFee(double leverRate, double totalCapital) {
      double feeRate = 0.0;
      if (leverRate == 25) {
         feeRate = 0.0375; // 3.75%手续费
      } else if (leverRate == 50) {
         feeRate = 0.075;  // 7.5%手续费
      } else if (leverRate == 100) {
         feeRate = 0.15;   // 15%手续费
      } else if (leverRate == 200) {
         feeRate = 0.30;   // 30%手续费
      }
      BigDecimal bd = new BigDecimal(Double.toString(totalCapital * feeRate));
      bd = bd.setScale(3, RoundingMode.DOWN);
      System.out.println();
      return bd.doubleValue();
   }
   /**
    * 平仓委托
    */