| | |
| | | package project.contract.internal; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | |
| | | } |
| | | } |
| | | |
| | | 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()); |
| | |
| | | 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(); |
| | | } |
| | | |
| | | /** |
| | | * 平仓委托 |
| | | */ |