2025-10-29 23:07:53 +08:00

128 lines
4.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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 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
}