From ecf9708688af3f3fae3199c33763dbd3811aa619 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Mon, 27 May 2024 14:19:09 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java | 76 +++++++++++++++++++++++++++++--------
1 files changed, 59 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..7a9f338 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,27 @@
// 手续费率
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);
+ }
+
if (userPosition == null) {
return ServerResponse.createByErrorMsg("平仓失败,订单不存在", request);
}
@@ -316,7 +345,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 +373,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 +584,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