/// <summary>
        /// 添加部门
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task <GeneralResponse> AddDepartment(AddDepartmentRequest request, ServerCallContext context)
        {
            if (await db.Departments.AnyAsync(x => x.Name == request.DepartmentName))
            {
                return(ResponseHelper.BadResponse("部门名称已存在"));
            }

            if (request.SuperiorDepartmentId.HasValue)
            {
                if (!await db.Departments.AnyAsync(x => x.Id == request.SuperiorDepartmentId.Value))
                {
                    return(ResponseHelper.BadResponse("上级部门不存在"));
                }
            }
            await db.Departments.AddAsync(new Department
            {
                Name = request.DepartmentName,
                SuperiorDepartmentId = request.SuperiorDepartmentId
            });

            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }

            return(ResponseHelper.BadResponse());
        }
        /// <summary>
        /// 为部门添加访问权限
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task <GeneralResponse> AddActionTag(DepartmentAddActionRequest request, ServerCallContext context)
        {
            if (await db.ActionTags.AnyAsync(x => x.Id == request.ActionTagId))
            {
                return(ResponseHelper.BadResponse("Tag不存在"));
            }

            if (await db.Departments.AnyAsync(x => x.Id == request.DepartmentId))
            {
                return(ResponseHelper.BadResponse("部门不存在"));
            }

            if (await db.DepartmentActionMaps.AnyAsync(x =>
                                                       x.DepartmentId == request.DepartmentId && x.ActionTagId == request.ActionTagId))
            {
                return(ResponseHelper.BadResponse("已存在访问权限"));
            }
            await db.DepartmentActionMaps.AddAsync(new DepartmentActionMap
            {
                ActionTagId  = request.ActionTagId,
                DepartmentId = request.DepartmentId
            });

            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }
            return(ResponseHelper.BadResponse());
        }
        public override async Task <GeneralResponse> AddPosition(AddPositionRequest request, ServerCallContext context)
        {
            if (await db.Positions.AnyAsync(x =>
                                            x.DepartmentId == request.DepartmentId && x.Name == request.PositionName))
            {
                return(ResponseHelper.BadResponse("部门已存在该职位"));
            }

            if (request.SuperiorPositionId.HasValue)
            {
                if (await db.Positions.AnyAsync(x => x.Id == request.SuperiorPositionId))
                {
                    return(ResponseHelper.BadResponse("指定的上级职位不存在"));
                }
            }

            await db.Positions.AddAsync(new Position
            {
                Name               = request.PositionName,
                DepartmentId       = request.DepartmentId,
                SuperiorPositionId = request.SuperiorPositionId
            });

            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }
            return(ResponseHelper.BadResponse("未知错误"));
        }
        /// <summary>
        /// 更新Tag
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task <GeneralResponse> UpdateTag(UpdateTagRequest request, ServerCallContext context)
        {
            ActionTag actionTag = await db.ActionTags.FirstOrDefaultAsync(x => x.Id == request.TagId);

            if (actionTag == null)
            {
                return(ResponseHelper.BadResponse("对应的Tag不存在"));
            }
            if (!string.IsNullOrWhiteSpace(request.ActionName))
            {
                actionTag.ActionName = request.ActionName;
            }
            if (!string.IsNullOrWhiteSpace(request.ControllerName))
            {
                actionTag.ControllerName = request.ControllerName;
            }
            if (!string.IsNullOrWhiteSpace(request.TagName))
            {
                actionTag.TagName = request.TagName;
            }
            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }
            return(ResponseHelper.BadResponse("未知错误"));
        }
        /// <summary>
        /// 用户注册
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task <GeneralResponse> RegistUser(RegistUserRequest request, ServerCallContext context)
        {
            if (!await db.Positions.AnyAsync(x => x.Id == request.PositionId))
            {
                return(ResponseHelper.BadResponse("指定的职位不存在"));
            }
            if (string.IsNullOrWhiteSpace(request.Name))
            {
                return(ResponseHelper.BadResponse("用户名不能为空"));
            }
            if (await db.Users.AnyAsync(x => x.Name == request.Name))
            {
                return(ResponseHelper.BadResponse("用户名已存在"));
            }
            await db.Users.AddAsync(
                new User
            {
                Name       = request.Name,
                PositionId = request.PositionId,
                Password   = request.Password
            });

            int result = await db.SaveChangesAsync();

            if (result <= 0)
            {
                return(ResponseHelper.BadResponse());
            }
            return(new GeneralResponse
            {
                IsSuccess = true
            });
        }
        /// <summary>
        /// 删除部门
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task <GeneralResponse> DeleteDepartment(GeneralIdRequest request, ServerCallContext context)
        {
            Department department = await db.Departments.FirstOrDefaultAsync(x => x.Id == request.Id);

            if (department == null)
            {
                return(ResponseHelper.BadResponse("指定部门不存在"));
            }

            db.Departments.Remove(department);
            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }
            return(ResponseHelper.BadResponse());
        }
        /// <summary>
        /// 移除部门的访问权限
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task <GeneralResponse> DepartmentDeleteActionTag(DepartmentDeleteActionTagRequest request, ServerCallContext context)
        {
            DepartmentActionMap actionMap = await db.DepartmentActionMaps.FirstOrDefaultAsync(x =>
                                                                                              x.DepartmentId == request.DepartmentId && x.ActionTagId == request.ActionTagId);

            if (actionMap == null)
            {
                return(ResponseHelper.BadResponse("访问权限不存在"));
            }

            db.DepartmentActionMaps.Remove(actionMap);
            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }
            return(ResponseHelper.BadResponse());
        }
        public override async Task <GeneralResponse> RegistAdminUser(RegistAdminUserRequest request, ServerCallContext context)
        {
            //如果不存在管理员用户(即没有部门的用户),添加用户到数据库
            if (!await db.Users.AnyAsync(x => x.PositionId == null))
            {
                await db.Users.AddAsync(new User
                {
                    Name     = request.UserName,
                    Password = request.Password
                });
            }
            else
            {
                //已登录的用户不是管理员用户
                if (await db.Users.AnyAsync(x => x.Id == request.CurrentUserId && x.PositionId == null))
                {
                    await db.Users.AddAsync(new User
                    {
                        Name     = request.UserName,
                        Password = request.Password
                    });
                }
                else
                {
                    return(ResponseHelper.BadResponse("需要管理员用户"));
                }

                if (await db.Users.AnyAsync(x => x.Name == request.UserName))
                {
                    return(ResponseHelper.BadResponse("用户名已存在"));
                }
            }

            if (await db.SaveChangesAsync() > 0)
            {
                return(ResponseHelper.OkResponse());
            }
            return(ResponseHelper.BadResponse());
        }