From 1b5faa64dbb22935de1ff33a2bd01a41446f857b Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Tue, 02 Jun 2026 11:22:52 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/utils/stock/BuyAndSellUtils.java | 16 ++--
src/main/resources/mapper/UserPositionMapper.xml | 9 ++
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java | 101 ++++++++++++++-------------------
3 files changed, 59 insertions(+), 67 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 2da1050..aced777 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -966,6 +966,35 @@
return null;
}
+ private ServerResponse validateTransTimeBeforeSell(UserPosition userPosition, SiteSetting siteSetting) throws Exception {
+ if (userPosition == null || siteSetting == null) {
+ return null;
+ }
+ String stockGid = userPosition.getStockGid();
+ boolean inSession;
+ if (stockGid != null && stockGid.contains("us")) {
+ inSession = BuyAndSellUtils.isInTransSession(
+ siteSetting.getTransAmBeginUs(), siteSetting.getTransAmEndUs(),
+ siteSetting.getTransPmBeginUs(), siteSetting.getTransPmEndUs());
+ } else if (stockGid != null && stockGid.contains("hk")) {
+ inSession = BuyAndSellUtils.isInTransSession(
+ siteSetting.getTransAmBeginhk(), siteSetting.getTransAmEndhk(),
+ siteSetting.getTransPmBeginhk(), siteSetting.getTransPmEndhk());
+ } else {
+ inSession = BuyAndSellUtils.isInTransSession(
+ siteSetting.getTransAmBegin(), siteSetting.getTransAmEnd(),
+ siteSetting.getTransPmBegin(), siteSetting.getTransPmEnd());
+ }
+ if (!inSession) {
+ return ServerResponse.createByErrorMsg("平仓失败,不在交易时段内");
+ }
+ SiteProduct siteProduct = iSiteProductService.getProductSetting();
+ if (siteProduct != null && siteProduct.getHolidayDisplay()) {
+ return ServerResponse.createByErrorMsg("周末或节假日不能交易!");
+ }
+ return null;
+ }
+
public ServerResponse sell(String positionSn, int doType) throws Exception {
log.info("【用戶交易平倉】 positionSn = {} , dotype = {}", positionSn, Integer.valueOf(doType));
@@ -978,54 +1007,17 @@
SiteProduct siteProduct = iSiteProductService.getProductSetting();
UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
- if (doType != 0) {
- if (userPosition.getStockGid().contains("us")) {
- String am_begin = siteSetting.getTransAmBeginUs();
- String am_end = siteSetting.getTransAmEndUs();
- String pm_begin = siteSetting.getTransPmBeginUs();
- String pm_end = siteSetting.getTransPmEndUs();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易時間 = {} 是否在下午交易時間 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
-
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("下单失败,系统设置错误");
- }
- } else if (userPosition.getStockGid().contains("hk")) {
- String am_begin = siteSetting.getTransAmBeginhk();
- String am_end = siteSetting.getTransAmEndhk();
- String pm_begin = siteSetting.getTransPmBeginhk();
- String pm_end = siteSetting.getTransPmEndhk();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易時間 = {} 是否在下午交易時間 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
-
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("下單失敗,不在港股股交易時段內");
- }
- } else {
- String am_begin = siteSetting.getTransAmBegin();
- String am_end = siteSetting.getTransAmEnd();
- String pm_begin = siteSetting.getTransPmBegin();
- String pm_end = siteSetting.getTransPmEnd();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易時間 = {} 是否在下午交易時間 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
-
- if (!am_flag && !pm_flag && siteProduct.getTranWithdrawDisplay()) {
- return ServerResponse.createByErrorMsg("平仓失败,不在交易时段内");
- }
- }
- if (siteProduct.getHolidayDisplay() && siteProduct.getTranWithdrawDisplay()) {
- return ServerResponse.createByErrorMsg("周末或节假日不能交易!");
- }
-
- }
-
-
if (userPosition == null) {
return ServerResponse.createByErrorMsg("平仓失败,订单不存在");
}
+
+ if (doType != 0) {
+ ServerResponse timeCheck = validateTransTimeBeforeSell(userPosition, siteSetting);
+ if (timeCheck != null) {
+ return timeCheck;
+ }
+ }
+
User user = this.userMapper.selectByPrimaryKey(userPosition.getUserId());
if (user == null) {
@@ -1280,23 +1272,16 @@
}
SiteProduct siteProduct = iSiteProductService.getProductSetting();
UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
+ if (userPosition == null) {
+ return ServerResponse.createByErrorMsg("平仓失败,订单不存在");
+ }
//部分平仓数量等于订单总数量,则调用全平接口
if(quantity.equals(userPosition.getOrderNum())){
return sell(positionSn,1);
}
- //校验时间
- String am_begin = siteSetting.getTransAmBegin();
- String am_end = siteSetting.getTransAmEnd();
- String pm_begin = siteSetting.getTransPmBegin();
- String pm_end = siteSetting.getTransPmEnd();
- boolean am_flag = BuyAndSellUtils.isTransTime(am_begin, am_end);
- boolean pm_flag = BuyAndSellUtils.isTransTime(pm_begin, pm_end);
- log.info("是否在上午交易時間 = {} 是否在下午交易時間 = {}", Boolean.valueOf(am_flag), Boolean.valueOf(pm_flag));
- if (!am_flag && !pm_flag) {
- return ServerResponse.createByErrorMsg("平仓失败,不在交易时段内");
- }
- if (userPosition == null) {
- return ServerResponse.createByErrorMsg("平仓失败,订单不存在");
+ ServerResponse timeCheck = validateTransTimeBeforeSell(userPosition, siteSetting);
+ if (timeCheck != null) {
+ return timeCheck;
}
User user = this.userMapper.selectByPrimaryKey(userPosition.getUserId());
if (user == null) {
diff --git a/src/main/java/com/nq/utils/stock/BuyAndSellUtils.java b/src/main/java/com/nq/utils/stock/BuyAndSellUtils.java
index aa5cf80..69455b0 100644
--- a/src/main/java/com/nq/utils/stock/BuyAndSellUtils.java
+++ b/src/main/java/com/nq/utils/stock/BuyAndSellUtils.java
@@ -59,6 +59,10 @@
}
+ public static boolean isInTransSession(String amBegin, String amEnd, String pmBegin, String pmEnd) throws Exception {
+ return isTransTime(amBegin, amEnd) || isTransTime(pmBegin, pmEnd);
+ }
+
public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
@@ -75,16 +79,12 @@
end.setTime(endTime);
//開始時間小於結束時間,正常情況
- if (begin.before(end)){
- if (date.after(begin) && date.before(end)) {
- return true;
- }
+ if (begin.before(end) || begin.equals(end)){
+ return !date.before(begin) && !date.after(end);
}
- //開始時間大於結束時間,非正常情況
+ //開始時間大於結束時間,跨午夜
if (begin.after(end)){
- if (date.after(begin) || date.before(end)) {
- return true;
- }
+ return !date.before(begin) || !date.after(end);
}
diff --git a/src/main/resources/mapper/UserPositionMapper.xml b/src/main/resources/mapper/UserPositionMapper.xml
index 86e2306..20db7a5 100644
--- a/src/main/resources/mapper/UserPositionMapper.xml
+++ b/src/main/resources/mapper/UserPositionMapper.xml
@@ -484,7 +484,14 @@
and stock_spell like CONCAT('%','${stockSpell}','%')
</if>
</where>
- ORDER BY id DESC
+ <choose>
+ <when test="state == 2">
+ ORDER BY sell_order_time DESC, id DESC
+ </when>
+ <otherwise>
+ ORDER BY id DESC
+ </otherwise>
+ </choose>
</select>
<select id="findPositionByUserIdAndSellIdIsNull" parameterType="integer" resultMap="BaseResultMap">
--
Gitblit v1.9.3