优化仓储

This commit is contained in:
不做码农 2022-10-20 18:30:05 +08:00
parent e6dc9448fd
commit b5326df532
15 changed files with 435 additions and 590 deletions

View File

@ -21,13 +21,16 @@ namespace ZR.Admin.WebApi.Controllers.System
{
private readonly ISysRoleService sysRoleService;
private readonly ISysMenuService sysMenuService;
private readonly ISysRoleMenuService sysRoleMenuService;
public SysMenuController(
ISysRoleService sysRoleService,
ISysMenuService sysMenuService)
ISysMenuService sysMenuService,
ISysRoleMenuService sysRoleMenuService)
{
this.sysRoleService = sysRoleService;
this.sysMenuService = sysMenuService;
this.sysRoleMenuService = sysRoleMenuService;
}
/// <summary>
@ -63,7 +66,8 @@ namespace ZR.Admin.WebApi.Controllers.System
[ActionPermissionFilter(Permission = "system:menu:query")]
public IActionResult GetMenuList(int menuId = 0)
{
return SUCCESS(sysMenuService.GetMenusByMenuId(menuId), "yyyy-MM-dd HH:mm:ss");
long userId = HttpContext.GetUId();
return SUCCESS(sysMenuService.GetMenusByMenuId(menuId, userId), "yyyy-MM-dd HH:mm:ss");
}
/// <summary>
@ -166,7 +170,7 @@ namespace ZR.Admin.WebApi.Controllers.System
{
return ToResponse(ResultCode.CUSTOM_ERROR, "存在子菜单,不允许删除");
}
if (sysMenuService.CheckMenuExistRole(menuId))
if (sysRoleMenuService.CheckMenuExistRole(menuId))
{
return ToResponse(ResultCode.CUSTOM_ERROR, "菜单已分配,不允许删除");
}

View File

@ -63,18 +63,34 @@ namespace ZR.Repository
{
return Context.Updateable(entity);
}
/// <summary>
/// 实体根据主键更新
/// </summary>
/// <param name="entity"></param>
/// <param name="ignoreNullColumns"></param>
/// <returns></returns>
public int Update(T entity, bool ignoreNullColumns = false)
{
return Context.Updateable(entity).IgnoreColumns(ignoreNullColumns).ExecuteCommand();
}
/// <summary>
/// 实体根据主键更新指定字段
/// return Update(user, t => new { t.NickName, }, true);
/// </summary>
/// <param name="entity"></param>
/// <param name="expression"></param>
/// <param name="ignoreAllNull"></param>
/// <returns></returns>
public int Update(T entity, Expression<Func<T, object>> expression, bool ignoreAllNull = false)
{
return Context.Updateable(entity).UpdateColumns(expression).IgnoreColumns(ignoreAllNull).ExecuteCommand();
}
/// <summary>
/// 根据实体类更新指定列 egUpdate(dept, it => new { it.Status }, f => depts.Contains(f.DeptId));只更新Status列条件是包含
/// 根据指定条件更新指定列 egUpdate(new SysUser(){ }, it => new { it.Status }, f => f.Userid == 1));
/// 只更新Status列条件是包含
/// </summary>
/// <param name="entity"></param>
/// <param name="expression"></param>

View File

@ -1,211 +0,0 @@
using Infrastructure.Attribute;
using Infrastructure.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using ZR.Model;
using ZR.Model.System;
namespace ZR.Repository.System
{
/// <summary>
/// 角色操作类
/// </summary>
[AppService(ServiceLifetime = LifeTime.Transient)]
public class SysRoleRepository : BaseRepository<SysRole>
{
/// <summary>
/// 查询所有角色数据
/// </summary>
/// <returns></returns>
public List<SysRole> SelectRoleList()
{
return Context.Queryable<SysRole>()
.Where(role => role.DelFlag == "0")
.OrderBy(role => role.RoleSort)
.ToList();
}
/// <summary>
/// 根据条件分页查询角色数据
/// </summary>
/// <param name="sysRole"></param>
/// <param name="pager"></param>
/// <returns></returns>
public PagedInfo<SysRole> SelectRoleList(SysRole sysRole, PagerInfo pager)
{
var exp = Expressionable.Create<SysRole>();
exp.And(role => role.DelFlag == "0");
exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleName), role => role.RoleName.Contains(sysRole.RoleName));
exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status);
exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey);
var query = Context.Queryable<SysRole>()
.Where(exp.ToExpression())
.OrderBy(x => x.RoleSort)
.Select((role) => new SysRole
{
RoleId = role.RoleId.SelectAll(),
UserNum = SqlFunc.Subqueryable<SysUserRole>().Where(f => f.RoleId == role.RoleId).Count()
});
return query.ToPage(pager);
}
/// <summary>
/// 根据用户查询
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysRole> SelectRolePermissionByUserId(long userId)
{
return Context.Queryable<SysRole>()
.Where(role => role.DelFlag == "0")
.Where(it => SqlFunc.Subqueryable<SysUserRole>().Where(s => s.UserId == userId).Any())
.OrderBy(role => role.RoleSort)
.ToList();
}
/// <summary>
/// 通过角色ID查询角色
/// </summary>
/// <param name="roleId">角色编号</param>
/// <returns></returns>
public SysRole SelectRoleById(long roleId)
{
return GetId(roleId);
}
/// <summary>
/// 通过角色ID删除角色
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public int DeleteRoleByRoleIds(long[] roleId)
{
return Delete(roleId);
}
/// <summary>
/// 获取用户所有角色信息
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysRole> SelectUserRoleListByUserId(long userId)
{
return Context.Queryable<SysUserRole, SysRole>((ur, r) => new JoinQueryInfos(
JoinType.Left, ur.RoleId == r.RoleId
)).Where((ur, r) => ur.UserId == userId)
.Select((ur, r) => r).ToList();
}
#region N-1
/// <summary>
/// 根据角色获取菜单id
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public List<SysRoleMenu> SelectRoleMenuByRoleId(long roleId)
{
return Context.Queryable<SysRoleMenu>().Where(it => it.Role_id == roleId).ToList();
}
/// <summary>
/// 根据用户所有角色获取菜单
/// </summary>
/// <param name="roleIds"></param>
/// <returns></returns>
public List<SysRoleMenu> SelectRoleMenuByRoleIds(long[] roleIds)
{
return Context.Queryable<SysRoleMenu>().Where(it => roleIds.Contains(it.Role_id)).ToList();
}
/// <summary>
/// 批量插入用户菜单
/// </summary>
/// <param name="sysRoleMenus"></param>
/// <returns></returns>
public int AddRoleMenu(List<SysRoleMenu> sysRoleMenus)
{
return Context.Insertable(sysRoleMenus).ExecuteCommand();
}
/// <summary>
/// 删除角色与菜单关联
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public int DeleteRoleMenuByRoleId(long roleId)
{
return Context.Deleteable<SysRoleMenu>().Where(it => it.Role_id == roleId).ExecuteCommand();
}
#endregion
/// <summary>
/// 添加角色
/// </summary>
/// <param name="sysRole"></param>
/// <returns></returns>
public long InsertRole(SysRole sysRole)
{
sysRole.Create_time = DateTime.Now;
return InsertReturnBigIdentity(sysRole);
}
/// <summary>
/// 修改用户角色
/// </summary>
/// <param name="sysRole"></param>
/// <returns></returns>
public int UpdateSysRole(SysRole sysRole)
{
var db = Context;
sysRole.Update_time = db.GetDate();
return db.Updateable<SysRole>()
.SetColumns(it => it.Update_time == sysRole.Update_time)
.SetColumns(it => it.DataScope == sysRole.DataScope)
.SetColumns(it => it.Remark == sysRole.Remark)
.SetColumns(it => it.Update_by == sysRole.Update_by)
//.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly)
.SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly)
.SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName)
.SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey)
.SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort)
.Where(it => it.RoleId == sysRole.RoleId)
.ExecuteCommand();
}
/// <summary>
/// 更改角色权限状态
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
public int UpdateRoleStatus(SysRole role)
{
return Context.Updateable(role).UpdateColumns(t => new { t.Status }).ExecuteCommand();
}
/// <summary>
/// 检查角色权限是否存在
/// </summary>
/// <param name="roleKey">角色权限</param>
/// <returns></returns>
public SysRole CheckRoleKeyUnique(string roleKey)
{
return GetFirst(it => it.RoleKey == roleKey);
}
/// <summary>
/// 校验角色名称是否唯一
/// </summary>
/// <param name="roleName">角色名称</param>
/// <returns></returns>
public SysRole CheckRoleNameUnique(string roleName)
{
return GetFirst(it => it.RoleName == roleName);
}
}
}

