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; }