Commit bc0a9ff0 authored by 黄奎's avatar 黄奎

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents a34e93a2 22b22444
...@@ -88,7 +88,7 @@ namespace Edu.Cache.User ...@@ -88,7 +88,7 @@ namespace Edu.Cache.User
/// <param name="Id">账号Id</param> /// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param> /// <param name="apiRequestFromEnum">请求来源</param>
/// <returns></returns> /// <returns></returns>
public static AppStudentInfo GetUserLoginInfo(object Id, ApiRequestFromEnum apiRequestFromEnum= ApiRequestFromEnum.AppStudent) public static AppStudentInfo GetUserLoginInfo(object Id, ApiRequestFromEnum apiRequestFromEnum = ApiRequestFromEnum.AppStudent)
{ {
AppStudentInfo userInfo = null; AppStudentInfo userInfo = null;
if (Id != null) if (Id != null)
...@@ -100,7 +100,7 @@ namespace Edu.Cache.User ...@@ -100,7 +100,7 @@ namespace Edu.Cache.User
} }
catch (Exception ex) catch (Exception ex)
{ {
Common.Plugin.LogHelper.Write(ex, "GetUserLoginInfo"); Common.Plugin.LogHelper.Write(ex, "GetUserLoginInfo");
} }
if (userInfo == null) if (userInfo == null)
{ {
...@@ -136,5 +136,111 @@ namespace Edu.Cache.User ...@@ -136,5 +136,111 @@ namespace Edu.Cache.User
} }
return userInfo; return userInfo;
} }
#region 账户密码登录的时候连续5次密码错误冻结账户10分钟
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="model"></param>
public static void StudentFrozenSet(string cacheKey, AppStudentInfo model, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet<AppStudentInfo>(cacheKey, model, ts);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "StudentFrozenSet缓存设置失败");
}
}
/// <summary>
/// 获取用户登录信息
/// </summary>
/// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param>
/// <returns></returns>
public static AppStudentInfo GetStudentFrozen(object Id, ApiRequestFromEnum apiRequestFromEnum = ApiRequestFromEnum.AppStudent)
{
AppStudentInfo userInfo = null;
if (Id != null)
{
string cacheKey = Cache.CacheKey.Student_Frozen_Key + Id.ToString();
try
{
userInfo = redis.StringGet<AppStudentInfo>(cacheKey);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GetStudentFrozen");
}
if (userInfo == null)
{
userInfo = new AppStudentInfo();
}
}
else
{
userInfo = new AppStudentInfo();
}
return userInfo;
}
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="model"></param>
public static void StudentErrorLoginSet(string cacheKey, AppStudentLoginError model, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet<AppStudentLoginError>(cacheKey, model, ts);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "StudentErrorLoginSet缓存设置失败");
}
}
/// <summary>
/// 获取用户登录信息
/// </summary>
/// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param>
/// <returns></returns>
public static AppStudentLoginError GetStudentErrorLogin(object Id, ApiRequestFromEnum apiRequestFromEnum = ApiRequestFromEnum.AppStudent)
{
AppStudentLoginError userInfo = null;
if (Id != null)
{
string cacheKey = Cache.CacheKey.Student_ErrorLogin_Key + Id.ToString();
try
{
userInfo = redis.StringGet<AppStudentLoginError>(cacheKey);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GetStudentErrorLogin");
}
if (userInfo == null)
{
userInfo = new AppStudentLoginError();
}
}
else
{
userInfo = new AppStudentLoginError();
}
return userInfo;
}
#endregion
} }
} }
\ No newline at end of file
...@@ -24,6 +24,18 @@ namespace Edu.Cache ...@@ -24,6 +24,18 @@ namespace Edu.Cache
public static string MsgStudent_Send_Code_List = "Msg_Student_Code_List_"; public static string MsgStudent_Send_Code_List = "Msg_Student_Code_List_";
/// <summary>
/// 学生登录错误缓存Key
/// </summary>
public static string Student_ErrorLogin_Key = "Edu_Student_ErrorLogin_";
/// <summary>
/// 学生冻结key
/// </summary>
public static string Student_Frozen_Key = "Edu_Student_Frozen_";
} }
} }
...@@ -62,7 +62,7 @@ namespace Edu.Model.CacheModel ...@@ -62,7 +62,7 @@ namespace Edu.Model.CacheModel
/// </summary> /// </summary>
public string Token { get; set; } public string Token { get; set; }
/// <summary> /// <summary>
/// 集团Logo /// 集团Logo
...@@ -81,5 +81,40 @@ namespace Edu.Model.CacheModel ...@@ -81,5 +81,40 @@ namespace Edu.Model.CacheModel
public object UploadConfig { get; set; } public object UploadConfig { get; set; }
public int ActivationStatus { get; set; } public int ActivationStatus { get; set; }
/// <summary>
/// 是否冻结,1-是
/// </summary>
public int IsFrozen { get; set; }
}
public class AppStudentLoginError
{
/// <summary>
/// 账号编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 错误数
/// </summary>
public int ErrorNum { get; set; }
/// <summary>
/// 最近一次错误时间
/// </summary>
public System.DateTime? ErrorTime { get; set; }
} }
} }
\ No newline at end of file
...@@ -116,12 +116,13 @@ WHERE 1=1 ...@@ -116,12 +116,13 @@ WHERE 1=1
public List<RB_Class_Time_Extend> GetClassTimeByRoomId(int RoomId,int Group_Id) public List<RB_Class_Time_Extend> GetClassTimeByRoomId(int RoomId,int Group_Id)
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.AppendFormat($@"SELECT t.TeacherName,t.TeacherIcon,c.ClassHours,c.ClassName,lp.CourseName,lp.CourseNum,lp.LessonPlanId,A.ClassPlanId,A.ClassId,A.`Status`,A.ClassRoomId,A.Group_Id,A.School_Id,A.TeacherId,B.ClassTimeId,CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',B.StartTime,':00') AS NewPlanDateTime, builder.AppendFormat($@"SELECT t.TeacherName,t.TeacherIcon,c.ClassHours,c.ClassName,cou.CourseName,lp.LessonPlanId,A.ClassPlanId,A.ClassId,A.`Status`,A.ClassRoomId,A.Group_Id,A.School_Id,A.TeacherId,B.ClassTimeId,CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',B.StartTime,':00') AS NewPlanDateTime,
B.EndTime,B.StartTime,B.SuiPai,B.ClassStatus,CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',B.EndTime,':00') AS NewEndPlanDateTime B.EndTime,B.StartTime,B.SuiPai,B.ClassStatus,CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',B.EndTime,':00') AS NewEndPlanDateTime
FROM rb_class_plan AS A INNER JOIN rb_class_time AS B ON A.ClassPlanId=B.ClassPlanId FROM rb_class_plan AS A INNER JOIN rb_class_time AS B ON A.ClassPlanId=B.ClassPlanId
LEFT JOIN rb_teacher as t on a.TeacherId=t.TId LEFT JOIN rb_teacher as t on a.TeacherId=t.TId
LEFT JOIN rb_class as c on c.ClassId=a.ClassId LEFT JOIN rb_class as c on c.ClassId=a.ClassId
LEFT JOIN (SELECT ClassPlanId,MAX(CourseName)as CourseName,MAX(CourseNum) as CourseNum ,MAX(LessonPlanId) as LessonPlanId from rb_class_lessonplan where `Status`=0 GROUP BY ClassPlanId) as lp on lp.ClassPlanId=a.ClassPlanId LEFT JOIN rb_course as cou on cou.CourseId=c.CouseId
LEFT JOIN (SELECT ClassPlanId,MAX(LessonPlanId) as LessonPlanId from rb_class_lessonplan where `Status`=0 GROUP BY ClassPlanId) as lp on lp.ClassPlanId=a.ClassPlanId
where a.`Status`=0 and c.ClassStatus =2 and a.ClassRoomId={RoomId} and a.Group_Id={Group_Id} and DATE_FORMAT(A.ClassDate,'%Y-%m-%d')>=DATE_FORMAT(NOW(),'%Y-%m-%d') ORDER BY CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',B.EndTime,':00') asc LIMIT 10"); where a.`Status`=0 and c.ClassStatus =2 and a.ClassRoomId={RoomId} and a.Group_Id={Group_Id} and DATE_FORMAT(A.ClassDate,'%Y-%m-%d')>=DATE_FORMAT(NOW(),'%Y-%m-%d') ORDER BY CONCAT( DATE_FORMAT(A.ClassDate,'%Y-%m-%d') ,' ',B.EndTime,':00') asc LIMIT 10");
return Get<RB_Class_Time_Extend>(builder.ToString()).ToList(); return Get<RB_Class_Time_Extend>(builder.ToString()).ToList();
} }
......
...@@ -95,22 +95,90 @@ namespace Edu.WebApi.Controllers.APP ...@@ -95,22 +95,90 @@ namespace Edu.WebApi.Controllers.APP
} }
else else
{ {
AppStudentInfo frozenInfo = Cache.User.AppStudentReidsCache.GetStudentFrozen(model.Id);
if (frozenInfo != null && frozenInfo.Id > 0 && frozenInfo.IsFrozen == 1)
{
AppStudentLoginError errorObj = Cache.User.AppStudentReidsCache.GetStudentErrorLogin(model.Id);
if (errorObj != null && errorObj.Id > 0)
{
int ts = Convert.ToInt32((System.DateTime.Now - errorObj.ErrorTime.Value).TotalMinutes);
if ((10 - ts) == 0)
{
ts = 1;
}
else
{
ts = 10 - ts;
}
return ApiResult.Failed(message: $"账号已冻结,{ ts}分钟后才能重新登录", new { Error = 0 });
}
return ApiResult.Failed(message: $"账号已冻结,请稍等再重新登录", new { Error = 0 });
}
if (model.ActivationStatus == 0) if (model.ActivationStatus == 0)
{ {
return ApiResult.Failed("账号未激活", new { Error = 1 }); return ApiResult.Failed("账号未激活", new { Error = 1 });
} }
if (password != "Viitto!@#123") if (password != "Viitto!@#123")
{ {
password = Common.DES.Encrypt(password); password = Common.DES.Encrypt(password);
if (model.Password != password) if (model.Password != password)
{ {
AppStudentLoginError errorObj = Cache.User.AppStudentReidsCache.GetStudentErrorLogin(model.Id);
if (errorObj != null && errorObj.Id > 0)
{
errorObj.ErrorNum = errorObj.ErrorNum + 1;
errorObj.ErrorTime = System.DateTime.Now;
}
else
{
errorObj = new AppStudentLoginError
{
ErrorNum = 1,
ErrorTime = System.DateTime.Now,
Id = model.Id,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
};
}
if (errorObj.ErrorNum >= 5)
{
AppStudentInfo frozenObj = new AppStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = model.School_Id,
AccountId = model.AccountId,
AccountName = model.AccountName,
SchoolName = model.SchoolName,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppStudent,
IsFrozen = 1
};
Cache.User.AppStudentReidsCache.StudentFrozenSet(Cache.CacheKey.Student_Frozen_Key + model.Id, frozenObj, 600);
Cache.User.AppStudentReidsCache.StudentErrorLoginSet(Cache.CacheKey.Student_ErrorLogin_Key + model.Id, errorObj, 600);
return ApiResult.Failed(message: $"账号已冻结,10分钟后才能重新登录", new { Error = 0 });
}
Cache.User.AppStudentReidsCache.StudentErrorLoginSet(Cache.CacheKey.Student_ErrorLogin_Key + model.Id, errorObj, 600);
return ApiResult.Failed("密码错误", new { Error = 0 }); return ApiResult.Failed("密码错误", new { Error = 0 });
} }
else
{
AppStudentLoginError errorObj = Cache.User.AppStudentReidsCache.GetStudentErrorLogin(model.Id);
if (errorObj != null && errorObj.Id > 0)
{
Cache.User.AppStudentReidsCache.StudentErrorLoginSet(Cache.CacheKey.Student_ErrorLogin_Key + model.Id, errorObj, 0);
}
}
} }
if (model.Status == Common.Enum.DateStateEnum.Delete) if (model.Status == Common.Enum.DateStateEnum.Delete)
{ {
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 }); return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
} }
//生成教育token //生成教育token
EduUserInfoToken eduUserInfo = new EduUserInfoToken() EduUserInfoToken eduUserInfo = new EduUserInfoToken()
{ {
...@@ -447,7 +515,7 @@ namespace Edu.WebApi.Controllers.APP ...@@ -447,7 +515,7 @@ namespace Edu.WebApi.Controllers.APP
JObject jobj = JObject.Parse(RequestParm.Msg.ToString()); JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("account"); string account = jobj.GetStringValue("account");
string sendcode = jobj.GetStringValue("sendcode"); string sendcode = jobj.GetStringValue("sendcode");
string openid = jobj.GetStringValue("openid"); string openid = jobj.GetStringValue("openid");
string password = jobj.GetStringValue("password"); string password = jobj.GetStringValue("password");
if (string.IsNullOrWhiteSpace(sendcode)) if (string.IsNullOrWhiteSpace(sendcode))
......
...@@ -84,5 +84,15 @@ namespace Edu.WebApi.Controllers ...@@ -84,5 +84,15 @@ namespace Edu.WebApi.Controllers
} }
/// <summary>
/// 用户缓存
/// </summary>
public AppStudentLoginError StudentLoginErrorInfo(object Id)
{
AppStudentLoginError userInfo = AppStudentReidsCache.GetStudentErrorLogin(Id);
return userInfo;
}
} }
} }
\ No newline at end of file
...@@ -530,7 +530,8 @@ namespace Edu.WebApi.Controllers.Course ...@@ -530,7 +530,8 @@ namespace Edu.WebApi.Controllers.Course
CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime), CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime),
item.Mobile, item.Mobile,
item.OrderId, item.OrderId,
IsCheck = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.CheckStatus ?? -1 : -1 IsCheck = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.CheckStatus ?? -1 : -1,
StudyNum = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.StudyNum ?? 0 : 0
}); });
} }
return ApiResult.Success(data: new { data.TeacherName, data.RoomName, TotalHour = Convert.ToInt32(totalMinutes / 60), ClassNum = Convert.ToInt32(totalMinutes / 45), ClassDate = data.ClassDate.ToString("yyyy-MM-dd"), GuestList = guestList }); return ApiResult.Success(data: new { data.TeacherName, data.RoomName, TotalHour = Convert.ToInt32(totalMinutes / 60), ClassNum = Convert.ToInt32(totalMinutes / 45), ClassDate = data.ClassDate.ToString("yyyy-MM-dd"), GuestList = guestList });
...@@ -671,6 +672,11 @@ namespace Edu.WebApi.Controllers.Course ...@@ -671,6 +672,11 @@ namespace Edu.WebApi.Controllers.Course
if (signModel != null && signModel.ClassCheckId > 0) if (signModel != null && signModel.ClassCheckId > 0)
{ {
item.ClassCheckId = signModel.ClassCheckId; item.ClassCheckId = signModel.ClassCheckId;
//item.StudyNum = signModel.StudyNum;
item.Group_Id = signModel.Group_Id;
item.CreateTime = signModel.CreateTime;
item.CreateBy = base.UserInfo.Id;
item.Status = 0;
} }
else else
{ {
......
...@@ -270,6 +270,10 @@ namespace Edu.WebApi.Controllers.User ...@@ -270,6 +270,10 @@ namespace Edu.WebApi.Controllers.User
string password = jobj.GetStringValue("Password"); string password = jobj.GetStringValue("Password");
int accountType = jobj.GetInt("AccountType", 2); int accountType = jobj.GetInt("AccountType", 2);
int classRoomId = jobj.GetInt("ClassRoomId", 0); int classRoomId = jobj.GetInt("ClassRoomId", 0);
if (classRoomId == 0)
{
return ApiResult.Failed("请传入教室id");
}
var model = accountModule.GetAccountListExtModule(new RB_Account_ViewModel() var model = accountModule.GetAccountListExtModule(new RB_Account_ViewModel()
{ {
Account = account.Trim(), Account = account.Trim(),
...@@ -286,6 +290,8 @@ namespace Edu.WebApi.Controllers.User ...@@ -286,6 +290,8 @@ namespace Edu.WebApi.Controllers.User
password = Common.DES.Encrypt(password); password = Common.DES.Encrypt(password);
if (model.Password != password) if (model.Password != password)
{ {
return ApiResult.Failed("密码错误"); return ApiResult.Failed("密码错误");
} }
} }
...@@ -317,6 +323,7 @@ namespace Edu.WebApi.Controllers.User ...@@ -317,6 +323,7 @@ namespace Edu.WebApi.Controllers.User
classModel.ClassPlanId, classModel.ClassPlanId,
classModel.ClassRoomId, classModel.ClassRoomId,
classModel.ClassStatus, classModel.ClassStatus,
ClassEndTime = classModel.NewEndPlanDateTime.HasValue ? classModel.NewEndPlanDateTime.Value.ToString("HH:mm") : "",
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment