| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- using Admin.NET.Plugin.AiDOP.Entity;
- using Admin.NET.Plugin.AiDOP.Infrastructure;
- using SqlSugar;
- namespace Admin.NET.Plugin.AiDOP.Controllers;
- /// <summary>
- /// 业务事实字典:KpiMaster 公式中 $FactCode 的引用来源。
- /// </summary>
- [ApiController]
- [Route("api/[controller]")]
- [AllowAnonymous]
- [NonUnify]
- public class AdoSmartOpsBusinessFactController : ControllerBase
- {
- private readonly ISqlSugarClient _db;
- public AdoSmartOpsBusinessFactController(ISqlSugarClient db)
- {
- _db = db;
- }
- /// <summary>分页 / 按条件查询</summary>
- [HttpGet("page")]
- public async Task<IActionResult> Page(
- [FromQuery] int page = 1,
- [FromQuery] int size = 50,
- [FromQuery] string? keyword = null,
- [FromQuery] string? moduleCode = null)
- {
- var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
- var q = _db.Queryable<AdoSmartOpsBusinessFact>().Where(x => x.TenantId == tenantId);
- if (!string.IsNullOrWhiteSpace(moduleCode))
- q = q.Where(x => x.ModuleCode == moduleCode);
- if (!string.IsNullOrWhiteSpace(keyword))
- q = q.Where(x => x.FactCode.Contains(keyword) || x.FactName.Contains(keyword));
- RefAsync<int> total = 0;
- var rows = await q.OrderBy(x => x.ModuleCode).OrderBy(x => x.SortNo).ToPageListAsync(page, size, total);
- return Ok(new { total = total.Value, rows });
- }
- /// <summary>下拉选择器精简列表(公式编辑器 $ 补全用)</summary>
- [HttpGet("picker")]
- public async Task<IActionResult> Picker([FromQuery] string? moduleCode = null)
- {
- var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
- var q = _db.Queryable<AdoSmartOpsBusinessFact>()
- .Where(x => x.TenantId == tenantId && x.IsEnabled);
- if (!string.IsNullOrWhiteSpace(moduleCode))
- q = q.Where(x => x.ModuleCode == moduleCode || x.ModuleCode == "COMMON" || x.ModuleCode == null);
- var list = await q.OrderBy(x => x.ModuleCode).OrderBy(x => x.SortNo)
- .Select(x => new { x.FactCode, x.FactName, x.ModuleCode, x.Unit, x.AggType }).ToListAsync();
- return Ok(list);
- }
- /// <summary>单条详情</summary>
- [HttpGet("{id:long}")]
- public async Task<IActionResult> Detail(long id)
- {
- var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
- var row = await _db.Queryable<AdoSmartOpsBusinessFact>()
- .Where(x => x.Id == id && x.TenantId == tenantId).FirstAsync();
- if (row == null) return NotFound(new { message = "事实不存在" });
- return Ok(row);
- }
- /// <summary>新增</summary>
- [HttpPost("add")]
- public async Task<IActionResult> Add([FromBody] AdoSmartOpsBusinessFact input)
- {
- var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
- if (string.IsNullOrWhiteSpace(input.FactCode) || string.IsNullOrWhiteSpace(input.FactName))
- return BadRequest(new { message = "FactCode / FactName 必填" });
- var dup = await _db.Queryable<AdoSmartOpsBusinessFact>()
- .Where(x => x.TenantId == tenantId && x.FactCode == input.FactCode).AnyAsync();
- if (dup) return BadRequest(new { message = $"FactCode '{input.FactCode}' 已存在" });
- input.TenantId = tenantId;
- input.CreatedAt = DateTime.Now;
- input.UpdatedAt = DateTime.Now;
- await _db.Insertable(input).ExecuteCommandAsync();
- return Ok(new { id = input.Id });
- }
- /// <summary>更新</summary>
- [HttpPost("update")]
- public async Task<IActionResult> Update([FromBody] AdoSmartOpsBusinessFact input)
- {
- var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
- var row = await _db.Queryable<AdoSmartOpsBusinessFact>()
- .Where(x => x.Id == input.Id && x.TenantId == tenantId).FirstAsync();
- if (row == null) return NotFound(new { message = "事实不存在" });
- row.FactName = input.FactName ?? row.FactName;
- row.ModuleCode = input.ModuleCode;
- row.Unit = input.Unit;
- row.AggType = input.AggType;
- row.DataSource = input.DataSource;
- row.Description = input.Description;
- row.IsEnabled = input.IsEnabled;
- row.SortNo = input.SortNo;
- row.UpdatedAt = DateTime.Now;
- await _db.Updateable(row).ExecuteCommandAsync();
- return Ok(new { ok = true });
- }
- /// <summary>删除(软删?此处做硬删;如有引用将在下批检查)</summary>
- [HttpPost("delete")]
- public async Task<IActionResult> Delete([FromBody] DeleteIn input)
- {
- var tenantId = AidopTenantHelper.GetTenantId(HttpContext);
- await _db.Deleteable<AdoSmartOpsBusinessFact>()
- .Where(x => x.Id == input.Id && x.TenantId == tenantId).ExecuteCommandAsync();
- return Ok(new { ok = true });
- }
- public sealed class DeleteIn
- {
- public long Id { get; set; }
- }
- }
|