From d709183561ed6a6929eda41b93efccd8f801b340 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Fri, 6 Feb 2026 09:44:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E5=91=98?= =?UTF-8?q?=E5=B7=A5=E4=BF=A1=E6=81=AF=E5=AF=BC=E5=85=A5=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=B8=BA=E5=BC=82=E6=AD=A5=E5=B9=B6=E6=B7=BB=E5=8A=A0=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将importData接口改为异步调用,使用CompletableFuture - 添加getImportStatus接口查询导入任务状态 - 添加getImportFailures接口查询导入失败记录(支持分页) - 添加必要的导入:CompletableFuture、ImportResultVO、ImportStatusVO、ImportFailureVO - 保持现有的权限注解@PreAuthorize和日志注解@Log Co-Authored-By: Claude Sonnet 4.5 --- .../controller/CcdiEmployeeController.java | 57 ++++++++++++++++++- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java index a0873f9..fa561f9 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiEmployeeController.java @@ -6,6 +6,9 @@ import com.ruoyi.ccdi.domain.dto.CcdiEmployeeEditDTO; import com.ruoyi.ccdi.domain.dto.CcdiEmployeeQueryDTO; import com.ruoyi.ccdi.domain.excel.CcdiEmployeeExcel; import com.ruoyi.ccdi.domain.vo.CcdiEmployeeVO; +import com.ruoyi.ccdi.domain.vo.ImportFailureVO; +import com.ruoyi.ccdi.domain.vo.ImportResultVO; +import com.ruoyi.ccdi.domain.vo.ImportStatusVO; import com.ruoyi.ccdi.service.ICcdiEmployeeService; import com.ruoyi.ccdi.utils.EasyExcelUtil; import com.ruoyi.common.annotation.Log; @@ -25,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.concurrent.CompletableFuture; /** * 员工信息Controller @@ -120,7 +124,7 @@ public class CcdiEmployeeController extends BaseController { } /** - * 导入员工信息 + * 导入员工信息(异步) */ @Operation(summary = "导入员工信息") @PreAuthorize("@ss.hasPermi('ccdi:employee:import')") @@ -128,7 +132,54 @@ public class CcdiEmployeeController extends BaseController { @PostMapping("/importData") public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { List list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiEmployeeExcel.class); - String message = employeeService.importEmployee(list, updateSupport); - return success(message); + + if (list == null || list.isEmpty()) { + return error("至少需要一条数据"); + } + + // 异步导入 + CompletableFuture future = employeeService.importEmployeeAsync(list, updateSupport); + + // 立即返回taskId + ImportResultVO result = future.get(); + + return success("导入任务已提交,正在后台处理", result); + } + + /** + * 查询导入状态 + */ + @Operation(summary = "查询员工导入状态") + @PreAuthorize("@ss.hasPermi('ccdi:employee:import')") + @GetMapping("/importStatus/{taskId}") + public AjaxResult getImportStatus(@PathVariable String taskId) { + try { + ImportStatusVO status = employeeService.getImportStatus(taskId); + return success(status); + } catch (Exception e) { + return error(e.getMessage()); + } + } + + /** + * 查询导入失败记录 + */ + @Operation(summary = "查询导入失败记录") + @PreAuthorize("@ss.hasPermi('ccdi:employee:import')") + @GetMapping("/importFailures/{taskId}") + public TableDataInfo getImportFailures( + @PathVariable String taskId, + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize) { + + List failures = employeeService.getImportFailures(taskId); + + // 手动分页 + int fromIndex = (pageNum - 1) * pageSize; + int toIndex = Math.min(fromIndex + pageSize, failures.size()); + + List pageData = failures.subList(fromIndex, toIndex); + + return getDataTable(pageData, failures.size()); } }