Exemplo n.º 1
0
        public async Task <long> Create(CreateUserDto input)
        {
            var user = ObjectMapper.Map <User>(input);

            user.TenantId         = AbpSession.TenantId;
            user.Password         = _passwordHasher.HashPassword(user, input.Password);
            user.IsEmailConfirmed = true;
            user.WorkNumber       = user.WorkNumber?.Trim() ?? "";
            if (!user.WorkNumber.IsNullOrWhiteSpace())
            {
                //验证工号是否唯一
                var has = _userRepository.GetAll().FirstOrDefault(ite => ite.WorkNumber == user.WorkNumber);
                if (has != null)
                {
                    throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "工号重复,请换一个工号");
                }
            }

            (await _userManager.CreateAsync(user)).CheckErrors(LocalizationManager);;

            if (input.RoleNames != null)
            {
                (await _userManager.SetRoles(user, input.RoleNames)).CheckErrors(LocalizationManager);
            }

            foreach (var item in input.OrgPostIds)
            {
                var orgPostModel = await _organizationUnitPostsRepository.GetAsync(item);

                var userPost = new UserPosts()
                {
                    Id = Guid.NewGuid(), UserId = user.Id, PostId = orgPostModel.PostId, OrgPostId = orgPostModel.Id, OrgId = orgPostModel.OrganizationUnitId
                };
                await _userPostsRepository.InsertAsync(userPost);
            }
            foreach (var item in input.RelationSystemIds)
            {
                var r_s = new ContractWithSystem()
                {
                    Id = Guid.NewGuid(), UserId = user.Id, SystemId = item
                };
                await _contractWithSystemRepository.InsertAsync(r_s);
            }

            CurrentUnitOfWork.SaveChanges();
            return(user.Id);
        }
