package com.nq.service.impl; import com.github.pagehelper.PageHelper; 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.*; import com.nq.utils.http.HttpRequest; import com.nq.utils.translate.GoogleTranslateUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Base64; import java.util.Date; import java.util.List; /** * 新闻资讯 * @author lr * @date 2020/07/24 */ @Service("ISiteNewsService") public class SiteNewsServiceImpl implements ISiteNewsService { private static final Logger log = LoggerFactory.getLogger(SiteNewsServiceImpl.class); @Resource private SiteNewsMapper siteNewsMapper; @Override public int insert(SiteNews model) { int ret = 0; if (model == null) { return 0; } ret = siteNewsMapper.insert(model); return ret; } @Override public int update(SiteNews model) { int ret = siteNewsMapper.update(model); return ret>0 ? ret: 0; } /** * 新闻资讯-保存 */ @Override public ServerResponse save(SiteNews model) { int ret = 0; if(model!=null && model.getId()>0){ ret = siteNewsMapper.update(model); } else{ ret = siteNewsMapper.insert(model); } if(ret>0){ return ServerResponse.createBySuccessMsg("操作成功"); } return ServerResponse.createByErrorMsg("操作失败"); } /*新闻资讯-查询列表*/ @Override public ServerResponse getList(int pageNum, int pageSize, Integer type, String sort, String keyword, HttpServletRequest request) { PageHelper.startPage(pageNum, pageSize); List listData = this.siteNewsMapper.pageList(pageNum, pageSize, type, sort, keyword); GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil(); //取出每一条数据的内容,进行翻译 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); return ServerResponse.createBySuccess(pageInfo); } /*新闻资讯-查询详情*/ @Override public ServerResponse getDetail(int id, HttpServletRequest request) { SiteNews model = siteNewsMapper.load(id); if(model!=null){ GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil(); //取出每一条数据的内容,进行翻译 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); } return ServerResponse.createBySuccess(model); } /*新闻资讯-修改新闻浏览量*/ @Override public ServerResponse updateViews(Integer id) { return ServerResponse.createBySuccess(this.siteNewsMapper.updateViews(id)); } /*新闻资讯-top最新新闻资讯*/ @Override public ServerResponse getTopNewsList(int pageSize){ List listData = this.siteNewsMapper.getTopNewsList(pageSize); PageInfo pageInfo = new PageInfo(); pageInfo.setList(listData); return ServerResponse.createBySuccess(pageInfo); } @Override public void grabNews() { addNews(1, PropertiesUtil.getProperty("JP_HTTP_API") + "stock-markets?country_id=35&key=" + PropertiesUtil.getProperty("JP_KEY") + "&type=1"); } private void addNews(Integer type, String url) { try { String newlist = HttpRequest.doGrabGet(url); JSONArray jsonArray = JSONArray.fromObject(newlist); 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) { SiteNews siteNews = new SiteNews(); siteNews.setSourceId(newsId); siteNews.setSourceName(""); siteNews.setTitle(jsonObject.getString("title")); Long showTime = jsonObject.getLong("time"); siteNews.setShowTime(new Date(showTime * 1000)); if(jsonObject.has("img")){ 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")); siteNews.setContent(jsonObject.getString("content")); siteNews.setStatus(1); siteNews.setType(type); siteNewsMapper.insert(siteNews); } } } } catch (Exception e) { e.printStackTrace(); log.error("添加新闻出现异常: " + e.getMessage()); } } public static String convertBase64ToImage(String base64Str, String path) { byte[] imageBytes = Base64.getDecoder().decode(base64Str); try { File file = new File(path); FileOutputStream fos = new FileOutputStream(file); fos.write(imageBytes); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } return path; } }