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.OrganizationEnableStatus), } _, 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, info *orgModel.DisableOrgReq) error { // todo 判断有没有权限 // 判断是否成员 return o.orgRepo.SetStatus(ctx, info.Id, repo.OrganizationDisableStatus) } func (o *organizationService) EnableOrganization(ctx context.Context, info *orgModel.EnableOrgReq) error { // todo 判断有没有权限 return o.orgRepo.SetStatus(ctx, info.Id, repo.OrganizationEnableStatus) }