using Admin.NET.Plugin.AiDOP.Dto.S0.Manufacturing; using Admin.NET.Plugin.AiDOP.Entity; using Admin.NET.Plugin.AiDOP.Entity.S0.Manufacturing; using Admin.NET.Plugin.AiDOP.Infrastructure; namespace Admin.NET.Plugin.AiDOP.Controllers.S0.Manufacturing; /// /// 流转卡打印记录(legacy MissedPrint 只读投影)。 /// 路由保留 /api/s0/manufacturing/process-flow-cards 以降低前端 / 菜单 / 权限迁移成本。 /// 数据源由 S0ProcessFlowCard(当前 0 行)切换为 MissedPrint(200+ 行)。 /// 写入路径仍由 S3 SupplierShipment / SupplierDelivery 服务负责,本 Controller 仅提供只读分页查询。 /// [ApiController] [Route("api/s0/manufacturing/process-flow-cards")] [AllowAnonymous] [NonUnify] public class AdoS0MfgProcessFlowCardsController : ControllerBase { private readonly SqlSugarRepository _rep; public AdoS0MfgProcessFlowCardsController(SqlSugarRepository rep) => _rep = rep; [HttpGet] public async Task GetPagedAsync([FromQuery] AdoS0FlowCardPrintRecordQueryDto q) { var page = q.EffectivePage; var pageSize = q.PageSize; (page, pageSize) = PagingGuard.Normalize(page, pageSize); var query = _rep.Context.Queryable( (m, g) => new JoinQueryInfos( JoinType.Left, g.FldName == "BarcodeStatus" && g.Val == m.Status)) .WhereIF(!string.IsNullOrWhiteSpace(q.Keyword), (m, g) => (m.WorkOrd != null && m.WorkOrd.Contains(q.Keyword!)) || (m.ItemNum != null && m.ItemNum.Contains(q.Keyword!)) || (m.Descr != null && m.Descr.Contains(q.Keyword!))) .WhereIF(!string.IsNullOrWhiteSpace(q.WorkOrd), (m, g) => m.WorkOrd != null && m.WorkOrd.Contains(q.WorkOrd!)) .WhereIF(!string.IsNullOrWhiteSpace(q.ItemNum), (m, g) => m.ItemNum != null && m.ItemNum.Contains(q.ItemNum!)) .WhereIF(!string.IsNullOrWhiteSpace(q.LabelColor), (m, g) => m.LabelColor == q.LabelColor) .WhereIF(!string.IsNullOrWhiteSpace(q.Status), (m, g) => m.Status == q.Status) .WhereIF(q.CreateTimeFrom.HasValue, (m, g) => m.CreateTime >= q.CreateTimeFrom!.Value) .WhereIF(q.CreateTimeTo.HasValue, (m, g) => m.CreateTime <= q.CreateTimeTo!.Value); var total = await query.CountAsync(); var list = await query .Select((m, g) => new S0MfgFlowCardPrintRecordRow { Id = m.Id, WorkOrd = m.WorkOrd, Op = m.Op, ItemNum = m.ItemNum, Descr = m.Descr, LabelFormat = m.LabelFormat, LabelColor = m.LabelColor, Status = m.Status, StatusDesc = g.Comments ?? m.Status, CreateTime = m.CreateTime }) .MergeTable() .OrderByDescending(r => r.CreateTime) .OrderByDescending(r => r.Id) .Skip((page - 1) * pageSize).Take(pageSize) .ToListAsync(); return Ok(new { total, page, pageSize, list }); } }