From bc9801d6adf582325e8213df11f597f82deda973 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 12 Jul 2024 11:02:41 +0800
Subject: [PATCH] 1
---
src/main/java/project/contract/internal/ContractApplyOrderServiceImpl.java | 48 ++--
src/main/java/project/project/web/api/ContractApplyOrderController.java | 67 +++++
src/main/java/project/admin/AdminFuturesOrderController.java | 525 +++++++++++++++++++++++--------------------
src/main/java/project/contract/internal/ContractOrderServiceImpl.java | 14
src/main/java/project/web/admin/kyc/AdminKycController.java | 3
src/main/webapp/kyc_list.jsp | 2
src/main/java/kernel/util/Arith.java | 6
src/main/java/project/contract/ContractOrder.java | 12
src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java | 40 ++-
9 files changed, 414 insertions(+), 303 deletions(-)
diff --git a/src/main/java/kernel/util/Arith.java b/src/main/java/kernel/util/Arith.java
index cc1d16a..a8297f5 100644
--- a/src/main/java/kernel/util/Arith.java
+++ b/src/main/java/kernel/util/Arith.java
@@ -1,5 +1,7 @@
package kernel.util;
+import kotlin.jvm.internal.MagicApiIntrinsics;
+
import java.math.BigDecimal;
public class Arith{
@@ -20,7 +22,7 @@
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
- }
+ }
/**
* 提供精确的减法运算。
* @param v1 被减数
@@ -31,7 +33,7 @@
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
- }
+ }
/**
* 提供精确的乘法运算。
* @param v1 被乘数
diff --git a/src/main/java/project/admin/AdminFuturesOrderController.java b/src/main/java/project/admin/AdminFuturesOrderController.java
index c2c13af..1aa7c05 100644
--- a/src/main/java/project/admin/AdminFuturesOrderController.java
+++ b/src/main/java/project/admin/AdminFuturesOrderController.java
@@ -11,6 +11,7 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
@@ -21,9 +22,12 @@
import kernel.web.PageActionSupport;
import project.Constants;
import project.futures.AdminFuturesOrderService;
+import project.futures.FuturesOrder;
import project.futures.FuturesOrderService;
+import project.futures.FuturesRedisKeys;
import project.item.ItemService;
import project.item.model.Item;
+import project.redis.RedisHandler;
/**
* 交割合约单
@@ -31,264 +35,305 @@
@RestController
public class AdminFuturesOrderController extends PageActionSupport {
- @Autowired
- private ItemService itemService;
-
- @Autowired
- private FuturesOrderService futuresOrderService;
-
- @Autowired
- private AdminFuturesOrderService adminFuturesOrderService;
+ @Autowired
+ private ItemService itemService;
- private final String action = "normal/adminFuturesOrderAction!";
-
- private Logger logger = LoggerFactory.getLogger(AdminFuturesOrderController.class);
-
- /**
- * 获取 交割合约单 列表
- *
- * symbol_para 币种
- * direction_para 方向
- * volume_para 下单金额
- * symbol_map 上线币种
- */
- @RequestMapping(action + "list.action")
- public ModelAndView list(HttpServletRequest request) {
- String pageNoStr = request.getParameter("pageNo");
- String message = request.getParameter("message");
- String error = request.getParameter("error");
- String status_para = request.getParameter("status_para");
- String rolename_para = request.getParameter("rolename_para");
- String name_para = request.getParameter("name_para");
- String order_no_para = request.getParameter("order_no_para");
- String symbol_para = request.getParameter("symbol_para");
- String direction_para = request.getParameter("direction_para");
- String volume_para = request.getParameter("volume_para");
+ @Autowired
+ private FuturesOrderService futuresOrderService;
- ModelAndView modelAndView = new ModelAndView();
- modelAndView.setViewName("futures_order_list");
-
- Map<String, String> symbol_map = new HashMap<String, String>();
+ protected RedisHandler redisHandler;
- int pageNo=1;
- Page page=null;
- int pageSize=30;
- try {
- List<Item> items = this.itemService.cacheGetAll();
- for (Item item : items) {
- symbol_map.put(item.getSymbol(), item.getSymbol());
- }
-
- pageNo=checkAndSetPageNo(pageNoStr);
+ @Autowired
+ private AdminFuturesOrderService adminFuturesOrderService;
- Double volume_para_double = null;
- if (StringUtils.isNullOrEmpty(volume_para)) {
- volume_para_double = null;
- } else {
- if (!StringUtils.isDouble(volume_para)) {
- throw new BusinessException("下单金额不是浮点数");
- }
- if (Double.valueOf(volume_para).doubleValue() < 0) {
- throw new BusinessException("下单金额不能小于0");
- }
-
- volume_para_double = Double.valueOf(volume_para).doubleValue();
- }
-
- String loginPartyId = this.getLoginPartyId();
- page = this.adminFuturesOrderService.pagedQuery(pageNo, pageSize, status_para,
- rolename_para, loginPartyId, name_para, order_no_para, symbol_para, direction_para, volume_para_double);
+ private final String action = "normal/adminFuturesOrderAction!";
- List<Map> list = page.getElements();
- for (int i = 0; i < list.size(); i++) {
- Map map = list.get(i);
- if (null == map.get("rolename")) {
- map.put("roleNameDesc", "");
- } else {
- String roleName = map.get("rolename").toString();
- map.put("roleNameDesc",Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName);
- }
- }
+ private Logger logger = LoggerFactory.getLogger(AdminFuturesOrderController.class);
- } 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;
- }
+ /**
+ * 获取 交割合约单 列表
+ * <p>
+ * symbol_para 币种
+ * direction_para 方向
+ * volume_para 下单金额
+ * symbol_map 上线币种
+ */
+ @RequestMapping(action + "list.action")
+ public ModelAndView list(HttpServletRequest request) {
+ String pageNoStr = request.getParameter("pageNo");
+ String message = request.getParameter("message");
+ String error = request.getParameter("error");
+ String status_para = request.getParameter("status_para");
+ String rolename_para = request.getParameter("rolename_para");
+ String name_para = request.getParameter("name_para");
+ String order_no_para = request.getParameter("order_no_para");
+ String symbol_para = request.getParameter("symbol_para");
+ String direction_para = request.getParameter("direction_para");
+ String volume_para = request.getParameter("volume_para");
- modelAndView.addObject("pageNo", pageNo);
- modelAndView.addObject("pageSize", pageSize);
- modelAndView.addObject("page", page);
- modelAndView.addObject("message", message);
- modelAndView.addObject("error", error);
- modelAndView.addObject("status_para", status_para);
- modelAndView.addObject("rolename_para", rolename_para);
- modelAndView.addObject("name_para", name_para);
- modelAndView.addObject("order_no_para", order_no_para);
- modelAndView.addObject("symbol_para", symbol_para);
- modelAndView.addObject("direction_para", direction_para);
- modelAndView.addObject("volume_para", volume_para);
- modelAndView.addObject("symbol_map", symbol_map);
- return modelAndView;
- }
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("futures_order_list");
- /**
- * 获取 交割合约单 列表
- *
- * symbol_para 币种
- * direction_para 方向
- * volume_para 下单金额
- */
- @RequestMapping(action + "holdings_list.action")
- public ModelAndView holdings_list(HttpServletRequest request) {
- String pageNoStr = request.getParameter("pageNo");
- String message = request.getParameter("message");
- String error = request.getParameter("error");
- String rolename_para = request.getParameter("rolename_para");
- String name_para = request.getParameter("name_para");
- String order_no_para = request.getParameter("order_no_para");
- String symbol_para = request.getParameter("symbol_para");
- String direction_para = request.getParameter("direction_para");
- String volume_para = request.getParameter("volume_para");
+ Map<String, String> symbol_map = new HashMap<String, String>();
- ModelAndView modelAndView = new ModelAndView();
- modelAndView.setViewName("futures_holdings_list");
+ int pageNo = 1;
+ Page page = null;
+ int pageSize = 30;
+ try {
+ List<Item> items = this.itemService.cacheGetAll();
+ for (Item item : items) {
+ symbol_map.put(item.getSymbol(), item.getSymbol());
+ }
- int pageNo=1;
- int pageSize=30;
- try {
- pageNo=checkAndSetPageNo(pageNoStr);
- if (StringUtils.isNullOrEmpty(volume_para)) {
- throw new BusinessException("下单金额必填");
- }
- if (!StringUtils.isDouble(volume_para)) {
- throw new BusinessException("下单金额不是浮点数");
- }
- if (Double.valueOf(volume_para).doubleValue() <= 0) {
- throw new BusinessException("下单金额不能小于等于0");
- }
-
- double volume_para_double = Double.valueOf(volume_para).doubleValue();
-
- String loginPartyId = this.getLoginPartyId();
- page = this.adminFuturesOrderService.pagedQuery(pageNo, pageSize, "submitted",
- rolename_para, loginPartyId, name_para, order_no_para, symbol_para, direction_para, volume_para_double);
+ pageNo = checkAndSetPageNo(pageNoStr);
- List<Map> list = page.getElements();
- for (int i = 0; i < list.size(); i++) {
- Map map = list.get(i);
- if (null == map.get("rolename")) {
- map.put("roleNameDesc", "");
- } else {
- String roleName = map.get("rolename").toString();
- map.put("roleNameDesc",
- Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName);
- }
- }
+ Double volume_para_double = null;
+ if (StringUtils.isNullOrEmpty(volume_para)) {
+ volume_para_double = null;
+ } else {
+ if (!StringUtils.isDouble(volume_para)) {
+ throw new BusinessException("下单金额不是浮点数");
+ }
+ if (Double.valueOf(volume_para).doubleValue() < 0) {
+ throw new BusinessException("下单金额不能小于0");
+ }
- } 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;
- }
+ volume_para_double = Double.valueOf(volume_para).doubleValue();
+ }
- modelAndView.addObject("pageNo",pageNo);
- modelAndView.addObject("pageSize",pageSize);
- modelAndView.addObject("page", page);
- modelAndView.addObject("message", message);
- modelAndView.addObject("error", error);
- modelAndView.addObject("rolename_para", rolename_para);
- modelAndView.addObject("name_para", name_para);
- modelAndView.addObject("order_no_para", order_no_para);
- modelAndView.addObject("symbol_para", symbol_para);
- modelAndView.addObject("direction_para", direction_para);
- modelAndView.addObject("volume_para", volume_para);
- return modelAndView;
- }
+ String loginPartyId = this.getLoginPartyId();
+ page = this.adminFuturesOrderService.pagedQuery(pageNo, pageSize, status_para,
+ rolename_para, loginPartyId, name_para, order_no_para, symbol_para, direction_para, volume_para_double);
- /**
- * ajax定时获取表
- *
- * symbol_para 币种
- * direction_para 方向
- * volume_para 下单金额
- */
- @RequestMapping(action + "getValue.action")
- public String getValue(HttpServletRequest request) {
- String pageNoStr = request.getParameter("pageNo");
- String rolename_para = request.getParameter("rolename_para");
- String name_para = request.getParameter("name_para");
- String order_no_para = request.getParameter("order_no_para");
- String symbol_para = request.getParameter("symbol_para");
- String direction_para = request.getParameter("direction_para");
- String volume_para = request.getParameter("volume_para");
-
- int pageNo=1;
- Page page=null;
- int pageSize=30;
- try {
- pageNo=checkAndSetPageNo(pageNoStr);
- if (StringUtils.isNullOrEmpty(volume_para)) {
- throw new BusinessException("下单金额必填");
- }
- if (!StringUtils.isDouble(volume_para)) {
- throw new BusinessException("下单金额不是浮点数");
- }
- if (Double.valueOf(volume_para).doubleValue() <= 0) {
- throw new BusinessException("下单金额不能小于等于0");
- }
-
- double volume_para_double = Double.valueOf(volume_para).doubleValue();
-
- String loginPartyId = this.getLoginPartyId();
- page = this.adminFuturesOrderService.pagedQuery(pageNo, pageSize, "submitted",
- rolename_para, loginPartyId, name_para, order_no_para, symbol_para, direction_para, volume_para_double);
+ List<Map> list = page.getElements();
+ for (int i = 0; i < list.size(); i++) {
+ Map map = list.get(i);
+ if (null == map.get("rolename")) {
+ map.put("roleNameDesc", "");
+ } else {
+ String roleName = map.get("rolename").toString();
+ map.put("roleNameDesc", Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName);
+ }
+ }
- } catch (BusinessException e) {
- return JsonUtils.getJsonString(new ArrayList());
- } catch (Throwable t) {
- logger.error(" error ", t);
- return JsonUtils.getJsonString(new ArrayList());
- }
+ } 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 JsonUtils.getJsonString(page.getElements());
- }
+ modelAndView.addObject("pageNo", pageNo);
+ modelAndView.addObject("pageSize", pageSize);
+ modelAndView.addObject("page", page);
+ modelAndView.addObject("message", message);
+ modelAndView.addObject("error", error);
+ modelAndView.addObject("status_para", status_para);
+ modelAndView.addObject("rolename_para", rolename_para);
+ modelAndView.addObject("name_para", name_para);
+ modelAndView.addObject("order_no_para", order_no_para);
+ modelAndView.addObject("symbol_para", symbol_para);
+ modelAndView.addObject("direction_para", direction_para);
+ modelAndView.addObject("volume_para", volume_para);
+ modelAndView.addObject("symbol_map", symbol_map);
+ return modelAndView;
+ }
- /**
- * orderProfitLoss
- *
- * profit_loss 盈利还是亏损
- */
- @RequestMapping(action + "orderProfitLoss.action")
- public ModelAndView orderProfitLoss(HttpServletRequest request) {
- String order_no = request.getParameter("order_no");
- String profit_loss = request.getParameter("profit_loss");
+ /**
+ * 获取 交割合约单 列表
+ * <p>
+ * symbol_para 币种
+ * direction_para 方向
+ * volume_para 下单金额
+ */
+ @RequestMapping(action + "holdings_list.action")
+ public ModelAndView holdings_list(HttpServletRequest request) {
+ String pageNoStr = request.getParameter("pageNo");
+ String message = request.getParameter("message");
+ String error = request.getParameter("error");
+ String rolename_para = request.getParameter("rolename_para");
+ String name_para = request.getParameter("name_para");
+ String order_no_para = request.getParameter("order_no_para");
+ String symbol_para = request.getParameter("symbol_para");
+ String direction_para = request.getParameter("direction_para");
+ String volume_para = request.getParameter("volume_para");
- ModelAndView modelAndView = new ModelAndView();
- modelAndView.setViewName("redirect:/" + action + "list.action");
-
- try {
- String error = this.futuresOrderService.saveOrderPorfitOrLoss(order_no, profit_loss, this.getUsername_login());
- if (StringUtils.isNotEmpty(error)) {
- throw new BusinessException(error);
- }
- } 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;
- }
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("futures_holdings_list");
- modelAndView.addObject("message", "操作成功");
- return modelAndView;
- }
+ int pageNo = 1;
+ int pageSize = 30;
+ try {
+ pageNo = checkAndSetPageNo(pageNoStr);
+ if (StringUtils.isNullOrEmpty(volume_para)) {
+ throw new BusinessException("下单金额必填");
+ }
+ if (!StringUtils.isDouble(volume_para)) {
+ throw new BusinessException("下单金额不是浮点数");
+ }
+ if (Double.valueOf(volume_para).doubleValue() <= 0) {
+ throw new BusinessException("下单金额不能小于等于0");
+ }
+
+ double volume_para_double = Double.valueOf(volume_para).doubleValue();
+
+ String loginPartyId = this.getLoginPartyId();
+ page = this.adminFuturesOrderService.pagedQuery(pageNo, pageSize, "submitted",
+ rolename_para, loginPartyId, name_para, order_no_para, symbol_para, direction_para, volume_para_double);
+
+ List<Map> list = page.getElements();
+ for (int i = 0; i < list.size(); i++) {
+ Map map = list.get(i);
+ if (null == map.get("rolename")) {
+ map.put("roleNameDesc", "");
+ } else {
+ String roleName = map.get("rolename").toString();
+ map.put("roleNameDesc",
+ Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName);
+ }
+ }
+
+ } 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;
+ }
+
+ modelAndView.addObject("pageNo", pageNo);
+ modelAndView.addObject("pageSize", pageSize);
+ modelAndView.addObject("page", page);
+ modelAndView.addObject("message", message);
+ modelAndView.addObject("error", error);
+ modelAndView.addObject("rolename_para", rolename_para);
+ modelAndView.addObject("name_para", name_para);
+ modelAndView.addObject("order_no_para", order_no_para);
+ modelAndView.addObject("symbol_para", symbol_para);
+ modelAndView.addObject("direction_para", direction_para);
+ modelAndView.addObject("volume_para", volume_para);
+ return modelAndView;
+ }
+
+ /**
+ * ajax定时获取表
+ * <p>
+ * symbol_para 币种
+ * direction_para 方向
+ * volume_para 下单金额
+ */
+ @RequestMapping(action + "getValue.action")
+ public String getValue(HttpServletRequest request) {
+ String pageNoStr = request.getParameter("pageNo");
+ String rolename_para = request.getParameter("rolename_para");
+ String name_para = request.getParameter("name_para");
+ String order_no_para = request.getParameter("order_no_para");
+ String symbol_para = request.getParameter("symbol_para");
+ String direction_para = request.getParameter("direction_para");
+ String volume_para = request.getParameter("volume_para");
+
+ int pageNo = 1;
+ Page page = null;
+ int pageSize = 30;
+ try {
+ pageNo = checkAndSetPageNo(pageNoStr);
+ if (StringUtils.isNullOrEmpty(volume_para)) {
+ throw new BusinessException("下单金额必填");
+ }
+ if (!StringUtils.isDouble(volume_para)) {
+ throw new BusinessException("下单金额不是浮点数");
+ }
+ if (Double.valueOf(volume_para).doubleValue() <= 0) {
+ throw new BusinessException("下单金额不能小于等于0");
+ }
+
+ double volume_para_double = Double.valueOf(volume_para).doubleValue();
+
+ String loginPartyId = this.getLoginPartyId();
+ page = this.adminFuturesOrderService.pagedQuery(pageNo, pageSize, "submitted",
+ rolename_para, loginPartyId, name_para, order_no_para, symbol_para, direction_para, volume_para_double);
+
+ } catch (BusinessException e) {
+ return JsonUtils.getJsonString(new ArrayList());
+ } catch (Throwable t) {
+ logger.error(" error ", t);
+ return JsonUtils.getJsonString(new ArrayList());
+ }
+
+ return JsonUtils.getJsonString(page.getElements());
+ }
+
+ /**
+ * orderProfitLoss
+ * <p>
+ * profit_loss 盈利还是亏损
+ */
+ @RequestMapping(action + "orderProfitLoss.action")
+ public ModelAndView orderProfitLoss(HttpServletRequest request) {
+ String order_no = request.getParameter("order_no");
+ String profit_loss = request.getParameter("profit_loss");
+
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("redirect:/" + action + "list.action");
+
+ try {
+ String error = this.futuresOrderService.saveOrderPorfitOrLoss(order_no, profit_loss, this.getUsername_login());
+ if (StringUtils.isNotEmpty(error)) {
+ throw new BusinessException(error);
+ }
+ } 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;
+ }
+
+ modelAndView.addObject("message", "操作成功");
+ return modelAndView;
+ }
+
+ /**
+ * 交割合约一键场控
+ * <p>
+ * profit_loss 盈利还是亏损
+ */
+ @RequestMapping(action + "orderProfitLossList.action")
+ public ModelAndView orderProfitLossList(HttpServletRequest request) {
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("redirect:/" + action + "list.action");
+ String stringOrderNo = request.getParameter("orderNos");
+ String action = request.getParameter("action");
+ logger.info("orderNos:"+stringOrderNo.toString()+"-----action:"+action);
+ String[] orderNos = stringOrderNo.split(",");
+ List<String> errorList = new ArrayList<>();
+ try {
+ for (String orderNo : orderNos) {
+ logger.info("------->"+orderNo);
+ String error = this.futuresOrderService.saveOrderPorfitOrLoss(orderNo, action, this.getUsername_login());
+ if (StringUtils.isNotEmpty(error)) {
+ error = "订单号:"+orderNo+",原因:"+error;
+ errorList.add(error);
+ }
+ }
+ if(errorList.size() > 0){
+ throw new BusinessException("部分订单操作失败:"+errorList.toString());
+ }
+ } 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;
+ }
+
+ modelAndView.addObject("message", "操作成功");
+ return modelAndView;
+ }
}
diff --git a/src/main/java/project/contract/ContractOrder.java b/src/main/java/project/contract/ContractOrder.java
index 96ea5f8..4151d2b 100644
--- a/src/main/java/project/contract/ContractOrder.java
+++ b/src/main/java/project/contract/ContractOrder.java
@@ -149,17 +149,7 @@
private Double volume_open;
public Double getChange_ratio() {
- if (STATE_SUBMITTED.equals(state)) {
- change_ratio = Arith.div(Arith.sub(Arith.add(Arith.add(amount_close, profit), deposit), deposit_open),
- deposit_open);
- } else {
- change_ratio = Arith.div(Arith.sub(Arith.add(amount_close, deposit), deposit_open), deposit_open);
-
- }
-
- change_ratio = Arith.mul(change_ratio, 100);
- DecimalFormat df = new DecimalFormat("#.##");
- return Double.valueOf(df.format(change_ratio));
+ return change_ratio;
}
public Serializable getPartyId() {
diff --git a/src/main/java/project/contract/internal/ContractApplyOrderServiceImpl.java b/src/main/java/project/contract/internal/ContractApplyOrderServiceImpl.java
index f9a436c..e167c0a 100644
--- a/src/main/java/project/contract/internal/ContractApplyOrderServiceImpl.java
+++ b/src/main/java/project/contract/internal/ContractApplyOrderServiceImpl.java
@@ -93,30 +93,30 @@
}
}
- 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());
diff --git a/src/main/java/project/contract/internal/ContractOrderServiceImpl.java b/src/main/java/project/contract/internal/ContractOrderServiceImpl.java
index 1b7b665..a71fe22 100644
--- a/src/main/java/project/contract/internal/ContractOrderServiceImpl.java
+++ b/src/main/java/project/contract/internal/ContractOrderServiceImpl.java
@@ -1,13 +1,8 @@
package project.contract.internal;
import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@@ -465,14 +460,15 @@
}
public Map<String, Object> bulidOne(ContractOrder order) {
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a", Locale.ENGLISH);
DecimalFormat df = new DecimalFormat("#.##");
Map<String, Object> map = new HashMap<String, Object>();
map.put("order_no", order.getOrder_no());
map.put("name", itemService.cacheBySymbol(order.getSymbol(), false).getName());
map.put("symbol", order.getSymbol());
- map.put("create_time", DateUtils.format(order.getCreate_time(), DateUtils.DF_yyyyMMddHHmmss));
+ map.put("create_time", simpleDateFormat.format(order.getCreate_time()));
if (order.getClose_time() != null) {
- map.put("close_time", DateUtils.format(order.getClose_time(), DateUtils.DF_yyyyMMddHHmmss));
+ map.put("close_time", simpleDateFormat.format(order.getClose_time()));
} else {
map.put("close_time", "");
}
diff --git a/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java b/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
index 1cfbda1..a423405 100644
--- a/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
+++ b/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
@@ -1,5 +1,6 @@
package project.contract.job;
+import java.text.DecimalFormat;
import java.util.List;
import org.slf4j.Logger;
@@ -21,6 +22,8 @@
private ContractOrderService contractOrderService;
private DataService dataService;
private WalletService walletService;
+ public final static String STATE_SUBMITTED = "submitted";
+ public final static String STATE_CREATED = "created";
/**
* 平仓线 110%(订金价值 /收益=110%)
*/
@@ -53,6 +56,7 @@
/*
* 0 买涨
*/
+ logger.info("当前价格:"+close+"---------价格:"+Arith.add(order.getTrade_avg_price(), order.getPips()));
if (close >= Arith.add(order.getTrade_avg_price(), order.getPips())) {
settle(order, "profit", close);
}
@@ -80,30 +84,31 @@
/**
* 盈亏计算
- *
+ *
* @param profit_loss profit 盈 loss亏
* @param currentPrice 当前点位
*/
public void settle(ContractOrder order, String profit_loss, double currentPrice) {
- /**
- * 偏差点位
- */
- double point = Arith.div(Math.abs(Arith.sub(currentPrice, order.getTrade_avg_price())), order.getPips());
-
- /*
- * 根据偏 差点数和手数算出盈亏金额
- */
- double amount = Arith.mul(Arith.mul(order.getPips_amount(), point), order.getVolume());
-
+ 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()));
+ logger.info("---------盈亏金额:"+amount);
+ logger.info("---------盈亏:"+profit_loss);
if ("profit".equals(profit_loss)) {
/**
* 盈 正数
*/
- order.setProfit(Arith.add(0.0D, amount));
+ order.setProfit(Arith.add(0.0D, Math.abs(amount)));
} else if ("loss".equals(profit_loss)) {
- order.setProfit(Arith.sub(0.0D, amount));
+ order.setProfit(Arith.sub(0.0D,Math.abs(amount) ));
}
+
+ double changeRatio;
+ changeRatio = Arith.mul(Arith.div(order.getProfit(), order.getDeposit_open()), 100);
+ DecimalFormat df = new DecimalFormat("#.##");
+ order.setChange_ratio(Double.valueOf(df.format(changeRatio)));
+
/**
* 多次平仓价格不对,后续修
*/
@@ -161,6 +166,7 @@
* 收益
*/
double profit = 0;
+
List<ContractOrder> list = contractOrderService.findSubmitted(order.getPartyId().toString(), null, null);
for (int i = 0; i < list.size(); i++) {
ContractOrder close_line = list.get(i);
@@ -168,7 +174,7 @@
}
Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
double totleMoney = wallet.getMoney();
- if (Arith.add(profit, totleMoney) <= 0) {
+ if (Arith.add(profit,totleMoney) <= 0) {
/**
* 触发全仓强平
*/
@@ -178,6 +184,7 @@
ContractOrder close_line = list.get(i);
if (!order.getOrder_no().equals(close_line.getOrder_no())) {
try {
+
while (true) {
if (ContractLock.add(close_line.getOrder_no())) {
this.contractOrderService.saveClose(close_line.getPartyId().toString(),
@@ -188,7 +195,9 @@
break;
}
ThreadUtils.sleep(500);
+
}
+
} catch (Exception e) {
logger.error("error:", e);
} finally {
@@ -207,8 +216,11 @@
* 低于系统默认平仓线,进行强平
*/
this.contractOrderService.saveClose(order.getPartyId().toString(), order.getOrder_no());
+ return;
}
+
}
+
}
public void setDataService(DataService dataService) {
this.dataService = dataService;
diff --git a/src/main/java/project/project/web/api/ContractApplyOrderController.java b/src/main/java/project/project/web/api/ContractApplyOrderController.java
index a58022f..5cc40a6 100644
--- a/src/main/java/project/project/web/api/ContractApplyOrderController.java
+++ b/src/main/java/project/project/web/api/ContractApplyOrderController.java
@@ -11,6 +11,7 @@
import javax.servlet.http.HttpServletRequest;
+import kernel.web.ApplicationUtil;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -323,6 +324,72 @@
}
/**
+ * 修改止盈止损
+ */
+ @RequestMapping(action + "stopProfitAndLoss.action")
+ public Object stopProfitAndLoss(HttpServletRequest request) throws IOException {
+ String session_token = request.getParameter("session_token");
+ String order_no = request.getParameter("order_no");
+ String stop_price_profit = request.getParameter("stop_price_profit");
+ String stop_price_loss = request.getParameter("stop_price_loss");
+
+ ResultObject resultObject = new ResultObject();
+ resultObject = this.readSecurityContextFromSession(resultObject);
+ if (!"0".equals(resultObject.getCode())) {
+ return resultObject;
+ }
+ String partyId = this.getLoginPartyId();
+ boolean lock = false;
+
+ try {
+
+ if (!ContractLock.add(partyId)) {
+ throw new BusinessException("请稍后再试");
+ }
+
+ lock = true;
+
+ ContractOrder order = contractOrderService.findByOrderNo(order_no);
+ if (order == null || !"submitted".equals(order.getState()) || !partyId.equals(order.getPartyId().toString())) {
+ return resultObject;
+ }
+
+ if (StringUtils.isNullOrEmpty(stop_price_profit)) {
+ stop_price_profit = "0";
+ }
+ if (StringUtils.isNullOrEmpty(stop_price_loss)) {
+ stop_price_loss = "0";
+ }
+
+ double stop_price_profit_double = Double.valueOf(stop_price_profit).doubleValue();
+ double stop_price_loss_double = Double.valueOf(stop_price_loss).doubleValue();
+
+ Party party = this.partyService.cachePartyBy(partyId, false);
+ if (!party.getEnabled()) {
+ resultObject.setCode("506");
+ resultObject.setMsg("用户已锁定");
+ return resultObject;
+ }
+
+ order.setStop_price_profit(stop_price_profit_double);
+ order.setStop_price_loss(stop_price_loss_double);
+
+ this.contractOrderService.update(order);
+
+ } catch (Exception e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } finally {
+ if (lock) {
+ ThreadUtils.sleep(100);
+ ContractLock.remove(partyId);
+ }
+ }
+
+ return resultObject;
+ }
+
+ /**
* 平仓
*
* symbol 币种
diff --git a/src/main/java/project/web/admin/kyc/AdminKycController.java b/src/main/java/project/web/admin/kyc/AdminKycController.java
index ebcece4..1940ece 100644
--- a/src/main/java/project/web/admin/kyc/AdminKycController.java
+++ b/src/main/java/project/web/admin/kyc/AdminKycController.java
@@ -54,8 +54,7 @@
page = this.adminKycService.pagedQuery(pageNo, pageSize, name_para, state_para,
rolename_para, getLoginPartyId(), idnumber_para, email_para);
- String preImg = "https://www.coinzne.com/wap/public/showimg!showImg.action?imagePath=";
-
+ String preImg = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=";
for (Map<String, Object> map : (List<Map<String, Object>>) page.getElements()) {
map.put("name_encode", map.get("name").toString().replace("\'", "\\\'").replace("\"", "\\\""));
map.put("nationality", Constants.COUNTRY_CODE.get(map.get("nationality")));
diff --git a/src/main/webapp/kyc_list.jsp b/src/main/webapp/kyc_list.jsp
index fe52c59..ed5a3f6 100644
--- a/src/main/webapp/kyc_list.jsp
+++ b/src/main/webapp/kyc_list.jsp
@@ -334,7 +334,7 @@
<button type="button" class="btn btn-light btn-block">修改</button>
</label>
</div>
- <div class="col-md-6">
+ <div class="col-md-6">·
<button type="button" class="btn btn-light btn-block" onclick="submit_idimg('3')">提交</button>
</div>
</div>
--
Gitblit v1.9.3