zyy
2025-07-21 f25b39e0d5fcae415a8824fc03d42fe681e96bf8
src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
@@ -4,7 +4,6 @@
import com.github.pagehelper.PageInfo;
import com.nq.common.ServerResponse;
import com.nq.dao.SiteNewsMapper;
import com.nq.enums.EStockType;
import com.nq.pojo.SiteNews;
import com.nq.service.ISiteNewsService;
import com.nq.utils.*;
@@ -24,6 +23,8 @@
import java.util.Base64;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * 新闻资讯
@@ -80,18 +81,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 +103,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);
        }
@@ -136,39 +131,44 @@
        return ServerResponse.createBySuccess(pageInfo);
    }
    /*新闻资讯-抓取*/
    @Override
    public int grabNews() {
        int ret = 0;
         addNews(1, EStockType.HG.getStockUrl() +"stock-markets?key="+ EStockType.HG.getStockKey() +"&type=1");
//         addNews(2, EStockType.US.getStockUrl() +"stock-markets?key="+ EStockType.US.getStockKey() +"&type=4");
//         addNews(3, EStockType.TH.getStockUrl() +"stock-markets?key="+ EStockType.TH.getStockKey() +"&type=4");
//         addNews(4, EStockType.MAS.getStockUrl() +"stock-markets?key="+ EStockType.MAS.getStockKey() +"&type=4");
        return ret;
    public void grabNews() {
        // 创建固定大小的线程池,根据需求调整线程数量
        ExecutorService executor = Executors.newFixedThreadPool(2);
        try {
            // 提交美国新闻抓取任务
            executor.submit(() ->
                    addNews(1, PropertiesUtil.getProperty("US_HTTP_API") + "stock-markets?key=" + PropertiesUtil.getProperty("US_KEY") + "&type=1")
            );
            // 提交墨西哥新闻抓取任务
            executor.submit(() ->
                    addNews(1, PropertiesUtil.getProperty("MX_HTTP_API") + "stock-markets?key=" + PropertiesUtil.getProperty("MX_KEY") + "&type=1")
            );
        } finally {
            // 关闭线程池
            executor.shutdown();
        }
    }
    /*
    *抓取新闻专用
    * type:新闻类型:1、财经要闻,2、经济数据,3、全球股市,4、7*24全球,5、商品资讯,6、上市公司,7、全球央行
    * */
    private int addNews(Integer type, String url){
        int k = 0;
    private void addNews(Integer type, String url) {
        try {
            String newlist = HttpRequest.doGrabGet(url);
            JSONArray jsonArray = JSONArray.fromObject(newlist);
            if(jsonArray.size()>0){
            if (jsonArray.size() > 0) {
                for (int i = 0; i < jsonArray.size(); i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    String newsId = jsonObject.getString("id");
                    if(siteNewsMapper.getNewsBySourceIdCount(newsId) == 0){
                    if (siteNewsMapper.getNewsBySourceIdCount(newsId) == 0) {
                        SiteNews siteNews = new SiteNews();
                        siteNews.setSourceId(newsId);
                        siteNews.setSourceName("");
                        siteNews.setTitle(jsonObject.getString("title"));
                        Long showTime = jsonObject.getLong("time");
                        siteNews.setShowTime(new Date(showTime));
                        //Long showTime = jsonObject.getLong("time");
                        long showTime = jsonObject.optLong("time", System.currentTimeMillis() / 1000); // 默认值,表示未找到或转换失败
                        siteNews.setShowTime(new Date(showTime * 1000));
                        if(jsonObject.has("img")){
                            String imgBase = convertBase64ToImage(jsonObject.getString("img"),"/www/wwwroot/dabao/"+newsId+".jpg");
                            convertBase64ToImage(jsonObject.getString("img"),PropertiesUtil.getProperty("ftp.address")+newsId+".jpg");
                            siteNews.setImgurl(PropertiesUtil.getProperty("ftp.server.http.prefix")+newsId+".jpg");
                        }
                        siteNews.setDescription(jsonObject.getString("content"));
@@ -181,10 +181,11 @@
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("添加新闻出现异常: " + e.getMessage());
        }
        return k;
    }
    public static String  convertBase64ToImage(String base64Str, String path) {
        byte[] imageBytes = Base64.getDecoder().decode(base64Str);
        try {