Example #1
0
 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));
 }
Example #2
0
        /// <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);
        }
Example #4
0
 /// <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));
 }
Example #5
0
 /// <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);
 }
Example #6
0
        /// <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();
        }