Exemplo n.º 2
0
        public async Task UpdateUserAsyn(UpdateUserInput input)
        {
            Debug.Assert(input.User.Id != null, "input.User.Id should be set.");

            var user = await _userManager.GetUserByIdAsync(input.User.Id.Value);

            var oldName = user.Name;

            //Update user properties
            //input.User.MapTo(user); //Passwords is not mapped (see mapping configuration)
            user.Name         = input.User.Name;
            user.UserName     = input.User.UserName;
            user.EmailAddress = input.User.EmailAddress;
            user.PhoneNumber  = input.User.PhoneNumber;
            user.Sex          = input.User.Sex;
            user.EnterTime    = input.User.EnterTime;
            user.IdCard       = input.User.IdCard;


            if (!string.IsNullOrWhiteSpace(input.User.Password))
            {
                CheckErrors(await _userManager.ChangePasswordAsync(user, input.User.Password));
            }

            CheckErrors(await _userManager.UpdateAsync(user));



            //Update roles 改为不能直接设置角色,而通过岗位继承角色
            //if (input.AssignedRoleNames != null && input.AssignedRoleNames.Length != 0)
            //{
            //    var ret = await SetRoles(user, input.AssignedRoleNames);
            //    CheckErrors(ret);
            //}


            //if (input.SetRandomPassword)
            //{
            //    input.User.Password = User.CreateRandomPassword();
            //}


            if (input.PostIds != null && input.PostIds.Count == 0)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "请选择至少一个岗位");
            }
            if (input.PostIds.Count != input.PostIds.Distinct().Count())
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "请不要重复选择同一岗位");
            }
            if (input.MainPostId == Guid.Empty || input.PostIds.Contains(input.MainPostId) == false)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "主岗位不在所选岗位中,请重新选择。");
            }
            var exit_post = _userPostsRepository.GetAll().Where(r => r.UserId == user.Id);

            foreach (var item in exit_post)
            {
                await _userPostsRepository.DeleteAsync(item);
            }
            var  orgids  = new List <long>();//所在部门集合
            long mainorg = 0;

            foreach (var item in input.PostIds)
            {
                var orgPostModel = await _organizationUnitPostsRepository.GetAsync(item);

                if (orgids.Exists(ite => ite == orgPostModel.OrganizationUnitId) == false)
                {
                    orgids.Add(orgPostModel.OrganizationUnitId);
                }
                var userPost = new UserPosts()
                {
                    Id = Guid.NewGuid(), UserId = user.Id, PostId = orgPostModel.PostId, OrgPostId = orgPostModel.Id, OrgId = orgPostModel.OrganizationUnitId
                };
                if (item == input.MainPostId)
                {
                    userPost.IsMain = true;// 设置主岗位
                    mainorg         = orgPostModel.OrganizationUnitId;
                }
                await _userPostsRepository.InsertAsync(userPost);
            }
            //部门更新
            var oldorgs   = _userOrganizationUnitsRepository.GetAll().Where(ite => ite.UserId == input.User.Id).ToList();
            var oldids    = oldorgs.Select(ite => ite.OrganizationUnitId).ToList();
            var addorg    = orgids.Except(oldids).ToList();
            var updateorg = orgids.Intersect(oldids).ToList();
            var delorg    = oldids.Except(orgids).ToList();

            foreach (var x in addorg)
            {
                _userOrganizationUnitsRepository.Insert(new WorkFlowUserOrganizationUnits()
                {
                    IsMain             = mainorg == x,
                    OrganizationUnitId = x,
                    UserId             = user.Id,
                });
            }
            foreach (var x in updateorg)
            {
                var t = oldorgs.First(ite => ite.OrganizationUnitId == x);
                if (x == mainorg)
                {
                    t.IsMain = true;
                }
            }
            foreach (var x in delorg)
            {
                var t = oldorgs.First(ite => ite.OrganizationUnitId == x);
                _userOrganizationUnitsRepository.Delete(ite => ite.Id == t.Id);
            }

            CurrentUnitOfWork.SaveChanges();
            foreach (var item in input.PostIds)
            {
                var orgPostModel = await _organizationUnitPostsRepository.GetAsync(item);

                var org = _workflowOrganizationUnitsRepository.Get(orgPostModel.OrganizationUnitId);
                var tmp = new List <string>();
                if (orgPostModel.Level == Level.分管领导)
                {
                    var users = _userPostsRepository.GetAll().Where(ite => ite.OrgPostId == item).ToList();
                    var us    = new List <User>();
                    foreach (var u in users)
                    {
                        var us1 = _userRepository.FirstOrDefault(u.UserId);
                        if (us1 != null)
                        {
                            us.Add(us1);
                        }
                    }
                    tmp = us.Select(ite => $"u_{ite.Id}").ToList();
                    org.ChargeLeader = string.Join(",", tmp);
                }
                if (orgPostModel.Level == Level.部门领导)
                {
                    var users = _userPostsRepository.GetAll().Where(ite => ite.OrgPostId == item).ToList();
                    var us    = new List <User>();
                    foreach (var u in users)
                    {
                        var us1 = _userRepository.FirstOrDefault(u.UserId);
                        if (us1 != null)
                        {
                            us.Add(us1);
                        }
                    }
                    tmp        = us.Select(ite => $"u_{ite.Id}").ToList();
                    org.Leader = string.Join(",", tmp);
                }
                _workflowOrganizationUnitsRepository.Update(org);
            }
            //调整岗位后 更新角色
            var newroles = _organizationUnitPostsRoleRepository.GetAll().Where(ite => input.PostIds.Contains(ite.OrgPostId)).Select(ite => ite.RoleName).Distinct().ToArray();

            CheckUserRole(newroles.ToList());
            await _userManager.SetRoles(user, newroles);

            //联系人关联系统
            var exit_sys_realtion = _contractWithSystemRepository.GetAll().Where(r => r.UserId == user.Id);

            foreach (var item in exit_sys_realtion)
            {
                await _contractWithSystemRepository.DeleteAsync(item);
            }
            if (input.RealtionSystemIds != null)
            {
                foreach (var item in input.RealtionSystemIds)
                {
                    var entity = new ContractWithSystem()
                    {
                        Id = Guid.NewGuid(), SystemId = item, UserId = user.Id
                    };
                    await _contractWithSystemRepository.InsertAsync(entity);
                }
            }

            CurrentUnitOfWork.SaveChanges();
            #region  更新im用户信息
            try
            {
                var im_Service = AbpBootstrapper.Create <Abp.Modules.AbpModule>().IocManager.IocContainer.Resolve <IM_UserManager>();
                if (!string.IsNullOrWhiteSpace(input.User.Password))
                {
                    im_Service.UpdateIMUserPassword(input.User.Id.ToString(), input.User.Password);
                }
                if (input.User.Name != oldName)
                {
                    im_Service.UpdateIMUserNickname(input.User.Id.ToString(), input.User.Name);
                }
            }
            catch (Exception)
            {
            }
            #endregion
        }
