mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-11-12 04:03:44 +08:00
发布v2.15.1版本,更新内容请查看:https://github.com/bufanyun/hotgo/blob/v2.0/docs/guide-zh-CN/start-update-log.md
This commit is contained in:
92
server/internal/library/hgorm/dao_tenant.go
Normal file
92
server/internal/library/hgorm/dao_tenant.go
Normal file
@@ -0,0 +1,92 @@
|
||||
// Package hgorm
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2023 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package hgorm
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/internal/consts"
|
||||
"hotgo/utility/tree"
|
||||
)
|
||||
|
||||
// TenantRelation 租户关系
|
||||
type TenantRelation struct {
|
||||
DeptType string // 部门类型
|
||||
TenantId int64 // 租户ID
|
||||
MerchantId int64 // 商户ID
|
||||
UserId int64 // 用户ID
|
||||
}
|
||||
|
||||
// GetTenantRelation 获取租户关系
|
||||
func GetTenantRelation(ctx context.Context, memberId int64) (tr *TenantRelation, err error) {
|
||||
data, err := g.Model("hg_admin_member u").Ctx(ctx).
|
||||
LeftJoin("hg_admin_dept d", "u.dept_id=d.id").
|
||||
Fields("u.tree,d.type").
|
||||
Where("u.id", memberId).One()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if data.IsEmpty() {
|
||||
err = gerror.Newf("未找到用户[%v]的租户关系,该用户不存在", memberId)
|
||||
return
|
||||
}
|
||||
|
||||
ids := tree.GetIds(data["tree"].String())
|
||||
|
||||
getRelationId := func(deptType string) (int64, error) {
|
||||
id, err := g.Model("hg_admin_member u").Ctx(ctx).
|
||||
LeftJoin("hg_admin_dept d", "u.dept_id=d.id").
|
||||
Fields("u.id").
|
||||
WhereIn("u.id", ids).Where("d.type", deptType).
|
||||
OrderAsc("u.level"). // 确保是第一关系
|
||||
Limit(1).
|
||||
Value()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if id.Int64() < 1 {
|
||||
err = gerror.Newf("未找到有效的租户关系,memberId:%v,deptType:%v", memberId, deptType)
|
||||
return 0, err
|
||||
}
|
||||
return id.Int64(), nil
|
||||
}
|
||||
|
||||
tr = new(TenantRelation)
|
||||
tr.DeptType = data["type"].String()
|
||||
switch tr.DeptType {
|
||||
// 公司
|
||||
case consts.DeptTypeCompany:
|
||||
return
|
||||
// 租户
|
||||
case consts.DeptTypeTenant:
|
||||
tr.TenantId = memberId
|
||||
|
||||
// 商户
|
||||
case consts.DeptTypeMerchant:
|
||||
tr.TenantId, err = getRelationId(consts.DeptTypeTenant)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tr.MerchantId = memberId
|
||||
// 用户
|
||||
case consts.DeptTypeUser:
|
||||
tr.TenantId, err = getRelationId(consts.DeptTypeTenant)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tr.MerchantId, err = getRelationId(consts.DeptTypeMerchant)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tr.UserId = memberId
|
||||
default:
|
||||
err = gerror.Newf("未找到用户[%]的租户关系,部门类型[%v] 无效", memberId, tr.DeptType)
|
||||
return nil, err
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user