151 lines
4.4 KiB
Go
151 lines
4.4 KiB
Go
package service
|
||
|
||
import (
|
||
"errors"
|
||
"fmt"
|
||
|
||
sysUserModel "nms_nbi/features/sys_user/model"
|
||
sysuserrole "nms_nbi/features/sys_user_role"
|
||
)
|
||
|
||
// 实例化服务层 ServiceSysUser 结构体
|
||
var NewServiceSysUser = &ServiceSysUser{
|
||
sysUserRepository: NewRepoSysUser,
|
||
sysUserRoleRepository: sysuserrole.NewRepoSysUserRole,
|
||
}
|
||
|
||
// ServiceSysUser 用户 服务层处理
|
||
type ServiceSysUser struct {
|
||
// 用户服务
|
||
sysUserRepository *RepoSysUser
|
||
// 用户与角色服务
|
||
sysUserRoleRepository *sysuserrole.RepoSysUserRole
|
||
}
|
||
|
||
// SelectUserPage 根据条件分页查询用户列表
|
||
func (r *ServiceSysUser) SelectUserPage(query map[string]any) map[string]any {
|
||
return r.sysUserRepository.SelectUserPage(query)
|
||
}
|
||
|
||
// SelectUserList 根据条件查询用户列表
|
||
func (r *ServiceSysUser) SelectUserList(sysUser sysUserModel.SysUser) []sysUserModel.SysUser {
|
||
return []sysUserModel.SysUser{}
|
||
}
|
||
|
||
// SelectAllocatedPage 根据条件分页查询分配用户角色列表
|
||
func (r *ServiceSysUser) SelectAllocatedPage(query map[string]any) map[string]any {
|
||
return r.sysUserRepository.SelectAllocatedPage(query)
|
||
}
|
||
|
||
// SelectUserByUserName 通过用户名查询用户
|
||
func (r *ServiceSysUser) SelectUserByUserName(userName string) sysUserModel.SysUser {
|
||
return r.sysUserRepository.SelectUserByUserName(userName)
|
||
}
|
||
|
||
// SelectUserById 通过用户ID查询用户
|
||
func (r *ServiceSysUser) SelectUserById(userId string) sysUserModel.SysUser {
|
||
if userId == "" {
|
||
return sysUserModel.SysUser{}
|
||
}
|
||
users := r.sysUserRepository.SelectUserByIds([]string{userId})
|
||
if len(users) > 0 {
|
||
return users[0]
|
||
}
|
||
return sysUserModel.SysUser{}
|
||
}
|
||
|
||
// InsertUser 新增用户信息
|
||
func (r *ServiceSysUser) InsertUser(sysUser sysUserModel.SysUser) string {
|
||
// 新增用户信息
|
||
insertId := r.sysUserRepository.InsertUser(sysUser)
|
||
if insertId != "" {
|
||
// 新增用户角色信息
|
||
r.insertUserRole(insertId, sysUser.RoleIDs)
|
||
}
|
||
return insertId
|
||
}
|
||
|
||
// insertUserRole 新增用户角色信息
|
||
func (r *ServiceSysUser) insertUserRole(userId string, roleIds []string) int64 {
|
||
if userId == "" || len(roleIds) <= 0 {
|
||
return 0
|
||
}
|
||
|
||
sysUserRoles := []sysuserrole.SysUserRole{}
|
||
for _, roleId := range roleIds {
|
||
// 管理员角色禁止操作,只能通过配置指定用户ID分配
|
||
if roleId == "" || roleId == "1" {
|
||
continue
|
||
}
|
||
sysUserRoles = append(sysUserRoles, sysuserrole.NewSysUserRole(userId, roleId))
|
||
}
|
||
|
||
return r.sysUserRoleRepository.BatchUserRole(sysUserRoles)
|
||
}
|
||
|
||
// UpdateUser 修改用户信息
|
||
func (r *ServiceSysUser) UpdateUser(sysUser sysUserModel.SysUser) int64 {
|
||
return r.sysUserRepository.UpdateUser(sysUser)
|
||
}
|
||
|
||
// UpdateUserAndRolePost 修改用户信息同时更新角色和岗位
|
||
func (r *ServiceSysUser) UpdateUserAndRolePost(sysUser sysUserModel.SysUser) int64 {
|
||
userId := fmt.Sprint(sysUser.Id)
|
||
// 删除用户与角色关联
|
||
r.sysUserRoleRepository.DeleteUserRole([]string{userId})
|
||
// 新增用户角色信息
|
||
r.insertUserRole(userId, sysUser.RoleIDs)
|
||
return r.sysUserRepository.UpdateUser(sysUser)
|
||
}
|
||
|
||
// DeleteUserByIds 批量删除用户信息
|
||
func (r *ServiceSysUser) DeleteUserByIds(userIds []string) (int64, error) {
|
||
// 检查是否存在
|
||
users := r.sysUserRepository.SelectUserByIds(userIds)
|
||
if len(users) <= 0 {
|
||
return 0, errors.New("no permission to access user data")
|
||
}
|
||
if len(users) == len(userIds) {
|
||
// 删除用户与角色关联
|
||
r.sysUserRoleRepository.DeleteUserRole(userIds)
|
||
// ... 注意其他userId进行关联的表
|
||
// 删除用户
|
||
rows := r.sysUserRepository.DeleteUserByIds(userIds)
|
||
return rows, nil
|
||
}
|
||
return 0, errors.New("failed to delete user information")
|
||
}
|
||
|
||
// CheckUniqueUserName 校验用户名称是否唯一
|
||
func (r *ServiceSysUser) CheckUniqueUserName(accountId, userId string) bool {
|
||
uniqueId := r.sysUserRepository.CheckUniqueUser(sysUserModel.SysUser{
|
||
AccountId: accountId,
|
||
})
|
||
if uniqueId == userId {
|
||
return true
|
||
}
|
||
return uniqueId == ""
|
||
}
|
||
|
||
// CheckUniquePhone 校验手机号码是否唯一
|
||
func (r *ServiceSysUser) CheckUniquePhone(phonenumber, userId string) bool {
|
||
uniqueId := r.sysUserRepository.CheckUniqueUser(sysUserModel.SysUser{
|
||
Phone: phonenumber,
|
||
})
|
||
if uniqueId == userId {
|
||
return true
|
||
}
|
||
return uniqueId == ""
|
||
}
|
||
|
||
// CheckUniqueEmail 校验email是否唯一
|
||
func (r *ServiceSysUser) CheckUniqueEmail(email, userId string) bool {
|
||
uniqueId := r.sysUserRepository.CheckUniqueUser(sysUserModel.SysUser{
|
||
Email: email,
|
||
})
|
||
if uniqueId == userId {
|
||
return true
|
||
}
|
||
return uniqueId == ""
|
||
}
|