From 09ab9394bd3614f373082754300c6ef39d60c1e9 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 05 Jun 2024 15:28:30 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/UserPositionServiceImpl.java |   81 ++++++++++++++++++++++++++++++++--------
 1 files changed, 64 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java b/src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
index 81c7180..9374bd6 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.*;
@@ -149,7 +153,7 @@
         }
 
         //股票类型 现价 数据源的处理
-        BigDecimal nowPrice = priceServices.getNowPrice(stock.getStockCode());
+        BigDecimal nowPrice = priceServices.getNowPrice(stock.getStockCode(),stock.getStockType());
 
         if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
             return ServerResponse.createByErrorMsg("报价0,请稍后再试", request);
@@ -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("订单失败,不在交易时间之内",request);
+        }
+
         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);
@@ -345,27 +378,41 @@
         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
     @Override
     public ServerResponse allSell(HttpServletRequest request,String stockType) throws Exception{
         //判断股票是否在可交易时间段
-        User user =    iUserService.getCurrentUser(request);
+        User user = iUserService.getCurrentUser(request);
         QueryWrapper<UserPosition> queryWrapper = new QueryWrapper<>();
-        if(stockType.equals(EStockType.US.getCode())){
-            queryWrapper.eq("user_id",user.getId());
-            queryWrapper.isNull("sell_order_id");
-            queryWrapper.or().eq("stock_gid",EStockType.US.getCode());
-
-        }else{
-            queryWrapper.eq("user_id",user.getId());
-            queryWrapper.eq("stock_gid",stockType);
-            queryWrapper.isNull("sell_order_id");
-        }
-
+        queryWrapper.eq("user_id", user.getId());
+        queryWrapper.isNull("sell_order_id");
 
         List<UserPosition> userPositionList = userPositionMapper.selectList(queryWrapper);
         for (int i = 0; i < userPositionList.size(); i++) {
-            sell(userPositionList.get(i).getPositionSn(),0,request);
+            sell(userPositionList.get(i).getPositionSn(), 0);
         }
         return ServerResponse.createBySuccessMsg("平仓成功!");
     }
@@ -542,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