package models import ( "errors" "time" "github.com/beego/beego/v2/client/orm" ) type Tenant struct { Id int `orm:"pk;auto" json:"id"` Name string `orm:"size(100)" json:"name"` Code string `orm:"size(50);unique" json:"code"` Owner string `orm:"size(50)" json:"owner"` Phone string `orm:"size(20);null" json:"phone"` Email string `orm:"size(100);null" json:"email"` Status string `orm:"size(20);default(enabled)" json:"status"` // enabled, disabled AuditStatus string `orm:"size(20);default(pending)" json:"audit_status"` // pending, approved, rejected AuditComment string `orm:"type(text);null" json:"audit_comment"` AuditBy string `orm:"size(50);null" json:"audit_by"` AuditTime *time.Time `orm:"null;type(datetime)" json:"audit_time"` Remark string `orm:"type(text);null" json:"remark"` CreateTime time.Time `orm:"auto_now_add;type(datetime)" json:"create_time"` UpdateTime time.Time `orm:"auto_now;type(datetime)" json:"update_time"` DeleteTime *time.Time `orm:"null;type(datetime)" json:"delete_time"` CreateBy string `orm:"size(50);null" json:"create_by"` UpdateBy string `orm:"size(50);null" json:"update_by"` } // TableName 设置表名 func (t *Tenant) TableName() string { return "yz_tenants" } func init() { orm.RegisterModel(new(Tenant)) } // GetTenantList 获取所有租户(软删除:只返回未删除的) func GetTenantList() ([]Tenant, error) { o := orm.NewOrm() var tenants []Tenant // 使用原生 SQL 查询 delete_time IS NULL 的记录(更可靠) _, err := o.Raw("SELECT * FROM yz_tenants WHERE delete_time IS NULL ORDER BY id DESC").QueryRows(&tenants) return tenants, err } // CreateTenant 新建租户 func CreateTenant(tenant *Tenant) error { o := orm.NewOrm() _, err := o.Insert(tenant) return err } // UpdateTenant 编辑租户(只能编辑未删除的) func UpdateTenant(id int, data map[string]interface{}) error { o := orm.NewOrm() // 先检查租户是否存在且未删除 tenant := Tenant{} err := o.Raw("SELECT * FROM yz_tenants WHERE id = ? AND delete_time IS NULL", id).QueryRow(&tenant) if err == orm.ErrNoRows { return errors.New("租户不存在或已被删除") } if err != nil { return err } // 更新记录 _, err = o.QueryTable(new(Tenant)).Filter("Id", id).Update(data) return err } // DeleteTenant 软删除租户(设置 delete_time) func DeleteTenant(id int) error { o := orm.NewOrm() deleteTime := time.Now() _, err := o.QueryTable(new(Tenant)).Filter("Id", id).Update(orm.Params{"delete_time": deleteTime}) return err } // AuditTenant 审核租户(只能审核未删除的) func AuditTenant(id int, auditStatus, auditComment, auditBy string) error { o := orm.NewOrm() tenant := Tenant{} // 先检查租户是否存在且未删除 err := o.Raw("SELECT * FROM yz_tenants WHERE id = ? AND delete_time IS NULL", id).QueryRow(&tenant) if err == orm.ErrNoRows { return errors.New("租户不存在或已被删除") } if err != nil { return err } now := time.Now() tenant.AuditStatus = auditStatus tenant.AuditComment = auditComment tenant.AuditBy = auditBy tenant.AuditTime = &now _, err = o.Update(&tenant, "AuditStatus", "AuditComment", "AuditBy", "AuditTime") return err } // GetTenantById 根据ID获取租户详情(只返回未删除的) func GetTenantById(id int) (*Tenant, error) { o := orm.NewOrm() tenant := Tenant{} // 使用原生 SQL 查询,只返回未删除的记录 err := o.Raw("SELECT * FROM yz_tenants WHERE id = ? AND delete_time IS NULL", id).QueryRow(&tenant) if err == orm.ErrNoRows { return nil, nil } return &tenant, err } // GetTenantByName 根据名称获取租户详情(只返回未删除的) func GetTenantByName(name string) (*Tenant, error) { o := orm.NewOrm() tenant := Tenant{} // 使用原生 SQL 查询,只返回未删除的记录 err := o.Raw("SELECT * FROM yz_tenants WHERE name = ? AND delete_time IS NULL", name).QueryRow(&tenant) if err == orm.ErrNoRows { return nil, errors.New("租户不存在") } if err != nil { return nil, err } return &tenant, nil }