Files
bj_power/bj_power_mes/schema/job.go
T

93 lines
4.4 KiB
Go
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package schema
import (
"time"
"bj_power_mes/constants"
"entgo.io/ent"
"entgo.io/ent/dialect"
"entgo.io/ent/dialect/entsql"
"entgo.io/ent/schema"
"entgo.io/ent/schema/edge"
"entgo.io/ent/schema/field"
"entgo.io/ent/schema/index"
)
// Job 工件,工å•下独立加工的最å°å•元,贯穿整个工艺路线
//
// 字段说明�
// - dockEquipmentID/dockSlotNo: 接驳å°è®¾å¤‡IDåŠæ§½ä½ï¼Œå·¥ä»¶å…¥çº¿/出线ä½ç½®
// - tempSlotNo: ç¼“å­˜å°æ§½ä½å·ï¼Œå·¥ä»¶åœ¨ç¼“存区中的ä½ç½?
// - cncStartedAt/cncCompletedAt: 加工计时字段,记录设备加工起止时刻(磨床/转å°ç­‰ï¼‰
type Job struct {
ent.Schema
}
func (Job) Annotations() []schema.Annotation {
return []schema.Annotation{
entsql.Annotation{
Table: "job",
Options: "COMMENT='工件è¡? å·¥å•下独立加工的最å°å•元,记录工件完整生命周期:状æ€ã€ä½ç½®ã€æ­¥éª¤ã€äº‹ä»¶ç‰ˆæœ?",
},
entsql.WithComments(true),
}
}
func (Job) Fields() []ent.Field {
return []ent.Field{
field.Int("id").Positive().Comment("主键ID"),
field.Int("workOrderId").Comment("所属工å•ID"),
field.Int("productTypeId").Comment("产å“类型ID,决定工艺路çº?),
field.Int("recipeId").Comment("å·¥èºè·¯çº¿ID,当å工件使用çšéæ–¹"),
field.String("currentStepId").MaxLen(20).Default("").Comment("当å加工步骤业务ID,如 OP10/OP20/OP90"),
field.Enum("status").
GoType(constants.JobStatus("")).
Default(string(constants.JobStatus_Created)).
Comment("å·¥ä»¶çŠæï¼šCreated/Queued/Processing/Completed/Suspended/Failed"),
field.Enum("positionType").
GoType(constants.PositionType("")).
Default(string(constants.PositionType_OnDock)).
Comment("ä½ç½®ç±»åžï¼šON_DOCK(接驳å°ï¼? ON_EQUIPMENT(设备)/ ON_CACHE(缓存å°ï¼?),
field.String("positionRefId").Default("").Comment("ä½ç½®å¼•用ID,格å¼?设备ID:æ§½ä½å?),
field.Int("tempSlotNo").Optional().Nillable().Comment("ç¼“å­˜å°æ§½ä½å·ï¼Œå·¥ä»¶åœ¨ç¼“å­˜å°ä¸­çšä½ç½?),
field.Int("dockEquipmentId").Optional().Nillable().Comment("接驳å°è®¾å¤‡ID,工件所在接驳å°"),
field.Int("dockSlotNo").Optional().Nillable().Comment("æŽ¥é©³å°æ§½ä½å·ï¼Œå–值范å›?-42"),
field.JSON("context", map[string]any{}).Optional().SchemaType(map[string]string{
dialect.Postgres: "jsonb",
}).Comment("è¿è¡Œæ—¶ä¸Šä¸‹æ–‡ï¼Œå­˜å‚¨å½¢çŠ¶åˆ¤æ–­ã€æ£€æµ‹ç»“æžœç­‰åŠ¨æ€æ•°æ?),
field.Int("priority").Default(2).Comment("调度优åˆçº§ï¼Œæ•°å€¼èŠå°ä¼˜åˆçº§èŠé«˜"),
field.String("suspendedReason").Default("").Comment("æŒèµ·åŽŸå ï¼Œè®°å½•工件被æšåœçšå…·ä½“原å?),
field.Int("version").Default(0).Comment("事件版本å·ï¼Œä¹è§‚é”å¹¶å‘æŽ§åˆ¶ï¼Œæ¯æ¬¡çжæ€å˜æ›?1"),
field.Int("totalStepCount").Default(0).Comment("累计步骤数,死循环防护:超过 maxStepCount 标记为异�),
field.Int("maxStepCount").Default(200).Comment("æœå¤§æ­¥éª¤æ•°éåˆï¼Œé˜²æ­¢æ­»å¾ªçޝ"),
field.String("lastEventId").Default("").Comment("æœåŽå¤„çäºä»¶ID,用于äºä»¶åŽ»éåŒæº¯æº"),
field.Time("completedAt").Optional().Comment("完工时间,所æœå·¥åºæ‰§è¡Œå®Œæ¯•çšæ—¶åˆ»"),
field.Time("cncStartedAt").Optional().Comment("加工开始时间,设备加工开始时�),
field.Time("cncCompletedAt").Optional().Comment("åŠ å·¥å®Œæˆæ—¶é—´ï¼Œè®¾å¤‡åŠ å·¥å®Œæˆæ—¶åˆ?),
field.Time("createdAt").Default(time.Now).Immutable().Comment("åˆå»ºæ—¶é—´"),
field.Time("updatedAt").Default(time.Now).UpdateDefault(time.Now).Optional().Nillable().Comment("æœåŽæ›´æ–°æ—¶é—?),
field.Bool("isDel").Default(false).Comment("软删除标记:TRUE=已删除(工å•删除时软删,ä¿ç•™å®¡è®¡æ•°æ®ï¼‰ï¼›æŸ¥è¯¢éœ€è¿‡æ»¤ is_del = FALSE"),
}
}
func (Job) Edges() []ent.Edge {
return []ent.Edge{
edge.From("workOrder", WorkOrder.Type).Ref("jobs").Field("workOrderId").Unique().Required().Comment("所属工å?),
edge.From("productType", ProductType.Type).Ref("jobs").Field("productTypeId").Unique().Required().Comment("产åç±»åž"),
edge.From("recipe", Recipe.Type).Ref("jobs").Field("recipeId").Unique().Required().Comment("å·¥èºè·¯çº¿"),
edge.To("taskLogs", TaskLog.Type).Comment("任务执行日志"),
edge.To("tasks", Task.Type).Comment("领域任务"),
edge.To("stepInstances", JobStepInstance.Type).Comment("步骤执行实例"),
}
}
func (Job) Indexes() []ent.Index {
return []ent.Index{
index.Fields("workOrderId"),
index.Fields("status"),
index.Fields("positionType"),
index.Fields("version"),
}
}