src/main/java/project/admin/AdminFuturesOrderController.java
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest; import kernel.web.ApplicationUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -141,6 +142,33 @@ return modelAndView; } @RequestMapping(action + "saveRemark.action") public ModelAndView saveRemark(HttpServletRequest request) { String orderNo = request.getParameter("orderNo"); String remark = request.getParameter("remark"); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("futures_order_list"); try { FuturesOrder byOrderNo = futuresOrderService.findByOrderNo(orderNo); if(null != byOrderNo){ byOrderNo.setRemark(remark); } ApplicationUtil.executeUpdate(byOrderNo); futuresOrderService.updateCache(byOrderNo.getOrder_no(), byOrderNo); redisHandler.remove(FuturesRedisKeys.FUTURES_SUBMITTED_ORDERNO + byOrderNo.getOrder_no()); } catch (BusinessException e) { modelAndView.addObject("error", e.getMessage()); return modelAndView; } catch (Throwable t) { logger.error(" error ", t); modelAndView.addObject("error", "[ERROR] " + t.getMessage()); return modelAndView; } return modelAndView; } /** * 获取 交割合约单 列表 * <p> src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
@@ -89,7 +89,12 @@ * @param currentPrice 当前点位 */ public void settle(ContractOrder order, String profit_loss, double currentPrice) { // (保证金*杠杆)= 仓位总价 // (仓位总价/开仓价格)= 数量 // (当前价格-开仓价格)* 数量 = 盈亏 // (盈亏/保证金)*100 = 盈亏率 logger.info("---------进入盈亏计算----------------"); logger.info("---------order_close_line_type----------------"+order_close_line_type); double mul = Arith.mul(order.getDeposit_open(), order.getLever_rate());//仓位 double div = Arith.div(mul, order.getTrade_avg_price());//持有币的数量 double amount = Arith.mul(div, Arith.sub(currentPrice, order.getTrade_avg_price())); @@ -210,15 +215,19 @@ } } else { logger.info("---------进入单个持仓----------------"); logger.info("---------order.getProfit()----------------"+order.getProfit()); logger.info("---------order.getDeposit()----------------"+order.getDeposit()); logger.info("---------order_close_line----------------"+order_close_line); if (order.getProfit() < 0 && (Arith.div(order.getDeposit(), Math.abs(order.getProfit())) <= Arith .div(order_close_line, 100))) { logger.info("---------进入强平了----------------"); /** * 低于系统默认平仓线,进行强平 */ this.contractOrderService.saveClose(order.getPartyId().toString(), order.getOrder_no()); return; } } } src/main/java/project/data/internal/DataDBServiceImpl.java
@@ -53,10 +53,10 @@ entity.setLow(low); } Double h24Before = DataCache.getRealtime24HBeforeOpen().get(entity.getSymbol()); if (h24Before != null) { entity.setOpen(h24Before); } // Double h24Before = DataCache.getRealtime24HBeforeOpen().get(entity.getSymbol()); // if (h24Before != null) { // entity.setOpen(h24Before); // } /** * 时间有变化,才保存 src/main/java/project/data/job/GetDataJob.java
@@ -132,47 +132,50 @@ } // 缓存中最新一条Realtime数据 Realtime realtimeLast = DataCache.getRealtime(symbol); if (null != realtimeLast) { // 临时处理:正常10秒超过25%也不合理,丢弃 double rate = Math.abs(Arith.sub(realtime.getClose(), realtimeLast.getClose())); if (null == realtimeLast || Arith.div(rate, realtimeLast.getClose()) < 0.25D) { Double high = DataCache.getRealtimeHigh().get(symbol); Double low = DataCache.getRealtimeLow().get(symbol); if (high == null || realtime.getClose() > high) { DataCache.getRealtimeHigh().put(symbol, realtime.getClose()); } if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) { DataCache.getRealtimeLow().put(symbol, realtime.getClose()); } this.dataDBService.saveAsyn(realtime); } else { Double high = DataCache.getRealtimeHigh().get(symbol); Double low = DataCache.getRealtimeLow().get(symbol); if (high == null || realtime.getClose() > high) { DataCache.getRealtimeHigh().put(symbol, realtime.getClose()); } if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) { DataCache.getRealtimeLow().put(symbol, realtime.getClose()); } this.dataDBService.saveAsyn(realtime); logger.error("当前价格{},超过25%也不合理,丢弃Realtime,不入库", realtime.getClose()); } } else { Double high = DataCache.getRealtimeHigh().get(symbol); Double low = DataCache.getRealtimeLow().get(symbol); if (high == null || realtime.getClose() > high) { DataCache.getRealtimeHigh().put(symbol, realtime.getClose()); } if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) { DataCache.getRealtimeLow().put(symbol, realtime.getClose()); } this.dataDBService.saveAsyn(realtime); } DataCache.getRealtimeHigh().put(symbol, realtime.getHigh()); DataCache.getRealtimeLow().put(symbol, realtime.getLow()); this.dataDBService.saveAsyn(realtime); // Realtime realtimeLast = DataCache.getRealtime(symbol); // if (null != realtimeLast) { // // 临时处理:正常10秒超过25%也不合理,丢弃 // double rate = Math.abs(Arith.sub(realtime.getClose(), realtimeLast.getClose())); // if (null == realtimeLast || Arith.div(rate, realtimeLast.getClose()) < 0.25D) { // Double high = DataCache.getRealtimeHigh().get(symbol); // Double low = DataCache.getRealtimeLow().get(symbol); // // if (high == null || realtime.getClose() > high) { // DataCache.getRealtimeHigh().put(symbol, realtime.getClose()); // } // if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) { // DataCache.getRealtimeLow().put(symbol, realtime.getClose()); // } // // this.dataDBService.saveAsyn(realtime); // } else { // Double high = DataCache.getRealtimeHigh().get(symbol); // Double low = DataCache.getRealtimeLow().get(symbol); // // if (high == null || realtime.getClose() > high) { // DataCache.getRealtimeHigh().put(symbol, realtime.getClose()); // } // if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) { // DataCache.getRealtimeLow().put(symbol, realtime.getClose()); // } // // this.dataDBService.saveAsyn(realtime); // logger.error("当前价格{},超过25%也不合理,丢弃Realtime,不入库", realtime.getClose()); // } // } else { // Double high = DataCache.getRealtimeHigh().get(symbol); // Double low = DataCache.getRealtimeLow().get(symbol); // if (high == null || realtime.getClose() > high) { // DataCache.getRealtimeHigh().put(symbol, realtime.getClose()); // } // if ((low == null || realtime.getClose() < low) && realtime.getClose() > 0) { // DataCache.getRealtimeLow().put(symbol, realtime.getClose()); // } // this.dataDBService.saveAsyn(realtime); // } } catch (Exception e) { src/main/java/project/data/job/RealtimeWebsocketServer.java
@@ -130,10 +130,10 @@ realtime.setLow(low); } Double h24Before = DataCache.getRealtime24HBeforeOpen().get(symbol); if (h24Before != null) { realtime.setOpen(h24Before); } // Double h24Before = DataCache.getRealtime24HBeforeOpen().get(symbol); // if (h24Before != null) { // realtime.setOpen(h24Before); // } DataCache.putRealtime(symbol, realtime); // System.out.println(JSONObject.toJSONString(realtime)); src/main/java/project/futures/FuturesOrder.java
@@ -120,6 +120,18 @@ @Column(name="PROFIT_LOSS") private String profit_loss; //备注 @Column(name="REMARK") private String remark; public Serializable getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Serializable getPartyId() { return partyId; } src/main/java/project/futures/FuturesOrderService.java
@@ -85,4 +85,5 @@ */ public void saveCloseAllByPartyId(String partyId); void updateCache(String orderNo, FuturesOrder byOrderNo); } src/main/java/project/futures/internal/AdminFuturesOrderServiceImpl.java
@@ -23,7 +23,7 @@ String username,String orderNo,String symbol,String direction,Double volume) { StringBuffer queryString = new StringBuffer("SELECT party.USERCODE usercode,party.ROLENAME rolename,orders.UUID id,orders.SYMBOL symbol," + "orders.ORDER_NO order_no,orders.TRADE_AVG_PRICE trade_avg_price,orders.DIRECTION direction,orders.PROFIT_LOSS profit_loss," + "orders.UNIT_AMOUNT unit_amount,orders.STATE state,FORMAT(orders.FEE,1) fee," + "orders.PROFIT profit," + "orders.UNIT_AMOUNT unit_amount,orders.STATE state,orders.REMARK remark,FORMAT(orders.FEE,1) fee," + "orders.PROFIT profit," + "FORMAT(orders.VOLUME,1) volume,item.NAME itemname,orders.TIMENUM timenum,orders.TIMEUNIT timeunit," + "orders.CLOSE_AVG_PRICE close_avg_price,DATE_FORMAT(orders.CREATE_TIME,'%Y-%m-%d %H:%i:%s') create_time,DATE_FORMAT(orders.SETTLEMENT_TIME,'%Y-%m-%d %H:%i:%s') settlement_time,"); // queryString.append(" wallet.MONEY money, "); src/main/java/project/futures/internal/FuturesOrderServiceImpl.java
@@ -950,6 +950,10 @@ } } public void updateCache(String orderNo, FuturesOrder byOrderNo){ cache.put(byOrderNo.getOrder_no(), byOrderNo); } public void setWalletService(WalletService walletService) { this.walletService = walletService; } src/main/java/project/project/web/admin/AdminContractOrderController.java
@@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import javax.persistence.Column; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.ObjectUtils; @@ -119,10 +120,17 @@ double quantity = positionValue / currentPrice; // 得到强平价格 double liquidationPrice = currentPrice + (110 / quantity); DecimalFormat df = new DecimalFormat("#.#####"); String formattedPrice = df.format(liquidationPrice); map.put("qiangPing",formattedPrice); if(null != map.get("direction")){ double liquidationPrice; if(map.get("direction").equals("sell")){ liquidationPrice = currentPrice + (100 / quantity); }else{ liquidationPrice = currentPrice - (100 / quantity); } DecimalFormat df = new DecimalFormat("#.#####"); String formattedPrice = df.format(liquidationPrice); map.put("qiangPing",formattedPrice); } } List<Item> items = this.itemService.cacheGetAll(); @@ -223,10 +231,17 @@ double quantity = positionValue / currentPrice; // 得到强平价格 double liquidationPrice = currentPrice + (110 / quantity); DecimalFormat df = new DecimalFormat("#.#####"); String formattedPrice = df.format(liquidationPrice); map.put("qiangPing",formattedPrice); if(null != map.get("direction")){ double liquidationPrice; if(map.get("direction").equals("sell")){ liquidationPrice = currentPrice + (100 / quantity); }else{ liquidationPrice = currentPrice - (100 / quantity); } DecimalFormat df = new DecimalFormat("#.#####"); String formattedPrice = df.format(liquidationPrice); map.put("qiangPing",formattedPrice); } } } catch (BusinessException e) {