130 lines
4.1 KiB
Go
130 lines
4.1 KiB
Go
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 int `orm:"default(1)" json:"status"`
|
|
AuditStatus string `orm:"size(20);default(pending)" json:"audit_status"`
|
|
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"`
|
|
Capacity int `orm:"default(0)" json:"capacity"`
|
|
CapacityUsed int `orm:"default(0)" json:"capacity_used"`
|
|
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 软删除租户
|
|
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
|
|
}
|