View File

@ -1,189 +0,0 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
namespace ZR.Repository.System
{
/// <summary>
/// 用户管理
/// </summary>
[AppService(ServiceLifetime = LifeTime.Transient)]
public class SysUserRepository : BaseRepository<SysUser>
{
/// <summary>
/// 根据条件分页查询用户列表
/// <paramref name="user"/>
/// <paramref name="user"/>
/// </summary>
/// <returns></returns>
public PagedInfo<SysUser> SelectUserList(SysUser user, PagerInfo pager)
{
var exp = Expressionable.Create<SysUser>();
exp.AndIF(!string.IsNullOrEmpty(user.UserName), u => u.UserName.Contains(user.UserName));
exp.AndIF(!string.IsNullOrEmpty(user.Status), u => u.Status == user.Status);
exp.AndIF(user.BeginTime != DateTime.MinValue && user.BeginTime != null, u => u.Create_time >= user.BeginTime);
exp.AndIF(user.EndTime != DateTime.MinValue && user.EndTime != null, u => u.Create_time <= user.EndTime);
exp.AndIF(!user.Phonenumber.IsEmpty(), u => u.Phonenumber == user.Phonenumber);
exp.And(u => u.DelFlag == "0");
if (user.DeptId != 0)
{
List<SysDept> depts = Context.Queryable<SysDept>().ToList();
var newDepts = depts.FindAll(delegate (SysDept dept)
{
string[] parentDeptId = dept.Ancestors.Split(",", StringSplitOptions.RemoveEmptyEntries);
return parentDeptId.Contains(user.DeptId.ToString());
});
string[] deptArr = newDepts.Select(x => x.DeptId.ToString()).ToArray();
exp.AndIF(user.DeptId != 0, u => u.DeptId == user.DeptId || deptArr.Contains(u.DeptId.ToString()));
}
var query = Context.Queryable<SysUser>()
.LeftJoin<SysDept>((u, dept) => u.DeptId == dept.DeptId)
.Where(exp.ToExpression())
.Select((u, dept) => new SysUser
{
UserId = u.UserId.SelectAll(),
DeptName = dept.DeptName,
});
return query.ToPage(pager);
}
/// <summary>
/// 通过用户ID查询用户
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public SysUser SelectUserById(long userId)
{
return Context.Queryable<SysUser>().Filter(null, true).Where(f => f.UserId == userId).First();
}
/// <summary>
/// 校验用户名是否存在
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
public int CheckUserNameUnique(string userName)
{
return Context.Queryable<SysUser>().Where(it => it.UserName == userName).Count();
}
/// <summary>
/// 添加用户
/// </summary>
/// <param name="sysUser"></param>
/// <returns></returns>
public int AddUser(SysUser sysUser)
{
sysUser.Create_time = DateTime.Now;
return Context.Insertable(sysUser).ExecuteReturnIdentity();
}
/// <summary>
/// 重置密码
/// </summary>
/// <param name="userid"></param>
/// <param name="password"></param>
/// <returns></returns>
public int ResetPwd(long userid, string password)
{
return Context.Updateable(new SysUser() { UserId = userid, Password = password })
.UpdateColumns(it => new { it.Password }).ExecuteCommand();
}
/// <summary>
/// 改变用户状态
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int ChangeUserStatus(SysUser user)
{
return Context.Updateable(user).UpdateColumns(t => new { t.Status })
.ExecuteCommand();
}
/// <summary>
/// 删除用户(软删除)
/// </summary>
/// <param name="userid">用户id</param>
/// <returns></returns>
public int DeleteUser(long userid)
{
return Context.Updateable(new SysUser() { UserId = userid, DelFlag = "2" })
.UpdateColumns(t => t.DelFlag)
.ExecuteCommand();
}
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int UpdateUser(SysUser user)
{
return Context.Updateable(user)
.UpdateColumns(t => new
{
t.NickName,
t.Email,
t.Phonenumber,
t.DeptId,
t.Status,
t.Sex,
t.PostIds,
t.Remark,
t.Update_by,
t.Update_time
})
.IgnoreColumns(ignoreAllNullColumns: true)//忽略所有为null
.Where(f => f.UserId == user.UserId).ExecuteCommand();
}
/// <summary>
/// 修改用户头像
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int UpdatePhoto(SysUser user)
{
return Context.Updateable<SysUser>()
.SetColumns(t => new SysUser()
{
Avatar = user.Avatar
})
.Where(f => f.UserId == user.UserId).ExecuteCommand();
}
/// <summary>
/// 登录
/// </summary>
/// <param name="user">登录实体</param>
/// <returns></returns>
public SysUser Login(LoginBodyDto user)
{
return GetFirst(it => it.UserName == user.Username && it.Password == user.Password);
}
/// <summary>
/// 修改登录信息
/// </summary>
/// <param name="user"></param>
/// <param name="userId"></param>
/// <returns></returns>
public void UpdateLoginInfo(LoginBodyDto user, long userId)
{
var db = Context;
db.Updateable(new SysUser() { LoginIP = user.LoginIP, LoginDate = db.GetDate(), UserId = userId })
.UpdateColumns(it => new { it.LoginIP, it.LoginDate })
.ExecuteCommand();
}
}
}

