Files
2022-01-10 10:00:04 +08:00

147 lines
3.6 KiB
Go
Raw 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 tenant
import (
"SciencesServer/app/api/admin/model"
"SciencesServer/app/basic/config"
"SciencesServer/app/basic/controller"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"SciencesServer/app/session"
config2 "SciencesServer/config"
"SciencesServer/serve/logger"
"SciencesServer/serve/orm"
"SciencesServer/utils"
"errors"
"fmt"
"gorm.io/gorm"
)
type Instance struct {
session *session.Admin
}
type InstanceHandle func(session *session.Admin) *Instance
type (
// InstanceInfo 租户信息
InstanceInfo struct {
ID string `json:"id"`
*model2.SysTenant
}
// InstanceParams 参数信息
InstanceParams struct {
ID uint64
Name, Domain, Remark string
Area config.Area
Contact, ContactMobile string
}
)
// Index 首页列表信息
func (c *Instance) Index(name string, page, pageSize int) (*controller.ReturnPages, error) {
mSysTenant := model.NewSysTenant()
out := make([]*model2.SysTenant, 0)
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{Order: model2.NewOrder("id", model2.OrderModeToDesc)},
}
if name != "" {
where = append(where, &model2.ModelWhereOrder{Where: model2.NewWhereLike("name", name)})
}
var count int64
if err := model2.Pages(mSysTenant.SysTenant, &out, page, pageSize, &count, where...); err != nil {
return nil, err
}
list := make([]*InstanceInfo, 0)
for _, v := range out {
list = append(list, &InstanceInfo{
ID: v.GetEncodeID(),
SysTenant: v,
})
}
return &controller.ReturnPages{Data: list, Count: count}, nil
}
// Form 数据操作
func (c *Instance) Form(params *InstanceParams) error {
mSysTenant := model.NewSysTenant()
if params.ID > 0 {
mSysTenant.ID = params.ID
isExist, err := model2.First(mSysTenant.SysTenant)
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,平台信息不存在或已被删除")
}
}
mSysTenant.Name = params.Name
mSysTenant.Area = model2.Area{
Province: params.Area.Province,
City: params.Area.City,
}
mSysTenant.Contact = params.Contact
mSysTenant.ContactMobile = params.ContactMobile
mSysTenant.Remark = params.Remark
if mSysTenant.ID > 0 {
return model2.Updates(mSysTenant.SysTenant, mSysTenant.SysTenant)
}
mSysTenant.Key = utils.GetRandomString(12)
mSysTenant.Domain = params.Domain
if err := model2.Create(mSysTenant.SysTenant); err != nil {
return err
}
_session := session.NewTenant()
_session.ID = mSysTenant.ID
_session.Name = mSysTenant.Name
_session.Domain = mSysTenant.Domain
service.Publish(config2.EventForRedisHashProduce, config2.RedisKeyForTenant, _session.Domain, _session)
return nil
}
// Delete 删除操作
func (c *Instance) Delete(id uint64) error {
mSysTenant := model.NewSysTenant()
mSysTenant.ID = id
isExist, err := model2.FirstField(mSysTenant.SysTenant, []string{"id", "name", "domain"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,平台信息不存在或已被删除")
}
if err = orm.GetDB().Transaction(func(tx *gorm.DB) error {
if err = model2.Delete(mSysTenant.SysTenant); err != nil {
return err
}
if _, err = service.NewPermission(
service.WithAuthTenant(fmt.Sprintf("%d", id)),
).RemoveFilteredGroupingPolicy(); err != nil {
logger.ErrorF("Casbin 删除租户【%d】下权限信息错误%v", id, err)
return err
}
return nil
}); err != nil {
return nil
}
service.Publish(config2.EventForRedisHashDestroy, config2.RedisKeyForTenant, mSysTenant.Domain)
return nil
}
func NewInstance() InstanceHandle {
return func(session *session.Admin) *Instance {
return &Instance{
session: session,
}
}
}