result = approvalService.queryCombinedPageList(query);
+
+ // 查询参数(应用权限过滤后)
+ debugInfo.put("filteredQuery", query.toString());
+ debugInfo.put("resultCount", result.getTotal());
+
+ return R.ok(debugInfo);
+ }
+
/**
* 根据申请ID查询审批记录列表
*/
@@ -153,4 +190,4 @@ public class RsOverseasApprovalController extends BaseController {
return R.fail("修复失败:" + e.getMessage());
}
}
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsOverseasApprovalMonitorController.java b/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsOverseasApprovalMonitorController.java
new file mode 100644
index 00000000..e91aac59
--- /dev/null
+++ b/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsOverseasApprovalMonitorController.java
@@ -0,0 +1,129 @@
+package org.dromara.rs.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.rs.domain.vo.RsOverseasApprovalMonitorVo;
+import org.dromara.rs.domain.query.RsOverseasApprovalMonitorQuery;
+import org.dromara.rs.service.IRsOverseasApprovalMonitorService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 出国申请审批监控Controller
+ *
+ * 功能说明:
+ * 1. 实时查看出国申请的审批流程(当前在哪个审批环节、审批人是谁)
+ * 2. 查看已完成审批的出国申请
+ *
+ * @author Cursor AI
+ * @date 2025-10-21
+ */
+@Slf4j
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/rs/overseas/monitor")
+public class RsOverseasApprovalMonitorController extends BaseController {
+
+ private final IRsOverseasApprovalMonitorService monitorService;
+
+ /**
+ * 查询待审批的申请列表(出国申请进度查询)
+ *
+ * 🔴 功能说明:查询所有待审批申请(不限制申请人)
+ * - 拥有权限的用户可以查看所有待审批申请
+ * - 显示当前审批环节和审批人
+ * - 可以查看审批历史记录
+ *
+ * @param query 查询条件
+ * @return 所有待审批申请列表
+ */
+ @SaCheckPermission("rs:overseas:list")
+ @GetMapping("/pending/list")
+ public TableDataInfo pendingList(RsOverseasApprovalMonitorQuery query) {
+ log.info("查询所有待审批申请列表");
+ // 只查询待审核状态(status = 0)
+ query.setStatus("0");
+ return monitorService.queryPendingList(query);
+ }
+
+ /**
+ * 查询已完成审批的申请列表
+ *
+ * 🔴 功能说明:查询所有已完成审批申请(不限制申请人)
+ * - 拥有权限的用户可以查看所有已完成审批申请
+ * - 显示最终审批结果和完成时间
+ * - 可以查看所有审批环节的历史记录
+ *
+ * @param query 查询条件
+ * @return 所有已完成审批的申请列表
+ */
+ @SaCheckPermission("rs:overseas:list")
+ @GetMapping("/completed/list")
+ public TableDataInfo completedList(RsOverseasApprovalMonitorQuery query) {
+ log.info("查询所有已完成审批的申请列表,查询条件:{}", query);
+ // 只查询已通过状态(status = 1)
+ query.setStatus("1");
+ return monitorService.queryCompletedList(query);
+ }
+
+ /**
+ * 查询申请详情(含审批流程信息)
+ *
+ * 获取申请的完整信息,包括:
+ * - 申请基本信息
+ * - 当前审批状态
+ * - 审批历史记录
+ *
+ * @param applicationId 申请ID
+ * @return 申请详情
+ */
+ @SaCheckPermission("rs:overseas:query")
+ @GetMapping("/detail/{applicationId}")
+ public R getDetail(@PathVariable @NotNull(message = "申请ID不能为空") Long applicationId) {
+ log.info("查询申请详情,申请ID:{}", applicationId);
+ RsOverseasApprovalMonitorVo detail = monitorService.queryDetailWithApprovalInfo(applicationId);
+ return R.ok(detail);
+ }
+
+ /**
+ * 统计审批进度概况
+ *
+ * 返回审批监控的统计数据:
+ * - 待审批总数
+ * - 各审批级别的待审批数量
+ * - 已完成审批总数
+ * - 今日新增申请数
+ *
+ * @return 统计数据
+ */
+ @SaCheckPermission("rs:overseas:list")
+ @GetMapping("/statistics")
+ public R