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()); } }