1
zj
2024-06-05 09ab9394bd3614f373082754300c6ef39d60c1e9
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);