AdoSmartOpsBusinessFactController.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using Admin.NET.Plugin.AiDOP.Entity;
  2. using Admin.NET.Plugin.AiDOP.Infrastructure;
  3. using SqlSugar;
  4. namespace Admin.NET.Plugin.AiDOP.Controllers;
  5. /// <summary>
  6. /// 业务事实字典:KpiMaster 公式中 $FactCode 的引用来源。
  7. /// </summary>
  8. [ApiController]
  9. [Route("api/[controller]")]
  10. [AllowAnonymous]
  11. [NonUnify]
  12. public class AdoSmartOpsBusinessFactController : ControllerBase
  13. {
  14. private readonly ISqlSugarClient _db;
  15. public AdoSmartOpsBusinessFactController(ISqlSugarClient db)
  16. {
  17. _db = db;
  18. }
  19. /// <summary>分页 / 按条件查询</summary>
  20. [HttpGet("page")]
  21. public async Task<IActionResult> Page(
  22. [FromQuery] int page = 1,
  23. [FromQuery] int size = 50,
  24. [FromQuery] string? keyword = null,
  25. [FromQuery] string? moduleCode = null)
  26. {
  27. var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
  28. var q = _db.Queryable<AdoSmartOpsBusinessFact>().Where(x => x.TenantId == tenantId);
  29. if (!string.IsNullOrWhiteSpace(moduleCode))
  30. q = q.Where(x => x.ModuleCode == moduleCode);
  31. if (!string.IsNullOrWhiteSpace(keyword))
  32. q = q.Where(x => x.FactCode.Contains(keyword) || x.FactName.Contains(keyword));
  33. RefAsync<int> total = 0;
  34. var rows = await q.OrderBy(x => x.ModuleCode).OrderBy(x => x.SortNo).ToPageListAsync(page, size, total);
  35. return Ok(new { total = total.Value, rows });
  36. }
  37. /// <summary>下拉选择器精简列表(公式编辑器 $ 补全用)</summary>
  38. [HttpGet("picker")]
  39. public async Task<IActionResult> Picker([FromQuery] string? moduleCode = null)
  40. {
  41. var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
  42. var q = _db.Queryable<AdoSmartOpsBusinessFact>()
  43. .Where(x => x.TenantId == tenantId && x.IsEnabled);
  44. if (!string.IsNullOrWhiteSpace(moduleCode))
  45. q = q.Where(x => x.ModuleCode == moduleCode || x.ModuleCode == "COMMON" || x.ModuleCode == null);
  46. var list = await q.OrderBy(x => x.ModuleCode).OrderBy(x => x.SortNo)
  47. .Select(x => new { x.FactCode, x.FactName, x.ModuleCode, x.Unit, x.AggType }).ToListAsync();
  48. return Ok(list);
  49. }
  50. /// <summary>单条详情</summary>
  51. [HttpGet("{id:long}")]
  52. public async Task<IActionResult> Detail(long id)
  53. {
  54. var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
  55. var row = await _db.Queryable<AdoSmartOpsBusinessFact>()
  56. .Where(x => x.Id == id && x.TenantId == tenantId).FirstAsync();
  57. if (row == null) return NotFound(new { message = "事实不存在" });
  58. return Ok(row);
  59. }
  60. /// <summary>新增</summary>
  61. [HttpPost("add")]
  62. public async Task<IActionResult> Add([FromBody] AdoSmartOpsBusinessFact input)
  63. {
  64. var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
  65. if (string.IsNullOrWhiteSpace(input.FactCode) || string.IsNullOrWhiteSpace(input.FactName))
  66. return BadRequest(new { message = "FactCode / FactName 必填" });
  67. var dup = await _db.Queryable<AdoSmartOpsBusinessFact>()
  68. .Where(x => x.TenantId == tenantId && x.FactCode == input.FactCode).AnyAsync();
  69. if (dup) return BadRequest(new { message = $"FactCode '{input.FactCode}' 已存在" });
  70. input.TenantId = tenantId;
  71. input.CreatedAt = DateTime.Now;
  72. input.UpdatedAt = DateTime.Now;
  73. await _db.Insertable(input).ExecuteCommandAsync();
  74. return Ok(new { id = input.Id });
  75. }
  76. /// <summary>更新</summary>
  77. [HttpPost("update")]
  78. public async Task<IActionResult> Update([FromBody] AdoSmartOpsBusinessFact input)
  79. {
  80. var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
  81. var row = await _db.Queryable<AdoSmartOpsBusinessFact>()
  82. .Where(x => x.Id == input.Id && x.TenantId == tenantId).FirstAsync();
  83. if (row == null) return NotFound(new { message = "事实不存在" });
  84. row.FactName = input.FactName ?? row.FactName;
  85. row.ModuleCode = input.ModuleCode;
  86. row.Unit = input.Unit;
  87. row.AggType = input.AggType;
  88. row.DataSource = input.DataSource;
  89. row.Description = input.Description;
  90. row.IsEnabled = input.IsEnabled;
  91. row.SortNo = input.SortNo;
  92. row.UpdatedAt = DateTime.Now;
  93. await _db.Updateable(row).ExecuteCommandAsync();
  94. return Ok(new { ok = true });
  95. }
  96. /// <summary>删除(软删?此处做硬删;如有引用将在下批检查)</summary>
  97. [HttpPost("delete")]
  98. public async Task<IActionResult> Delete([FromBody] DeleteIn input)
  99. {
  100. var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
  101. await _db.Deleteable<AdoSmartOpsBusinessFact>()
  102. .Where(x => x.Id == input.Id && x.TenantId == tenantId).ExecuteCommandAsync();
  103. return Ok(new { ok = true });
  104. }
  105. public sealed class DeleteIn
  106. {
  107. public long Id { get; set; }
  108. }
  109. }