128 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			128 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       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
 | ||
| }
 |