新增文献接口开发

This commit is contained in:
dww
2025-12-26 10:52:55 +08:00
commit bad425f10c
16 changed files with 917 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
package com.genepioneer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.genepioneer.mapper") // 扫描mapper包
@SpringBootApplication
public class GenepioneerApplication {
public static void main(String[] args) {
SpringApplication.run(GenepioneerApplication.class, args);
}
}

View File

@@ -0,0 +1,36 @@
package com.genepioneer.controller;
import com.genepioneer.common.Result;
import com.genepioneer.dto.LiteratureDTO;
import com.genepioneer.service.LiteratureService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/literature")
@Tag(name = "文献管理", description = "文献相关接口")
public class LiteratureController {
@Autowired
private LiteratureService literatureService;
// 接收前端POST请求保存文献数据
@PostMapping("/add")
@Operation(summary = "新增文献")
public Result<String> addLiterature(@RequestBody LiteratureDTO literatureDTO) {
try {
literatureService.addLiterature(literatureDTO);
// 成功返回200码
return Result.success("新增文献成功");
} catch (Exception e) {
e.printStackTrace();
// 失败返回500码、自定义失败提示
return Result.error("新增文献失败:" + e.getMessage());
}
}
}

View File

@@ -0,0 +1,17 @@
package com.genepioneer.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class LiteratureDTO {
// 字段名要和前端提交的参数名一致
private Integer year;
private String articleTitle;
private String journalName;
private BigDecimal impactFactor;
private String sampleSource;
private String literatureType;
private String literatureUrl;
}

View File

@@ -0,0 +1,16 @@
package com.genepioneer.entity;
import lombok.Data;
import java.math.BigDecimal;
@Data // Lombok注解自动生成get/set/toString等方法
public class LiteratureInfo {
private Long id;
private Integer year;
private String articleTitle; // 对应表中article_title
private String journalName; // 对应journal_name
private BigDecimal impactFactor; // 对应impact_factor
private String sampleSource; // 对应sample_source
private String literatureType; // 对应literature_type
private String literatureUrl; // 对应literature_url
}

View File

@@ -0,0 +1,14 @@
package com.genepioneer.mapper;
import com.genepioneer.entity.LiteratureInfo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LiteratureMapper {
// 插入文献数据字段对应entity的属性
@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);
}

View File

@@ -0,0 +1,8 @@
package com.genepioneer.service;
import com.genepioneer.dto.LiteratureDTO;
public interface LiteratureService {
// 新增文献
void addLiterature(LiteratureDTO literatureDTO);
}

View File

@@ -0,0 +1,26 @@
package com.genepioneer.service.impl;
import com.genepioneer.dto.LiteratureDTO;
import com.genepioneer.entity.LiteratureInfo;
import com.genepioneer.mapper.LiteratureMapper;
import com.genepioneer.service.LiteratureService;
import org.springframework.beans.BeanUtils; // Spring工具类用于对象属性拷贝
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LiteratureServiceImpl implements LiteratureService {
@Autowired
private LiteratureMapper literatureMapper;
@Override
public void addLiterature(LiteratureDTO literatureDTO) {
// 把DTO转成Entity
LiteratureInfo literatureInfo = new LiteratureInfo();
BeanUtils.copyProperties(literatureDTO, literatureInfo); // 自动拷贝同名属性
// 调用Mapper插入数据库
literatureMapper.insertLiterature(literatureInfo);
}
}

View File

@@ -0,0 +1,36 @@
package com.genepioneer.service.impl;
import com.genepioneer.common.exception.CustomException;
import com.genepioneer.common.utils.MD5Util;
import com.genepioneer.dto.LoginDTO;
import com.genepioneer.entity.User;
import com.genepioneer.mapper.UserMapper;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
@Service
public class UserService {
@Resource
private UserMapper userMapper;
public User login(LoginDTO loginDTO) {
// 1. 获取登录账号(用户名/手机号)和密码
String loginAccount = loginDTO.getLoginAccount();
String password = loginDTO.getPassword();
// 2. 根据用户名/手机号查询用户
User user = userMapper.selectByUsernameOrPhone(loginAccount);
if (user == null) {
throw new CustomException("用户名/手机号不存在");
}
// 3. 校验密码MD5比对
String md5Password = MD5Util.encrypt(password);
if (!md5Password.equals(user.getPassword())) {
throw new CustomException("密码错误");
}
return user;
}
}

View File

@@ -0,0 +1 @@
spring.application.name=genepioneer

View File

@@ -0,0 +1,16 @@
package com.genepioneer;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootTest
@MapperScan("com.genepioneer. mapper")
class GenepioneerApplicationTests {
@Test
void contextLoads() {
}
}

View File

@@ -0,0 +1,37 @@
package com.genepioneer.test;
import com.genepioneer.dto.LiteratureDTO;
import com.genepioneer.service.LiteratureService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.math.BigDecimal;
//@SpringBootTest
public class LiteratureApiTest {
@Autowired
private LiteratureService literatureService;
// 测试 Service 层(直接验证业务逻辑)
@Test
public void testAddLiterature() {
// 构建测试数据
LiteratureDTO dto = new LiteratureDTO();
dto.setYear(2024);
dto.setArticleTitle("基因测序技术的最新应用");
dto.setJournalName("基因组学报");
dto.setImpactFactor(new BigDecimal("12.3"));
dto.setSampleSource("小鼠组织样本");
dto.setLiteratureType("实验研究");
try {
literatureService.addLiterature(dto);
System.out.println("单元测试:新增文献成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("单元测试:新增文献失败");
}
}
}