package cn.cslg.pas.controller; import cn.cslg.pas.common.core.annotation.Permission; import cn.cslg.pas.common.core.base.Constants; import cn.cslg.pas.common.model.vo.ImportDataVo; import cn.cslg.pas.common.model.vo.ProjectImportPatentVO; import cn.cslg.pas.common.model.vo.ProjectImportVO; import cn.cslg.pas.common.model.vo.TaskParams; import cn.cslg.pas.common.utils.*; import cn.cslg.pas.service.ProjectImportService; import cn.cslg.pas.service.ProjectImportStatusService; import cn.cslg.pas.service.ProjectService; import cn.cslg.pas.service.UploadSettingTest; import cn.dev33.satoken.stp.StpUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; /** *
* 专题库导入 前端控制器 *
* * @author 王岩 * @since 2021-12-24 */ @Tag(name = "专题库导入") @RestController @RequestMapping(Constants.API_VERSION_V2 + "/project/import") @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class ProjectImportController { private final ProjectService projectService; private final CacheUtils cacheUtils; private final ProjectImportService projectImportService; private final ProjectImportStatusService projectImportStatusService; private final UploadSettingTest uploadSettingTest; private final FileUtils fileUtils; @Permission(roles = {2}) @PostMapping("patent") @Operation(summary = "为专题库导入专利") public String importPatent(MultipartFile file, String json) { ProjectImportPatentVO params = JsonUtils.jsonToPojo(json, ProjectImportPatentVO.class); if (params == null) { return Response.error("参数错误"); } TaskParams taskParams = projectService.getImportPatentTaskParams(file, params.getProjectId()); projectService.importPatent(taskParams, params); String getSettingJson = fileUtils.analysisJsonFile(); uploadSettingTest.processData(taskParams, params, getSettingJson); return Response.success(true); } @GetMapping("list") @Operation(summary = "导入任务列表") public String getPageList(ProjectImportVO params) { return Response.success(projectImportService.getPageList(params)); } @PostMapping("delete") @Operation(summary = "删除导入任务") public String delete(Integer id) { return projectImportService.delete(id); } @GetMapping("status") @Operation(summary = "获取导入进度") public String getProjectImportStatusList(Integer importId) { return Response.success(projectImportStatusService.getProjectImportByImportId(importId)); } @Permission(roles = {2}) @PostMapping @Operation(summary = "数据导入") public String importData(String url, ProjectImportVO params) { Integer userId = StpUtil.getLoginIdAsInt(); String tempId = cacheUtils.getUserImportId(userId); if (StringUtils.isNotEmpty(tempId)) { return Response.error("有导入任务在进行中"); } Integer importId = projectImportService.add(userId, url); projectService.importData(url, params, userId, importId); cacheUtils.setUserImportId(userId, importId); return Response.success(importId); } @GetMapping("ongoing") @Operation(summary = "获取用户是否存在导入中的任务") public String getProjectImportOngoing() { Integer userId = StpUtil.getLoginIdAsInt(); String tempId = cacheUtils.getUserImportId(userId); if (StringUtils.isNotEmpty(tempId)) { return Response.success(tempId); } return Response.success(false); } }