public ICommandHandlerResult Execute(ICommandContext context, ChangeEmployeeOwnerCommand command) { var department = this.departmentRepository.Rebuild(command.DepartmentId); if (department == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } var root = context.GetAggregateRoot(command.AggregateId, () => employeeRepository.Rebuild(command.AggregateId)); if (root == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } root.ChangeOwner(context, command); if (root.CanNotCommit()) { return(context.CreateResult(CommandHandlerStatus.NothingChanged)); } if (employeeRepository.Change(root) <= 0) { throw new RepositoryExcutingException("执行失败,请稍后再试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
public ICommandHandlerResult Execute(ICommandContext context, CreateEmailCodeCommand command) { var root = context.GetAggregateRoot(command.AggregateId, () => EmailCodeAggregateRoot.Register(context, command)); if (!root.CanCommit()) { return(context.CreateResult(CommandHandlerStatus.NothingChanged)); } if (this.repository.Save(root) <= 0) { throw new RepositoryExcutingException("获取验证码失败,请稍后再尝试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
public ICommandHandlerResult Execute(ICommandContext context, CreateDepartmentCommand command) { var root = context.GetAggregateRoot(command.AggregateId, () => DepartmentAggregateRoot.Register(context, command)); if (root.CanNotCommit()) { return(context.CreateResult(CommandHandlerStatus.Fail)); } var rowId = departmentRepository.Save(root); if (rowId <= 0) { throw new RepositoryExcutingException("执行失败,请稍后再试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
//[PermissionCommandExcuteMethodFilterAttribute()] public virtual ICommandHandlerResult Execute(ICommandContext context, TestExceptionCommand command) { var root = context.GetAggregateRoot(2L, () => { return(new TestAggregateRoot() { }); }); return(context.CreateResult(CommandHandlerStatus.Success)); //context.WriteEventAndFlush(new[] { new TestEvent1() }); //throw new Exception("this is on excetpion test"); }
public ICommandHandlerResult Execute(ICommandContext context, ChangeGroupInfoCommand command) { var root = context.GetAggregateRoot(command.AggregateId, () => groupRepository.Rebuild(command.AggregateId)); if (root == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } root.ChangeInfo(context, command); if (root.CanNotCommit()) { return(context.CreateResult(CommandHandlerStatus.NothingChanged)); } if (groupRepository.Change(root) <= 0) { throw new RepositoryExcutingException("执行失败,请稍后再试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
public ICommandHandlerResult Execute(ICommandContext context, DestroyEmailCodeCommand command) { var root = context.GetAggregateRoot(command.AggregateId, () => { return(this.repository.Rebuild(command.Email, command.UsageType)); }); if (root == null) { return(context.CreateResult(CommandHandlerStatus.NotExists, "验证失败")); } var validation = root.Destroy(context, command); if (!root.CanCommit()) { return(context.CreateResult(validation.HasValue && validation.Value.Option == ValidationOption.Continue ? CommandHandlerStatus.NothingChanged : CommandHandlerStatus.Fail, validation.HasValue ? validation.Value.ErrorMessage : "")); } if (this.repository.Destroy(root) <= 0) { throw new RepositoryExcutingException("验证失败,请稍后再尝试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
public ICommandHandlerResult Execute(ICommandContext context, CreateGroupCommand command) { var department = this.departmentRepository.Rebuild(command.DepartmentId); if (department == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } var root = context.GetAggregateRoot(command.AggregateId, () => GroupAggregateRoot.Register(context, command, department)); if (root.CanNotCommit()) { return(context.CreateResult(CommandHandlerStatus.Fail)); } if (groupRepository.Save(root) <= 0) { throw new RepositoryExcutingException("执行失败,请稍后再试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
public ICommandHandlerResult Execute(ICommandContext context, RemoveDepartmentCommand command) { var root = context.GetAggregateRoot(command.AggregateId, () => departmentRepository.Rebuild(command.AggregateId)); if (root == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } root.Remove(context, command); if (root.CanNotCommit()) { return(context.CreateResult(CommandHandlerStatus.NothingChanged)); } //删除部门的组 var groups = this.groupRepository.RebuildRoots(command.AggregateId); if (groups != null && groups.Any()) { var deletes = new List <GroupAggregateRoot>(groups.Count()); foreach (var r in groups) { r.Remove(context, null); if (r.CanCommit()) { deletes.Add(r); } } if (deletes.Any()) { this.groupRepository.Remove(deletes); } } //删除部门的权限 var resources = this.departmentResourceRepository.RebuildRootUsingDepartId(command.AggregateId); if (resources != null && resources.Any()) { var deletes = new List <DepartmentResourceAggregateRoot>(resources.Count()); foreach (var r in resources) { r.Remove(context); if (r.CanCommit()) { deletes.Add(r); } } if (deletes.Any()) { this.departmentResourceRepository.Remove(deletes); } } if (departmentRepository.Remove(root) <= 0) { throw new RepositoryExcutingException("执行失败,请稍后再试"); } return(context.CreateResult(CommandHandlerStatus.Success)); }
public ICommandHandlerResult Execute(ICommandContext context, DistributeGroupResourceCommand command) { var group = this.groupRepository.Rebuild(command.GroupId); if (group == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } var department = this.departmentRepository.Rebuild(group.DepartmentId); if (department == null) { return(context.CreateResult(CommandHandlerStatus.NotExists)); } var groupResources = this.groupResourceRepository.RebuildRootUsingGroupId(command.GroupId); if (groupResources.IsNullOrEmpty()) { var list = new List <GroupResourceAggregateRoot>(100); foreach (var r in command.ResourceId) { var cmd = new CreateGroupResourceCommand(NewId.GenerateNumber(NewId.StringLength.L24)) { GroupId = command.GroupId, ResourceId = r, }; var root = context.GetAggregateRoot(cmd.AggregateId, () => GroupResourceAggregateRoot.Register(context, cmd, department)); if (root.CanCommit()) { list.Add(root); } } this.groupResourceRepository.Save(list); return(context.CreateResult(CommandHandlerStatus.Success)); } //表明这些是新增的,在新加的记录中删除已经存在的 var news = new List <GroupResourceAggregateRoot>(100); foreach (var r in command.ResourceId) { if (groupResources.Any(t => t.ResourceId == r)) { continue; } var cmd = new CreateGroupResourceCommand(NewId.GenerateNumber(NewId.StringLength.L24)) { GroupId = command.GroupId, ResourceId = r, }; var root = context.GetAggregateRoot(cmd.AggregateId, () => GroupResourceAggregateRoot.Register(context, cmd, department)); if (root.CanCommit()) { news.Add(root); } } if (news.Any()) { this.groupResourceRepository.Save(news); } //表明这些是已经存在,在已经存在的记录中删除不是新的记录中 var deletes = new List <GroupResourceAggregateRoot>(100); foreach (var r in groupResources) { if (command.ResourceId.Any(t => t == r.ResourceId)) { continue; } r.Remove(context); if (r.CanCommit()) { deletes.Add(r); } } if (deletes.Any()) { this.groupResourceRepository.Remove(deletes); } return(context.CreateResult(CommandHandlerStatus.Success)); }
/// <summary> /// 因为是启动的事件,而且资源修改与发布事件,在这个系统内通过事件总线发布没多大意义(但在webservice这些设定中就有意义了) /// </summary> /// <param name="command"></param> /// <param name="communication"></param> public ICommandHandlerResult Execute(ICommandContext context, InitResourceCommand command) { if (command.Resources == null) { return(context.CreateResult(CommandHandlerStatus.NothingChanged)); } var list = resourceRepository.RebuildRoots(); if (list.IsNullOrEmpty()) { //第一次初始化,实际上要不要将部门与组的权限一起删除呢?因为有可能是在运营过程中删除的 var roots = new List <ResourceAggregateRoot>(command.Resources.Count()); foreach (var r in command.Resources) { var cmd = new CreateResourceCommand(r.AggregateId) { Resource = new ActionResourceDescriptor() { ActionDescn = r.ActionDescn, GroupSort = r.GroupSort, AggregateId = r.AggregateId } }; var root = context.GetAggregateRoot(cmd.AggregateId, () => ResourceAggregateRoot.Register(context, cmd)); if (root.CanCommit()) { roots.Add(root); } } //保存权限 this.resourceRepository.Save(roots); return(context.CreateResult(CommandHandlerStatus.Success)); } //表明这些是新增的,在新加的记录中删除已经存在的 var news = command.Resources.ToList(); news.RemoveAll(n => list.Any(o => o.AggregateId == n.AggregateId)); //表明这些是已经存在,在已经存在的记录中删除不是新的记录中 var deletes = list.ToList(); deletes.RemoveAll(n => command.Resources.Any(o => o.AggregateId == n.AggregateId)); //原来那些已经存在的 var exists = list.ToList().FindAll(n => command.Resources.Any(o => o.AggregateId == n.AggregateId)); if (deletes != null && deletes.Count > 0) { var targets = new List <ResourceAggregateRoot>(deletes.Count); foreach (var r in deletes) { r.Remove(context); if (r.CanCommit()) { targets.Add(r); } } this.resourceRepository.Delete(targets); this.groupResourceRepository.RemoveNotExistsGroupResource(targets); this.departmentResourceRepository.RemoveNotExistsDepartmentResource(targets); } if (news != null && news.Count > 0) { var targets = new List <ResourceAggregateRoot>(news.Count); foreach (var r in news) { var cmd = new CreateResourceCommand(r.AggregateId) { Resource = new ActionResourceDescriptor() { AggregateId = r.AggregateId, ActionDescn = r.ActionDescn, GroupSort = r.GroupSort } }; var root = ResourceAggregateRoot.Register(context, cmd); if (root.CanCommit()) { targets.Add(root); } } this.resourceRepository.Save(targets); } if (exists != null && exists.Count > 0) { var targets = new List <ResourceAggregateRoot>(exists.Count); foreach (var r in exists) { var res = command.Resources.FirstOrDefault(ta => ta.AggregateId == r.AggregateId); r.ChangeInfo(context, res.ActionDescn, res.GroupSort); if (r.CanCommit()) { targets.Add(r); } } if (targets.Any()) { resourceRepository.Change(targets); } } return(context.CreateResult(CommandHandlerStatus.Success)); }