1
zj
2024-10-01 bd21cffed808eff59e330de7142c59af6b48e169
1
13 files modified
219 ■■■■■ changed files
src/main/java/com/nq/controller/backend/AdminPositionController.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/pojo/UserPosition.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/IUserPositionService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/EchoServices.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/PriceServicesImpl.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/TradingHourServiceImpl.java 3 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserAssetsServices.java 32 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java 144 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/UserPointUtil.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/task/YEBTask.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/task/stock/CarryPositionTask.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/nq/vo/position/UserPositionVO.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/controller/backend/AdminPositionController.java
@@ -86,7 +86,7 @@
    @RequestMapping({"addUserPosition.do"})
    @ResponseBody
    public ServerResponse newStockToPosition(@RequestParam("id")Integer id) {
        return this.iUserPositionService.newStockToPosition(id);
        return this.iUserPositionService.newStockToPosition(id,BigDecimal.ZERO);
    }
}
src/main/java/com/nq/pojo/UserPosition.java
@@ -59,5 +59,10 @@
    private BigDecimal marginAdd;
    private Integer dzId;
    //待补资金
    private BigDecimal amountToBeCovered = BigDecimal.ZERO;
    private Integer newId;
}
src/main/java/com/nq/service/IUserPositionService.java
@@ -74,7 +74,7 @@
  ServerResponse newStockToPosition(Integer id);
  ServerResponse newStockToPosition(Integer id,BigDecimal amountToBeCovered);
  ServerResponse updateProfitTarget(String positionSn, Integer profitTarget, Integer stopTarget, HttpServletRequest request);
src/main/java/com/nq/service/impl/EchoServices.java
@@ -5,6 +5,7 @@
import com.nq.dao.EChoMapper;
import com.nq.dao.OrderEchoMapper;
import com.nq.dao.UserAssetsMapper;
import com.nq.dao.UserPositionMapper;
import com.nq.enums.EStockType;
import com.nq.enums.EUserAssets;
import com.nq.pojo.*;
@@ -39,6 +40,9 @@
    @Autowired
    private UserAssetsMapper userAssetsMapper;
    @Autowired
    private UserPositionMapper userPositionMapper;
    @Override
    public List<EChoBean> queryList() {
@@ -132,6 +136,11 @@
                    } else {
                        userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(aml));
                    }
                    UserPosition userPosition = userPositionMapper.selectOne(new LambdaQueryWrapper<UserPosition>().gt(UserPosition::getAmountToBeCovered, BigDecimal.ZERO).eq(UserPosition::getUserId,userAssets.getUserId()));
                    if(null != userPosition){
                        userPosition.setAmountToBeCovered(userAssets.getAmountToBeCovered());
                        userPositionMapper.updateById(userPosition);
                    }
                    userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(money));
                    userAssetsMapper.updateById(userAssets);
                    orderEchoBean.setState("2");
