1
zj
2024-04-24 29446dbdaea7d11eb28a4210ec69a186c54e705e
1
5 files modified
1 files added
177 ■■■■■ changed files
src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java 34 ●●●●● 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/UserPositionServiceImpl.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/service/impl/UserStockSubscribeServiceImpl.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/com/nq/utils/task/stock/CarryPositionTask.java 79 ●●●●● patch | view | raw | blame | history
src/main/resources/application.properties 2 ●●● 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