| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using Admin.NET.Plugin.AiDOP.MaterialWarehouse.Dto;
- namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse;
- /// <summary>
- /// S5 来料检验申请列表 服务(只读)。
- ///
- /// 数据源:主库 aidopdev 表 qms_qcp_inspecapplyn(贴源 QMS 申请主表)。
- /// 一期降级方案②:仅查询/展示表内可直接真实渲染的字段
- /// FBILLNO 单据编号 / FBILLTYPE 单据类型(原值) / FAPPLYTIME 申请时间 / FCOMMENT 备注。
- /// 不查询 FORGID / FBIZTYPE / FAPPLYUSER —— 名称解析源(bos_org / qcbd_biztype / bos_user)
- /// 当前不在 aidopdev,不做脑补 join、不显示裸 ID。
- ///
- /// 租户/工厂:qms_qcp_inspecapplyn 无 tenant_id / domain / factory 列(贴源表本身不带租户维度),
- /// 故本接口在表结构层面无可用租户过滤列,不新增前端 factory 选择,亦不脑补租户列。
- ///
- /// 本接口只读:仅 SELECT,无新增/编辑/删除/任务拆分/状态回写。
- /// </summary>
- [ApiDescriptionSettings(Order = 305, Description = "来料检验申请")]
- [Route("api/IncomingInspection")]
- [AllowAnonymous]
- [NonUnify]
- public class IncomingInspectionApplicationService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- public IncomingInspectionApplicationService(ISqlSugarClient db)
- {
- _db = db;
- }
- /// <summary>
- /// 来料检验申请列表(只读分页查询)。
- /// </summary>
- [DisplayName("来料检验申请列表")]
- [HttpGet("application/list")]
- public async Task<object> GetList([FromQuery] IncomingInspectionApplicationListInput input)
- {
- var page = input.Page <= 0 ? 1 : input.Page;
- var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
- var offset = (page - 1) * pageSize;
- var where = new List<string> { "1=1" };
- var pars = new List<SugarParameter>();
- if (!string.IsNullOrWhiteSpace(input.BillNo))
- {
- where.Add("m.FBILLNO LIKE @BillNo");
- pars.Add(new SugarParameter("@BillNo", $"%{input.BillNo.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.ApplyTimeStart))
- {
- where.Add("m.FAPPLYTIME >= @ApplyTimeStart");
- pars.Add(new SugarParameter("@ApplyTimeStart", $"{input.ApplyTimeStart.Trim()} 00:00:00"));
- }
- if (!string.IsNullOrWhiteSpace(input.ApplyTimeEnd))
- {
- where.Add("m.FAPPLYTIME <= @ApplyTimeEnd");
- pars.Add(new SugarParameter("@ApplyTimeEnd", $"{input.ApplyTimeEnd.Trim()} 23:59:59"));
- }
- var whereSql = string.Join(" AND ", where);
- var total = await _db.Ado.GetIntAsync(
- $"SELECT COUNT(1) FROM qms_qcp_inspecapplyn m WHERE {whereSql}", pars);
- var list = await _db.Ado.SqlQueryAsync<IncomingInspectionApplicationListRow>(
- $"""
- SELECT
- m.id AS Id,
- m.FBILLNO AS FBillNo,
- m.FBILLTYPE AS FBillType,
- m.FAPPLYTIME AS FApplyTime,
- m.FCOMMENT AS FComment
- FROM qms_qcp_inspecapplyn m
- WHERE {whereSql}
- ORDER BY {BuildOrderBy(input.SortField, input.SortOrder)}
- LIMIT {pageSize} OFFSET {offset}
- """,
- pars);
- return new { total, page, pageSize, list };
- }
- /// <summary>
- /// 排序白名单:仅允许按已展示列排序,杜绝 SQL 注入。
- /// </summary>
- private static string BuildOrderBy(string? sortField, string? sortOrder)
- {
- var column = sortField switch
- {
- "fBillNo" => "m.FBILLNO",
- "fApplyTime" => "m.FAPPLYTIME",
- _ => "m.FAPPLYTIME",
- };
- var direction = string.Equals(sortOrder, "asc", StringComparison.OrdinalIgnoreCase) ? "ASC" : "DESC";
- return $"{column} {direction}, m.id DESC";
- }
- }
|