| | |
| | | package project.project.web.admin; |
| | | package project.web.admin; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.DecimalFormat; |
| | | import java.text.MessageFormat; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import db.util.QpUtil; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | |
| | | import project.log.LogService; |
| | | import project.syspara.Syspara; |
| | | import project.syspara.SysparaService; |
| | | import project.wallet.Wallet; |
| | | import project.wallet.WalletService; |
| | | import security.SecUser; |
| | | import security.internal.SecUserService; |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private AdminContractOrderService adminContractOrderService; |
| | | |
| | | @Autowired |
| | | private WalletService walletService; |
| | | |
| | | private final String action = "normal/adminContractOrderAction!"; |
| | | |
| | |
| | | } else { |
| | | String roleName = map.get("rolename").toString(); |
| | | map.put("roleNameDesc", Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName); |
| | | } |
| | | |
| | | double depositOpen = Double.parseDouble(map.get("deposit_open").toString()); |
| | | double leverRate = Double.parseDouble(map.get("lever_rate").toString()); |
| | | double tradeAvgPrice = Double.parseDouble(map.get("trade_avg_price").toString()); |
| | | |
| | | double mul = Arith.mul(depositOpen, leverRate);//仓位 |
| | | double div = Arith.div(mul, tradeAvgPrice);//持有币的数量 |
| | | /** |
| | | * 计算全仓收益 保证金 |
| | | */ |
| | | double profit = 0; |
| | | List<ContractOrder> contractOrders = contractOrderService.findSubmitted(map.get("party_id").toString(), null, null); |
| | | for (int f = 0; f < contractOrders.size(); f++) { |
| | | ContractOrder close_line = contractOrders.get(f); |
| | | if(close_line.getProfit() > 0){ |
| | | profit = Arith.add(profit, Arith.add(close_line.getProfit(), close_line.getDeposit())); |
| | | }else{ |
| | | profit = Arith.add(profit, close_line.getDeposit()); |
| | | } |
| | | } |
| | | Wallet wallet = this.walletService.saveWalletByPartyId(map.get("party_id").toString()); |
| | | double totleMoney = wallet.getMoney(); |
| | | profit = Arith.add(profit,totleMoney); |
| | | |
| | | |
| | | if (map.get("direction") != null) { |
| | | String direction = map.get("direction").toString(); |
| | | double liquidationPrice; |
| | | double deposit = profit; |
| | | |
| | | if(leverRate == 1){ |
| | | liquidationPrice = 0; |
| | | }else { |
| | | if ("sell".equals(direction)) { |
| | | double lossPercentage = deposit / (Arith.mul(Double.parseDouble(map.get("volume").toString()), Double.parseDouble(map.get("unit_amount").toString()))); |
| | | double priceIncrease = lossPercentage * tradeAvgPrice; |
| | | liquidationPrice = tradeAvgPrice + priceIncrease; |
| | | } else { |
| | | double lossPercentage = deposit / (Arith.mul(Double.parseDouble(map.get("volume").toString()), Double.parseDouble(map.get("unit_amount").toString()))); |
| | | double priceDrop = lossPercentage * tradeAvgPrice; |
| | | liquidationPrice = tradeAvgPrice - priceDrop; |
| | | } |
| | | } |
| | | DecimalFormat dfs = new DecimalFormat("#.#####"); |
| | | String formattedPrice = dfs.format(liquidationPrice); |
| | | // 检查是否为负数 |
| | | if (Double.parseDouble(formattedPrice) < 0) { |
| | | formattedPrice = "0"; |
| | | } |
| | | map.put("qiangPing", formattedPrice); |
| | | } |
| | | } |
| | | |
| | |
| | | String roleName = map.get("rolename").toString(); |
| | | map.put("roleNameDesc", Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName); |
| | | } |
| | | // double currentPrice = Double.parseDouble(map.get("trade_avg_price").toString()); |
| | | // |
| | | // double leve = Double.parseDouble(map.get("lever_rate").toString()); |
| | | // //得到强平价格 |
| | | // if(null != map.get("direction")){ |
| | | // double liquidationPrice; |
| | | // if(map.get("direction").equals("sell")){ |
| | | // liquidationPrice = currentPrice * (1 + (1 / leve)); |
| | | // }else{ |
| | | // liquidationPrice = currentPrice * (1 - 1 / leve); |
| | | // } |
| | | // DecimalFormat df = new DecimalFormat("#.#####"); |
| | | // String formattedPrice = df.format(liquidationPrice); |
| | | // map.put("qiangPing",formattedPrice); |
| | | // } |
| | | |
| | | double depositOpen = Double.parseDouble(map.get("deposit_open").toString()); |
| | | double leverRate = Double.parseDouble(map.get("lever_rate").toString()); |
| | | double tradeAvgPrice = Double.parseDouble(map.get("trade_avg_price").toString()); |
| | | |
| | | double mul = Arith.mul(depositOpen, leverRate);//仓位 |
| | | double div = Arith.div(mul, tradeAvgPrice);//持有币的数量 |
| | | /** |
| | | * 计算全仓收益 保证金 |
| | | */ |
| | | double profit = 0; |
| | | List<ContractOrder> contractOrders = contractOrderService.findSubmitted(map.get("party_id").toString(), null, null); |
| | | for (int f = 0; f < contractOrders.size(); f++) { |
| | | ContractOrder close_line = contractOrders.get(f); |
| | | if(close_line.getProfit() > 0){ |
| | | profit = Arith.add(profit, Arith.add(close_line.getProfit(), close_line.getDeposit())); |
| | | }else{ |
| | | profit = Arith.add(profit, close_line.getDeposit()); |
| | | } } |
| | | Wallet wallet = this.walletService.saveWalletByPartyId(map.get("party_id").toString()); |
| | | double totleMoney = wallet.getMoney(); |
| | | profit = Arith.add(profit,totleMoney); |
| | | |
| | | if (map.get("direction") != null) { |
| | | String direction = map.get("direction").toString(); |
| | | double liquidationPrice; |
| | | double deposit = profit; |
| | | |
| | | if(leverRate == 1){ |
| | | liquidationPrice = 0; |
| | | }else { |
| | | if ("sell".equals(direction)) { |
| | | double lossPercentage = deposit / (Arith.mul(Double.parseDouble(map.get("volume").toString()), Double.parseDouble(map.get("unit_amount").toString()))); |
| | | double priceIncrease = lossPercentage * tradeAvgPrice; |
| | | liquidationPrice = tradeAvgPrice + priceIncrease; |
| | | } else { |
| | | double lossPercentage = deposit / (Arith.mul(Double.parseDouble(map.get("volume").toString()), Double.parseDouble(map.get("unit_amount").toString()))); |
| | | double priceDrop = lossPercentage * tradeAvgPrice; |
| | | liquidationPrice = tradeAvgPrice - priceDrop; |
| | | } |
| | | } |
| | | DecimalFormat dfs = new DecimalFormat("#.#####"); |
| | | String formattedPrice = dfs.format(liquidationPrice); |
| | | // 检查是否为负数 |
| | | if (Double.parseDouble(formattedPrice) < 0) { |
| | | formattedPrice = "0"; |
| | | } |
| | | map.put("qiangPing", formattedPrice); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } catch (BusinessException e) { |
| | |
| | | |
| | | try { |
| | | |
| | | if (!StringUtils.isNullOrEmpty(this.getLoginPartyId())) { |
| | | throw new BusinessException("无权限"); |
| | | } |
| | | |
| | | |
| | | Realtime realtime = this.dataService.realtime(symbol).get(0); |
| | | |
| | | Item item = this.itemService.cacheBySymbol(symbol, false); |
| | |
| | | |
| | | try { |
| | | |
| | | if (!StringUtils.isNullOrEmpty(this.getLoginPartyId())) { |
| | | throw new BusinessException("无权限"); |
| | | } |
| | | |
| | | String error = this.verif(type, value); |
| | | if (!StringUtils.isNullOrEmpty(error)) { |
| | | throw new BusinessException(error); |