123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- package com.example.mos.service;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.example.mos.common.model.dto.ArticleInfoDTO;
- import com.example.mos.common.model.vo.ArticleDataVO;
- import com.example.mos.common.utils.DBUtil;
- import com.example.mos.domain.ArticleInfo;
- import com.example.mos.mapper.ArticleInfoMapper;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.BeanUtils;
- import org.springframework.stereotype.Service;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * @Author xiexiang
- * @Date 2024/6/4
- */
- @Slf4j
- @Service
- @RequiredArgsConstructor
- public class ArticleInfoService extends ServiceImpl<ArticleInfoMapper, ArticleInfo> {
- public List<Integer> addArticles(List<ArticleInfoDTO> articleInfoDTOS) {
- List<Integer> ids = new ArrayList<>();
- if (articleInfoDTOS != null && !articleInfoDTOS.isEmpty()) {
- List<String> titles = articleInfoDTOS.stream()
- .map(ArticleInfoDTO::getTitle)
- .collect(Collectors.toList());
- List<ArticleInfo> existingArticles = getExistingArticles(titles);
- List<ArticleInfo> articleInfos = articleInfoDTOS.stream()
- .filter(dto -> !isArticleExists(existingArticles, dto.getTitle()))
- .map(articleInfoDTO -> {
- ArticleInfo articleInfo = new ArticleInfo();
- BeanUtils.copyProperties(articleInfoDTO, articleInfo);
- return articleInfo;
- })
- .collect(Collectors.toList());
- if (!articleInfos.isEmpty()) {
- this.saveBatch(articleInfos);
- ids = articleInfos.stream().map(ArticleInfo::getId).collect(Collectors.toList());
- }
- }
- return ids;
- }
- // public List<Integer> addArticles(List<ArticleInfoDTO> articleInfoDTOS) {
- // // 构建要保存的 ArticleInfo 列表
- // List<ArticleInfo> articleInfos = articleInfoDTOS.stream()
- // .filter(articleInfoDTO -> !isArticleExists(articleInfoDTO.getTitle()))
- // .map(articleInfoDTO -> {
- // ArticleInfo articleInfo = new ArticleInfo();
- // BeanUtils.copyProperties(articleInfoDTO, articleInfo);
- // return articleInfo;
- // })
- // .collect(Collectors.toList());
- //
- // if (!articleInfos.isEmpty()) {
- // this.saveBatch(articleInfos); // 批量保存 ArticleInfo 实体
- // }
- //
- // return articleInfos.stream().map(ArticleInfo::getId).collect(Collectors.toList());
- // }
- // private boolean isArticleExists(String title) {
- // // 添加查询数据库检查是否已存在相同数据的逻辑,返回 true 表示已存在,false 表示不存在
- // // 这里假设是 ArticleService 中的一个方法来检查文章是否已经存在
- // if (title == null || title.isEmpty()) {
- // // 可以抛出异常或者返回 false,视情况而定
- // return false;
- // }
- // try {
- // LambdaQueryWrapper<ArticleInfo> queryWrapper = new LambdaQueryWrapper<>();
- // queryWrapper.eq(ArticleInfo::getTitle, title);
- // // 使用 selectOne 进行查询,只关心是否存在记录
- // ArticleInfo article = this.getOne(queryWrapper, false);
- // return article != null;
- // } catch (Exception e) {
- // // 日志记录或其他处理方式
- // e.printStackTrace();
- // return false;
- // }
- // }
- private List<ArticleInfo> getExistingArticles(List<String> titles) {
- // 批量查询数据库中是否已存在对应标题的文章,并返回列表
- LambdaQueryWrapper<ArticleInfo> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.in(ArticleInfo::getTitle, titles);
- return this.list(queryWrapper);
- }
- private boolean isArticleExists(List<ArticleInfo> existingArticles, String title) {
- // 判断标题是否在已有文章列表中存在
- return existingArticles.stream().anyMatch(article -> article.getTitle().equals(title));
- }
- public List<ArticleDataVO> getArticles() {
- List<ArticleDataVO> articleDataVOS = new ArrayList<>();
- String sql = "SELECT ai.id, ai.title, ai.link, ai.source, ai.fake_id, ai.publish_time, ai.create_time, ai.abs, ai.classify, CONCAT(IFNULL(a.account_name, ''), IFNULL(b.web_name, '')) AS fakeName FROM article_info ai LEFT JOIN wechat_account_info a ON ai.fake_id = a.fake_id LEFT JOIN web_info b ON ai.fake_id = b.id";
- Connection conn = null;
- PreparedStatement ps = null;
- try {
- conn = DBUtil.getConn();
- ps = conn.prepareStatement(sql);
- ResultSet resultSet = ps.executeQuery();
- while (resultSet.next()) {
- ArticleDataVO articleDataVO = new ArticleDataVO();
- articleDataVO.setId(resultSet.getInt("id"));
- articleDataVO.setTitle(resultSet.getString("title"));
- articleDataVO.setLink(resultSet.getString("link"));
- articleDataVO.setSource(resultSet.getInt("source"));
- articleDataVO.setCameFrom(resultSet.getString("fakeName"));
- articleDataVO.setTime(resultSet.getDate("publish_time"));
- articleDataVO.setCreateTime(resultSet.getDate("create_time"));
- articleDataVO.setAbs(resultSet.getString("abs"));
- articleDataVO.setClassify(resultSet.getInt("classify"));
- articleDataVOS.add(articleDataVO);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DBUtil.closeConn(conn);
- DBUtil.closePs(ps);
- }
- return articleDataVOS;
- }
- //更新
- public void updateInfo(ArticleDataVO articleDataVO) {
- Connection conn = null;
- PreparedStatement ps = null;
- try {
- conn = DBUtil.getConn();
- // 更新 article_info 表中对应 ID 的文章信息
- String sql = "UPDATE article_info SET abs=? , classify=? WHERE id=?";
- ps = conn.prepareStatement(sql);
- // 设置要更新的字段值
- ps.setString(1, articleDataVO.getAbs());
- ps.setInt(2, articleDataVO.getClassify());
- ps.setInt(3, articleDataVO.getId());
- // 执行更新
- ps.executeUpdate();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- DBUtil.closeConn(conn);
- DBUtil.closePs(ps);
- }
- }
- }
|