61 lines
1.8 KiB
Go
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
|
|
}
|