src/main/java/com/nq/service/impl/PriceServicesImpl.java
@@ -54,6 +54,9 @@
    @Override
    public BigDecimal getNowPrice(String stockCode) {
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        if(null == stock){
            return BigDecimal.ZERO;
        }
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
        if(stockSetting != null){
            Date newDate = new Date();
src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
@@ -7,9 +7,11 @@
import com.github.pagehelper.PageInfo;
import com.nq.common.ServerResponse;
import com.nq.dao.StockMapper;
import com.nq.dao.UserPositionMapper;
import com.nq.dao.UserStockSubscribeMapper;
import com.nq.pojo.Stock;
import com.nq.pojo.StockSubscribe;
import com.nq.pojo.UserPosition;
import com.nq.pojo.UserStockSubscribe;
import com.nq.service.IStockSubscribeService;
import com.nq.dao.StockSubscribeMapper;
@@ -40,6 +42,9 @@
    @Autowired
    StockMapper stockMapper;
    @Autowired
    UserPositionMapper userPositionMapper;
    /**
     * @Description: 用户新股列表
@@ -143,6 +148,11 @@
            u.setNewCode(model.getCode());
            userStockSubscribeMapper.updateById(u);
        }
        List<UserPosition> userPositions = userPositionMapper.selectList(new LambdaQueryWrapper<UserPosition>().eq(UserPosition::getNewId, stockSubscribe.getNewlistId()));
        for (UserPosition u : userPositions) {
            u.setStockCode(model.getCode());
            userPositionMapper.updateById(u);
        }
        if (resultCount > 0) {
            return ServerResponse.createBySuccessMsg("修改新股成功");
        }
src/main/java/com/nq/service/impl/TradingHourServiceImpl.java
@@ -48,8 +48,7 @@
    @Override
    public Boolean timeCheck(String  stockCode) {
        StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode));
        Stock stock =   stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code",stockCode));
        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type",stock.getStockType()));
        StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","IN"));
        if(stockSetting!= null){
            // 说明进入盘前交易或者盘后交易时间
            Date newDate = new Date();
src/main/java/com/nq/service/impl/UserAssetsServices.java
@@ -1,17 +1,13 @@
package com.nq.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.nq.common.ServerResponse;
import com.nq.dao.MoneyLogMapper;
import com.nq.dao.UserAssetsMapper;
import com.nq.dao.UserMapper;
import com.nq.dao.UserRechargeMapper;
import com.nq.dao.*;
import com.nq.enums.EStockType;
import com.nq.enums.EUserAssets;
import com.nq.pojo.MoneyLog;
import com.nq.pojo.User;
import com.nq.pojo.UserAssets;
import com.nq.pojo.UserRecharge;
import com.nq.pojo.*;
import com.nq.service.IUserAssetsServices;
import com.nq.utils.KeyUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +43,9 @@
    @Resource
    UserMapper userMapper;
    @Autowired
    UserPositionMapper userPositionMapper;
    @Override
    public UserAssets assetsByTypeAndUserId(String accetType, Integer userId) {
        if(accetType.equals("SZHB")){
@@ -69,6 +68,7 @@
    @Override
    public ServerResponse updateUserAssets(Integer id, String amt,String type) {
        UserAssets userAssets = userAssetsMapper.selectById(id);
        UserPosition userPosition = userPositionMapper.selectOne(new LambdaQueryWrapper<UserPosition>().gt(UserPosition::getAmountToBeCovered, BigDecimal.ZERO).eq(UserPosition::getUserId,userAssets.getUserId()));
        //  0 入款  1是扣钱  2 是充值  3 是提币
        BigDecimal bigAmt = new BigDecimal(amt);
        if(type.equals("0") || type.equals("1")){
@@ -82,10 +82,16 @@
                        userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(availableBalance));
                        userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(userAssets.getAmountToBeCovered()));
                        userAssets.setAmountToBeCovered(BigDecimal.ZERO);
                        if(null != userPosition){
                            userPosition.setAmountToBeCovered(userAssets.getAmountToBeCovered());
                        }
                    }else{
                        BigDecimal amountToBeCovered = userAssets.getAmountToBeCovered().subtract(bigAmt);
                        userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(bigAmt));
                        userAssets.setAmountToBeCovered(amountToBeCovered);
                        if(null != userPosition){
                            userPosition.setAmountToBeCovered(userAssets.getAmountToBeCovered());
                        }
                    }
                }else{
                    userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(bigAmt));
@@ -97,6 +103,9 @@
                    return ServerResponse.createByErrorMsg("客户账户余额不足扣款");
                }
                userAssets.setAvailableBalance(userAssets.getAvailableBalance().add(bigAmt));
            }
            if(null != userPosition){
                userPositionMapper.updateById(userPosition);
            }
            if( userAssetsMapper.updateById(userAssets)>0){
//                saveUserRecharge(userAssets.getUserId(),bigAmt);
@@ -156,7 +165,7 @@
    public Boolean availablebalanceChange(String accetType, Integer userId, EUserAssets eUserAssets, BigDecimal amount, String desc, String descType) {
        UserAssets userAssets =   assetsByTypeAndUserId(accetType,userId);
        UserPosition userPosition = userPositionMapper.selectOne(new LambdaQueryWrapper<UserPosition>().gt(UserPosition::getAmountToBeCovered, BigDecimal.ZERO).eq(UserPosition::getUserId,userAssets.getUserId()));
        String type = eUserAssets.getDesc();
        String before = userAssets.getAvailableBalance().toString();
        String accectType = userAssets.getAccectType();
@@ -215,6 +224,11 @@
           }
           extracted(userAssets);
       }
        if(null != userPosition){
            userPosition.setAmountToBeCovered(userAssets.getAmountToBeCovered());
            userPositionMapper.updateById(userPosition);
        }
        String  after =  userAssets.getAvailableBalance().toString();
        MoneyLog moneyLog = new MoneyLog();
        moneyLog.setDescs(eUserAssets.getDesc());
src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -339,6 +339,10 @@
        if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
            return ServerResponse.createByErrorMsg("请先缴清待补资金", request);
        }
        Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode()));
        if(null == stock){
            return ServerResponse.createByErrorMsg("股票不存在,平仓失败", request);
        }
        Boolean b = tradingHourService.timeCheck(userPosition.getStockCode());
        if (!b) {
            return ServerResponse.createByErrorMsg("订单失败,不在交易时间之内", request);
@@ -365,7 +369,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()));
        if (!priceServices.isLimitDownSell(stock.getStockCode())) {
            return ServerResponse.createByErrorMsg("股票跌停,无法平仓", request);
        }
@@ -1223,7 +1226,7 @@
     * @Date: 2022/10/26
     */
    @Override
    public ServerResponse newStockToPosition(Integer id) {
    public ServerResponse newStockToPosition(Integer id,BigDecimal amountToBeCovered) {
        UserStockSubscribe userStockSubscribe = userStockSubscribeMapper.load(id);
        if (userStockSubscribe == null) {
            return ServerResponse.createByErrorMsg("无该申购记录");
@@ -1232,98 +1235,103 @@
        if (userStockSubscribe == null) {
            return ServerResponse.createByErrorMsg("该新股不存在");
        }
        if (userStockSubscribe.getStatus() == 4 || userStockSubscribe.getStatus() == 3 && stockSubscribe.getType() == 2) {
            Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, userStockSubscribe.getNewCode()));
            if(null == stock){
                return ServerResponse.createByErrorMsg("该新股不存在");
            }
            UserPosition userPosition = new UserPosition();
            userPosition.setPositionType(1);
            userPosition.setPositionSn(KeyUtils.getUniqueKey());
            userPosition.setUserId(userStockSubscribe.getUserId());
            userPosition.setNickName(userStockSubscribe.getRealName());
            userPosition.setAgentId(userStockSubscribe.getAgentId());
        Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, userStockSubscribe.getNewCode()));
        UserPosition userPosition = new UserPosition();
        if(null == stock){
            userPosition.setStockCode(stockSubscribe.getCode());
            userPosition.setStockSpell(stockSubscribe.getName());
        }else{
            userPosition.setStockCode(stock.getStockCode());
            userPosition.setStockSpell(stock.getStockSpell());
            userPosition.setStockName(userStockSubscribe.getNewName());
            StringBuffer gid = new StringBuffer();
            gid.append(stockSubscribe.getStockType()!=null?stockSubscribe.getStockType():"");
            gid.append(userStockSubscribe.getNewCode()!=null?userStockSubscribe.getNewCode():"stock code invaild");
            userPosition.setStockGid(gid.toString());
            userPosition.setBuyOrderId(GeneratePosition.getPositionId());
            userPosition.setBuyOrderTime(new Date());
            userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice());
            userPosition.setOrderDirection("买涨");
        }
            userPosition.setOrderNum(userStockSubscribe.getApplyNumber()*stockSubscribe.getLever().intValue());
        userPosition.setPositionType(1);
        userPosition.setPositionSn(KeyUtils.getUniqueKey());
        userPosition.setUserId(userStockSubscribe.getUserId());
        userPosition.setNickName(userStockSubscribe.getRealName());
        userPosition.setAgentId(userStockSubscribe.getAgentId());
        userPosition.setStockName(userStockSubscribe.getNewName());
        StringBuffer gid = new StringBuffer();
        gid.append(stockSubscribe.getStockType()!=null?stockSubscribe.getStockType():"");
        gid.append(userStockSubscribe.getNewCode()!=null?userStockSubscribe.getNewCode():"stock code invaild");
        userPosition.setStockGid(gid.toString());
        userPosition.setBuyOrderId(GeneratePosition.getPositionId());
        userPosition.setBuyOrderTime(new Date());
        userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice());
        userPosition.setOrderDirection("买涨");
        userPosition.setOrderNum(userStockSubscribe.getApplyNumber());
            userPosition.setIsLock(Integer.valueOf(0));
        userPosition.setIsLock(Integer.valueOf(0));
            userPosition.setOrderLever(1);
        userPosition.setOrderLever(1);
            //递延费特殊处理
            //            BigDecimal stayFee = userPosition.getOrderTotalPrice().multiply(siteSetting.getStayFee());
            BigDecimal stayFee = new BigDecimal(0);
            BigDecimal allStayFee = stayFee.multiply(new BigDecimal(1));
            userPosition.setOrderStayFee(allStayFee);
            userPosition.setOrderStayDays(1);
            userPosition.setOrderTotalPrice(userStockSubscribe.getBond());
        //递延费特殊处理
        //            BigDecimal stayFee = userPosition.getOrderTotalPrice().multiply(siteSetting.getStayFee());
        BigDecimal stayFee = new BigDecimal(0);
        BigDecimal allStayFee = stayFee.multiply(new BigDecimal(1));
        userPosition.setOrderStayFee(allStayFee);
        userPosition.setOrderStayDays(1);
        userPosition.setOrderTotalPrice(userStockSubscribe.getBond());
            //            BigDecimal buy_fee_amt = buy_amt.multiply(siteSetting.getBuyFee()).setScale(2, 4);
            BigDecimal buy_fee_amt = new BigDecimal(0);
            log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
            userPosition.setOrderFee(buy_fee_amt);
        //            BigDecimal buy_fee_amt = buy_amt.multiply(siteSetting.getBuyFee()).setScale(2, 4);
        BigDecimal buy_fee_amt = new BigDecimal(0);
        log.info("用户购买手续费(配资后总资金 * 百分比) = {}", buy_fee_amt);
        userPosition.setOrderFee(buy_fee_amt);
            //            BigDecimal buy_yhs_amt = buy_amt.multiply(siteSetting.getDutyFee()).setScale(2, 4);
            BigDecimal buy_yhs_amt = new BigDecimal(0);
            log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
            userPosition.setOrderSpread(buy_yhs_amt);
        //            BigDecimal buy_yhs_amt = buy_amt.multiply(siteSetting.getDutyFee()).setScale(2, 4);
        BigDecimal buy_yhs_amt = new BigDecimal(0);
        log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt);
        userPosition.setOrderSpread(buy_yhs_amt);
            BigDecimal spread_rate_amt = new BigDecimal(0);
            userPosition.setSpreadRatePrice(spread_rate_amt);
        BigDecimal spread_rate_amt = new BigDecimal(0);
        userPosition.setSpreadRatePrice(spread_rate_amt);
            BigDecimal profit_and_lose = new BigDecimal("0");
            userPosition.setProfitAndLose(profit_and_lose);
        BigDecimal profit_and_lose = new BigDecimal("0");
        userPosition.setProfitAndLose(profit_and_lose);
            BigDecimal all_profit_and_lose = profit_and_lose.subtract(buy_fee_amt).subtract(buy_yhs_amt).subtract(spread_rate_amt);
            userPosition.setAllProfitAndLose(all_profit_and_lose);
        BigDecimal all_profit_and_lose = profit_and_lose.subtract(buy_fee_amt).subtract(buy_yhs_amt).subtract(spread_rate_amt);
        userPosition.setAllProfitAndLose(all_profit_and_lose);
            userPosition.setOrderStayDays(Integer.valueOf(0));
            userPosition.setOrderStayFee(new BigDecimal("0"));
            int ret = 0;
            ret = this.userPositionMapper.insert(userPosition);
            UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId(stock.getStockType(), userPosition.getUserId());
            if(null == userAssets){
                return ServerResponse.createByErrorMsg("新股转持仓失败");
            }
        userPosition.setOrderStayDays(Integer.valueOf(0));
        userPosition.setOrderStayFee(new BigDecimal("0"));
        userPosition.setAmountToBeCovered(amountToBeCovered);
        userPosition.setNewId(stockSubscribe.getNewlistId());
        int ret = 0;
        ret = this.userPositionMapper.insert(userPosition);
        UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userPosition.getUserId());
        if(null == userAssets){
            return ServerResponse.createByErrorMsg("新股转持仓失败");
        }
