using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using YiSha.Data.Repository; using YiSha.Entity.SystemManage; using YiSha.Enum.SystemManage; using YiSha.Model.Param.SystemManage; using YiSha.Util.Extension; using YiSha.Util.Model; using YiSha.Util; using YiSha.Enum; using YiSha.IService.SystemManage; namespace YiSha.Service.SystemManage { public partial class RoleService { private IRepositoryFactory _baseRepository; private IMenuAuthorizeService _menuAuthorizeService; public RoleService(IRepositoryFactory baseRepository, IMenuAuthorizeService menuAuthorizeService) { _baseRepository = baseRepository; _menuAuthorizeService = menuAuthorizeService; } #region 获取数据 public async Task> GetListPartial(RoleListParam param) { var expression = ListFilterPartial(param); var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression); return list.ToList(); } public async Task> GetPageListPartial(RoleListParam param, Pagination pagination) { var expression = ListFilterPartial(param); var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression, pagination); return list.ToList(); } public async Task GetEntityPartial(int id) { return await _baseRepository.BaseRepository(dbConnectType).FindEntity(id); } public async Task GetMaxSortPartial() { object result = await _baseRepository.BaseRepository(dbConnectType).FindObject("SELECT MAX(RoleSort) FROM SysRole"); int sort = result.ParseToInt(); sort++; return sort; } public bool ExistRoleNamePartial(RoleEntity entity) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No); if (entity.Id.IsNullOrZero()) { expression = expression.And(t => t.RoleName == entity.RoleName); } else { expression = expression.And(t => t.RoleName == entity.RoleName && t.Id != entity.Id); } return _baseRepository.BaseRepository(dbConnectType).IQueryable(expression).Count() > 0 ? true : false; } #endregion #region 提交数据 public async Task SaveFormPartial(RoleEntity entity) { var isAdd = false; try { //如果id为0,先在数据库中新增用户信息,获取用户的userid便于职位、角色信息的关联(事务中无法获取到用户的userid) if (entity.Id.IsNullOrZero()) { isAdd = true; //新增角色 await entity.Create(); await _baseRepository.BaseRepository(dbConnectType).Insert(entity); } // 角色对应的菜单、页面和按钮权限 var menuAuthorizeList = new List(); if (!string.IsNullOrEmpty(entity.MenuIds)) { foreach (int menuId in TextHelper.SplitToArray(entity.MenuIds, ',')) { MenuAuthorizeEntity menuAuthorizeEntity = new MenuAuthorizeEntity(); menuAuthorizeEntity.AuthorizeId = entity.Id; menuAuthorizeEntity.MenuId = menuId; menuAuthorizeEntity.AuthorizeType = AuthorizeTypeEnum.Role.ParseToInt(); await menuAuthorizeEntity.Create(); menuAuthorizeList.Add(menuAuthorizeEntity); } } //开启事务 var db = await _baseRepository.BaseRepository(dbConnectType).BeginTrans(); try { if (!isAdd) { //修改角色 await db.Delete(t => t.AuthorizeId == entity.Id); await entity.Modify(); await db.Update(entity); } if (menuAuthorizeList.Any()) await _menuAuthorizeService.InsertMany(menuAuthorizeList); await db.CommitTrans(); } catch { await db.RollbackTrans(); throw; } } catch { //如果id为0且用户的userid不为零,则需要删除新增的用户信息 if (isAdd) { await _baseRepository.BaseRepository(dbConnectType).Delete(entity); } } } public async Task DeleteFormPartial(string ids) { string[] idArr = TextHelper.SplitToArray(ids, ','); await _baseRepository.BaseRepository(dbConnectType).Delete(idArr); } #endregion #region 私有方法 private Expression> ListFilterPartial(RoleListParam param) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No); if (param != null) { if (!string.IsNullOrEmpty(param.RoleName)) { expression = expression.And(t => t.RoleName.Contains(param.RoleName)); } if (!string.IsNullOrEmpty(param.RoleIds)) { int[] roleIdArr = TextHelper.SplitToArray(param.RoleIds, ','); expression = expression.And(t => roleIdArr.Contains(t.Id)); } if (!string.IsNullOrEmpty(param.RoleName)) { expression = expression.And(t => t.RoleName.Contains(param.RoleName)); } if (param.RoleStatus > -1) { expression = expression.And(t => t.RoleStatus == param.RoleStatus); } if (!string.IsNullOrEmpty(param.StartTime.ParseToString())) { expression = expression.And(t => t.BaseModifyTime >= param.StartTime); } if (!string.IsNullOrEmpty(param.EndTime.ParseToString())) { param.EndTime = param.EndTime.Value.Date.Add(new TimeSpan(23, 59, 59)); expression = expression.And(t => t.BaseModifyTime <= param.EndTime); } } return expression; } #endregion } }