Files
bj_power/bj_power_mes/schema/job.go
T

93 lines
4.4 KiB
Go
Raw Normal View History

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"),
}
}