From da335bddc242b2872029003332ef7549cceb0ce8 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 29 May 2024 19:55:01 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java |   62 +++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index ba92dc0..13137f1 100644
--- a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1,5 +1,6 @@
 package com.nq.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.nq.dao.*;
@@ -18,6 +19,7 @@
 import com.nq.utils.stock.pinyin.GetPyByChinese;
 import com.nq.utils.stock.sina.StockApi;
 import com.nq.utils.timeutil.DateTimeUtil;
+import com.nq.utils.timeutil.TimeUtil;
 import com.nq.vo.agent.AgentIncomeVO;
 import com.nq.vo.position.AdminPositionVO;
 import com.nq.vo.position.AgentPositionVO;
@@ -32,7 +34,9 @@
 
 import java.math.BigDecimal;
 import java.sql.Timestamp;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -246,13 +250,17 @@
         }
     }
 
-
+    public static void main(String[] args) {
+        String a = "09:00";
+        System.out.println(Integer.parseInt(a.split(":")[0])>12);
+    }
 
     @Transactional
     public ServerResponse sell(String positionSn, int doType){
         UserPosition userPosition = this.userPositionMapper.findPositionBySn(positionSn);
         BigDecimal siitteBuyFee = iSiteSettingService.getSiteSetting().getBuyFee();
         Boolean b = tradingHourService.timeCheck(userPosition.getStockCode());
+
         if (!b) {
             return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内");
         }
@@ -303,6 +311,32 @@
         // 手续费率
         BigDecimal siitteBuyFee = siteSetting.getSellFee();
 
+
+
+//        Calendar calendar = Calendar.getInstance();
+//        int time = calendar.get(Calendar.HOUR_OF_DAY);
+//        if(time<12 && time>=Integer.parseInt(siteSetting.getTransAmEnd().split(":")[0])){ //上午
+//            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内",request);
+//        }
+//        if(time>12 && time>=Integer.parseInt(siteSetting.getTransPmEnd().split(":")[0])){//下午
+//            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内",request);
+//        }
+        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
+        if(null == stock){
+            return ServerResponse.createBySuccessMsg("股票不存在!", request);
+        }
+        //判断股票是否在可交易时间段
+//        Boolean b = isStockMarketOpen(stock.getStockType());
+//        Boolean wb = tradingHourService.weekDayeCheck(stock.getStockCode());
+//            if (!b || !wb) {
+//            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内", request);
+//        }
+
+        Boolean b = tradingHourService.timeCheck(userPosition.getStockCode());
+        if (!b) {
+            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内");
+        }
+
         if (userPosition == null) {
             return ServerResponse.createByErrorMsg("平仓失败,订单不存在", request);
         }
@@ -316,7 +350,6 @@
         if (1 == userPosition.getIsLock().intValue()) {
             return ServerResponse.createByErrorMsg("this order is closed " + userPosition.getLockMsg());
         }
-        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
         BigDecimal nowPrice = priceServices.getNowPrice(userPosition.getStockCode());
         if (nowPrice.compareTo(new BigDecimal("0")) != 1) {
             return ServerResponse.createByErrorMsg("报价0,平仓失败,请稍后再试", request);
@@ -343,6 +376,29 @@
                 userPosition.getUserId(), EUserAssets.CLOSE_POSITION,
                 profitVO.getAllProfitAndLose(), "", "");
         return ServerResponse.createBySuccessMsg("平仓成功!", request);
+    }
+
+    public boolean isStockMarketOpen(String stockType){
+        ZoneId zone = ZoneId.of("Asia/Shanghai");
+        LocalTime now = LocalTime.now(zone);
+        if("US".equalsIgnoreCase(stockType)){
+            LocalTime startTime = LocalTime.of(21, 30);
+            LocalTime endTime = LocalTime.of(4, 0);
+            if (now.isAfter(startTime) || now.isBefore(endTime)) {
+                return true;
+            } else {
+                return false;
+            }
+        }else if("IN".equalsIgnoreCase(stockType)){
+            LocalTime instartTime = LocalTime.of(11, 15);
+            LocalTime inendTime = LocalTime.of(17, 30);
+            if (now.isAfter(instartTime) && now.isBefore(inendTime)) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        return false;
     }
 
     @Transactional
@@ -533,7 +589,7 @@
         List<UserPositionVO> userPositionVOS = Lists.newArrayList();
         if (userPositions.size() > 0) {
             for (UserPosition position : userPositions) {
-                UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode()));
+                UserPositionVO userPositionVO = UserPointUtil.assembleUserPositionVO(position, priceServices.getNowPrice(position.getStockCode(),stockType));
                 userPositionVO.setOrderTotalPrice(userPositionVO.getOrderTotalPrice().multiply(new BigDecimal(userPositionVO.getOrderLever())));
                 userPositionVO.setProfitAndLose(userPositionVO.getProfitAndLose().multiply(new BigDecimal(userPositionVO.getOrderLever())));
                 userPositionVOS.add(userPositionVO);

--
Gitblit v1.9.3