Files
bj_power/bj_power_mes/internal/recovery/assessor.go
T

61 lines
1.8 KiB
Go

package recovery
import (
"bj_power_mes/constants"
"bj_power_mes/ent"
)
// AssessOrderGrade 评估工单恢复等级。
// L1: 可安全自动恢复
// L2: 部分工件在设备中,建议确认设备状态后恢复
// L3: 存在搬运中/加工中工件,需人工确认物理位置
func AssessOrderGrade(jobs []*ent.Job) (grade string, manualRequired bool, message string) {
var hasProcessing, hasOnEquipment, hasSuspended bool
for _, j := range jobs {
switch j.Status {
case constants.JobStatus_Processing:
hasProcessing = true
case constants.JobStatus_Suspended:
hasSuspended = true
}
if j.PositionType == constants.PositionType_OnEquipment {
hasOnEquipment = true
}
}
if hasProcessing {
//return "L3", true, "存在加工中的工件,设备状态已丢失,需确认设备当前状态后手动恢复"
return "L2", false, "部分工件在设备中(等待加工完成),可自动恢复"
}
if hasOnEquipment {
// WAITING_UNLOAD on equipment: machine finished, slot is DONE, safe to auto-recover
return "L2", false, "部分工件在设备中(已完成加工等待卸料),可自动恢复"
}
if hasSuspended {
return "L1", false, "工件处于挂起状态,可安全自动恢复"
}
return "L1", false, "可安全恢复"
}
// RecoveryResult 恢复结果
type RecoveryResult struct {
OrderID int `json:"orderId"`
Grade string `json:"grade"`
ManualRequired bool `json:"manualRequired"`
Message string `json:"message"`
RestoredCount int `json:"restoredCount"`
ManualActionID int `json:"manualActionId,omitempty"`
}
// CountRestorable 统计非终态可恢复工件数。
func CountRestorable(jobs []*ent.Job) int {
count := 0
for _, j := range jobs {
if j.Status != constants.JobStatus_Completed && j.Status != constants.JobStatus_Scrapped {
count++
}
}
return count
}