1
zj
2025-04-23 decfc2ff7244cec365d3f32a5090edf5faeae861
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -15,7 +15,9 @@
import com.google.common.collect.Lists;
import com.nq.common.ServerResponse;
import com.nq.utils.*;
import com.nq.utils.redis.RedisKeyConstant;
import com.nq.utils.redis.RedisKeyUtil;
import com.nq.utils.redis.RedisShardedPoolUtils;
import com.nq.utils.stock.BuyAndSellUtils;
import com.nq.utils.stock.GeneratePosition;
import com.nq.utils.stock.GetStayDays;
@@ -240,6 +242,89 @@
        }
    }
    @Transactional
    public ServerResponse goldCrudeOilbuy(String name, Integer buyNum, Integer lever, BigDecimal profitTarget, BigDecimal stopTarget, HttpServletRequest request) {
        SiteProduct siteProduct = iSiteProductService.getProductSetting();
        User user = this.iUserService.getCurrentRefreshUser(request);
        synchronized (user.getId()){
            if (siteProduct.getRealNameDisplay() && user.getIsActive() != 2) {
                return ServerResponse.createByErrorMsg("订单失败,请先实名认证", request);
            }
            // 手续费率
            BigDecimal siteSettingBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.BUY_HANDLING_CHARGE.getCode()).getCValue()) ;
            if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) {
                return ServerResponse.createByErrorMsg("订单失败,帐户已被锁定", request);
            }
            String s = RedisShardedPoolUtils.get(name);
            BigDecimal price = new BigDecimal(s);
            if (price == null) {
                return ServerResponse.createByErrorMsg("下单失败,请稍候再试!", request);
            }
            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("USDT", user.getId());
            if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
                return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
            }
            if (price.compareTo(new BigDecimal("0")) == 0) {
                return ServerResponse.createByErrorMsg("报价0,请稍后再试", request);
            }
            BigDecimal buyAmt = price.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever));
            BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt);
            BigDecimal   fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
            BigDecimal availableBalance =  fundratio.multiply(userAssets.getAvailableBalance());
            if (availableBalance.compareTo(buyAmt.add(orderFree)) < 0) {
                return ServerResponse.createByErrorMsg("订单失败,配资不足", request);
            }
            UserPosition userPosition = new UserPosition();
            if (profitTarget != null && profitTarget.compareTo(new BigDecimal("0")) > 0) {
                userPosition.setProfitTargetPrice(profitTarget);
            }
            if (stopTarget != null && stopTarget.compareTo(new BigDecimal("0")) > 0) {
                userPosition.setStopTargetPrice(stopTarget);
            }
            userPosition.setPositionType(user.getAccountType());
            userPosition.setPositionSn(KeyUtils.getUniqueKey());
            userPosition.setUserId(user.getId());
            userPosition.setNickName(user.getRealName());
            userPosition.setAgentId(user.getAgentId());
            userPosition.setStockCode(name);
            userPosition.setStockName(name);
            userPosition.setStockGid(name);
            userPosition.setStockSpell(name);
            userPosition.setBuyOrderId(GeneratePosition.getPositionId());
            userPosition.setBuyOrderTime(new Date());
            userPosition.setBuyOrderPrice(price);
            userPosition.setOrderDirection("买涨");
            userPosition.setOrderNum(buyNum);
            userPosition.setIsLock(Integer.valueOf(0));
            userPosition.setOrderLever(lever);
            userPosition.setOrderTotalPrice(buyAmt);
            // 手续费
            userPosition.setOrderFee(orderFree);
            userPosition.setOrderSpread(BigDecimal.ZERO);
            userPosition.setSpreadRatePrice(BigDecimal.ZERO);
            BigDecimal profit_and_lose = new BigDecimal("0");
            userPosition.setProfitAndLose(profit_and_lose);
            userPosition.setAllProfitAndLose(profit_and_lose.add(orderFree));
            userPosition.setOrderStayDays(Integer.valueOf(0));
            userPosition.setOrderStayFee(BigDecimal.ZERO);
            userPositionMapper.insert(userPosition);
            iUserAssetsServices.availablebalanceChange("USDT", user.getId(), EUserAssets.BUY, buyAmt.negate(), "", "");
            iUserAssetsServices.availablebalanceChange("USDT", user.getId(), EUserAssets.HANDLING_CHARGE, orderFree, "", "");
            return ServerResponse.createBySuccessMsg("下单成功", request);
        }
    }
    /**
     * 用户修改止盈止损