| src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/service/impl/UserPositionServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| src/main/java/com/nq/utils/task/stock/CarryPositionTask.java | ●●●●● patch | view | raw | blame | history | |
| src/main/resources/application.properties | ●●●●● patch | view | raw | blame | history |
src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
@@ -80,18 +80,14 @@ List<SiteNews> listData = this.siteNewsMapper.pageList(pageNum, pageSize, type, sort, keyword); GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil(); //取出每一条数据的内容,进行翻译 // if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) { // for (SiteNews siteNews : listData) { // try { // siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang"))); // siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang"))); // } catch (Exception e) { // log.error("翻译失败"); // } // } // } for (SiteNews siteNews : listData) { try { siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang"))); siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang"))); } catch (Exception e) { log.error("翻译失败"); } } PageInfo pageInfo = new PageInfo(listData); pageInfo.setList(listData); @@ -106,14 +102,12 @@ GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil(); //取出每一条数据的内容,进行翻译 if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) { try { model.setContent(googleTranslateUtil.translate(model.getContent(), request.getHeader("lang"))); model.setTitle(googleTranslateUtil.translate(model.getTitle(), request.getHeader("lang"))); model.setDescription(googleTranslateUtil.translate(model.getDescription(), request.getHeader("lang"))); } catch (Exception e) { log.error("翻译失败"); } try { model.setContent(googleTranslateUtil.translate(model.getContent(), request.getHeader("lang"))); model.setTitle(googleTranslateUtil.translate(model.getTitle(), request.getHeader("lang"))); model.setDescription(googleTranslateUtil.translate(model.getDescription(), request.getHeader("lang"))); } catch (Exception e) { log.error("翻译失败"); } return ServerResponse.createBySuccess(model); } src/main/java/com/nq/service/impl/StockSubscribeServiceImpl.java
@@ -1,9 +1,12 @@ 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.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageInfo; import com.nq.common.ServerResponse; import com.nq.dao.StockMapper; import com.nq.pojo.Stock; import com.nq.pojo.StockSubscribe; import com.nq.service.IStockSubscribeService; import com.nq.dao.StockSubscribeMapper; @@ -26,6 +29,9 @@ implements IStockSubscribeService { @Resource StockSubscribeMapper stockSubscribeMapper; @Autowired StockMapper stockMapper; /** * @Description: 用户新股列表 @@ -73,6 +79,10 @@ public ServerResponse add(StockSubscribe model, HttpServletRequest request) { //判断是否已经存在 log.info("model:{}", model); Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockSpell, model.getCode()).last(" limit 1")); if(null == stock){ return ServerResponse.createByErrorMsg("新股代码不存在"); } int resultCount = this.stockSubscribeMapper.insert(model); if (resultCount > 0) { return ServerResponse.createBySuccessMsg("添加新股成功"); src/main/java/com/nq/service/impl/UserPositionServiceImpl.java
@@ -1,5 +1,6 @@ package com.nq.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.nq.dao.*; import com.nq.enums.EConfigKey; @@ -337,7 +338,7 @@ } Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", userPosition.getStockCode())); if (!priceServices.isLimitDownSell(stock.getStockCode())) { return ServerResponse.createByErrorMsg("股票垫停,无法平仓", request); return ServerResponse.createByErrorMsg("股票跌停,无法平仓", request); } BigDecimal nowPrice = priceServices.getNowPrice(userPosition.getStockCode()); if (nowPrice.compareTo(new BigDecimal("0")) != 1) { @@ -1159,19 +1160,18 @@ return ServerResponse.createByErrorMsg("该新股不存在"); } if (userStockSubscribe.getStatus() == 4 || userStockSubscribe.getStatus() == 3 && stockSubscribe.getType() == 2) { // String sinaStock = SinaStockApi.getSinaStock(stockSubscribe.getStockType()+userStockSubscribe.getNewCode()); // String[] arrayOfString = sinaStock.split(","); // if (arrayOfString.length < 10){ // return ServerResponse.createByErrorMsg("数据源无该新股数据,转持仓失败"); // } Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockSpell, 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()); userPosition.setStockCode(userStockSubscribe.getNewCode()); userPosition.setStockCode(stock.getStockCode()); userPosition.setStockSpell(stock.getStockSpell()); userPosition.setStockName(userStockSubscribe.getNewName()); userPosition.setStockGid(stockSubscribe.getStockType() + userStockSubscribe.getNewCode()); @@ -1208,14 +1208,6 @@ log.info("用户购买印花税(配资后总资金 * 百分比) = {}", buy_yhs_amt); userPosition.setOrderSpread(buy_yhs_amt); // SiteSpread siteSpread = iSiteSpreadService.findSpreadRateOne(new BigDecimal(stock_crease), buy_amt, stock.getStockCode(), now_price); // BigDecimal spread_rate_amt = new BigDecimal("0"); // if(siteSpread != null){ // spread_rate_amt = buy_amt.multiply(siteSpread.getSpreadRate()).setScale(2, 4); // log.info("用户购买点差费(配资后总资金 * 百分比{}) = {}", siteSpread.getSpreadRate(), spread_rate_amt); // } else{ // log.info("用户购买点差费(配资后总资金 * 百分比{}) = {}", "设置异常", spread_rate_amt); // } BigDecimal spread_rate_amt = new BigDecimal(0); userPosition.setSpreadRatePrice(spread_rate_amt); @@ -1239,7 +1231,7 @@ userStockSubscribeMapper.update1(userStockSubscribe); if (userStockSubscribe.getType() == 1 || userStockSubscribe.getType() == 2) { User user = userMapper.selectById(userStockSubscribe.getUserId()); ret = userMapper.updateByPrimaryKey(user); ret = userMapper.updateById(user); } if (ret > 0) { return ServerResponse.createBySuccessMsg("新股转持仓成功"); @@ -1538,7 +1530,7 @@ //价格处理 Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", stockDz.getStockCode())); if(stockDz.getStartTime().after(new Date()) || stockDz.getEndTime().after(new Date())){ if(stockDz.getStartTime().getTime() > new Date().getTime() || stockDz.getEndTime().getTime() < new Date().getTime()){ return ServerResponse.createByErrorMsg("不在大宗交易所时间之内", request); } BigDecimal nowPrice = priceServices.getNowPrice(stockCode).multiply(stockDz.getDiscount()); @@ -1654,7 +1646,7 @@ // 检查股票是否垫停 Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("stock_code", position.getStockCode())); if (!priceServices.isLimitDownSell(stock.getStockCode())) { log.info("股票垫停,无法平仓,订单id: {}", position.getId()); log.info("股票跌停,无法平仓,订单id: {}", position.getId()); return null; } src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java
@@ -383,26 +383,20 @@ if(userStockSubscribe.getType()== 2 ){ return ServerResponse.createByErrorMsg("未中签,无需支付",request); } //判断时间 if (stockSubscribe.getListDate().getTime() <System.currentTimeMillis()) { return ServerResponse.createByErrorMsg("不在认缴时间之内",request); } if (userStockSubscribe.getStatus() == 3) { userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate()); userStockSubscribe.setStatus(4); BigDecimal bigDecimal = iUserAssetsServices. getAvailableBalance(EStockType.IN.getCode(), userStockSubscribe.getUserId()); if(bigDecimal.compareTo(userStockSubscribe.getDbMoney()) <0){ iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(), EUserAssets.BUY,userStockSubscribe.getDbMoney().negate(),"",""); userStockSubscribe.setDbMoney(userStockSubscribe.getDbMoney().subtract(iUserAssetsServices.getAvailableBalance(EStockType.IN.getCode(), userStockSubscribe.getUserId()))); }else{ iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(), EUserAssets.BUY,userStockSubscribe.getDbMoney().negate(),"",""); userStockSubscribe.setDbMoney(BigDecimal.ZERO); BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber())); if(bigDecimal.compareTo(multiply) <= 0){ return ServerResponse.createByErrorMsg("余额不足",request); } iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(), EUserAssets.BUY,multiply,"",""); userStockSubscribe.setDbMoney(BigDecimal.ZERO); userStockSubscribeMapper.update1(userStockSubscribe); return ServerResponse.createBySuccess(); } else { @@ -411,8 +405,6 @@ } else { return ServerResponse.createByErrorMsg("新股认购订单不存在!",request); } } return ServerResponse.createByErrorMsg("请先登录",request); } src/main/java/com/nq/utils/task/stock/CarryPositionTask.java
New file @@ -0,0 +1,79 @@ package com.nq.utils.task.stock; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.nq.dao.StockSubscribeMapper; import com.nq.dao.UserMapper; import com.nq.dao.UserStockSubscribeMapper; import com.nq.pojo.StockSubscribe; import com.nq.pojo.User; import com.nq.pojo.UserStockSubscribe; import com.nq.service.IUserPositionService; import lombok.extern.slf4j.Slf4j; import org.apache.http.client.utils.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.List; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; /** * @program: dabao * @description: * @create: 2024-04-01 17:32 **/ @Component @Slf4j public class CarryPositionTask { @Autowired UserStockSubscribeMapper userStockSubscribeMapper; @Autowired IUserPositionService iUserPositionService; @Autowired StockSubscribeMapper stockSubscribeMapper; @Autowired UserMapper userMapper; private final Lock ballotLock = new ReentrantLock(); @Scheduled(cron = "0 0/10 * * * ?") public void ballot() { if (ballotLock.tryLock()) { try { log.info("新股上市转持仓定时任务--------->开始"); List<StockSubscribe> stockSubscribes = stockSubscribeMapper.selectList(new LambdaQueryWrapper<StockSubscribe>() .lt(StockSubscribe::getListDate, DateUtil.date())); if (CollectionUtils.isNotEmpty(stockSubscribes)) { List<String> codeList = stockSubscribes.stream().map(StockSubscribe::getCode).collect(Collectors.toList()); List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>() .eq(UserStockSubscribe::getStatus, 4).in(UserStockSubscribe::getNewCode, codeList)); //订单转持仓 userStockSubscribes.forEach(f -> { iUserPositionService.newStockToPosition(f.getId());//转持仓 f.setStatus(5); userStockSubscribeMapper.updateById(f); }); } log.info("新股上市转持仓定时任务--------->结束"); } catch (Exception e) { log.error("新股上市转持仓定时任务发生异常", e); } finally { ballotLock.unlock(); } } else { log.info("新股上市转持仓定时任务--------->上次任务还未执行完成,本次任务忽略"); } } } src/main/resources/application.properties
@@ -17,7 +17,7 @@ ftp.user=ftp_stock ftp.pass=123456 ftp.address =/www/wwwroot/ftp_stock/ ftp.server.http.prefix=https://img.marwadi.online/ ftp.server.http.prefix=https://img.essencefunds.com/ redis1.ip=localhost redis1.port=6379