View File

@ -1,72 +0,0 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using SqlSugar;
using System.Collections.Generic;
using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
namespace ZR.Repository.System
{
[AppService(ServiceLifetime = LifeTime.Transient)]
public class SysUserRoleRepository : BaseRepository<SysUserRole>
{
/// <summary>
/// 批量删除角色对应用户
/// </summary>
/// <param name="roleId">角色id</param>
/// <param name="userIds">用户id集合</param>
/// <returns></returns>
public int DeleteRoleUserByUserIds(long roleId, List<long> userIds)
{
return Context.Deleteable<SysUserRole>().Where(it => it.RoleId == roleId && userIds.Contains(it.UserId))
.ExecuteCommand();
}
/// <summary>
/// 获取用户数据根据角色id
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public List<SysUser> GetSysUsersByRoleId(long roleId)
{
return Context.Queryable<SysUserRole, SysUser>((t1, u) => new JoinQueryInfos(
JoinType.Left, t1.UserId == u.UserId))
.Where((t1, u) => t1.RoleId == roleId && u.DelFlag == "0")
.Select((t1, u) => u)
.ToList();
}
/// <summary>
/// 获取用户数据根据角色id
/// </summary>
/// <param name="roleUserQueryDto"></param>
/// <returns></returns>
public PagedInfo<SysUser> GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto)
{
var query = Context.Queryable<SysUserRole, SysUser>((t1, u) => new JoinQueryInfos(
JoinType.Left, t1.UserId == u.UserId))
.Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0");
if (!string.IsNullOrEmpty(roleUserQueryDto.UserName))
{
query = query.Where((t1, u) => u.UserName.Contains(roleUserQueryDto.UserName));
}
return query.Select((t1, u) => u).ToPage(roleUserQueryDto);
}
/// <summary>
/// 获取尚未指派的用户数据根据角色id
/// </summary>
/// <param name="roleUserQueryDto"></param>
/// <returns></returns>
public PagedInfo<SysUser> GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto)
{
var query = Context.Queryable<SysUser>()
.Where(it => it.DelFlag == "0")
.Where(it => SqlFunc.Subqueryable<SysUserRole>().Where(s => s.UserId == it.UserId && s.RoleId == roleUserQueryDto.RoleId).NotAny())
.WhereIF(roleUserQueryDto.UserName.IsNotEmpty(), it => it.UserName.Contains(roleUserQueryDto.UserName));
return query.ToPage(roleUserQueryDto);
}
}
}

View File

@ -1,7 +1,5 @@
using Infrastructure.Attribute;
using SqlSugar;
using ZR.Model.System;
using ZR.Repository.System;
using ZR.Service.System.IService;
namespace ZR.Service.System

View File

@ -5,7 +5,7 @@ using ZR.Model.System.Vo;
namespace ZR.Service.System.IService
{
public interface ISysMenuService
public interface ISysMenuService : IBaseService<SysMenu>
{
//List<SysMenu> SelectMenuList(long userId);
@ -13,7 +13,7 @@ namespace ZR.Service.System.IService
List<SysMenu> SelectTreeMenuList(MenuQueryDto menu, long userId);
SysMenu GetMenuByMenuId(int menuId);
List<SysMenu> GetMenusByMenuId(int menuId);
List<SysMenu> GetMenusByMenuId(int menuId, long userId);
int AddMenu(SysMenu menu);
int EditMenu(SysMenu menu);
@ -28,14 +28,49 @@ namespace ZR.Service.System.IService
List<SysMenu> SelectMenuTreeByUserId(long userId);
List<SysMenu> SelectMenuPermsListByUserId(long userId);
//List<SysMenu> SelectMenuPermsListByUserId(long userId);
List<string> SelectMenuPermsByUserId(long userId);
bool CheckMenuExistRole(long menuId);
//bool CheckMenuExistRole(long menuId);
List<RouterVo> BuildMenus(List<SysMenu> menus);
List<TreeSelectVo> BuildMenuTreeSelect(List<SysMenu> menus);
}
/// <summary>
/// 角色菜单
/// </summary>
public interface ISysRoleMenuService : IBaseService<SysRoleMenu>
{
bool CheckMenuExistRole(long menuId);
/// <summary>
/// 根据角色获取菜单id
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
List<SysRoleMenu> SelectRoleMenuByRoleId(long roleId);
/// <summary>
/// 根据用户所有角色获取菜单
/// </summary>
/// <param name="roleIds"></param>
/// <returns></returns>
List<SysRoleMenu> SelectRoleMenuByRoleIds(long[] roleIds);
/// <summary>
/// 批量插入用户菜单
/// </summary>
/// <param name="sysRoleMenus"></param>
/// <returns></returns>
int AddRoleMenu(List<SysRoleMenu> sysRoleMenus);
/// <summary>
/// 删除角色与菜单关联
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
int DeleteRoleMenuByRoleId(long roleId);
}
}

View File

@ -137,5 +137,7 @@ namespace ZR.Service.System.IService
/// <param name="sysRole">角色信息</param>
/// <returns></returns>
public int UpdateRole(SysRole sysRole);
int UpdateSysRole(SysRole sysRole);
}
}

View File

@ -1,4 +1,5 @@
using ZR.Model;
using System.Collections.Generic;
using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
@ -70,5 +71,16 @@ namespace ZR.Service.System.IService
SysUser Register(RegisterDto dto);
void CheckUserAllowed(SysUser user);
void CheckUserDataScope(long userid, long loginUserId);
/// <summary>
/// 导入
/// </summary>
/// <param name="users"></param>
/// <returns></returns>
string ImportUsers(List<SysUser> users);
SysUser Login(LoginBodyDto user);
void UpdateLoginInfo(LoginBodyDto user, long userId);
}
}

