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 { public List addArticles(List articleInfoDTOS) { List ids = new ArrayList<>(); if (articleInfoDTOS != null && !articleInfoDTOS.isEmpty()) { List titles = articleInfoDTOS.stream() .map(ArticleInfoDTO::getTitle) .collect(Collectors.toList()); List existingArticles = getExistingArticles(titles); List 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 addArticles(List articleInfoDTOS) { // // 构建要保存的 ArticleInfo 列表 // List 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 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 getExistingArticles(List titles) { // 批量查询数据库中是否已存在对应标题的文章,并返回列表 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ArticleInfo::getTitle, titles); return this.list(queryWrapper); } private boolean isArticleExists(List existingArticles, String title) { // 判断标题是否在已有文章列表中存在 return existingArticles.stream().anyMatch(article -> article.getTitle().equals(title)); } public List getArticles() { List 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); } } }