AidopActionRunLogQueryService.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using System.Text.Json;
  2. namespace Admin.NET.Plugin.AiDOP.Infrastructure;
  3. /// <summary>业务动作运行日志查询 API。</summary>
  4. [ApiDescriptionSettings(Order = 120, Description = "业务动作运行日志")]
  5. [Route("api/Aidop")]
  6. [AllowAnonymous]
  7. [NonUnify]
  8. public class AidopActionRunLogQueryService : IDynamicApiController, ITransient
  9. {
  10. private readonly ISqlSugarClient _db;
  11. private readonly UserManager _userManager;
  12. public AidopActionRunLogQueryService(ISqlSugarClient db, UserManager userManager)
  13. {
  14. _db = db;
  15. _userManager = userManager;
  16. }
  17. [DisplayName("业务动作运行日志列表")]
  18. [HttpGet("action-run-log/list")]
  19. public async Task<object> GetList([FromQuery] AidopActionRunLogListInput input)
  20. {
  21. var tenantId = _userManager.TenantId > 0
  22. ? _userManager.TenantId
  23. : AidopTenantHelper.Resolve(App.HttpContext);
  24. var page = input.Page <= 0 ? 1 : input.Page;
  25. var pageSize = input.PageSize <= 0 ? 20 : Math.Min(input.PageSize, 100);
  26. var offset = (page - 1) * pageSize;
  27. var pars = new List<SugarParameter> { new("@TenantId", tenantId) };
  28. var where = new List<string> { "tenant_id = @TenantId" };
  29. if (!string.IsNullOrWhiteSpace(input.ActionCode))
  30. {
  31. where.Add("action_code LIKE @ActionCode");
  32. pars.Add(new SugarParameter("@ActionCode", $"%{input.ActionCode.Trim()}%"));
  33. }
  34. if (!string.IsNullOrWhiteSpace(input.Status))
  35. {
  36. where.Add("status = @Status");
  37. pars.Add(new SugarParameter("@Status", input.Status.Trim().ToUpperInvariant()));
  38. }
  39. if (!string.IsNullOrWhiteSpace(input.BizNo))
  40. {
  41. where.Add("biz_no LIKE @BizNo");
  42. pars.Add(new SugarParameter("@BizNo", $"%{input.BizNo.Trim()}%"));
  43. }
  44. if (!string.IsNullOrWhiteSpace(input.StartTimeFrom))
  45. {
  46. where.Add("start_time >= @StartFrom");
  47. pars.Add(new SugarParameter("@StartFrom", input.StartTimeFrom.Trim()));
  48. }
  49. if (!string.IsNullOrWhiteSpace(input.StartTimeTo))
  50. {
  51. where.Add("start_time <= @StartTo");
  52. pars.Add(new SugarParameter("@StartTo", input.StartTimeTo.Trim()));
  53. }
  54. var whereSql = string.Join(" AND ", where);
  55. var total = await _db.Ado.GetIntAsync(
  56. $"SELECT COUNT(*) FROM aidop_action_run_log WHERE {whereSql}",
  57. pars);
  58. var list = await _db.Ado.SqlQueryAsync<AidopActionRunLogListRow>(
  59. $"""
  60. SELECT
  61. id AS Id,
  62. tenant_id AS TenantId,
  63. action_code AS ActionCode,
  64. biz_type AS BizType,
  65. biz_id AS BizId,
  66. biz_no AS BizNo,
  67. status AS Status,
  68. message AS Message,
  69. detail_json AS DetailJson,
  70. start_time AS StartTime,
  71. end_time AS EndTime,
  72. create_time AS CreateTime
  73. FROM aidop_action_run_log
  74. WHERE {whereSql}
  75. ORDER BY start_time DESC, id DESC
  76. LIMIT {pageSize} OFFSET {offset}
  77. """,
  78. pars);
  79. return new { total, page, pageSize, list };
  80. }
  81. [DisplayName("业务动作运行日志详情")]
  82. [HttpGet("action-run-log/{id:long}")]
  83. public async Task<object> GetDetail(long id)
  84. {
  85. var tenantId = _userManager.TenantId > 0
  86. ? _userManager.TenantId
  87. : AidopTenantHelper.Resolve(App.HttpContext);
  88. var row = (await _db.Ado.SqlQueryAsync<AidopActionRunLogListRow>(
  89. """
  90. SELECT
  91. id AS Id,
  92. tenant_id AS TenantId,
  93. action_code AS ActionCode,
  94. biz_type AS BizType,
  95. biz_id AS BizId,
  96. biz_no AS BizNo,
  97. status AS Status,
  98. message AS Message,
  99. detail_json AS DetailJson,
  100. start_time AS StartTime,
  101. end_time AS EndTime,
  102. create_time AS CreateTime
  103. FROM aidop_action_run_log
  104. WHERE id = @Id AND tenant_id = @TenantId
  105. LIMIT 1
  106. """,
  107. new SugarParameter("@Id", id),
  108. new SugarParameter("@TenantId", tenantId))).FirstOrDefault()
  109. ?? throw Oops.Oh("运行日志不存在");
  110. object? detail = null;
  111. if (!string.IsNullOrWhiteSpace(row.DetailJson))
  112. {
  113. try { detail = JsonSerializer.Deserialize<JsonElement>(row.DetailJson); }
  114. catch { detail = row.DetailJson; }
  115. }
  116. return new { row, detail };
  117. }
  118. [DisplayName("业务动作编码选项")]
  119. [HttpGet("action-run-log/action-codes")]
  120. public async Task<object> GetActionCodes()
  121. {
  122. var tenantId = _userManager.TenantId > 0
  123. ? _userManager.TenantId
  124. : AidopTenantHelper.Resolve(App.HttpContext);
  125. var codes = await _db.Ado.SqlQueryAsync<string>(
  126. """
  127. SELECT DISTINCT action_code
  128. FROM aidop_action_run_log
  129. WHERE tenant_id = @TenantId
  130. ORDER BY action_code
  131. """,
  132. new SugarParameter("@TenantId", tenantId));
  133. return new { list = codes };
  134. }
  135. }
  136. public class AidopActionRunLogListInput
  137. {
  138. public int Page { get; set; } = 1;
  139. public int PageSize { get; set; } = 20;
  140. public string? ActionCode { get; set; }
  141. public string? Status { get; set; }
  142. public string? BizNo { get; set; }
  143. public string? StartTimeFrom { get; set; }
  144. public string? StartTimeTo { get; set; }
  145. }
  146. public sealed class AidopActionRunLogListRow
  147. {
  148. public long Id { get; set; }
  149. public long? TenantId { get; set; }
  150. public string? ActionCode { get; set; }
  151. public string? BizType { get; set; }
  152. public long? BizId { get; set; }
  153. public string? BizNo { get; set; }
  154. public string? Status { get; set; }
  155. public string? Message { get; set; }
  156. public string? DetailJson { get; set; }
  157. public DateTime? StartTime { get; set; }
  158. public DateTime? EndTime { get; set; }
  159. public DateTime? CreateTime { get; set; }
  160. }