View File

@ -7,7 +7,6 @@ using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
using ZR.Repository;
using ZR.Repository.System;
using ZR.Service.System.IService;
namespace ZR.Service.System
@ -18,11 +17,11 @@ namespace ZR.Service.System
[AppService(ServiceType = typeof(ISysLoginService), ServiceLifetime = LifeTime.Transient)]
public class SysLoginService: BaseService<SysLogininfor>, ISysLoginService
{
private readonly SysUserRepository SysUserRepository;
private readonly ISysUserService SysUserService;
public SysLoginService(SysUserRepository sysUserRepository)
public SysLoginService(ISysUserService sysUserService)
{
SysUserRepository = sysUserRepository;
SysUserService = sysUserService;
}
/// <summary>
@ -35,7 +34,7 @@ namespace ZR.Service.System
//密码md5
loginBody.Password = NETCore.Encrypt.EncryptProvider.Md5(loginBody.Password);
SysUser user = SysUserRepository.Login(loginBody);
SysUser user = SysUserService.Login(loginBody);
logininfor.UserName = loginBody.Username;
logininfor.Status = "1";
logininfor.LoginTime = DateTime.Now;
@ -56,7 +55,7 @@ namespace ZR.Service.System
logininfor.Status = "0";
logininfor.Msg = "登录成功";
AddLoginInfo(logininfor);
SysUserRepository.UpdateLoginInfo(loginBody, user.UserId);
SysUserService.UpdateLoginInfo(loginBody, user.UserId);
return user;
}

View File

