using System;
using System.Configuration;
using CommonTool;
using YZXYH.Repository.Models;
namespace YZXYH.Repository
{
public partial class AlumUserRepository
{
///
/// 用户登录
///
/// 用户账号
/// 密码
/// 错误信息
/// 用户类型
/// 是否自动登录
///
public bool Login(string pcUserNo, string pcPassword, ref string pcErrorMsg,UserType pcUserType,bool isCookie)
{
if (pcErrorMsg == null) throw new ArgumentNullException(nameof(pcErrorMsg));
pcErrorMsg = "";
bool lbRetval = false;
string lcMsg = "失败";
string loPassword;
string loName;
string loGraduationYear = "";
string lcSessionName;
string lcUserNo;
if (pcUserType==UserType.GeneralUser)
{
if (!IsExist(u => u.Mobile == pcUserNo && u.IsLocked == "N"))
{
pcErrorMsg = "用户手机号码不存在!";
return false;
}
AlumUser loAlumUser = GetSingle(u => u.Mobile == pcUserNo);
lcUserNo = loAlumUser.Id;
pcUserType = loAlumUser.GraduationYear == "0000" ? UserType.TeacherUser : pcUserType;
loName = loAlumUser.Name;
loPassword = loAlumUser.Password;
loGraduationYear = loAlumUser.GraduationYear;
lcSessionName = ConfigurationManager.AppSettings["UserInfoSession"];
}
else
{
if (!UnitOfWork.SysUserRepository.IsExist(u => u.SysNo == pcUserNo && u.IsLocked == "N"&&u.TimeExpiration.CompareTo(DateTime.Now)>0))
{
pcErrorMsg = "用户账号不存在或已被锁定(过期)!";
return false;
}
SysUser loSysUser = UnitOfWork.SysUserRepository.GetSingle(u => u.SysNo == pcUserNo);
lcUserNo = loSysUser.Id;
loName = loSysUser.SysName;
loPassword = loSysUser.SysPassword;
lcSessionName = ConfigurationManager.AppSettings["SysUserInfoSession"];
}
pcPassword = SysSecurity.Encrypt4CPlus(pcPassword.Trim());
if (loPassword == pcPassword.Trim())
{
lbRetval = true;
lcMsg = "成功";
string lcGuid = UtilRandom.GetGuid();
SysUserInfo loUserInfo = new SysUserInfo(lcUserNo, pcPassword, loName, pcUserType)
{
UserGuid = lcGuid
};
UserListSession.Instance.Add(lcGuid, loUserInfo);
SessionHelper.Instance.AddSession(lcSessionName, lcGuid, 30);
if (isCookie)
{
string lcCookieName = ConfigurationManager.AppSettings["SysUserInfoCookie"];
CookieHelper.Instance.WriteCookie(lcCookieName,
CookieHelper.Instance.BuildCookueValue(SysSecurity.Encrypt(JsonHelper.Instance.Serialize(loUserInfo)), 3000));
}
}
else
{
pcErrorMsg = "登录密码错误";
}
UnitOfWork.UserLastLoginRepository.InsertNoId(new UserLastLogin()
{
UserNo = lcUserNo,
TimeLastLogin = DateTime.Now,
IpAddress = IpHelper.Instance.GetClientIp()
});
UnitOfWork.SysLogRepository.AddLog(pcUserType + " | Login", " 登录 " + lcMsg,
loName + "|" + pcUserNo, pcErrorMsg, loGraduationYear);
return lbRetval;
}
///
/// 检查用户的登录是否有效
///
///
public bool CheckLogin()
{
bool lbRetval = false;
string lcSessionName = ConfigurationManager.AppSettings["UserInfoSession"];
string lcToken = SessionHelper.Instance.GetSession(lcSessionName);
SessionHelper.Instance.DelSession(lcSessionName);
if (string.IsNullOrEmpty(lcToken))
return false;
if (CheckLogin(lcToken))
{
SessionHelper.Instance.AddSession(lcSessionName, lcToken, 30);
lbRetval = true;
}
return lbRetval;
}
///
/// 根据Token检查用户登录
///
/// Token
/// 需验证Token密码
///
public bool CheckLogin(string pcToken, bool pcValidate = false)
{
bool lbRetval = UserListSession.Instance.IsContainsKey(pcToken);
if (pcValidate && lbRetval)
{
SysUserInfo loUserInfo = UserListSession.Instance.GetUserInfoByGuid(pcToken);
string lcMobile = loUserInfo.UserNo;
string lcPassword = loUserInfo.Password;
AlumUser loAlumUser = GetSingle(u => u.Mobile == lcMobile && u.IsLocked == "N");
lbRetval = lcPassword == loAlumUser.Password;
}
return lbRetval;
}
///
/// 修改密码
///
/// 手机号
/// 原密码
/// 新密码
/// 操作信息
///
///
public bool ModifyPassword(string pcMobile, string pcOldPassword, string pcNewPassword, ref string pcMsg, SysUserInfo sysUserInfo)
{
if (pcMsg == null) throw new ArgumentNullException(nameof(pcMsg));
bool lbRetval = false;
string lcErrorMsg="";
AlumUser alum = GetSingle(a => a.Mobile == pcMobile && a.IsLocked == "N");
if (alum != null)
{
if (SysSecurity.Encrypt4CPlus(pcOldPassword.Trim()) == alum.Password)
{
Update(a => a.Mobile == pcMobile, a => new AlumUser {Password = SysSecurity.Encrypt4CPlus(pcNewPassword.Trim())});
if (Save())
{
pcMsg = "修改密码成功";
lbRetval = true;
}
else
{
pcMsg = "修改密码失败";
lcErrorMsg = "保存修改失败";
}
}
else
{
pcMsg = "修改密码失败,原密码错误!";
lcErrorMsg = "原密码错误";
}
UnitOfWork.SysLogRepository.AddLog(sysUserInfo.UserType+" | Modify", pcMsg,
alum.Name + "|" + alum.Mobile, lcErrorMsg, alum.GraduationYear);
}
else
{
pcMsg = "用户不存在或已被锁定!";
}
return lbRetval;
}
}
}