public ActionResult ShowUserInfo(UserInfoViewModel viewModel) { if (ModelState.IsValid) { Mapper.CreateMap <UserInfoViewModel, UserDetail>(); Mapper.CreateMap <UserInfoViewModel, UserExtensionInfo>(); UserDetail userDetail = Mapper.Map <UserInfoViewModel, UserDetail>(viewModel); UserExtensionInfo userExtensionInfo = Mapper.Map <UserInfoViewModel, UserExtensionInfo>(viewModel); try { _accountService.UpdateUserInfo(userDetail, false); _accountService.UpdateUserExtensionInfo(userExtensionInfo); } catch (Exception e) { throw e; } ViewBag.UpdateInfo = "保存成功"; } else { ViewBag.UpdateInfo = "保存失败"; } //sent the selections ViewBag.EducationlevelName = new SelectList(_accountService.GetEducationlevels(), "Name", "Name", viewModel.EducationlevelName); ViewBag.PronviceName = new SelectList(_accountService.GetPrinvice(), "Name", "Name", viewModel.PronviceName); ViewBag.MaritalstatusName = new SelectList(_accountService.GetMaritalstatus(), "Name", "Name", viewModel.MaritalstatusName); ViewBag.IndustryCategoryName = new SelectList(_accountService.GetIndustryCategories(), "Name", "Name", viewModel.IndustryCategoryName); ViewBag.GenderName = new SelectList(_accountService.GetGenders(), "Name", "Name", viewModel.GenderName); return(View(viewModel)); }
/// <summary> /// 计算用户名称型属性的综合编码 /// </summary> /// <param name="ui"></param> /// <returns></returns> private string GetUserExtensionSumCode(UserExtensionInfo ui) { string sumCode = string.Empty; sumCode += ui.PronviceCode; sumCode += ui.EducationlevelCode; sumCode += ui.GenderCode; sumCode += ui.MaritalstatusCode; sumCode += ui.IndustryCategoryCode; sumCode += ui.LocationCode; return(sumCode); }
//两两用户相似度计算策略 private int AcquireSimilarityBetween(UserExtensionInfo preUser, UserExtensionInfo backUser) { int degree = 0; string preCode = preUser.SumCode; string backCode = backUser.SumCode; for (int i = 0; i < preUser.SumCode.Length; i++) { if (preCode[i] == backCode[i]) { degree++; } } int missedDegre = 0; #region 考虑用户尚未填写的扩展信息 string missedStr = "未设置"; if (preUser.EducationlevelName == missedStr || backUser.EducationlevelName == missedStr) { missedDegre += preUser.EducationlevelCode.Length; } if (preUser.MaritalstatusName == missedStr || backUser.MaritalstatusName == missedStr) { missedDegre += preUser.MaritalstatusCode.Length; } if (preUser.GenderName == missedStr || backUser.GenderName == missedStr) { missedDegre += preUser.GenderCode.Length; } if (preUser.IndustryCategoryName == missedStr || backUser.IndustryCategoryName == missedStr) { missedDegre += preUser.IndustryCategoryCode.Length; } if (preUser.PronviceName == missedStr || backUser.PronviceName == missedStr) { missedDegre += preUser.PronviceCode.Length; } if (preUser.LocationName == missedStr || backUser.LocationName == missedStr) { missedDegre += preUser.LocationCode.Length; } #endregion degree = degree - missedDegre; //数值型属性相似度 if (preUser.BirthTime != DateTime.MinValue && backUser.BirthTime != DateTime.MinValue) { degree = degree - Math.Abs(preUser.Age - backUser.Age); } //值越大,相似度越大 return(degree); }
/// <summary> /// 用户注册 /// </summary> /// <param name="viewModel">用户注册基本信息</param> /// <returns>注册是否成功</returns> public OperationResult Register(UserRegisterViewModel viewModel) { if (_userRepository.Entities.Any(u => u.LoginName == viewModel.LoginName)) { return(new OperationResult(false, "该用户名已存在")); } if (viewModel.PassWord != viewModel.PassWordConfirmed) { return(new OperationResult(false, "两次密码不匹配")); } #region 新建用户信息 Role role = _roleRepository.Entities.First(r => r.RoleName == "general"); User newUser = new User { LoginName = viewModel.LoginName, PassWord = viewModel.PassWord, RoleId = role.Id, RoleName = role.RoleName, CreateAt = DateTime.Now }; _userRepository.Insert(newUser); newUser = _userRepository.Entities.Single(u => u.LoginName == viewModel.LoginName); //添加用户详细信息 UserDetail userDetail = new UserDetail { NickName = viewModel.LoginName, Email = viewModel.Email, UserId = newUser.Id }; _userDetailRepository.Insert(userDetail); //添加用户扩展信息 string undefined = "未设置"; UserExtensionInfo userInfo = new UserExtensionInfo { BirthTime = DateTime.MinValue, EducationlevelName = undefined, GenderName = undefined, IndustryCategoryName = undefined, LocationName = undefined, PronviceName = undefined, MaritalstatusName = undefined }; UpdateUseExtensionAttributeCode(userInfo); userInfo.SumCode = GetUserExtensionSumCode(userInfo); userInfo.UserId = newUser.Id; _userExtionsionInfoRepository.Insert(userInfo); #endregion CreateUserInterest(newUser.Id); return(new OperationResult(true)); }
/// <summary> /// 根据属性名更新用户的各项扩展属性编码 /// </summary> /// <param name="ui"></param> /// <returns></returns> private UserExtensionInfo UpdateUseExtensionAttributeCode(UserExtensionInfo ui) { try { ui.EducationlevelCode = db.Educationlevels.Single(o => o.Name == ui.EducationlevelName).Code; ui.PronviceCode = db.Pronvices.Single(o => o.Name == ui.PronviceName).Code; ui.GenderCode = db.Genders.Single(o => o.Name == ui.GenderName).Code; ui.MaritalstatusCode = db.Maritalstatuses.Single(o => o.Name == ui.MaritalstatusName).Code; ui.IndustryCategoryCode = db.IndustryCategories.Single(o => o.Name == ui.IndustryCategoryName).Code; ui.LocationName = db.Locations.Single(o => o.Name == ui.LocationName).Code; } catch (Exception e) { throw e; } return(ui); }
/// <summary> /// 更新用户扩展信息 /// </summary> /// <param name="ui"></param> /// <returns></returns> public OperationResult UpdateUserExtensionInfo(UserExtensionInfo ui) { ui = UpdateUseExtensionAttributeCode(ui); if (ui.BirthTime != DateTime.MinValue) { ui.Age = DateTime.Now.Year - ui.BirthTime.Year; } int result = _userExtionsionInfoRepository.Update(ui); if (result != 0) { return(new OperationResult(true, "用户扩展信息更新成功")); } else { return(new OperationResult(false, "用户扩展信息更新失败")); } }
//零数据情况下建立用户相似度数据集 public void CountSimilarity() { IEnumerable <User> users = db.Users; foreach (var user in users) { IList <SimilarityMap> smilarityMap = new List <SimilarityMap>(); UserExtensionInfo currentuserExtensionInfo = db.UserExtensionInfos.Single(x => x.UserId == user.Id); IEnumerable <int> otherUsersId = SelectOtherUsers(user); foreach (var otherUserid in otherUsersId) //其他用户 { UserExtensionInfo otherExtensionInfo = db.UserExtensionInfos.Single(x => x.UserId == otherUserid); int similarityDegree = AcquireSimilarityBetween(currentuserExtensionInfo, otherExtensionInfo); SimilarityMap newsimilarityMap = new SimilarityMap { UserId = otherUserid, Similarity = similarityDegree }; smilarityMap.Add(newsimilarityMap); } IEnumerable <SimilarityMap> similarity = smilarityMap.OrderByDescending(x => x.Similarity).Take(SimilarityUserSettingCount); int priority = 1; foreach (var similarityMap in similarity) { UserSimilarity userSimilarity = new UserSimilarity { UserId = user.Id, SimilarUserId = similarityMap.UserId, Priority = priority }; db.UserSimilarities.Add(userSimilarity); priority++; } } db.SaveChanges(); }