@ -1,13 +1,14 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using ZR.Model.System.Dto;
using ZR.Model.System;
using ZR.Model.System.Vo;
using ZR.Repository.System;
using ZR.Service.System.IService;
using ZR.Common;
using Infrastructure.Extensions;
using ZR.Model.System;
using ZR.Model.System.Dto;
using ZR.Model.System.Vo;
using ZR.Service.System.IService;
namespace ZR.Service
{
@ -17,14 +18,10 @@ namespace ZR.Service
[AppService(ServiceType = typeof(ISysMenuService), ServiceLifetime = LifeTime.Transient)]
public class SysMenuService : BaseService<SysMenu>, ISysMenuService
{
public SysMenuRepository MenuRepository;
public ISysRoleService SysRoleService;
public SysMenuService(
SysMenuRepository menuRepository,
ISysRoleService sysRoleService)
public SysMenuService(ISysRoleService sysRoleService)
{
MenuRepository = menuRepository;
SysRoleService = sysRoleService;
}
@ -37,12 +34,12 @@ namespace ZR.Service
List<SysMenu> menuList;
if (SysRoleService.IsAdmin(userId))
{
menuList = MenuRepository.SelectTreeMenuList(menu);
menuList = SelectTreeMenuList(menu);
}
else
{
var userRoles = SysRoleService.SelectUserRoles(userId);
menuList = MenuRepository.SelectTreeMenuListByRoles(menu, userRoles);
menuList = SelectTreeMenuListByRoles(menu, userRoles);
}
return menuList;
}
@ -56,12 +53,12 @@ namespace ZR.Service
List<SysMenu> menuList;
if (SysRoleService.IsAdmin(userId))
{
menuList = MenuRepository.SelectMenuList(menu);
menuList = SelectAllMenuList(menu);
}
else
{
var userRoles = SysRoleService.SelectUserRoles(userId);
menuList = MenuRepository.SelectMenuListByRoles(menu, userRoles);
menuList = SelectMenuListByRoles(menu, userRoles);
}
return menuList;
}
@ -73,17 +70,29 @@ namespace ZR.Service
/// <returns></returns>
public SysMenu GetMenuByMenuId(int menuId)
{
return MenuRepository.SelectMenuById(menuId);
return GetFirst(it => it.MenuId == menuId);
}
/// <summary>
/// 根据菜单id获取菜单列表
/// </summary>
/// <param name="menuId"></param>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysMenu> GetMenusByMenuId(int menuId)
public List<SysMenu> GetMenusByMenuId(int menuId, long userId)
{
var list = MenuRepository.GetList(f => f.ParentId == menuId).OrderBy(f => f.OrderNum).ToList();
var menuExpression = Expressionable.Create<SysMenu>();
menuExpression.And(c => c.ParentId == menuId);
if (!SysRoleService.IsAdmin(userId))
{
var userRoles = SysRoleService.SelectUserRoles(userId);
var roleMenus = Context.Queryable<SysRoleMenu>()
.Where(r => userRoles.Contains(r.Role_id)).Select(s => s.Menu_id).ToList();
menuExpression.And(c => roleMenus.Contains(c.MenuId));
}
var list = GetList(menuExpression.ToExpression()).OrderBy(f => f.OrderNum).ToList();
Context.ThenMapper(list, item =>
{
item.SubNum = Context.Queryable<SysMenu>().SetContext(x => x.ParentId, () => item.MenuId, item).Count;
@ -98,7 +107,8 @@ namespace ZR.Service
/// <returns></returns>
public int AddMenu(SysMenu menu)
{
return MenuRepository.AddMenu(menu);
menu.Create_time = DateTime.Now;
return InsertReturnIdentity(menu);
}
/// <summary>
@ -109,7 +119,7 @@ namespace ZR.Service
public int EditMenu(SysMenu menu)
{
menu.Icon = string.IsNullOrEmpty(menu.Icon) ? "" : menu.Icon;
return MenuRepository.EditMenu(menu);
return Update(menu, false);
}
/// <summary>
@ -119,7 +129,7 @@ namespace ZR.Service
/// <returns></returns>
public int DeleteMenuById(int menuId)
{
return MenuRepository.DeleteMenuById(menuId);
return Delete(menuId);
}
/// <summary>
@ -130,7 +140,7 @@ namespace ZR.Service
public string CheckMenuNameUnique(SysMenu menu)
{
long menuId = menu.MenuId == 0 ? -1 : menu.MenuId;
SysMenu info = MenuRepository.CheckMenuNameUnique(menu);
SysMenu info = GetFirst(it => it.MenuName == menu.MenuName && it.ParentId == menu.ParentId);
//if (info != null && menuId != info.menuId && menu.menuName.Equals(info.menuName))
//{
@ -146,11 +156,11 @@ namespace ZR.Service
/// <summary>
/// 菜单排序
/// </summary>
/// <param name="menuId"></param>
/// <param name="menuDto"></param>
/// <returns></returns>
public int ChangeSortMenu(MenuDto menuDto)
{
return MenuRepository.ChangeSortMenu(menuDto);
return Update(new SysMenu() { MenuId = menuDto.MenuId, OrderNum = menuDto.OrderNum }, it => new { it.OrderNum });
}
/// <summary>
@ -160,7 +170,7 @@ namespace ZR.Service
/// <returns></returns>
public bool HasChildByMenuId(long menuId)
{
return MenuRepository.HasChildByMenuId(menuId) > 0;
return Count(it => it.ParentId == menuId) > 0;
}
/// <summary>
@ -173,25 +183,15 @@ namespace ZR.Service
MenuQueryDto dto = new() { Status = "0", MenuTypeIds = "M,C" };
if (SysRoleService.IsAdmin(userId))
{
return MenuRepository.SelectTreeMenuList(dto);
return SelectTreeMenuList(dto);
}
else
{
List<long> roleIds = SysRoleService.SelectUserRoles(userId);
return MenuRepository.SelectTreeMenuListByRoles(dto, roleIds);
return SelectTreeMenuListByRoles(dto, roleIds);
}
}
/// <summary>
/// 查询菜单权限
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysMenu> SelectMenuPermsListByUserId(long userId)
{
return MenuRepository.SelectMenuPermsByUserId(userId);
}
/// <summary>
/// 查询精确到按钮的操作权限
/// </summary>
@ -199,25 +199,96 @@ namespace ZR.Service
/// <returns></returns>
public List<string> SelectMenuPermsByUserId(long userId)
{
var menuList = SelectMenuPermsListByUserId(userId).Where(f => !string.IsNullOrEmpty(f.Perms));
var menus = Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((m, rm, ur, r) => new JoinQueryInfos(
JoinType.Left, m.MenuId == rm.Menu_id,
JoinType.Left, rm.Role_id == ur.RoleId,
JoinType.Left, ur.RoleId == r.RoleId
))
.Where((m, rm, ur, r) => m.Status == "0" && r.Status == "0" && ur.UserId == userId)
.Select((m, rm, ur, r) => m).ToList();
var menuList = menus.Where(f => !string.IsNullOrEmpty(f.Perms));
return menuList.Select(x => x.Perms).Distinct().ToList();
}
#region RoleMenu
/// <summary>
/// 查询菜单使用数量
/// 根据用户查询系统菜单列表
/// </summary>
/// <param name="menuId"></param>
/// <param name="menu"></param>
/// <param name="roles">用户角色集合</param>
/// <returns></returns>
public bool CheckMenuExistRole(long menuId)
private List<SysMenu> SelectTreeMenuListByRoles(MenuQueryDto menu, List<long> roles)
{
return MenuRepository.CheckMenuExistRole(menuId) > 0;
var roleMenus = Context.Queryable<SysRoleMenu>()
.Where(r => roles.Contains(r.Role_id))
.Select(f => f.Menu_id).Distinct().ToList();
return Queryable()
.Where(c => roleMenus.Contains(c.MenuId))
.WhereIF(!string.IsNullOrEmpty(menu.MenuName), (c) => c.MenuName.Contains(menu.MenuName))
.WhereIF(!string.IsNullOrEmpty(menu.Visible), (c) => c.Visible == menu.Visible)
.WhereIF(!string.IsNullOrEmpty(menu.Status), (c) => c.Status == menu.Status)
.WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), c => menu.MenuTypeIdArr.Contains(c.MenuType))
.OrderBy((c) => new { c.ParentId, c.OrderNum })
.Select(c => c)
.ToTree(it => it.Children, it => it.ParentId, 0);
}
#endregion
/// <summary>
/// 获取所有菜单
/// </summary>
/// <returns></returns>
private List<SysMenu> SelectAllMenuList(MenuQueryDto menu)
{
return Queryable()
.WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName))
.WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible)
.WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status)
.WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId)
.OrderBy(it => new { it.ParentId, it.OrderNum })
.ToList();
}
/// <summary>
/// 根据用户查询系统菜单列表
/// </summary>
/// <param name="sysMenu"></param>
/// <param name="roles">用户角色集合</param>
/// <returns></returns>
private List<SysMenu> SelectMenuListByRoles(MenuQueryDto sysMenu, List<long> roles)
{
var roleMenus = Context.Queryable<SysRoleMenu>()
.Where(r => roles.Contains(r.Role_id));
return Queryable()
.InnerJoin(roleMenus, (c, j) => c.MenuId == j.Menu_id)
.Where((c, j) => c.Status == "0")
.WhereIF(!string.IsNullOrEmpty(sysMenu.MenuName), (c, j) => c.MenuName.Contains(sysMenu.MenuName))
.WhereIF(!string.IsNullOrEmpty(sysMenu.Visible), (c, j) => c.Visible == sysMenu.Visible)
.OrderBy((c, j) => new { c.ParentId, c.OrderNum })
.Select(c => c)
.ToList();
}
/// <summary>
/// 获取所有菜单(菜单管理)
/// </summary>
/// <returns></returns>
public List<SysMenu> SelectTreeMenuList(MenuQueryDto menu)
{
int parentId = menu.ParentId != null ? (int)menu.ParentId : 0;
var list = Queryable()
.WhereIF(!string.IsNullOrEmpty(menu.MenuName), it => it.MenuName.Contains(menu.MenuName))
.WhereIF(!string.IsNullOrEmpty(menu.Visible), it => it.Visible == menu.Visible)
.WhereIF(!string.IsNullOrEmpty(menu.Status), it => it.Status == menu.Status)
.WhereIF(!string.IsNullOrEmpty(menu.MenuTypeIds), it => menu.MenuTypeIdArr.Contains(it.MenuType))
.WhereIF(menu.ParentId != null, it => it.ParentId == menu.ParentId)
.OrderBy(it => new { it.ParentId, it.OrderNum })
.ToTree(it => it.Children, it => it.ParentId, parentId);
return list;
}
#region
///// <summary>

View File

