using System.Globalization;
namespace Admin.NET.Plugin.AiDOP.WorkOrder;
///
/// 工单下达服务 🏭
/// 路由前缀:/api/WorkOrder/dispatch/...
///
[ApiDescriptionSettings(Order = 260, Description = "工单下达")]
[Route("api/WorkOrder")]
[AllowAnonymous]
[NonUnify]
public class WorkOrderDispatchService : IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
private readonly UserManager _userManager;
public WorkOrderDispatchService(ISqlSugarClient db, UserManager userManager)
{
_db = db;
_userManager = userManager;
}
private long ResolveTenantId(long? requestTenantId)
{
var tid = requestTenantId is > 0 ? requestTenantId!.Value : _userManager.TenantId;
if (tid == 0)
throw Oops.Oh("租户ID无效,请传入 tenantId 或登录后重试");
return tid;
}
/// 校验:本租户下存在处于初始状态(p)的该工单。
private async Task AssertInitialWorkOrderExistsAsync(long tenantId, string workOrd)
{
var wo = workOrd.Trim();
var cnt = await _db.Ado.GetIntAsync(
"""
SELECT COUNT(*) FROM WorkOrdMaster
WHERE tenant_id = @TenantId
AND WorkOrd = @WorkOrd
AND LOWER(TRIM(IFNULL(Status,''))) = 'p'
""",
new SugarParameter("@TenantId", tenantId),
new SugarParameter("@WorkOrd", wo));
if (cnt == 0)
throw Oops.Oh("未找到处于初始状态(p)的本租户工单,请确认工单号与租户是否正确");
}
// ══════════════════════════════════════════════════════════════
// 列表 GET /api/WorkOrder/dispatch/list
// ══════════════════════════════════════════════════════════════
/// 获取工单下达分页列表 🏭
[DisplayName("获取工单下达列表")]
[HttpGet("dispatch/list")]
public async Task