Exemplo n.º 3
0
        public override async Task <UserDto> Create(CreateUserDto input)
        {
            CheckCreatePermission();

            var user = ObjectMapper.Map <User>(input);

            user.TenantId         = AbpSession.TenantId;
            user.Password         = _passwordHasher.HashPassword(user, input.Password);
            user.IsEmailConfirmed = true;
            user.WorkNumber       = user.WorkNumber.Trim();
            //验证工号是否唯一
            var has = _userRepository.GetAll().FirstOrDefault(ite => ite.WorkNumber == user.WorkNumber);

            if (has != null)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "工号重复,请换一个工号");
            }
            CheckErrors(await _userManager.CreateAsync(user));

            //改为由岗位继承角色
            //if (input.RoleNames != null)
            //{
            //    CheckErrors(await _userManager.SetRoles(user, input.RoleNames));
            //}
            if (input.OrganizationUnitId == 0)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "请至少指定一个部门。");
            }
            if (input.OrgPostIds == null || input.OrgPostIds.Count == 0)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "请至少指定一个岗位。");
            }
            //设置所在部门
            await _abpOrganizationUnitsManager.AddToOrganizationUnitAsync(user.Id, input.OrganizationUnitId);

            //角色
            var roles = new List <string>();

            foreach (var item in input.OrgPostIds)
            {
                var orgPostModel = await _organizationUnitPostsRepository.GetAsync(item);

                var userPost = new UserPosts()
                {
                    Id = Guid.NewGuid(), UserId = user.Id, PostId = orgPostModel.PostId, OrgPostId = orgPostModel.Id, OrgId = orgPostModel.OrganizationUnitId
                };
                if (item == input.MainPostId)
                {
                    userPost.IsMain = true;// 设置主岗位
                }
                var rs = _organizationUnitPostsRoleRepository.GetAll().Where(ite => ite.OrgPostId == item).Select(ite => ite.RoleName).ToList();
                foreach (var r in rs)
                {
                    var existrole = await _roleManager.GetRoleByNameAsync(r);

                    if (existrole != null)
                    {
                        roles.Add(r);
                    }
                }
                await _userPostsRepository.InsertAsync(userPost);

                if (orgPostModel.Level == Level.分管领导) //如果是领导岗位 则更新部门领导
                {
                    var org   = _workflowOrganizationUnitsRepository.Get(orgPostModel.OrganizationUnitId);
                    var tmp   = new List <string>();
                    var users = _userPostsRepository.GetAll().Where(ite => ite.OrgPostId == item).ToList();
                    var us    = new List <User>();
                    foreach (var u in users)
                    {
                        var us1 = _userRepository.FirstOrDefault(u.UserId);
                        if (us1 != null)
                        {
                            us.Add(us1);
                        }
                    }
                    us.Add(user);
                    tmp = us.Select(ite => $"u_{ite.Id}").ToList();
                    org.ChargeLeader = string.Join(",", tmp);
                }
                if (orgPostModel.Level == Level.部门领导)//如果是领导岗位 则更新部门领导
                {
                    var org   = _workflowOrganizationUnitsRepository.Get(orgPostModel.OrganizationUnitId);
                    var tmp   = new List <string>();
                    var users = _userPostsRepository.GetAll().Where(ite => ite.OrgPostId == item).ToList();
                    var us    = new List <User>();
                    foreach (var u in users)
                    {
                        var us1 = _userRepository.FirstOrDefault(u.UserId);
                        if (us1 != null)
                        {
                            us.Add(us1);
                        }
                    }
                    us.Add(user);
                    tmp        = us.Select(ite => $"u_{ite.Id}").ToList();
                    org.Leader = string.Join(",", tmp);
                }
            }
            if (roles == null)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "所选岗位角色为空,请先为岗位指定角色。");
            }
            CheckUserRole(roles);
            CheckErrors(await _userManager.SetRoles(user, roles.ToArray()));
            foreach (var item in input.RelationSystemIds)
            {
                var r_s = new ContractWithSystem()
                {
                    Id = Guid.NewGuid(), UserId = user.Id, SystemId = item
                };
                await _contractWithSystemRepository.InsertAsync(r_s);
            }


            #region  创建IM账号
            try
            {
                var im_Service     = AbpBootstrapper.Create <Abp.Modules.AbpModule>().IocManager.IocContainer.Resolve <IM_UserManager>();
                var exit_UserCount = _userRepository.GetAll().Count();
                if (exit_UserCount == 0)
                {
                    var firesOrg    = _workflowOrganizationUnitsRepository.FirstOrDefault(r => !r.ParentId.HasValue);
                    var companyName = "公司全体";
                    if (firesOrg != null)
                    {
                        companyName = firesOrg.DisplayName;
                    }
                    im_Service.CreateIMUsers(new List <CreateIMUserInput>()
                    {
                        new CreateIMUserInput()
                        {
                            nickname = input.Name, password = input.Password, username = user.Id.ToString()
                        }
                    }, true, companyName);
                }
                else
                {
                    im_Service.CreateIMUsers(new List <CreateIMUserInput>()
                    {
                        new CreateIMUserInput()
                        {
                            nickname = input.Name, password = input.Password, username = user.Id.ToString()
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                //处理im报错
            }

            #endregion

            CurrentUnitOfWork.SaveChanges();

            return(MapToEntityDto(user));
        }