@ -0,0 +1,50 @@
using Infrastructure.Attribute;
using System.Collections.Generic;
using System.Linq;
using ZR.Model.System;
using ZR.Service.System.IService;
namespace ZR.Service.System
{
/// <summary>
/// 角色菜单
/// </summary>
[AppService(ServiceType = typeof(ISysRoleMenuService), ServiceLifetime = LifeTime.Transient)]
public class SysRoleMenuService : BaseService<SysRoleMenu>, ISysRoleMenuService
{
public int AddRoleMenu(List<SysRoleMenu> sysRoleMenus)
{
return Insert(sysRoleMenus);
}
public bool CheckMenuExistRole(long menuId)
{
return Count(it => it.Menu_id == menuId) > 0;
}
public int DeleteRoleMenuByRoleId(long roleId)
{
return Delete(roleId);
}
/// <summary>
/// 根据角色获取菜单id
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public List<SysRoleMenu> SelectRoleMenuByRoleId(long roleId)
{
return GetList(f => f.Role_id == roleId);
}
/// <summary>
/// 根据用户所有角色获取菜单
/// </summary>
/// <param name="roleIds"></param>
/// <returns></returns>
public List<SysRoleMenu> SelectRoleMenuByRoleIds(long[] roleIds)
{
return GetList(it => roleIds.Contains(it.Role_id));
}
}
}

View File

@ -1,14 +1,13 @@
using Infrastructure;
using Infrastructure.Attribute;
using Infrastructure.Model;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZR.Model;
using ZR.Model.System;
using ZR.Repository.System;
using ZR.Repository;
using ZR.Service.System.IService;
namespace ZR.Service
@ -19,29 +18,43 @@ namespace ZR.Service
[AppService(ServiceType = typeof(ISysRoleService), ServiceLifetime = LifeTime.Transient)]
public class SysRoleService : BaseService<SysRole>, ISysRoleService
{
private SysRoleRepository SysRoleRepository;
private ISysUserRoleService SysUserRoleService;
private ISysDeptService DeptService;
private ISysRoleMenuService RoleMenuService;
public SysRoleService(
SysRoleRepository sysRoleRepository,
ISysUserRoleService sysUserRoleService,
ISysDeptService deptService)
ISysDeptService deptService,
ISysRoleMenuService roleMenuService)
{
SysRoleRepository = sysRoleRepository;
SysUserRoleService = sysUserRoleService;
DeptService = deptService;
RoleMenuService = roleMenuService;
}
/// <summary>
/// 根据条件分页查询角色数据
/// </summary>
/// <param name="role">角色信息</param>
/// <param name="sysRole">角色信息</param>
/// <param name="pager">分页信息</param>
/// <returns>角色数据集合信息</returns>
public PagedInfo<SysRole> SelectRoleList(SysRole role, PagerInfo pager)
public PagedInfo<SysRole> SelectRoleList(SysRole sysRole, PagerInfo pager)
{
return SysRoleRepository.SelectRoleList(role, pager);
var exp = Expressionable.Create<SysRole>();
exp.And(role => role.DelFlag == "0");
exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleName), role => role.RoleName.Contains(sysRole.RoleName));
exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status);
exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey);
var query = Context.Queryable<SysRole>()
.Where(exp.ToExpression())
.OrderBy(x => x.RoleSort)
.Select((role) => new SysRole
{
RoleId = role.RoleId.SelectAll(),
UserNum = SqlFunc.Subqueryable<SysUserRole>().Where(f => f.RoleId == role.RoleId).Count()
});
return query.ToPage(pager);
}
/// <summary>
@ -50,7 +63,10 @@ namespace ZR.Service
/// <returns></returns>
public List<SysRole> SelectRoleAll()
{
return SysRoleRepository.SelectRoleList();
return Queryable()
.Where(role => role.DelFlag == "0")
.OrderBy(role => role.RoleSort)
.ToList();
}
/// <summary>
@ -60,7 +76,11 @@ namespace ZR.Service
/// <returns></returns>
public List<SysRole> SelectRolePermissionByUserId(long userId)
{
return SysRoleRepository.SelectRolePermissionByUserId(userId);
return Queryable()
.Where(role => role.DelFlag == "0")
.Where(it => SqlFunc.Subqueryable<SysUserRole>().Where(s => s.UserId == userId).Any())
.OrderBy(role => role.RoleSort)
.ToList();
}
/// <summary>
@ -70,7 +90,7 @@ namespace ZR.Service
/// <returns>角色对象信息</returns>
public SysRole SelectRoleById(long roleId)
{
return SysRoleRepository.SelectRoleById(roleId);
return GetId(roleId);
}
/// <summary>
@ -89,17 +109,17 @@ namespace ZR.Service
throw new CustomException($"{role.RoleName}已分配,不能删除");
}
}
return SysRoleRepository.DeleteRoleByRoleIds(roleIds);
return Delete(roleIds);
}
/// <summary>
/// 更改角色权限状态
/// </summary>
/// <param name="SysRoleDto"></param>
/// <param name="roleDto"></param>
/// <returns></returns>
public int UpdateRoleStatus(SysRole roleDto)
{
return SysRoleRepository.UpdateRoleStatus(roleDto);
return Update(roleDto, it => new { it.Status }, f => f.RoleId == roleDto.RoleId);
}
/// <summary>
@ -110,7 +130,7 @@ namespace ZR.Service
public string CheckRoleKeyUnique(SysRole sysRole)
{
long roleId = 0 == sysRole.RoleId ? -1L : sysRole.RoleId;
SysRole info = SysRoleRepository.CheckRoleKeyUnique(sysRole.RoleKey);
SysRole info = GetFirst(it => it.RoleKey == sysRole.RoleKey);
if (info != null && info.RoleId != roleId)
{
return UserConstants.NOT_UNIQUE;
@ -137,7 +157,8 @@ namespace ZR.Service
/// <returns></returns>
public long InsertRole(SysRole sysRole)
{
sysRole.RoleId = SysRoleRepository.InsertRole(sysRole);
sysRole.Create_time = DateTime.Now;
sysRole.RoleId = InsertReturnBigIdentity(sysRole);
//插入角色部门数据
DeptService.InsertRoleDepts(sysRole);
@ -151,7 +172,7 @@ namespace ZR.Service
/// <returns></returns>
public int DeleteRoleMenuByRoleId(long roleId)
{
return SysRoleRepository.DeleteRoleMenuByRoleId(roleId);
return RoleMenuService.DeleteRoleMenuByRoleId(roleId);
}
/// <summary>
@ -195,7 +216,7 @@ namespace ZR.Service
//添加角色菜单
if (sysRoleMenus.Count > 0)
{
rows = SysRoleRepository.AddRoleMenu(sysRoleMenus);
rows = RoleMenuService.AddRoleMenu(sysRoleMenus);
}
return rows;
@ -210,7 +231,7 @@ namespace ZR.Service
{
List<string> roles = SelectUserRoleKeys(userid);
return ((IList)roles).Contains("admin");
return ((IList)roles).Contains(GlobalConstant.AdminRole);
}
/// <summary>
@ -232,7 +253,7 @@ namespace ZR.Service
/// <returns></returns>
public List<long> SelectUserRoleMenus(long roleId)
{
var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId);
var list = RoleMenuService.SelectRoleMenuByRoleId(roleId);
return list.Select(x => x.Menu_id).Distinct().ToList();
}
@ -244,7 +265,7 @@ namespace ZR.Service
/// <returns></returns>
public List<long> SelectRoleMenuByRoleIds(long[] roleIds)
{
return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds)
return RoleMenuService.SelectRoleMenuByRoleIds(roleIds)
.Select(x => x.Menu_id)
.Distinct().ToList();
}
@ -256,7 +277,10 @@ namespace ZR.Service
/// <returns></returns>
public List<SysRole> SelectUserRoleListByUserId(long userId)
{
return SysRoleRepository.SelectUserRoleListByUserId(userId);
return Context.Queryable<SysUserRole, SysRole>((ur, r) => new JoinQueryInfos(
JoinType.Left, ur.RoleId == r.RoleId
)).Where((ur, r) => ur.UserId == userId)
.Select((ur, r) => r).ToList();
}
/// <summary>
@ -304,7 +328,7 @@ namespace ZR.Service
var result = UseTran(() =>
{
//修改角色信息
SysRoleRepository.UpdateSysRole(sysRole);
UpdateSysRole(sysRole);
//删除角色与部门管理
DeptService.DeleteRoleDeptByRoleId(sysRole.RoleId);
//插入角色部门数据
@ -313,5 +337,29 @@ namespace ZR.Service
return result.IsSuccess ? 1 : 0;
}
/// <summary>
/// 修改用户角色
/// </summary>
/// <param name="sysRole"></param>
/// <returns></returns>
public int UpdateSysRole(SysRole sysRole)
{
var db = Context;
sysRole.Update_time = db.GetDate();
return db.Updateable<SysRole>()
.SetColumns(it => it.Update_time == sysRole.Update_time)
.SetColumns(it => it.DataScope == sysRole.DataScope)
.SetColumns(it => it.Remark == sysRole.Remark)
.SetColumns(it => it.Update_by == sysRole.Update_by)
//.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly)
.SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly)
.SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName)
.SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey)
.SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort)
.Where(it => it.RoleId == sysRole.RoleId)
.ExecuteCommand();
}
}
}

