| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- using System.Text.Json;
- namespace Admin.NET.Plugin.AiDOP.Infrastructure;
- /// <summary>业务动作运行日志查询 API。</summary>
- [ApiDescriptionSettings(Order = 120, Description = "业务动作运行日志")]
- [Route("api/Aidop")]
- [AllowAnonymous]
- [NonUnify]
- public class AidopActionRunLogQueryService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- private readonly UserManager _userManager;
- public AidopActionRunLogQueryService(ISqlSugarClient db, UserManager userManager)
- {
- _db = db;
- _userManager = userManager;
- }
- [DisplayName("业务动作运行日志列表")]
- [HttpGet("action-run-log/list")]
- public async Task<object> GetList([FromQuery] AidopActionRunLogListInput input)
- {
- var tenantId = _userManager.TenantId > 0
- ? _userManager.TenantId
- : AidopTenantHelper.Resolve(App.HttpContext);
- var page = input.Page <= 0 ? 1 : input.Page;
- var pageSize = input.PageSize <= 0 ? 20 : Math.Min(input.PageSize, 100);
- var offset = (page - 1) * pageSize;
- var pars = new List<SugarParameter> { new("@TenantId", tenantId) };
- var where = new List<string> { "tenant_id = @TenantId" };
- if (!string.IsNullOrWhiteSpace(input.ActionCode))
- {
- where.Add("action_code LIKE @ActionCode");
- pars.Add(new SugarParameter("@ActionCode", $"%{input.ActionCode.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.Status))
- {
- where.Add("status = @Status");
- pars.Add(new SugarParameter("@Status", input.Status.Trim().ToUpperInvariant()));
- }
- if (!string.IsNullOrWhiteSpace(input.BizNo))
- {
- where.Add("biz_no LIKE @BizNo");
- pars.Add(new SugarParameter("@BizNo", $"%{input.BizNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.StartTimeFrom))
- {
- where.Add("start_time >= @StartFrom");
- pars.Add(new SugarParameter("@StartFrom", input.StartTimeFrom.Trim()));
- }
- if (!string.IsNullOrWhiteSpace(input.StartTimeTo))
- {
- where.Add("start_time <= @StartTo");
- pars.Add(new SugarParameter("@StartTo", input.StartTimeTo.Trim()));
- }
- var whereSql = string.Join(" AND ", where);
- var total = await _db.Ado.GetIntAsync(
- $"SELECT COUNT(*) FROM aidop_action_run_log WHERE {whereSql}",
- pars);
- var list = await _db.Ado.SqlQueryAsync<AidopActionRunLogListRow>(
- $"""
- SELECT
- id AS Id,
- tenant_id AS TenantId,
- action_code AS ActionCode,
- biz_type AS BizType,
- biz_id AS BizId,
- biz_no AS BizNo,
- status AS Status,
- message AS Message,
- detail_json AS DetailJson,
- start_time AS StartTime,
- end_time AS EndTime,
- create_time AS CreateTime
- FROM aidop_action_run_log
- WHERE {whereSql}
- ORDER BY start_time DESC, id DESC
- LIMIT {pageSize} OFFSET {offset}
- """,
- pars);
- return new { total, page, pageSize, list };
- }
- [DisplayName("业务动作运行日志详情")]
- [HttpGet("action-run-log/{id:long}")]
- public async Task<object> GetDetail(long id)
- {
- var tenantId = _userManager.TenantId > 0
- ? _userManager.TenantId
- : AidopTenantHelper.Resolve(App.HttpContext);
- var row = (await _db.Ado.SqlQueryAsync<AidopActionRunLogListRow>(
- """
- SELECT
- id AS Id,
- tenant_id AS TenantId,
- action_code AS ActionCode,
- biz_type AS BizType,
- biz_id AS BizId,
- biz_no AS BizNo,
- status AS Status,
- message AS Message,
- detail_json AS DetailJson,
- start_time AS StartTime,
- end_time AS EndTime,
- create_time AS CreateTime
- FROM aidop_action_run_log
- WHERE id = @Id AND tenant_id = @TenantId
- LIMIT 1
- """,
- new SugarParameter("@Id", id),
- new SugarParameter("@TenantId", tenantId))).FirstOrDefault()
- ?? throw Oops.Oh("运行日志不存在");
- object? detail = null;
- if (!string.IsNullOrWhiteSpace(row.DetailJson))
- {
- try { detail = JsonSerializer.Deserialize<JsonElement>(row.DetailJson); }
- catch { detail = row.DetailJson; }
- }
- return new { row, detail };
- }
- [DisplayName("业务动作编码选项")]
- [HttpGet("action-run-log/action-codes")]
- public async Task<object> GetActionCodes()
- {
- var tenantId = _userManager.TenantId > 0
- ? _userManager.TenantId
- : AidopTenantHelper.Resolve(App.HttpContext);
- var codes = await _db.Ado.SqlQueryAsync<string>(
- """
- SELECT DISTINCT action_code
- FROM aidop_action_run_log
- WHERE tenant_id = @TenantId
- ORDER BY action_code
- """,
- new SugarParameter("@TenantId", tenantId));
- return new { list = codes };
- }
- }
- public class AidopActionRunLogListInput
- {
- public int Page { get; set; } = 1;
- public int PageSize { get; set; } = 20;
- public string? ActionCode { get; set; }
- public string? Status { get; set; }
- public string? BizNo { get; set; }
- public string? StartTimeFrom { get; set; }
- public string? StartTimeTo { get; set; }
- }
- public sealed class AidopActionRunLogListRow
- {
- public long Id { get; set; }
- public long? TenantId { get; set; }
- public string? ActionCode { get; set; }
- public string? BizType { get; set; }
- public long? BizId { get; set; }
- public string? BizNo { get; set; }
- public string? Status { get; set; }
- public string? Message { get; set; }
- public string? DetailJson { get; set; }
- public DateTime? StartTime { get; set; }
- public DateTime? EndTime { get; set; }
- public DateTime? CreateTime { get; set; }
- }
|