143 lines
3.4 KiB
Go
143 lines
3.4 KiB
Go
package organization
|
|
|
|
import (
|
|
"busniess-user-center/config"
|
|
orgModel "busniess-user-center/internal/models/organization"
|
|
"busniess-user-center/internal/repo"
|
|
"busniess-user-center/pkg/redis"
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/jinzhu/copier"
|
|
"github.com/samber/do"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func init() {
|
|
do.Provide(nil, NewOrganizationService)
|
|
}
|
|
|
|
type organizationService struct {
|
|
logger *zap.SugaredLogger
|
|
orgRepo repo.OrganizationRepo
|
|
redis *redis.Redis
|
|
conf *config.AppConfig
|
|
}
|
|
|
|
func NewOrganizationService(i *do.Injector) (OrganizationService, error) {
|
|
return &organizationService{
|
|
logger: do.MustInvoke[*zap.SugaredLogger](i),
|
|
orgRepo: do.MustInvoke[repo.OrganizationRepo](i),
|
|
redis: do.MustInvoke[*redis.Redis](i),
|
|
conf: do.MustInvoke[*config.AppConfig](i),
|
|
}, nil
|
|
}
|
|
|
|
func (o *organizationService) CreateOrganization(ctx context.Context, info *orgModel.CreateOrgReq) error {
|
|
if info.ParentId > 0 {
|
|
if exist, err := o.orgRepo.ExistOrgId(ctx, info.ParentId); err != nil {
|
|
return err
|
|
} else if !exist {
|
|
return fmt.Errorf("父组织%d不存在", info.ParentId)
|
|
}
|
|
}
|
|
|
|
dbOrg := repo.Organization{
|
|
Name: info.Name,
|
|
ParentID: info.ParentId,
|
|
Sort: uint(info.Sort),
|
|
Status: int(repo.OrganizationAbleStatus),
|
|
}
|
|
|
|
_, err := o.orgRepo.Create(ctx, dbOrg)
|
|
|
|
return err
|
|
}
|
|
|
|
func (o *organizationService) SaveOrganization(ctx context.Context, info *orgModel.SaveOrgReq) error {
|
|
dbOrg, err := o.orgRepo.GetById(ctx, info.Id)
|
|
if err != nil && err != gorm.ErrRecordNotFound {
|
|
return err
|
|
}
|
|
|
|
if err == gorm.ErrRecordNotFound {
|
|
return fmt.Errorf("组织不存在")
|
|
}
|
|
|
|
dbOrg.Name = info.Name
|
|
err = o.orgRepo.Save(ctx, dbOrg)
|
|
return err
|
|
}
|
|
|
|
func (o *organizationService) DelOrganization(ctx context.Context, info *orgModel.DelOrgReq) error {
|
|
// todo 判断权限
|
|
// todo 判断组织下面有没有成员
|
|
// todo 删除组织授权和相应的用户
|
|
return o.orgRepo.DelById(ctx, info.Id)
|
|
}
|
|
|
|
func (o *organizationService) Organization(ctx context.Context, info *orgModel.GetOrgReq) (org orgModel.Organization, err error) {
|
|
dbOrg, err := o.orgRepo.GetById(ctx, info.Id)
|
|
if err != nil && err != gorm.ErrRecordNotFound {
|
|
return
|
|
}
|
|
|
|
if err != gorm.ErrRecordNotFound {
|
|
err = fmt.Errorf("组织不存在")
|
|
return
|
|
}
|
|
|
|
copier.Copy(org, dbOrg)
|
|
return
|
|
}
|
|
|
|
func (o *organizationService) MoveOrganization(ctx context.Context, info *orgModel.MoveOrgReq) error {
|
|
// todo 判断权限
|
|
dbOrg, err := o.orgRepo.GetById(ctx, info.Id)
|
|
if err != nil && err != gorm.ErrRecordNotFound {
|
|
return err
|
|
}
|
|
|
|
if err == gorm.ErrRecordNotFound {
|
|
return fmt.Errorf("组织%d不存在", info.Id)
|
|
}
|
|
|
|
if dbOrg.ID == info.DestId || dbOrg.ParentID == info.DestId {
|
|
return nil
|
|
}
|
|
|
|
_, err = o.orgRepo.GetById(ctx, info.DestId)
|
|
if err != nil && err != gorm.ErrRecordNotFound {
|
|
return err
|
|
}
|
|
|
|
if err != gorm.ErrRecordNotFound {
|
|
return fmt.Errorf("目标组织%d不存在", info.DestId)
|
|
}
|
|
|
|
dbOrg.ParentID = info.DestId
|
|
return o.orgRepo.Save(ctx, dbOrg)
|
|
}
|
|
|
|
func (o *organizationService) OrganizationTree(ctx context.Context) (orgModel.OrgTree, error) {
|
|
dbOrgs, err := o.orgRepo.GetOrgs(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tree := getOrgTree(dbOrgs)
|
|
return tree, nil
|
|
}
|
|
|
|
func (o *organizationService) DisableOrganization(ctx context.Context) error {
|
|
// todo 判断有没有权限
|
|
// 判断是否成员
|
|
return nil
|
|
}
|
|
|
|
func (o *organizationService) EnableOrganization(ctx context.Context) error {
|
|
// todo 判断有没有权限
|
|
return nil
|
|
}
|