View File

@ -1,9 +1,11 @@
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using SqlSugar;
using System.Collections.Generic;
using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
using ZR.Repository.System;
using ZR.Repository;
using ZR.Service.System.IService;
namespace ZR.Service.System
@ -14,12 +16,12 @@ namespace ZR.Service.System
[AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)]
public class SysUserRoleService : BaseService<SysUserRole>, ISysUserRoleService
{
public SysUserRoleRepository SysUserRoleRepository;
//public SysUserRoleRepository SysUserRoleRepository;
public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository)
{
SysUserRoleRepository = sysUserRoleRepository;
}
//public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository)
//{
// SysUserRoleRepository = sysUserRoleRepository;
//}
/// <summary>
/// 通过角色ID查询角色使用数量
@ -38,7 +40,7 @@ namespace ZR.Service.System
/// <returns></returns>
public int DeleteUserRoleByUserId(int userId)
{
return Deleteable().Where(it => it.UserId == userId).ExecuteCommand();
return Delete(it => it.UserId == userId) ? 1 : 0;
}
/// <summary>
@ -49,7 +51,7 @@ namespace ZR.Service.System
/// <returns></returns>
public int DeleteRoleUserByUserIds(long roleId, List<long> userIds)
{
return SysUserRoleRepository.DeleteRoleUserByUserIds(roleId, userIds);
return Delete(it => it.RoleId == roleId && userIds.Contains(it.UserId)) ? 1 : 0;
}
/// <summary>
@ -69,7 +71,11 @@ namespace ZR.Service.System
/// <returns></returns>
public List<SysUser> GetSysUsersByRoleId(long roleId)
{
return SysUserRoleRepository.GetSysUsersByRoleId(roleId);
return Context.Queryable<SysUserRole, SysUser > ((t1, u) => new JoinQueryInfos(
JoinType.Left, t1.UserId == u.UserId))
.Where((t1, u) => t1.RoleId == roleId && u.DelFlag == "0")
.Select((t1, u) => u)
.ToList();
}
/// <summary>
@ -79,7 +85,15 @@ namespace ZR.Service.System
/// <returns></returns>
public PagedInfo<SysUser> GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto)
{
return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto);
//return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto);
var query = Context.Queryable<SysUserRole, SysUser>((t1, u) => new JoinQueryInfos(
JoinType.Left, t1.UserId == u.UserId))
.Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0");
if (!string.IsNullOrEmpty(roleUserQueryDto.UserName))
{
query = query.Where((t1, u) => u.UserName.Contains(roleUserQueryDto.UserName));
}
return query.Select((t1, u) => u).ToPage(roleUserQueryDto);
}
/// <summary>
@ -89,7 +103,12 @@ namespace ZR.Service.System
/// <returns></returns>
public PagedInfo<SysUser> GetExcludedSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto)
{
return SysUserRoleRepository.GetExcludedSysUsersByRoleId(roleUserQueryDto);
var query = Context.Queryable<SysUser>()
.Where(it => it.DelFlag == "0")
.Where(it => SqlFunc.Subqueryable<SysUserRole>().Where(s => s.UserId == it.UserId && s.RoleId == roleUserQueryDto.RoleId).NotAny())
.WhereIF(roleUserQueryDto.UserName.IsNotEmpty(), it => it.UserName.Contains(roleUserQueryDto.UserName));
return query.ToPage(roleUserQueryDto);
}
/// <summary>
@ -115,7 +134,7 @@ namespace ZR.Service.System
/// <returns></returns>
public int InsertRoleUser(RoleUsersCreateDto roleUsersCreateDto)
{
List<SysUserRole> userRoles = new List<SysUserRole>();
List<SysUserRole> userRoles = new();
foreach (var item in roleUsersCreateDto.UserIds)
{
userRoles.Add(new SysUserRole() { RoleId = roleUsersCreateDto.RoleId, UserId = item });

View File

@ -1,17 +1,16 @@
using Infrastructure;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using Microsoft.AspNetCore.Http;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZR.Common;
using ZR.Model;
using ZR.Model.System;
using ZR.Model.System.Dto;
using ZR.Repository.System;
using ZR.Repository;
using ZR.Service.System.IService;
namespace ZR.Service
@ -22,18 +21,15 @@ namespace ZR.Service
[AppService(ServiceType = typeof(ISysUserService), ServiceLifetime = LifeTime.Transient)]
public class SysUserService : BaseService<SysUser>, ISysUserService
{
private readonly SysUserRepository UserRepository;
private readonly ISysRoleService RoleService;
private readonly ISysUserRoleService UserRoleService;
private readonly ISysUserPostService UserPostService;
public SysUserService(
SysUserRepository userRepository,
ISysRoleService sysRoleService,
ISysUserRoleService userRoleService,
ISysUserPostService userPostService)
{
UserRepository = userRepository;
RoleService = sysRoleService;
UserRoleService = userRoleService;
UserPostService = userPostService;
@ -45,9 +41,36 @@ namespace ZR.Service
/// <returns></returns>
public PagedInfo<SysUser> SelectUserList(SysUser user, PagerInfo pager)
{
var list = UserRepository.SelectUserList(user, pager);
var exp = Expressionable.Create<SysUser>();
exp.AndIF(!string.IsNullOrEmpty(user.UserName), u => u.UserName.Contains(user.UserName));
exp.AndIF(!string.IsNullOrEmpty(user.Status), u => u.Status == user.Status);
exp.AndIF(user.BeginTime != DateTime.MinValue && user.BeginTime != null, u => u.Create_time >= user.BeginTime);
exp.AndIF(user.EndTime != DateTime.MinValue && user.EndTime != null, u => u.Create_time <= user.EndTime);
exp.AndIF(!user.Phonenumber.IsEmpty(), u => u.Phonenumber == user.Phonenumber);
exp.And(u => u.DelFlag == "0");
return list;
if (user.DeptId != 0)
{
List<SysDept> depts = Context.Queryable<SysDept>().ToList();
var newDepts = depts.FindAll(delegate (SysDept dept)
{
string[] parentDeptId = dept.Ancestors.Split(",", StringSplitOptions.RemoveEmptyEntries);
return parentDeptId.Contains(user.DeptId.ToString());
});
string[] deptArr = newDepts.Select(x => x.DeptId.ToString()).ToArray();
exp.AndIF(user.DeptId != 0, u => u.DeptId == user.DeptId || deptArr.Contains(u.DeptId.ToString()));
}
var query = Queryable()
.LeftJoin<SysDept>((u, dept) => u.DeptId == dept.DeptId)
.Where(exp.ToExpression())
.Select((u, dept) => new SysUser
{
UserId = u.UserId.SelectAll(),
DeptName = dept.DeptName,
});
return query.ToPage(pager);
}
/// <summary>
@ -57,7 +80,7 @@ namespace ZR.Service
/// <returns></returns>
public SysUser SelectUserById(long userId)
{
var user = UserRepository.SelectUserById(userId);
var user = Queryable().Filter(null, true).Where(f => f.UserId == userId).First();
if (user != null && user.UserId > 0)
{
user.Roles = RoleService.SelectUserRoleListByUserId(userId);
@ -73,7 +96,7 @@ namespace ZR.Service
/// <returns></returns>
public string CheckUserNameUnique(string userName)
{
int count = UserRepository.CheckUserNameUnique(userName);
int count = Count(it => it.UserName == userName);
if (count > 0)
{
return UserConstants.NOT_UNIQUE;
@ -88,7 +111,8 @@ namespace ZR.Service
/// <returns></returns>
public long InsertUser(SysUser sysUser)
{
long userId = UserRepository.AddUser(sysUser);
sysUser.Create_time = DateTime.Now;
long userId = Insertable(sysUser).ExecuteReturnIdentity();
sysUser.UserId = userId;
//新增用户角色信息
UserRoleService.InsertUserRole(sysUser);
@ -119,12 +143,25 @@ namespace ZR.Service
UserPostService.Delete(user.UserId);
// 新增用户与岗位管理
UserPostService.InsertUserPost(user);
return UserRepository.UpdateUser(user);
return ChangeUser(user);
}
public int ChangeUser(SysUser user)
{
return UserRepository.UpdateUser(user);
user.Update_time = DateTime.Now;
return Update(user, t => new
{
t.NickName,
t.Email,
t.Phonenumber,
t.DeptId,
t.Status,
t.Sex,
t.PostIds,
t.Remark,
t.Update_by,
t.Update_time
}, true);
}
/// <summary>
@ -135,12 +172,17 @@ namespace ZR.Service
/// <returns></returns>
public int ResetPwd(long userid, string password)
{
return UserRepository.ResetPwd(userid, password);
return Update(new SysUser() { UserId = userid, Password = password }, it => new { it.Password }, f => f.UserId == userid);
}
/// <summary>
/// 修改用户状态
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public int ChangeUserStatus(SysUser user)
{
return UserRepository.ChangeUserStatus(user);
return Update(user, it => new { it.Status }, f => f.UserId == user.UserId);
}
/// <summary>
@ -155,7 +197,7 @@ namespace ZR.Service
UserRoleService.DeleteUserRoleByUserId((int)userid);
// 删除用户与岗位关联
UserPostService.Delete(userid);
return UserRepository.DeleteUser(userid);
return Update(new SysUser() { UserId = userid, DelFlag = "2" }, it => new { it.DelFlag }, f => f.UserId == userid);
}
/// <summary>
@ -165,7 +207,7 @@ namespace ZR.Service
/// <returns></returns>
public int UpdatePhoto(SysUser user)
{
return UserRepository.UpdatePhoto(user);
return Update(user, it => new { it.Avatar }, f => f.UserId == user.UserId); ;
}
/// <summary>
@ -192,7 +234,7 @@ namespace ZR.Service
Remark = "用户注册"
};
user.UserId = UserRepository.AddUser(user);
user.UserId = Insertable(user).ExecuteReturnIdentity();
return user;
}
@ -265,5 +307,26 @@ namespace ZR.Service
return msg;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="user">登录实体</param>
/// <returns></returns>
public SysUser Login(LoginBodyDto user)
{
return GetFirst(it => it.UserName == user.Username && it.Password == user.Password);
}
/// <summary>
/// 修改登录信息
/// </summary>
/// <param name="user"></param>
/// <param name="userId"></param>
/// <returns></returns>
public void UpdateLoginInfo(LoginBodyDto user, long userId)
{
Update(new SysUser() { LoginIP = user.LoginIP, LoginDate = DateTime.Now, UserId = userId },it => new { it.LoginIP, it.LoginDate });
}
}
}