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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 4
0
        //[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");
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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));
        }