using Yitter.IdGenerator;
namespace Admin.NET.Plugin.AiDOP.Order;
///
/// 销售订单评审服务 🗂️
/// 路由前缀:/api/Order/seorder/...
///
/// 【租户安全边界】需认证访问;租户一律经 AidopTenantScope.ResolveOrThrow 从认证后 JWT 解析,
/// 无有效租户即拒绝,不读前端 tenantId、无默认回退(原实现:多处宽松解析
/// AidopTenantHelper.Resolve(App.HttpContext) / 直接取 _userManager.TenantId,
/// 可被 ?tenantId= query 覆盖并有默认租户兜底)。
///
[ApiDescriptionSettings(Order = 300, Description = "销售订单评审")]
[Route("api/Order")]
[NonUnify]
public class SeOrderService : IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
private readonly SqlSugarRepository _seOrderRep;
private readonly SqlSugarRepository _seOrderEntryRep;
private readonly SqlSugarRepository _seOrderChangeRep;
private readonly UserManager _userManager;
private readonly SeOrderOperationLogService _orderOpLog;
private readonly OrderReviewOrchestrationService _reviewOrchestration;
public SeOrderService(
ISqlSugarClient db,
SqlSugarRepository seOrderRep,
SqlSugarRepository seOrderEntryRep,
SqlSugarRepository seOrderChangeRep,
UserManager userManager,
SeOrderOperationLogService orderOpLog,
OrderReviewOrchestrationService reviewOrchestration)
{
_db = db;
_seOrderRep = seOrderRep;
_seOrderEntryRep = seOrderEntryRep;
_seOrderChangeRep = seOrderChangeRep;
_userManager = userManager;
_orderOpLog = orderOpLog;
_reviewOrchestration = reviewOrchestration;
}
// ══════════════════════════════════════════════════════════════
// 订单列表 GET /api/Order/seorder/list
// ══════════════════════════════════════════════════════════════
/// 获取订单评审分页列表 🗂️
[DisplayName("获取订单评审列表")]
[HttpGet("seorder/list")]
public async Task