diff --git a/gateway/src/IntegrationGateway.Adapters.Kms/KmsAdapter.cs b/gateway/src/IntegrationGateway.Adapters.Kms/KmsAdapter.cs
index 5cdf835..5a02c7a 100644
--- a/gateway/src/IntegrationGateway.Adapters.Kms/KmsAdapter.cs
+++ b/gateway/src/IntegrationGateway.Adapters.Kms/KmsAdapter.cs
@@ -168,4 +168,73 @@ public class KmsAdapter : IHasFlatDevices, IHasAlarms
// KMS 第三方接口 (2.18.7) 不提供告警结束 API
return Task.CompletedTask;
}
+
+ // ═══════════════════════════════════════════
+ // 扩展方法 — 2.18 第三方接口全覆盖
+ // ═══════════════════════════════════════════
+
+ /// 2.18.6 查询借还记录列表
+ public async Task> GetBorrowRecordsAsync(DateTime? from = null, DateTime? to = null)
+ {
+ await _limiter.WaitAsync();
+ var client = await _auth.GetAuthenticatedClientAsync();
+ var body = "{}"; // 联调时加入时间范围参数
+ var resp = await client.PostAsync("/prod-api/getRecordList",
+ new StringContent(body, Encoding.UTF8, "application/json"));
+ resp.EnsureSuccessStatusCode();
+ var data = await resp.Content.ReadFromJsonAsync()!;
+ return new PagedResult { Items = data.Rows ?? new(), Total = data.Total };
+ }
+
+ /// 2.18.5 查询授权记录列表
+ public async Task> GetPermissionListAsync(DateTime? from = null, DateTime? to = null)
+ {
+ await _limiter.WaitAsync();
+ var client = await _auth.GetAuthenticatedClientAsync();
+ var body = "{}"; // 联调时加入时间范围
+ var resp = await client.PostAsync("/prod-api/getPermissionList",
+ new StringContent(body, Encoding.UTF8, "application/json"));
+ resp.EnsureSuccessStatusCode();
+ var data = await resp.Content.ReadFromJsonAsync()!;
+ return new PagedResult { Items = data.Rows ?? new(), Total = data.Total };
+ }
+
+ /// 2.18.3 从 Vol.Pro 向 KMS 批量同步员工
+ public async Task BatchSyncStaffAsync(List staffList)
+ {
+ await _limiter.WaitAsync();
+ var client = await _auth.GetAuthenticatedClientAsync();
+ var resp = await client.PostAsJsonAsync("/prod-api/batchSyncStaff", new { staff = staffList });
+ resp.EnsureSuccessStatusCode();
+ }
+
+ /// 2.18.2 从 Vol.Pro 向 KMS 批量删除员工
+ public async Task BatchDeleteStaffAsync(List staffUuids)
+ {
+ await _limiter.WaitAsync();
+ var client = await _auth.GetAuthenticatedClientAsync();
+ var resp = await client.PostAsJsonAsync("/prod-api/batchDeleteStaff", staffUuids);
+ resp.EnsureSuccessStatusCode();
+ }
+
+ /// 2.4.3 远程授权开门
+ public async Task RemoteAuthorizeAsync(KmsRemotePermissionRequest request)
+ {
+ await _limiter.WaitAsync();
+ var client = await _auth.GetAuthenticatedClientAsync();
+ var resp = await client.PostAsJsonAsync("/prod-api/kms/permission/remote", request);
+ resp.EnsureSuccessStatusCode();
+ }
+
+ /// 2.18.8 代理 KMS 第三方登录/事件记录
+ public async Task ThirdPlatLoginAsync(string username)
+ {
+ await _limiter.WaitAsync();
+ var client = await _auth.GetAuthenticatedClientAsync();
+ var resp = await client.PostAsync($"/thirdPlatlogin?username={Uri.EscapeDataString(username)}", null);
+ if (resp.StatusCode == System.Net.HttpStatusCode.Redirect)
+ return resp.Headers.Location?.ToString();
+ resp.EnsureSuccessStatusCode();
+ return await resp.Content.ReadAsStringAsync();
+ }
}