diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6361c5b..ab8c966 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -82,7 +82,9 @@ "Bash(git reset:*)", "Skill(xlsx)", "mcp__chrome-devtools__evaluate_script", - "Skill(superpowers:using-git-worktrees)" + "Skill(superpowers:using-git-worktrees)", + "Bash(git -C D:ccdiccdi show 97bb899 --stat)", + "Bash(git show:*)" ] }, "enabledMcpjsonServers": [ diff --git a/doc/other/ScreenShot_2026-01-30_164916_062.png b/doc/other/ScreenShot_2026-01-30_164916_062.png new file mode 100644 index 0000000..acab49f Binary files /dev/null and b/doc/other/ScreenShot_2026-01-30_164916_062.png differ 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 1cc9af1..5a15f15 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 @@ -28,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 @@ -137,13 +138,10 @@ public class CcdiEmployeeController extends BaseController { } // 异步导入,立即返回taskId - String taskId = employeeService.importEmployeeAsync(list, updateSupport); + CompletableFuture future = employeeService.importEmployeeAsync(list, updateSupport); - // 构建返回结果 - ImportResultVO result = new ImportResultVO(); - result.setTaskId(taskId); - result.setStatus("PROCESSING"); - result.setMessage("导入任务已提交,正在后台处理"); + // future已经完成,get()不会阻塞 + ImportResultVO result = future.get(); return AjaxResult.success("导入任务已提交,正在后台处理", result); } diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java index 3cc362a..09cc3f5 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiEmployeeService.java @@ -11,6 +11,7 @@ import com.ruoyi.ccdi.domain.vo.ImportResultVO; import com.ruoyi.ccdi.domain.vo.ImportStatusVO; import java.util.List; +import java.util.concurrent.CompletableFuture; /** * 员工信息 服务层 @@ -91,9 +92,9 @@ public interface ICcdiEmployeeService { * * @param excelList Excel数据列表 * @param isUpdateSupport 是否更新已存在的数据 - * @return 任务ID + * @return 任务结果Future */ - String importEmployeeAsync(List excelList, Boolean isUpdateSupport); + CompletableFuture importEmployeeAsync(List excelList, Boolean isUpdateSupport); /** * 查询导入状态 diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java index 84fcbd6..bbd28ae 100644 --- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java +++ b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiEmployeeServiceImpl.java @@ -231,12 +231,12 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { * * @param excelList Excel数据列表 * @param isUpdateSupport 是否更新已存在的数据 - * @return 任务ID + * @return 任务结果Future */ @Override @Async("importExecutor") @Transactional - public String importEmployeeAsync(List excelList, Boolean isUpdateSupport) { + public CompletableFuture importEmployeeAsync(List excelList, Boolean isUpdateSupport) { String taskId = UUID.randomUUID().toString(); long startTime = System.currentTimeMillis(); @@ -272,8 +272,13 @@ public class CcdiEmployeeServiceImpl implements ICcdiEmployeeService { redisTemplate.opsForHash().putAll(statusKey, errorData); } - // 立即返回taskId,让调用者可以查询状态 - return taskId; + // 立即返回结果,不等待后台任务完成 + ImportResultVO result = new ImportResultVO(); + result.setTaskId(taskId); + result.setStatus("PROCESSING"); + result.setMessage("导入任务已提交,正在后台处理"); + + return CompletableFuture.completedFuture(result); } /**