Files
nms_cxy/features/sys_user/service/service_sys_user.go
2024-03-19 18:40:07 +08:00

151 lines
4.4 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 service
import (
"errors"
"fmt"
sysUserModel "nms_cxy/features/sys_user/model"
sysuserrole "nms_cxy/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 == ""
}