syntax = "v1" import ( "base.api" ) type ( // === 工站监控(对齐 frontend-api.md 7.2 节)=== StationJobBrief { JobId int `json:"jobId"` WorkOrderId int `json:"workOrderId"` ProductTypeId int `json:"productTypeId"` Status string `json:"status"` PositionRefId string `json:"positionRefId"` CurrentStepId string `json:"currentStepId"` CurrentStepName string `json:"currentStepName"` } StationMonitorItem { Id string `json:"id"` Type string `json:"type"` Name string `json:"name"` Status string `json:"status"` HeartbeatOnline bool `json:"heartbeatOnline"` CurrentJobs []StationJobBrief `json:"currentJobs"` WaitingUnloadJobs []StationJobBrief `json:"waitingUnloadJobs"` UpdatedAt string `json:"updatedAt"` } ActiveOrderSummary { OrderId int `json:"orderId"` OrderNo string `json:"orderNo"` Status string `json:"status"` ProductTypeId int `json:"productTypeId"` TotalJobs int `json:"totalJobs"` CompletedJobs int `json:"completedJobs"` ScrappedJobs int `json:"scrappedJobs"` } StationMonitorReply { Stations []StationMonitorItem `json:"stations"` ActiveOrders []ActiveOrderSummary `json:"activeOrders"` } // === 工单管理(对齐 frontend-api.md 第 5 节)=== QueryWorkOrdersReq { PageReq SortReq Keyword string `form:"keyword,optional"` Statuses []string `form:"statuses,optional"` ProductTypeId int `form:"productTypeId,optional"` } CreateWorkOrderReq { ProductTypeId int `json:"productTypeId"` Quantity int `json:"quantity,optional"` WorkOrderNo string `json:"workOrderNo,optional"` Remark string `json:"remark,optional"` } CreateWorkOrderReply { Id int `json:"id"` } UpdateWorkOrderReq { PathId ProductTypeId int `json:"productTypeId,optional"` Quantity int `json:"quantity,optional"` WorkOrderNo string `json:"workOrderNo,optional"` Remark string `json:"remark,optional"` } RestoreWorkOrderReply { OrderId int `json:"orderId"` RestoredJobs int `json:"restoredJobs"` Level string `json:"level"` ManualRequired bool `json:"manualRequired"` Message string `json:"message,omitempty"` } // === 恢复扫描 === RecoveryScanItem { OrderId int `json:"orderId"` Status string `json:"status"` Recoverable bool `json:"recoverable"` Grade string `json:"grade"` TotalJobs int `json:"totalJobs"` RestorableJobs int `json:"restorableJobs"` Reason string `json:"reason,omitempty"` } RecoveryScanReply { Items []RecoveryScanItem `json:"items"` } // === 工单信息 === QueryWorkOrdersReply { PageReply Data []WorkOrderReply `json:"data"` } WorkOrderReply { Id int `json:"id"` No string `json:"no"` WorkOrderNo string `json:"workOrderNo"` ProductTypeId int `json:"productTypeId"` ProductTypeName string `json:"productTypeName"` ProductTypeCode string `json:"productTypeCode"` Quantity int `json:"quantity"` FinishedNum int `json:"finishedNum"` FailNum int `json:"failNum"` Status string `json:"status"` Source string `json:"source"` Remark string `json:"remark,omitempty"` CreatedTime string `json:"createdTime"` UpdatedTime string `json:"updatedTime"` CompletedTime string `json:"completedTime,omitempty"` } JobStatusCount { Status string `json:"status"` Count int `json:"count"` } WorkOrderDetailReply { WorkOrderReply ProductTypeName string `json:"productTypeName"` RecipeName string `json:"recipeName,omitempty"` JobStats []JobStatusCount `json:"jobStats"` TotalJobs int `json:"totalJobs"` } // === 任务日志(对齐 frontend-api.md 8.4 节)=== QueryTaskLogsReq { PageReq SortReq JobId int `form:"jobId,optional"` Status string `form:"status,optional"` TaskKind string `form:"taskKind,optional"` StartTime string `form:"startTime,optional"` EndTime string `form:"endTime,optional"` } QueryTaskLogsReply { PageReply Data []TaskLogReply `json:"data"` } TaskLogReply { Id int `json:"id"` WorkOrderId int `json:"workOrderId"` JobId int `json:"jobId"` StepId string `json:"stepId"` StepName string `json:"stepName"` TaskKind string `json:"taskKind"` Status string `json:"status"` Content string `json:"content"` DurationMs int64 `json:"durationMs"` CreatedAt string `json:"createdAt"` } ) @server ( jwt: Auth group: workorder prefix: /api/v1 ) service spherical-api { @doc "工站监控" @handler stationMonitor get /stations/monitor returns (StationMonitorReply) @doc "恢复扫描" @handler scanRecovery get /work-orders/recovery/scan returns (RecoveryScanReply) @doc "查询工单分页列表" @handler queryWorkOrders get /work-orders (QueryWorkOrdersReq) returns (QueryWorkOrdersReply) @doc "查询任务日志分页列表" @handler queryTaskLogs get /work-orders/:id/task-logs (QueryTaskLogsReq) returns (QueryTaskLogsReply) @doc "获取最新任务日志" @handler getLatestTaskLogs get /work-orders/logs/latest returns ([]TaskLogReply) @doc "获取工单详情" @handler getWorkOrder get /work-orders/:id (PathId) returns (WorkOrderReply) @doc "获取带工艺流程信息的工单详情" @handler getWorkOrderDetail get /work-orders/:id/detail (PathId) returns (WorkOrderDetailReply) @doc "创建工单" @handler createWorkOrder post /work-orders (CreateWorkOrderReq) returns (CreateWorkOrderReply) @doc "编辑工单" @handler updateWorkOrder put /work-orders/:id (UpdateWorkOrderReq) @doc "开始工单" @handler startWorkOrder post /work-orders/:id/start (PathId) @doc "暂停工单" @handler pauseWorkOrder post /work-orders/:id/pause (PathId) @doc "恢复工单" @handler resumeWorkOrder post /work-orders/:id/resume (PathId) @doc "断电恢复工单" @handler restoreWorkOrder post /work-orders/:id/restore (PathId) returns (RestoreWorkOrderReply) @doc "取消工单" @handler cancelWorkOrder post /work-orders/:id/cancel (PathId) @doc "停止工单" @handler stopWorkOrder post /work-orders/:id/stop (PathId) @doc "删除工单" @handler deleteWorkOrder delete /work-orders/:id (PathId) @doc "批量删除工单" @handler deleteWorkOrders delete /work-orders (BatchExecIds) returns (BatchExecReply) }