224 lines
7.9 KiB
Java
224 lines
7.9 KiB
Java
package com.ipsen.medical.controller;
|
|
|
|
import com.ipsen.medical.dto.ApiResponse;
|
|
import com.ipsen.medical.dto.ClinicalTrialDTO;
|
|
import com.ipsen.medical.dto.DataSourceSelectionDTO;
|
|
import com.ipsen.medical.dto.InquiryRequestDTO;
|
|
import com.ipsen.medical.dto.KeywordConfirmationDTO;
|
|
import com.ipsen.medical.service.AutoSearchService;
|
|
import com.ipsen.medical.service.ClinicalTrialsService;
|
|
import com.ipsen.medical.service.InquiryService;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 查询请求控制器
|
|
*/
|
|
@RestController
|
|
@RequestMapping("/inquiries")
|
|
@RequiredArgsConstructor
|
|
@CrossOrigin(origins = "*")
|
|
public class InquiryController {
|
|
|
|
private final InquiryService inquiryService;
|
|
private final ClinicalTrialsService clinicalTrialsService;
|
|
private final AutoSearchService autoSearchService;
|
|
|
|
/**
|
|
* 上传查询表格
|
|
*/
|
|
@PostMapping("/upload")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> uploadInquiry(
|
|
@RequestParam("file") MultipartFile file) {
|
|
InquiryRequestDTO result = inquiryService.uploadInquiry(file);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 创建查询请求
|
|
*/
|
|
@PostMapping
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> createInquiry(
|
|
@RequestBody InquiryRequestDTO inquiryRequestDTO) {
|
|
InquiryRequestDTO result = inquiryService.createInquiry(inquiryRequestDTO);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 获取查询请求详情
|
|
*/
|
|
@GetMapping("/{id}")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> getInquiry(@PathVariable Long id) {
|
|
InquiryRequestDTO result = inquiryService.getInquiry(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 获取所有查询请求
|
|
*/
|
|
@GetMapping
|
|
public ResponseEntity<ApiResponse<List<InquiryRequestDTO>>> getAllInquiries(
|
|
@RequestParam(required = false) String status) {
|
|
List<InquiryRequestDTO> results = inquiryService.getAllInquiries(status);
|
|
return ResponseEntity.ok(ApiResponse.success(results));
|
|
}
|
|
|
|
/**
|
|
* 提取关键词
|
|
*/
|
|
@PostMapping("/{id}/extract-keywords")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> extractKeywords(@PathVariable Long id) {
|
|
InquiryRequestDTO result = inquiryService.extractKeywords(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 确认和更新关键词
|
|
*/
|
|
@PostMapping("/{id}/confirm-keywords")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> confirmKeywords(
|
|
@PathVariable Long id,
|
|
@RequestBody KeywordConfirmationDTO keywordDTO) {
|
|
InquiryRequestDTO result = inquiryService.confirmKeywords(id, keywordDTO);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 选择数据源
|
|
*/
|
|
@PostMapping("/{id}/select-data-sources")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> selectDataSources(
|
|
@PathVariable Long id,
|
|
@RequestBody DataSourceSelectionDTO dataSourceDTO) {
|
|
InquiryRequestDTO result = inquiryService.selectDataSources(id, dataSourceDTO);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 执行信息检索
|
|
*/
|
|
@PostMapping("/{id}/search")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> performSearch(@PathVariable Long id) {
|
|
InquiryRequestDTO result = inquiryService.performSearch(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 生成回复内容
|
|
*/
|
|
@PostMapping("/{id}/generate-response")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> generateResponse(@PathVariable Long id) {
|
|
InquiryRequestDTO result = inquiryService.generateResponse(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 审核回复
|
|
*/
|
|
@PostMapping("/{id}/review")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> reviewResponse(
|
|
@PathVariable Long id,
|
|
@RequestParam Boolean approved,
|
|
@RequestParam(required = false) String comments) {
|
|
InquiryRequestDTO result = inquiryService.reviewResponse(id, approved, comments);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 完成查询请求
|
|
*/
|
|
@PostMapping("/{id}/complete")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> completeInquiry(@PathVariable Long id) {
|
|
InquiryRequestDTO result = inquiryService.completeInquiry(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 搜索临床试验
|
|
*/
|
|
@PostMapping("/{id}/clinical-trials/search")
|
|
public ResponseEntity<ApiResponse<List<ClinicalTrialDTO>>> searchClinicalTrials(
|
|
@PathVariable Long id,
|
|
@RequestParam String keyword) {
|
|
List<ClinicalTrialDTO> results = clinicalTrialsService.searchAndSaveForInquiry(id, keyword);
|
|
return ResponseEntity.ok(ApiResponse.success(results));
|
|
}
|
|
|
|
/**
|
|
* 获取查询请求的临床试验列表
|
|
*/
|
|
@GetMapping("/{id}/clinical-trials")
|
|
public ResponseEntity<ApiResponse<List<ClinicalTrialDTO>>> getClinicalTrials(@PathVariable Long id) {
|
|
List<ClinicalTrialDTO> results = clinicalTrialsService.getClinicalTrialsByInquiry(id);
|
|
return ResponseEntity.ok(ApiResponse.success(results));
|
|
}
|
|
|
|
/**
|
|
* 导出临床试验为CSV
|
|
*/
|
|
@GetMapping("/{id}/clinical-trials/export")
|
|
public ResponseEntity<byte[]> exportClinicalTrialsToCsv(@PathVariable Long id) {
|
|
byte[] csvData = clinicalTrialsService.exportToCsv(id);
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
headers.setContentType(MediaType.parseMediaType("text/csv"));
|
|
headers.setContentDispositionFormData("attachment", "clinical_trials_" + id + ".csv");
|
|
|
|
return ResponseEntity.ok()
|
|
.headers(headers)
|
|
.body(csvData);
|
|
}
|
|
|
|
/**
|
|
* 删除查询请求的临床试验数据
|
|
*/
|
|
@DeleteMapping("/{id}/clinical-trials")
|
|
public ResponseEntity<ApiResponse<Void>> deleteClinicalTrials(@PathVariable Long id) {
|
|
clinicalTrialsService.deleteClinicalTrials(id);
|
|
return ResponseEntity.ok(ApiResponse.success(null));
|
|
}
|
|
|
|
/**
|
|
* 基于AI识别的关键词执行自动检索
|
|
* 包括:临床试验、文献数据库等
|
|
*/
|
|
@PostMapping("/{id}/auto-search")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> performAutoSearch(@PathVariable Long id) {
|
|
InquiryRequestDTO result = autoSearchService.performAutoSearch(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 执行完整的AI工作流
|
|
* 1. 提取关键词
|
|
* 2. 自动检索(临床试验、知识库)
|
|
* 3. 生成回复
|
|
*/
|
|
@PostMapping("/{id}/full-workflow")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> executeFullWorkflow(@PathVariable Long id) {
|
|
InquiryRequestDTO result = autoSearchService.executeFullWorkflow(id);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
|
|
/**
|
|
* 根据选中的检索结果生成下载任务
|
|
*/
|
|
@PostMapping("/{id}/downloads")
|
|
public ResponseEntity<ApiResponse<InquiryRequestDTO>> generateDownloadTasks(
|
|
@PathVariable Long id,
|
|
@RequestBody List<Long> searchResultItemIds) {
|
|
InquiryRequestDTO result = inquiryService.generateDownloadTasks(id, searchResultItemIds);
|
|
return ResponseEntity.ok(ApiResponse.success(result));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|