diff --git a/media/img/test.jpg b/media/img/test.jpg new file mode 100644 index 0000000..e3cd68f Binary files /dev/null and b/media/img/test.jpg differ diff --git a/media/video/testVideo.mp4 b/media/video/testVideo.mp4 new file mode 100644 index 0000000..de88df2 Binary files /dev/null and b/media/video/testVideo.mp4 differ diff --git a/src/main/java/com/bicloud/controller/LiteratureController.java b/src/main/java/com/bicloud/controller/LiteratureController.java index 73cf1d8..ffc6840 100644 --- a/src/main/java/com/bicloud/controller/LiteratureController.java +++ b/src/main/java/com/bicloud/controller/LiteratureController.java @@ -2,8 +2,10 @@ package com.bicloud.controller; import com.bicloud.common.result.PageResult; import com.bicloud.common.result.Result; +import com.bicloud.pojo.dto.LiteratureCreateDto; import com.bicloud.pojo.dto.LiteratureDto; import com.bicloud.pojo.dto.LiteraturePageQueryDto; +import com.bicloud.pojo.vo.LiteratureListVo; import com.bicloud.service.LiteratureService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -24,16 +26,9 @@ public class LiteratureController { // 新增文献数据 @PostMapping("/add") @Operation(summary = "新增文献") - public Result addLiterature(@RequestBody LiteratureDto literatureDTO) { - try { - literatureService.addLiterature(literatureDTO); - // 成功:返回200码 - return Result.success("新增文献成功"); - } catch (Exception e) { - e.printStackTrace(); - // 失败:返回500码、自定义失败提示 - return Result.error("新增文献失败:" + e.getMessage()); - } + public Result addLiterature(@RequestBody LiteratureCreateDto dto) { + literatureService.addLiterature(dto); + return Result.success("新增文献成功"); } // 删除文献 @@ -50,11 +45,10 @@ public class LiteratureController { } //分页查询 - @GetMapping("/page") @Operation(summary = "分页查询文献") - public Result> page(LiteraturePageQueryDto queryDTO) { - log.info("传入参数为:"+queryDTO); - PageResult result = literatureService.pageQuery(queryDTO); + @GetMapping("/page") + public Result> page(LiteraturePageQueryDto queryDTO) { + PageResult result = literatureService.pageQuery(queryDTO); return Result.success(result); } } diff --git a/src/main/java/com/bicloud/mapper/LiteratureMapper.java b/src/main/java/com/bicloud/mapper/LiteratureMapper.java index c4eea51..78f03cc 100644 --- a/src/main/java/com/bicloud/mapper/LiteratureMapper.java +++ b/src/main/java/com/bicloud/mapper/LiteratureMapper.java @@ -1,25 +1,20 @@ package com.bicloud.mapper; +import com.bicloud.pojo.dto.LiteratureCreateDto; import com.bicloud.pojo.dto.LiteraturePageQueryDto; -import com.bicloud.pojo.entity.LiteratureInfo; +import com.bicloud.pojo.vo.LiteratureListVo; import com.github.pagehelper.Page; -import org.apache.ibatis.annotations.Delete; -import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; - @Mapper public interface LiteratureMapper { - // 插入文献数据 - @Insert("INSERT INTO literature_info(year, article_title, journal_name, impact_factor, sample_source, literature_type,literature_url) " + - "VALUES(#{year}, #{articleTitle}, #{journalName}, #{impactFactor}, #{sampleSource}, #{literatureType},#{literatureUrl})") - int insertLiterature(LiteratureInfo literatureInfo); + // 新增:插入 biology_document_info + int insertDocument(LiteratureCreateDto dto); + // 删除:软删除 removed=1 + int softDeleteById(Long id); - // 根据文献ID删除数据 - @Delete("DELETE FROM literature_info WHERE id = #{id}") - void deleteLiteratureById(Long id); - - Page pageQuery(LiteraturePageQueryDto queryDTO); + // 分页查询:返回列表VO(PageHelper自动分页) + Page pageQuery(LiteraturePageQueryDto queryDTO); } diff --git a/src/main/java/com/bicloud/pojo/dto/LiteratureCreateDto.java b/src/main/java/com/bicloud/pojo/dto/LiteratureCreateDto.java new file mode 100644 index 0000000..1266a55 --- /dev/null +++ b/src/main/java/com/bicloud/pojo/dto/LiteratureCreateDto.java @@ -0,0 +1,31 @@ +package com.bicloud.pojo.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 新增文献(写入 biology_document_info)的入参 + */ +@Data +public class LiteratureCreateDto { + + private Integer docType; // 对应 biology_document_info.doc_type(类型ID) + private String docLabel; // 对应 doc_label(目前是varchar,先按原样存) + private String docTitle; // 标题 + private String docIcon; // 封面 + private String docDesp; // 简介/摘要 + private String docInfo; // 正文/富文本 + + private Integer docCollect; // 收藏/热度(可空) + private Integer position; // 排序权重(可空) + + private String author; // 作者 + private String publication; // 期刊 + private String impactFactor; // IF(新库是varchar) + private LocalDateTime publishTime; // 发表时间 + private String techniques; // 样品来源/技术(你页面“样品来源”先映射这里) + + private Integer status; // 状态(可空) + private Integer ifContent; // 是否有内容(可空) +} diff --git a/src/main/java/com/bicloud/pojo/dto/LiteraturePageQueryDto.java b/src/main/java/com/bicloud/pojo/dto/LiteraturePageQueryDto.java index 528a69c..125040c 100644 --- a/src/main/java/com/bicloud/pojo/dto/LiteraturePageQueryDto.java +++ b/src/main/java/com/bicloud/pojo/dto/LiteraturePageQueryDto.java @@ -4,15 +4,23 @@ import lombok.Data; import java.math.BigDecimal; +/** + * 列表页筛选 + 分页参数 + */ @Data public class LiteraturePageQueryDto { + private Integer page; private Integer pageSize; - private String articleTitle; - private Integer year; - private String journalName; - private String literatureType; - private String sampleSource; - private BigDecimal impactFactorMin; - private BigDecimal impactFactorMax; -} \ No newline at end of file + + private Integer year; // YEAR(publish_time) + private String docTitle; // 文章标题(模糊) + private String publication; // 期刊名称(模糊) + private String techniques; // 样品来源(模糊) + private Integer docType; // 文献分类(类型ID,下拉建议传这个) + + private String keyword; // 关键字搜索(可选:对标题/期刊/作者/简介做模糊) + + private BigDecimal impactFactorMin; // IF最小值 + private BigDecimal impactFactorMax; // IF最大值 +} diff --git a/src/main/java/com/bicloud/pojo/vo/LiteratureListVo.java b/src/main/java/com/bicloud/pojo/vo/LiteratureListVo.java new file mode 100644 index 0000000..8eb5133 --- /dev/null +++ b/src/main/java/com/bicloud/pojo/vo/LiteratureListVo.java @@ -0,0 +1,18 @@ +package com.bicloud.pojo.vo; + +import lombok.Data; + +/** + * 列表页返回对象 + */ +@Data +public class LiteratureListVo { + + private Long id; // 隐藏id(用于操作) + private Integer year; // 年份:由 YEAR(publish_time) 计算得到 + private String docTitle; // 文章标题 + private String publication; // 期刊 + private String impactFactor; // IF(varchar原样返回,避免精度/格式问题) + private String techniques; // 样品来源(先用 techniques) + private String typeName; // 文献分类名(来自 biology_document_type.name) +} diff --git a/src/main/java/com/bicloud/service/LiteratureService.java b/src/main/java/com/bicloud/service/LiteratureService.java index 5e0249c..4d49b12 100644 --- a/src/main/java/com/bicloud/service/LiteratureService.java +++ b/src/main/java/com/bicloud/service/LiteratureService.java @@ -1,17 +1,18 @@ package com.bicloud.service; import com.bicloud.common.result.PageResult; -import com.bicloud.pojo.dto.LiteratureDto; +import com.bicloud.pojo.dto.LiteratureCreateDto; import com.bicloud.pojo.dto.LiteraturePageQueryDto; +import com.bicloud.pojo.vo.LiteratureListVo; public interface LiteratureService { - // 新增文献 - void addLiterature(LiteratureDto literatureDTO); - // 删除文献 + // 新增文献(写入 biology_document_info) + void addLiterature(LiteratureCreateDto dto); + + // 删除文献(软删除:removed=1) void deleteLiterature(Long id); - // 文献分页查询 - PageResult pageQuery(LiteraturePageQueryDto queryDTO); - -} \ No newline at end of file + // 分页查询(返回列表VO) + PageResult pageQuery(LiteraturePageQueryDto queryDTO); +} diff --git a/src/main/java/com/bicloud/service/impl/LiteratureServiceImpl.java b/src/main/java/com/bicloud/service/impl/LiteratureServiceImpl.java index 41e014c..42c1009 100644 --- a/src/main/java/com/bicloud/service/impl/LiteratureServiceImpl.java +++ b/src/main/java/com/bicloud/service/impl/LiteratureServiceImpl.java @@ -1,71 +1,48 @@ package com.bicloud.service.impl; + +import com.bicloud.common.result.PageResult; +import com.bicloud.mapper.LiteratureMapper; +import com.bicloud.pojo.dto.LiteratureCreateDto; +import com.bicloud.pojo.dto.LiteraturePageQueryDto; +import com.bicloud.pojo.vo.LiteratureListVo; +import com.bicloud.service.LiteratureService; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; -import com.bicloud.common.result.PageResult; -import com.bicloud.pojo.dto.LiteratureDto; -import com.bicloud.pojo.dto.LiteraturePageQueryDto; -import com.bicloud.pojo.entity.LiteratureInfo; -import com.bicloud.mapper.LiteratureMapper; -import com.bicloud.service.LiteratureService; -import org.springframework.beans.BeanUtils; // Spring工具类,用于对象属性拷贝 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.stream.Collectors; - @Service public class LiteratureServiceImpl implements LiteratureService { @Autowired private LiteratureMapper literatureMapper; - - /** - * 新增文献 - * @param literatureDTO - */ @Override - public void addLiterature(LiteratureDto literatureDTO) { - // 把DTO转成Entity - LiteratureInfo literatureInfo = new LiteratureInfo(); - BeanUtils.copyProperties(literatureDTO, literatureInfo); // 自动拷贝同名属性 - - // 调用Mapper插入数据库 - literatureMapper.insertLiterature(literatureInfo); + public void addLiterature(LiteratureCreateDto dto) { + // 新库:直接写入 biology_document_info(SQL 在 XML) + literatureMapper.insertDocument(dto); } - /** - * 删除文献 - * @param id - */ @Override public void deleteLiterature(Long id) { - literatureMapper.deleteLiteratureById(id); + // 新库:软删除 removed=1 + literatureMapper.softDeleteById(id); } - /** - * 文献分页查询 - * @param queryDTO - * @return - */ @Override - public PageResult pageQuery(LiteraturePageQueryDto queryDTO) { + public PageResult pageQuery(LiteraturePageQueryDto queryDTO) { - // 1) PageHelper 开始分页 - PageHelper.startPage(queryDTO.getPage(), queryDTO.getPageSize()); + // 1) 兜底默认值,避免空指针/非法分页参数 + int page = (queryDTO.getPage() == null || queryDTO.getPage() < 1) ? 1 : queryDTO.getPage(); + int pageSize = (queryDTO.getPageSize() == null || queryDTO.getPageSize() < 1) ? 10 : queryDTO.getPageSize(); - // 2) 执行 mapper 查询(会被 PageHelper 自动加 limit) - Page page = literatureMapper.pageQuery(queryDTO); + // 2) PageHelper 开始分页 + PageHelper.startPage(page, pageSize); - // 3) 取 total + records - long total = page.getTotal(); - List records = page.getResult().stream().map(info -> { - LiteratureDto dto = new LiteratureDto(); - BeanUtils.copyProperties(info, dto); - return dto; - }).collect(Collectors.toList()); + // 3) 执行 mapper 查询(PageHelper 自动分页 + 自动 count) + Page p = literatureMapper.pageQuery(queryDTO); - return new PageResult<>(total, records); + // 4) 取 total + records + return new PageResult<>(p.getTotal(), p.getResult()); } -} \ No newline at end of file +} diff --git a/src/main/resources/mapper/LiteratureMapper.xml b/src/main/resources/mapper/LiteratureMapper.xml index 33df951..a4ddb2f 100644 --- a/src/main/resources/mapper/LiteratureMapper.xml +++ b/src/main/resources/mapper/LiteratureMapper.xml @@ -3,41 +3,93 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + SELECT + d.id, + YEAR(d.publish_time) AS year, + d.doc_title AS docTitle, + d.publication AS publication, + d.impact_factor AS impactFactor, + d.techniques AS techniques, + t.name AS typeName + FROM biology_document_info d + LEFT JOIN biology_document_type t + ON t.id = d.doc_type + WHERE d.removed = 0 - - and literature_type like concat('%', #{literatureType}, '%') - + + AND d.publish_time IS NOT NULL + AND YEAR(d.publish_time) = #{year} + - - and sample_source like concat('%', #{sampleSource}, '%') - + + AND d.doc_title LIKE CONCAT('%', #{docTitle}, '%') + + + AND d.publication LIKE CONCAT('%', #{publication}, '%') + - - and impact_factor >= #{impactFactorMin} - + + AND d.techniques LIKE CONCAT('%', #{techniques}, '%') + - - and impact_factor <= #{impactFactorMax} - - - order by id desc + + AND d.doc_type = #{docType} + + + + + AND ( + d.doc_title LIKE CONCAT('%', #{keyword}, '%') + OR d.publication LIKE CONCAT('%', #{keyword}, '%') + OR d.author LIKE CONCAT('%', #{keyword}, '%') + OR d.doc_desp LIKE CONCAT('%', #{keyword}, '%') + ) + + + + + AND d.impact_factor IS NOT NULL + AND d.impact_factor != '' + AND d.impact_factor REGEXP '^[0-9]+(\\\\.[0-9]+)?$' + AND CAST(d.impact_factor AS DECIMAL(10, 3)) >= #{impactFactorMin} + + + + + AND d.impact_factor IS NOT NULL + AND d.impact_factor != '' + AND d.impact_factor REGEXP '^[0-9]+(\\\\.[0-9]+)?$' + AND CAST(d.impact_factor AS DECIMAL(10, 3)) <= #{impactFactorMax} + + + ORDER BY d.id DESC -