peter
2026-01-11 9c638d29f43035bb224996f3183a58d761cd526e
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -569,7 +569,7 @@
        if (!am_flag && !pm_flag && siteProduct.getTranWithdrawDisplay()) {
            return ServerResponse.createByErrorMsg("挂单失败,不在交易时段内");
        }
        if (siteProduct.getHolidayDisplay()) {
        if (siteProduct.getHolidayDisplay() && siteProduct.getTranWithdrawDisplay()) {
            return ServerResponse.createByErrorMsg("周末或节假日不能交易!");
        }
@@ -585,11 +585,6 @@
                    .getBuySameNums() + "条");
        }
        Integer transNum = findPositionNumByTimes(siteSetting.getBuyNumTimes().intValue(), user.getId());
        if (transNum.intValue() / 100 >= siteSetting.getBuyNumLots().intValue() && siteProduct.getTranWithdrawDisplay()) {
            return ServerResponse.createByErrorMsg("频繁交易," + siteSetting
                    .getBuyNumTimes() + "分钟内不能超过" + siteSetting.getBuyNumLots() + "手");
        }
        if (buyNum.intValue() < siteSetting.getBuyMinNum().intValue()) {
            return ServerResponse.createByErrorMsg("挂单失败,购买数量小于" + siteSetting
@@ -621,9 +616,9 @@
            log.info("【普通A股】");
        }
        if (stockListVO.getName().startsWith("ST") || stockListVO.getName().endsWith("退")) {
            return ServerResponse.createByErrorMsg("ST和已退市的股票不能入仓");
        }
//        if (stockListVO.getName().startsWith("ST") || stockListVO.getName().endsWith("退")) {
//            return ServerResponse.createByErrorMsg("ST和已退市的股票不能入仓");
//        }
        BigDecimal zsPrice = new BigDecimal(stockListVO.getPreclose_px());
@@ -633,67 +628,67 @@
        BigDecimal ztRate = chaPrice.multiply(new BigDecimal("100")).divide(zsPrice, 2, 4);
        log.info("当前涨跌幅 = {} % , 涨停幅度 = {} %", Double.valueOf(stock_crease), ztRate);
        if ((new BigDecimal(String.valueOf(stock_crease))).compareTo(ztRate) == 0 && buyType
                .intValue() == 0 && siteProduct.getTranWithdrawDisplay()) {
            return ServerResponse.createByErrorMsg("当前股票已涨停不能买涨");
        }
        if (stock.getStockPlate() == null || StringUtils.isEmpty(stock.getStockPlate())) {
            int maxcrease = siteSetting.getCreaseMaxPercent().intValue();
            if (stock_crease > 0.0D &&
                    stock_crease >= maxcrease && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("挂单失败,股票当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
            }
            if (stock_crease < 0.0D &&
                    -stock_crease > maxcrease && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("挂单失败,股票当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
            }
        } else if ("创业".equals(stock.getStockPlate())) {
            int maxcrease = siteSetting.getCyCreaseMaxPercent().intValue();
            if (stock_crease > 0.0D &&
                    stock_crease >= maxcrease && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("挂单失败,创业股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
            }
            if (stock_crease < 0.0D &&
                    -stock_crease > maxcrease && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("挂单失败,创业股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
            }
        } else {
            int maxcrease = siteSetting.getKcCreaseMaxPercent().intValue();
            if (stock_crease > 0.0D &&
                    stock_crease >= maxcrease && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("挂单失败,科创股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
            }
            if (stock_crease < 0.0D &&
                    -stock_crease > maxcrease && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("挂单失败,科创股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
            }
        }
//        log.info("当前涨跌幅 = {} % , 涨停幅度 = {} %", Double.valueOf(stock_crease), ztRate);
//        if ((new BigDecimal(String.valueOf(stock_crease))).compareTo(ztRate) == 0 && buyType
//                .intValue() == 0 && siteProduct.getTranWithdrawDisplay()) {
//            return ServerResponse.createByErrorMsg("当前股票已涨停不能买涨");
//        }
//        if (stock.getStockPlate() == null || StringUtils.isEmpty(stock.getStockPlate())) {
//
//            int maxcrease = siteSetting.getCreaseMaxPercent().intValue();
//            if (stock_crease > 0.0D &&
//                    stock_crease >= maxcrease && siteProduct.getTranWithdrawDisplay()) {
//                return ServerResponse.createByErrorMsg("挂单失败,股票当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
//            }
//
//
//            if (stock_crease < 0.0D &&
//                    -stock_crease > maxcrease && siteProduct.getTranWithdrawDisplay()) {
//                return ServerResponse.createByErrorMsg("挂单失败,股票当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
//
//            }
//
//        } else if ("创业".equals(stock.getStockPlate())) {
//
//            int maxcrease = siteSetting.getCyCreaseMaxPercent().intValue();
//            if (stock_crease > 0.0D &&
//                    stock_crease >= maxcrease && siteProduct.getTranWithdrawDisplay()) {
//                return ServerResponse.createByErrorMsg("挂单失败,创业股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
//            }
//
//
//            if (stock_crease < 0.0D &&
//                    -stock_crease > maxcrease && siteProduct.getTranWithdrawDisplay()) {
//                return ServerResponse.createByErrorMsg("挂单失败,创业股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
//            }
//        } else {
//
//            int maxcrease = siteSetting.getKcCreaseMaxPercent().intValue();
//            if (stock_crease > 0.0D &&
//                    stock_crease >= maxcrease && siteProduct.getTranWithdrawDisplay()) {
//                return ServerResponse.createByErrorMsg("挂单失败,科创股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
//            }
//
//
//            if (stock_crease < 0.0D &&
//                    -stock_crease > maxcrease && siteProduct.getTranWithdrawDisplay()) {
//                return ServerResponse.createByErrorMsg("挂单失败,科创股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
//            }
//        }
        ServerResponse serverResponse = this.iStockService.selectRateByDaysAndStockCode(stock
                .getStockCode(), siteSetting.getStockDays().intValue());
        if (!serverResponse.isSuccess()) {
            return serverResponse;
        }
        BigDecimal daysRate = (BigDecimal) serverResponse.getData();
        log.info("股票 {} , {} 天内 涨幅 {} , 设置的涨幅 = {}", new Object[]{stock.getStockCode(), siteSetting
                .getStockDays(), daysRate, siteSetting.getStockRate()});
        if (daysRate != null &&
                siteSetting.getStockRate().compareTo(daysRate) == -1 && siteProduct.getTranWithdrawDisplay()) {
            return serverResponse.createByErrorMsg(siteSetting.getStockDays() + "天内涨幅超过 " + siteSetting
                    .getStockRate() + "不能交易");
        }
//        log.info("股票 {} , {} 天内 涨幅 {} , 设置的涨幅 = {}", new Object[]{stock.getStockCode(), siteSetting
//                .getStockDays(), daysRate, siteSetting.getStockRate()});
//
//        if (daysRate != null &&
//                siteSetting.getStockRate().compareTo(daysRate) == -1 && siteProduct.getTranWithdrawDisplay()) {
//            return serverResponse.createByErrorMsg(siteSetting.getStockDays() + "天内涨幅超过 " + siteSetting
//                    .getStockRate() + "不能交易");
//        }
        BigDecimal buy_amt = now_price.multiply(new BigDecimal(buyNum.intValue()));
@@ -907,7 +902,7 @@
                    return ServerResponse.createByErrorMsg("平仓失败,不在交易时段内");
                }
            }
            if (siteProduct.getHolidayDisplay()) {
            if (siteProduct.getHolidayDisplay() && siteProduct.getTranWithdrawDisplay()) {
                return ServerResponse.createByErrorMsg("周末或节假日不能交易!");
            }
@@ -2317,6 +2312,13 @@
        return ServerResponse.createBySuccess(pageInfo);
    }
    @Override
    public ServerResponse findPositionBySn(String positionSn) {
        UserPosition userPosition = userPositionMapper.findPositionBySn(positionSn);
        UserPositionVO userPositionVO = assembleUserPositionVO(userPosition);
        return ServerResponse.createBySuccess(userPositionVO);
    }
    /**
     * @Description: 新股轉持倉
     * @Param:
@@ -2506,17 +2508,17 @@
            return ServerResponse.createByErrorMsg("下单失败,当前股票不能交易");
        }
        List dbPosition = findPositionByStockCodeAndTimes(siteSetting.getBuySameTimes().intValue(), stockDz.getStockCode(), user.getId());
        if (dbPosition.size() >= siteSetting.getBuySameNums().intValue()) {
            return ServerResponse.createByErrorMsg("频繁交易," + siteSetting.getBuySameTimes() + "分钟内同一股票持仓不得超过" + siteSetting
                    .getBuySameNums() + "条");
        }
//        List dbPosition = findPositionByStockCodeAndTimes(siteSetting.getBuySameTimes().intValue(), stockDz.getStockCode(), user.getId());
//        if (dbPosition.size() >= siteSetting.getBuySameNums().intValue()) {
//            return ServerResponse.createByErrorMsg("频繁交易," + siteSetting.getBuySameTimes() + "分钟内同一股票持仓不得超过" + siteSetting
//                    .getBuySameNums() + "条");
//        }
        Integer transNum = findPositionNumByTimes(siteSetting.getBuyNumTimes().intValue(), user.getId());
        if (transNum.intValue() / 100 >= siteSetting.getBuyNumLots().intValue()) {
            return ServerResponse.createByErrorMsg("频繁交易," + siteSetting
                    .getBuyNumTimes() + "分钟内不能超过" + siteSetting.getBuyNumLots() + "手");
        }
//        Integer transNum = findPositionNumByTimes(siteSetting.getBuyNumTimes().intValue(), user.getId());
//        if (transNum.intValue() / 100 >= siteSetting.getBuyNumLots().intValue()) {
//            return ServerResponse.createByErrorMsg("频繁交易," + siteSetting
//                    .getBuyNumTimes() + "分钟内不能超过" + siteSetting.getBuyNumLots() + "手");
//        }
        if (num < stockDz.getStockNum().intValue()) {
            return ServerResponse.createByErrorMsg("下单失败,购买数量最小为" + stockDz.getStockNum() + "股");
@@ -2569,45 +2571,45 @@
        log.info("當前漲跌幅 = {} % , 漲停幅度 = {} %", Double.valueOf(stock_crease), ztRate);
        if (stockDz.getStockPlate() == null || StringUtils.isEmpty(stockDz.getStockPlate())) {
            int maxcrease = siteSetting.getCreaseMaxPercent().intValue();
            if (stock_crease > 0.0D &&
                    stock_crease >= maxcrease) {
                return ServerResponse.createByErrorMsg("下单失败,股票当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
            }
            if (stock_crease < 0.0D &&
                    -stock_crease > maxcrease) {
                return ServerResponse.createByErrorMsg("下单失败,股票当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
            }
        } else if ("创业".equals(stockDz.getStockPlate())) {
            int maxcrease = siteSetting.getCyCreaseMaxPercent().intValue();
            if (stock_crease > 0.0D &&
                    stock_crease >= maxcrease) {
                return ServerResponse.createByErrorMsg("下单失败,创业股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
            }
            if (stock_crease < 0.0D &&
                    -stock_crease > maxcrease) {
                return ServerResponse.createByErrorMsg("下单失败,创业股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
            }
        } else {
            int maxcrease = siteSetting.getKcCreaseMaxPercent().intValue();
            if (stock_crease > 0.0D &&
                    stock_crease >= maxcrease) {
                return ServerResponse.createByErrorMsg("下单失败,科创股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
            }
            if (stock_crease < 0.0D &&
                    -stock_crease > maxcrease) {
                return ServerResponse.createByErrorMsg("下单失败,科创股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
            }
        }
//        if (stockDz.getStockPlate() == null || StringUtils.isEmpty(stockDz.getStockPlate())) {
//
//            int maxcrease = siteSetting.getCreaseMaxPercent().intValue();
//            if (stock_crease > 0.0D &&
//                    stock_crease >= maxcrease) {
//                return ServerResponse.createByErrorMsg("下单失败,股票当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
//            }
//
//            if (stock_crease < 0.0D &&
//                    -stock_crease > maxcrease) {
//                return ServerResponse.createByErrorMsg("下单失败,股票当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
//
//            }
//
//        } else if ("创业".equals(stockDz.getStockPlate())) {
//
//            int maxcrease = siteSetting.getCyCreaseMaxPercent().intValue();
//            if (stock_crease > 0.0D &&
//                    stock_crease >= maxcrease) {
//                return ServerResponse.createByErrorMsg("下单失败,创业股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
//            }
//
//            if (stock_crease < 0.0D &&
//                    -stock_crease > maxcrease) {
//                return ServerResponse.createByErrorMsg("下单失败,创业股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
//            }
//        } else {
//
//            int maxcrease = siteSetting.getKcCreaseMaxPercent().intValue();
//            if (stock_crease > 0.0D &&
//                    stock_crease >= maxcrease) {
//                return ServerResponse.createByErrorMsg("下单失败,科创股当前涨幅:" + stock_crease + ",大于最大涨幅:" + maxcrease);
//            }
//
//            if (stock_crease < 0.0D &&
//                    -stock_crease > maxcrease) {
//                return ServerResponse.createByErrorMsg("下单失败,科创股当前跌幅:" + stock_crease + ",大于最大跌幅:" + maxcrease);
//            }
//        }
        ServerResponse serverResponse = this.iStockService.selectRateByDaysAndStockCode(stockDz.getStockCode(), siteSetting.getStockDays().intValue());
@@ -2618,10 +2620,10 @@
        log.info("股票 {} , {} 天內 漲幅 {} , 設置的漲幅 = {}", new Object[]{stockDz.getStockCode(), siteSetting
                .getStockDays(), daysRate, siteSetting.getStockRate()});
        if (daysRate != null && siteSetting.getStockRate().compareTo(daysRate) == -1) {
            return serverResponse.createByErrorMsg(siteSetting.getStockDays() + "天内涨幅超过 " + siteSetting
                    .getStockRate() + "不能交易");
        }
//        if (daysRate != null && siteSetting.getStockRate().compareTo(daysRate) == -1) {
//            return serverResponse.createByErrorMsg(siteSetting.getStockDays() + "天内涨幅超过 " + siteSetting
//                    .getStockRate() + "不能交易");
//        }
        //BigDecimal buy_amt = now_price.multiply(new BigDecimal(buyNum.intValue())).divide(new BigDecimal(lever.intValue())).setScale(2, 4);