//            userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(userPosition.getOrderTotalPrice()));
//            userAssets.setFreezeMoney(userAssets.getFreezeMoney()!=null?userAssets.getFreezeMoney().setScale(2,BigDecimal.ROUND_UP):null);
            userAssetsMapper.updateById(userAssets);
        userAssetsMapper.updateById(userAssets);
        if (ret > 0) {
            userStockSubscribe.setStatus(5);
            userStockSubscribeMapper.update1(userStockSubscribe);
            if (userStockSubscribe.getType() == 1 || userStockSubscribe.getType() == 2) {
                User user = userMapper.selectById(userStockSubscribe.getUserId());
                ret = userMapper.updateById(user);
            }
            if (ret > 0) {
                userStockSubscribe.setStatus(5);
                userStockSubscribeMapper.update1(userStockSubscribe);
                if (userStockSubscribe.getType() == 1 || userStockSubscribe.getType() == 2) {
                    User user = userMapper.selectById(userStockSubscribe.getUserId());
                    ret = userMapper.updateById(user);
                }
                if (ret > 0) {
                    return ServerResponse.createBySuccessMsg("新股转持仓成功");
                } else {
                    return ServerResponse.createByErrorMsg("新股转持仓失败");
                }
                return ServerResponse.createBySuccessMsg("新股转持仓成功");
            } else {
                return ServerResponse.createByErrorMsg("新股转持仓失败");
            }
        } else {
            return ServerResponse.createByErrorMsg("新股转持仓失败");
        }
        return ServerResponse.createByErrorMsg("新股转持仓失败");
    }
    /**
src/main/java/com/nq/utils/UserPointUtil.java
@@ -55,6 +55,7 @@
        userPositionVO.setProfitAndLose(positionProfitVO.getProfitAndLose());
        userPositionVO.setAllProfitAndLose(positionProfitVO.getAllProfitAndLose());
        userPositionVO.setNow_price(positionProfitVO.getNowPrice());
        userPositionVO.setAmountToBeCovered(position.getAmountToBeCovered());
        return userPositionVO;
    }
src/main/java/com/nq/utils/task/YEBTask.java
@@ -25,7 +25,7 @@
    /**
     * 余额宝发放利息
     */
    @Scheduled(cron = "0 0/1 * * * ?")
//    @Scheduled(cron = "0 0/1 * * * ?")
    public void sendYEBMoney() {
        if (isSendYEBMoney.get()) { // 判断任务是否在处理中
            return;
src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
@@ -60,7 +60,7 @@
    private final AtomicBoolean ballot = new AtomicBoolean(false);
    @Scheduled(cron = "0 0/10 * * * ?")
//    @Scheduled(cron = "0 0/10 * * * ?")
    public void ballot() {
        if (ballot.get()) { // 判断任务是否在处理中
            return;
@@ -77,7 +77,7 @@
                            .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList));
                    //订单转持仓
                    userStockSubscribes.forEach(f -> {
                        ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId());//转持仓
                        ServerResponse serverResponse = iUserPositionService.newStockToPosition(f.getId(),BigDecimal.ZERO);//转持仓
                        if(serverResponse.isSuccess()){
                            f.setStatus(5);
                            userStockSubscribeMapper.updateById(f);
src/main/java/com/nq/vo/position/UserPositionVO.java
@@ -63,4 +63,6 @@
     * 盈亏百分点
     * */
    private String profitAndLoseParent;
    private BigDecimal amountToBeCovered = BigDecimal.ZERO;
}