| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- namespace Admin.NET.Plugin.AiDOP.Universal;
- /// <summary>
- /// 通用客户选择服务 🏢
- /// 路由前缀:/api/Universal
- /// </summary>
- [ApiDescriptionSettings(Order = 280, Description = "通用-客户选择")]
- [Route("api/Universal")]
- [AllowAnonymous]
- [NonUnify]
- public class UniversalCustomerService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- public UniversalCustomerService(ISqlSugarClient db)
- {
- _db = db;
- }
- // 允许排序的字段白名单(key=前端 prop,value=数据库列名)
- private static readonly Dictionary<string, string> _sortFieldMap =
- new(StringComparer.OrdinalIgnoreCase)
- {
- ["cust"] = "Cust",
- ["sortname"] = "SortName",
- };
- /// <summary>获取客户选择分页列表 🏢</summary>
- [DisplayName("获取客户选择列表")]
- [HttpGet("customer/page")]
- public async Task<object> GetCustomerPage([FromQuery] CustomerPageInput input)
- {
- var conditions = new List<string>();
- var pars = new List<SugarParameter>();
- if (!string.IsNullOrWhiteSpace(input.CustNo))
- {
- conditions.Add("Cust LIKE @CustNo");
- pars.Add(new SugarParameter("@CustNo", $"%{input.CustNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.SortName))
- {
- conditions.Add("SortName LIKE @SortName");
- pars.Add(new SugarParameter("@SortName", $"%{input.SortName.Trim()}%"));
- }
- var where = conditions.Count > 0 ? string.Join(" AND ", conditions) : "1=1";
- var dbSortField = _sortFieldMap.TryGetValue(input.SortField ?? "", out var mapped) ? mapped : "Cust";
- var sortOrder = string.Equals(input.SortOrder, "desc", StringComparison.OrdinalIgnoreCase) ? "DESC" : "ASC";
- var offset = (input.Page - 1) * input.PageSize;
- var total = await _db.Ado.GetIntAsync(
- $"SELECT COUNT(*) FROM CustMaster WHERE {where}", pars);
- var list = await _db.Ado.SqlQueryAsync<CustomerRow>(
- $"SELECT Cust, SortName, recid AS Id FROM CustMaster WHERE {where} ORDER BY {dbSortField} {sortOrder} LIMIT {input.PageSize} OFFSET {offset}",
- pars);
- return new { total, page = input.Page, pageSize = input.PageSize, list };
- }
- // ──────────────── 内部结果映射 ────────────────
- private sealed class CustomerRow
- {
- public string? Cust { get; set; }
- public string? SortName { get; set; }
- public string? Id { get; set; }
- }
- }
- /// <summary>客户选择分页查询入参</summary>
- public class CustomerPageInput
- {
- public int Page { get; set; } = 1;
- public int PageSize { get; set; } = 10;
- /// <summary>客户编号(模糊)</summary>
- public string? CustNo { get; set; }
- /// <summary>客户名称(模糊)</summary>
- public string? SortName { get; set; }
- /// <summary>排序字段(前端 prop 名)</summary>
- public string? SortField { get; set; }
- /// <summary>排序方向:asc / desc</summary>
- public string? SortOrder { get; set; }
- }
|