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 });
}
}