package schema import ( "time" "bj_power_mes/constants" "entgo.io/ent" "entgo.io/ent/dialect/entsql" "entgo.io/ent/schema" "entgo.io/ent/schema/edge" "entgo.io/ent/schema/field" ) // Equipment 设备实例,车间中实际存在的每台物理设备? // // 框架级通用抽象:不区分工站/搬运设备的显式分类字段? // - slotCount >= 1 ?工站(持有工件,可执行加工、检测、暂存) // - slotCount = 0 ?搬运设备(无槽位,串行互斥,在工站间移动工件? // 行为差异由信号表(doneSignalName)和工艺步骤(resourceType)驱动? type Equipment struct { ent.Schema } func (Equipment) Annotations() []schema.Annotation { return []schema.Annotation{ entsql.Annotation{ Table: "equipment", Options: "COMMENT='设备实例表,记录车间每台物理设备的配置信?", }, entsql.WithComments(true), } } func (Equipment) Fields() []ent.Field { return []ent.Field{ field.Int("id").Positive().Comment("主键ID"), field.String("name").MaxLen(50).Comment("设备名称"), field.Int("equipmentTypeId").Comment("设备类型ID"), field.Enum("status"). GoType(constants.EquipmentStatus("")). Default(string(constants.EquipmentStatus_Idle)). Comment("设备运行状?), field.Int("slotCount").Default(1).Comment("槽位数量?=搬运设备?=1=工站"), field.Bool("exchange").Default(false).Comment("是否支持换料协议"), field.Bool("batch").Default(false).Comment("是否批量完成模式"), field.Bool("dualGrip").Default(false).Comment("是否双夹持(仅搬运设备)"), field.String("ipAddress").Default("").Comment("设备IP地址"), field.String("location").Default("").Comment("物理位置描述"), field.String("doneSignalName").Default("").Comment("加工完成信号名,为空=无PLC信号"), field.String("ngSignalName").Default("").Comment("检测NG信号名,为空=无此信号"), field.String("remark").Default("").Comment("备注"), // 设备占用:谁即将使用设备谁抢占锁,谁上锁谁解锁;前端人工解锁按钮可解任何锁? // occupiedBy 为空 = 未占用,非空 = 被占用(ROBOT/AGV/MANUAL? field.String("occupiedBy").Default("").Comment("占用者:ROBOT/AGV/MANUAL"), field.String("occupiedReason").Default("").Comment("占用原因"), field.Time("occupiedAt").Optional().Nillable().Comment("占用开始时?), field.Time("createdAt").Default(time.Now).Optional().Nillable().Comment("创建时间"), field.Time("updatedAt").Default(time.Now).UpdateDefault(time.Now).Optional().Nillable().Comment("更新时间"), } } func (Equipment) Edges() []ent.Edge { return []ent.Edge{ edge.From("equipmentType", EquipmentType.Type).Ref("equipments").Field("equipmentTypeId").Unique().Required().Comment("所属设备类?), edge.To("slots", EquipmentSlot.Type).Comment("设备槽位列表"), } }