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); }
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 }
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)); }