public void Update(PermissionInput entity) { this.DbHelper.Execute(this.Table, proc => proc.AsUpdate(entity, "ParentId", "Name", "Modifier", "ModifyTime") .Where("Id", entity.Id) ); }
public void Delete(PermissionInput entity) { entity.IsDeleted = 1; this.DbHelper.Execute(this.Table, proc => proc.AsUpdate(entity, "IsDeleted", "Modifier", "ModifyTime") .Where("Id", entity.Id) ); }
public async Task <bool> SaveAsync(PermissionInput permissionInput, ModelStateDictionary modelState) { bool result = await _repository.SaveAsync(permissionInput, modelState); if (result) { await RemoveCacheAsync(); } else { modelState.AddModelError("Name", "添加或编辑时保存失败"); } return(result); }
public async Task <bool> SaveAsync(PermissionInput permissionInput, ModelStateDictionary modelState) { bool result = await _manager.SaveAsync(permissionInput, modelState); if (result) { CleanupCache(); } else { modelState.AddModelError("Name", "添加或编辑时保存失败"); } return(result); }
/// <summary> /// SaveAsync /// </summary> /// <param name="permissionInput"></param> /// <param name="modelState"></param> /// <returns></returns> public async Task <bool> SaveAsync(PermissionInput permissionInput, ModelStateDictionary modelState) { string sql; Permission permissionToSave = null; if (!permissionInput.PermissionId.IsNullOrEmpty()) { permissionToSave = await _context.Permission.FirstOrDefaultAsync(m => m.PermissionId == permissionInput.PermissionId.Value); if (permissionInput.PermissionId == permissionInput.ParentId) { modelState.AddModelError("PermissionId", "尝试将自身作为父节点"); return(false); } } //添加操作 if (permissionToSave == null) { #region 添加操作 //创建要保存的对象 permissionToSave = new Permission { //提取权限时,permissionToSave的PermissionId为null,这时不用创建新Id PermissionId = permissionInput.PermissionId.IsNullOrEmpty() ? Guid.NewGuid() : permissionInput.PermissionId.Value, ParentId = permissionInput.ParentId, ModuleName = permissionInput.ModuleName, Name = permissionInput.Name, }; _context.Permission.Add(permissionToSave); //如果添加的是新的顶级节点,直接添加到末尾,不会影响其他节点 if (permissionInput.ParentId.IsNullOrEmpty()) { permissionToSave.DisplayOrder = await GetMaxDisplayOrderAsync() + 1; permissionToSave.Level = 1; } else//如果添加的是子节点,会影响其他节点的DisplayOrder { //父节点树的最大DisplayerOrder int maxDisplayOrderInParentTree = await GetMaxDisplayOrderInParentTreeAsync(permissionInput.ParentId.Value); //父节点树的最大DisplayerOrder基础上加1作为保存对象的DisplayOrder permissionToSave.DisplayOrder = maxDisplayOrderInParentTree + 1; //父节点的Level基础上加1作为保存对象的Level permissionToSave.Level = await GetLevelAsync(permissionInput.ParentId.Value) + 1; //父节点树之后的所有节点的DisplayOrder加1 sql = "Update Permission Set DisplayOrder=DisplayOrder+1 Where DisplayOrder > @DisplayOrder"; await _context.Database.ExecuteSqlCommandAsync(sql, new SqlParameter("DisplayOrder", maxDisplayOrderInParentTree)); } #endregion } else//编辑操作 { permissionToSave.ModuleName = permissionInput.ModuleName; permissionToSave.Name = permissionInput.Name; //如果父节点不改变,则仅仅保存数据就行了。下面处理的是父节点改变了的情况 //如果父节点改变(从无父节点到有父节点,从有父节点到无父节点,从一个父节点到另一个父节点) if (permissionInput.ParentId != permissionToSave.ParentId) { permissionToSave.ParentId = permissionInput.ParentId; //获取当前节点的下一个兄弟节点或更高层下一个父节点(不是自己的父节点)的DisplayOrder int displayOrderOfNextParentOrNextBrother = await GetDisplayOrderOfNextParentOrNextBrotherAsync(permissionToSave); #region 当前节点树Id集合 List <Guid> currTreeIds; if (displayOrderOfNextParentOrNextBrother == 0) { //说明当前节点是最后一个节点,直接获取 currTreeIds = await _context.Permission.Where(m => m.DisplayOrder >= permissionToSave.DisplayOrder).Select(m => m.PermissionId).ToListAsync(); } else { currTreeIds = await _context.Permission .Where(m => m.DisplayOrder >= permissionToSave.DisplayOrder && m.DisplayOrder < displayOrderOfNextParentOrNextBrother) .Select(m => m.PermissionId).ToListAsync(); } int currentTreeItemCount = currTreeIds.Count; #endregion //当前节点将由子节点升为顶级节点,直接将该节点数移到最后 if (!permissionToSave.ParentId.HasValue) { #region 将由子节点升为顶级节点 //需要提升的层级数 int xLevel = permissionToSave.Level - 1; //当前节点树之后已无任何节点 if (displayOrderOfNextParentOrNextBrother == 0) { //将当前节点树的所有节点的Level都进行提升 sql = "Update Permission Set Level = Level - @Level Where DisplayOrder>=@DisplayOrder"; await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("Level", xLevel) , new SqlParameter("DisplayOrder", permissionToSave.DisplayOrder) ); } else//当前节点树之后还有节点,应该将这些节点的向前面排,并且将当前节点树的所有节点往后排 { //当前节点树之后的节点数量 int nextItemCount = await _context.Permission.CountAsync(m => m.DisplayOrder >= displayOrderOfNextParentOrNextBrother); sql = "Update Permission Set DisplayOrder = DisplayOrder - @CTIC Where DisplayOrder>=@DOONPONB"; await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("CTIC", currentTreeItemCount) , new SqlParameter("DOONPONB", displayOrderOfNextParentOrNextBrother) ); sql = "Update Permission Set Level = Level - @Level,DisplayOrder = DisplayOrder + @NextItemCount Where 1<>1 "; foreach (var id in currTreeIds) { sql += " Or PermissionId = '{0}'".FormatWith(id.ToString()); } await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("Level", xLevel) , new SqlParameter("NextItemCount", nextItemCount) ); } #endregion } else//当前节点将改变父节点,包括从顶级节点移至另一节点下,或从当前父节点下移至另一节点下 { #region 从顶级节点移至另一节点下,或从当前父节点下移至另一节点下 //目标父节点 var tarParent = await _context.Permission.AsNoTracking().FirstOrDefaultAsync(m => m.PermissionId == permissionInput.ParentId.Value); int xDisplayOrder = permissionToSave.DisplayOrder - tarParent.DisplayOrder; int xLevel = permissionToSave.Level - tarParent.Level; if (xDisplayOrder > 0)//从下往上移 { #region 从下往上移 //特例处理,当前节点要移至的父节点就是上一个节点,只需要改变当前树Level if (xDisplayOrder == 1) { sql = "Update Permission Set Level = Level - @Level Where 1<>1 "; foreach (var id in currTreeIds) { sql += " Or PermissionId = '{0}'".FormatWith(id.ToString()); } await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("Level", xLevel - 1) ); } else { //新的父节点和本节点之间的节点往下移动,DisplayOrder增加 sql = "Update Permission Set DisplayOrder=DisplayOrder+@CurTreeCount Where DisplayOrder>@TDisplayOrder And DisplayOrder<@CDisplayOrder"; await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("CurTreeCount", currentTreeItemCount) , new SqlParameter("TDisplayOrder", tarParent.DisplayOrder) , new SqlParameter("CDisplayOrder", permissionToSave.DisplayOrder) ); sql = "Update Permission Set DisplayOrder = DisplayOrder-@XCount,Level = Level - @Level Where 1<>1 "; foreach (var id in currTreeIds) { sql += " Or PermissionId = '{0}'".FormatWith(id.ToString()); } await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("XCount", xDisplayOrder - 1)//也就是新节点和本节点之间的节点的数量 , new SqlParameter("Level", xLevel - 1) ); } #endregion } else//从上往下移 { #region 从上往下移 // 本节点树下已经不存在任何节点了,当然无法向下移 if (displayOrderOfNextParentOrNextBrother == 0) { modelState.AddModelError("PermissionId", "节点已处于最后位置,无法下移"); return(false); } // 更新本节点树至新的父节点(包括新的父节点)之间的节点的DisplayOrder sql = "Update Permission Set DisplayOrder=DisplayOrder-@CurTreeCount Where DisplayOrder>=@DOONPONB And DisplayOrder<=@TDisplayOrder"; await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("CurTreeCount", currentTreeItemCount) , new SqlParameter("DOONPONB", displayOrderOfNextParentOrNextBrother) , new SqlParameter("TDisplayOrder", tarParent.DisplayOrder) ); // 本节点至新的节点之间的节点数 int nextItemCount = tarParent.DisplayOrder - displayOrderOfNextParentOrNextBrother + 1; sql = "Update Permission Set DisplayOrder = DisplayOrder+ @XCount,Level = Level - @Level Where 1<>1 "; foreach (var id in currTreeIds) { sql += " Or PermissionId = '{0}'".FormatWith(id.ToString()); } await _context.Database.ExecuteSqlCommandAsync(sql , new SqlParameter("XCount", nextItemCount) , new SqlParameter("Level", xLevel - 1) ); #endregion } #endregion } } } await _context.SaveChangesAsync(); return(true); }
public async Task <Permission> ModifyPermission([Service] DBAttendanceContext dBAttendanceContext, PermissionInput input) { try { var permission = await dBAttendanceContext.Permission.FindAsync(input.Id); if (permission != null) { permission.Date = input.Date; permission.Motive = input.Motive; permission.State = input.State; await dBAttendanceContext.SaveChangesAsync(); return(permission); } else { throw new QueryException("No se encontró el permiso."); } } catch (System.Exception e) { throw new QueryException(e.Message); } }
public async Task <Permission> AddPermission([Service] DBAttendanceContext dBAttendanceContext, PermissionInput input) { try { var permission = new Permission { Date = input.Date, Motive = input.Motive, EmployeeCardId = input.EmployeeCardId }; dBAttendanceContext.Permission.Add(permission); await dBAttendanceContext.SaveChangesAsync(); return(permission); } catch (System.Exception e) { throw new QueryException(e.Message); } }
public void Insert(PermissionInput entity) { this.DbHelper.Execute(this.Table, proc => proc.AsInsert(entity, "Id", "Creator", "CreateTime", "IsDeleted", "ParentId", "Name") ); }