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 工件 // currentStepId/positionType/positionRefId/version/lastEventId type Job struct { ent.Schema } func (Job) Annotations() []schema.Annotation { return []schema.Annotation{ entsql.Annotation{Table: "job"}, } } func (Job) Fields() []ent.Field { return []ent.Field{ field.Int("id").Positive(), field.Int("workOrderId").Comment("工单ID"), field.Int("palletId").Optional().Nillable().Comment("所属托盘ID"), field.Int("productTypeId").Comment("产品类型ID"), field.Int("recipeId").Comment("工艺路线ID"), field.String("currentStepId").MaxLen(20).Default("").Comment("当前步骤业务ID(OP10-OP120)"), field.Enum("status"). GoType(constants.JobStatus("")). Default(string(constants.JobStatus_Created)). Comment("工件状态"), field.String("positionType"). GoType(constants.PositionType("")). Default(string(constants.PositionType_OnDock)). Comment("位置类型(主字段)"), field.String("positionRefId").Default("").Comment("位置引用ID(主字段)"), field.Int("tempSlotNo").Optional().Nillable().Comment("暂存台槽位号(兼容字段)"), field.String("workpieceNo").Default("").Comment("工件编号(扫码结果/打标文本)"), field.Int("dockNo").Optional().Nillable().Comment("接驳台编号(兼容字段)"), field.Int("dockSlotNo").Optional().Nillable().Comment("接驳台槽位编号(兼容字段)"), 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("事件版本号"), field.String("lastEventId").Default("").Comment("最后处理事件ID"), field.Time("completedAt").Optional().Comment("完成时间"), field.Time("cncStartedAt").Optional().Comment("CNC加工开始时间"), field.Time("cncCompletedAt").Optional().Comment("CNC加工完成时间"), field.Enum("inspectionResult"). GoType(constants.QCResult("")). Optional(). Comment("内窥镜检测结果(PASS/FAIL,NULL=未检测)"), field.Enum("samplingResult"). GoType(constants.QCResult("")). Optional(). Comment("抽检检测结果(PASS/FAIL,NULL=未检测)"), field.Time("createdAt").Default(time.Now).Immutable().Comment("创建时间"), field.Time("updatedAt").Default(time.Now).UpdateDefault(time.Now).Optional().Nillable().Comment("最后更新时间"), } } func (Job) Edges() []ent.Edge { return []ent.Edge{ edge.From("workOrder", WorkOrder.Type).Ref("jobs").Field("workOrderId").Unique().Required(), edge.From("productType", ProductType.Type).Ref("jobs").Field("productTypeId").Unique().Required(), edge.From("recipe", Recipe.Type).Ref("jobs").Field("recipeId").Unique().Required(), edge.To("taskLogs", TaskLog.Type).Comment("任务日志"), edge.To("tasks", Task.Type).Comment("领域任务"), edge.To("stepInstances", JobStepInstance.Type).Comment("步骤执行实例"), edge.From("pallet", Pallet.Type).Ref("jobs").Field("palletId").Unique(), } } func (Job) Indexes() []ent.Index { return []ent.Index{ index.Fields("workOrderId"), index.Fields("status"), index.Fields("positionType"), index.Fields("version"), index.Fields("palletId"), } }