| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- using Admin.NET.Plugin.AiDOP.Infrastructure.S8;
- using Admin.NET.Plugin.AiDOP.Const.S8;
- using Admin.NET.Plugin.AiDOP.Dto.S8.OrderFlow;
- using Admin.NET.Plugin.AiDOP.Service.S8.OrderFlow;
- namespace Admin.NET.Plugin.AiDOP.Controllers.S8;
- /// <summary>
- /// ORDER-FLOW-S8-INTEGRATED-DOMAIN-RESET-1 t3d:S8 订单执行链路只读 API。
- /// 仅 GET endpoint;调用 S8OrderFlowService 5 个方法暴露。
- /// 路由:api/aidop/s8/order-flow/*。
- /// </summary>
- [ApiController]
- [Route("api/aidop/s8/order-flow")]
- [NonUnify]
- public class AdoS8OrderFlowController : ControllerBase
- {
- private readonly S8OrderFlowService _svc;
- private readonly S8RealOrderArchiveService _realSvc;
- public AdoS8OrderFlowController(S8OrderFlowService svc, S8RealOrderArchiveService realSvc)
- {
- _svc = svc;
- _realSvc = realSvc;
- }
- /// <summary>
- /// 订单档案列表 —— <b>REAL runtime</b>:真实销售订单,来源 <c>mdp_std_so</c>
- /// (按 <c>tenant_id + order_id</c> 聚合为一订单一行),ORDER_REVIEW 事实 LEFT JOIN
- /// <c>dwd_order_review_kpi</c>。
- /// <para>已由 SEED(<c>ado_s8_order_flow_order</c>)换源;SEED 基线保留在
- /// <see cref="S8OrderFlowService"/> 供 fixture / 回归,两路不混用。</para>
- /// </summary>
- [HttpGet("orders")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> OrdersAsync([FromQuery] AdoS8OrderFlowOrderQueryDto query)
- => Ok(await _realSvc.GetRealOrdersAsync(query));
- /// <summary>
- /// 真实订单详情(含固定五阶段骨架)。
- /// <para><b>定位 Authority = 当前租户 + salesOrderId</b>(= <c>crm_seorder.Id</c>),
- /// 不再用订单号文本定位。</para>
- /// </summary>
- [HttpGet("orders/by-id/{salesOrderId}")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> RealOrderDetailAsync(long salesOrderId)
- => Ok(await _realSvc.GetRealOrderAsync(salesOrderId));
- /// <summary>
- /// 单订单详情(SEED 路径,按 orderCode 定位)。
- /// <para>⚠️ 仅供 SEED fixture / 链路全景等既有消费方;<b>REAL runtime 不得回退到这里</b>。</para>
- /// </summary>
- [HttpGet("orders/{orderCode}")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> OrderDetailAsync(string orderCode)
- => Ok(await _svc.GetOrderAsync(orderCode));
- /// <summary>订单链路(含 lifecycle + L2 substeps + L3 units;ProcurementPivot 留待后续切片注入)。</summary>
- [HttpGet("orders/{orderCode}/chain")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> ChainAsync(string orderCode)
- => Ok(await _svc.GetChainAsync(orderCode));
- /// <summary>链路聚合视图:BASELINE_PPT 走 snapshot;CURRENT_FILTERED 走实时聚合。</summary>
- [HttpGet("aggregate")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> AggregateAsync([FromQuery] AdoS8OrderFlowAggregateQueryDto query)
- => Ok(await _svc.GetAggregateAsync(query));
- /// <summary>采购透视:BASELINE_PPT 读 procurement_pivot 表 baseline 行。</summary>
- [HttpGet("procurement-pivot")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> ProcurementPivotAsync([FromQuery] AdoS8OrderFlowProcurementPivotQueryDto query)
- => Ok(await _svc.GetProcurementPivotAsync(query));
- /// <summary>
- /// S8-ORDER-CHAIN-PRODUCT-DESIGN-DRAWING-PERSIST-1:产品设计图号粒度聚合。
- /// orderCodes 为空时默认聚合全 20 单(scope=BASELINE_PPT);非空时按订单子集聚合(scope=CURRENT_FILTERED)。
- /// productType 仅过滤 drawings 明细列表,summary.categories 始终返回常规/非标/合计三档。
- /// </summary>
- [HttpGet("product-design/drawings")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> ProductDesignDrawingsAsync(
- [FromQuery] AdoS8OrderFlowProductDesignDrawingsQueryDto query)
- => Ok(await _svc.GetProductDesignDrawingsAsync(query));
- /// <summary>
- /// S8-ORDER-CHAIN-BODY-PRODUCTION-ORDER-LEVEL-SEED-FIX-1:本体生产透视。
- /// scope=BASELINE_PPT 读三表 baseline 行;scope=CURRENT_FILTERED 按 orderCodes CSV 取订单级行并聚合。
- /// orderCodes 为空(CURRENT_FILTERED)时返回空骨架,不静默 fallback baseline。
- /// </summary>
- [HttpGet("manufacturing-pivot")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> ManufacturingPivotAsync(
- [FromQuery] AdoS8OrderFlowManufacturingPivotQueryDto query)
- => Ok(await _svc.GetManufacturingPivotAsync(query));
- /// <summary>
- /// S8-ORDER-CHAIN-ASSEMBLY-DELIVERY-DATA-LINEAGE-AUDIT-1:总装发货透视。
- /// scope=BASELINE_PPT 读两表 baseline 行(5 门禁 + 4 并行准备);
- /// scope=CURRENT_FILTERED 按 orderCodes CSV 取订单级行并聚合,
- /// 末位门禁 SHIPMENT_CONFIRMATION 守恒为 stage.actual_days;
- /// pending 单不参与聚合;orderCodes 为空时返回空骨架,不 fallback baseline。
- /// 与 aggregate.finalAssemblyCollabSummary 通道并存:本 API 给门禁 KPI / 实际 / 偏差 / 齐套率,
- /// collabSummary 留作 exception 派生补充。
- /// </summary>
- [HttpGet("final-assembly-pivot")]
- [S8Permission(S8PermissionCatalog.DashboardRead)]
- public async Task<IActionResult> FinalAssemblyPivotAsync(
- [FromQuery] AdoS8FinalAssemblyPivotQueryDto query)
- => Ok(await _svc.GetFinalAssemblyPivotAsync(query));
- }
|