Commit e1c6451e authored by liudong1993's avatar liudong1993

解决冲突

parents eb7bba50 88263164
......@@ -88,7 +88,7 @@ namespace Edu.Cache.User
/// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param>
/// <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;
if (Id != null)
......@@ -100,7 +100,7 @@ namespace Edu.Cache.User
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GetUserLoginInfo");
Common.Plugin.LogHelper.Write(ex, "GetUserLoginInfo");
}
if (userInfo == null)
{
......@@ -136,5 +136,111 @@ namespace Edu.Cache.User
}
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
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_";
}
}
......@@ -436,5 +436,17 @@ namespace Edu.Common
return ReadConfigKey("ContractDefaultTitle");
}
}
/// <summary>
/// 是否推送消息
/// </summary>
public static int IsPushMessage
{
get
{
int.TryParse(ReadConfigKey("IsPushMessage"), out int IsPushMessage);
return IsPushMessage;
}
}
}
}
\ No newline at end of file
......@@ -12,6 +12,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.8" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="NPOI" Version="2.5.1" />
<PackageReference Include="RabbitMQ.Client" Version="5.1.2" />
<PackageReference Include="Spire.Doc" Version="8.12.14" />
</ItemGroup>
......
using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Common.Message
{
/// <summary>
/// 消息发送
/// </summary>
public class MessageHelper
{
/// <summary>
/// 获取连接
/// </summary>
/// <param name="rabbitConfig">连接配置实体</param>
/// <returns></returns>
private static ConnectionFactory GetConnectionFactory(RabbitConfig rabbitConfig)
{
ConnectionFactory factory = new ConnectionFactory
{
HostName = rabbitConfig.HostName,
//默认端口
Port = rabbitConfig.Port,
UserName = rabbitConfig.UserName,
Password = rabbitConfig.Password,
};
return factory;
}
/// <summary>
/// 发送信息
/// </summary>
/// <param name="message"></param>
public static void SendMessage(PushMessageModel message)
{
Int32.TryParse(Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "Port"), out int Port);
RabbitConfig rabbitConfig = new RabbitConfig()
{
HostName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "HostName"),
Password = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "Password"),
Port = Port,
UserName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "UserName"),
QueenName = Common.Config.ReadConfigKey("RabbitMqConfig", subKey: "QueenName"),
};
var obj = new
{
Id = 0,// 主键
message.Title,
message.Content,
message.CoverImg,
message.CategoryId,
message.Platform,
message.SendType,
message.SendTime,
message.ReceiveId,
message.JumpUrl,
message.CreateByName,
message.MsgSign,
message.MsgTemplateCode,
Status = 0,
CreateTime = DateTime.Now,
AppId = Common.Config.ReadConfigKey("PushAppId"),
};
using (IConnection conn = GetConnectionFactory(rabbitConfig).CreateConnection())
{
using (IModel channel = conn.CreateModel())
{
//在MQ上定义一个持久化队列,如果名称相同不会重复创建
channel.QueueDeclare(rabbitConfig.QueenName, true, false, false, null);
byte[] buffer = Encoding.UTF8.GetBytes(Common.Plugin.JsonHelper.Serialize(obj));
IBasicProperties properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2;
channel.BasicPublish("", rabbitConfig.QueenName, properties, buffer);
}
}
}
/// <summary>
/// 批量推送
/// </summary>
/// <param name="msgList"></param>
public static void SendMessage(List<PushMessageModel> msgList)
{
foreach (var item in msgList)
{
SendMessage(item);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Common.Message
{
/// <summary>
/// 消息推送实体
/// </summary>
public class PushMessageModel
{
/// <summary>
/// 推送标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 推送内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 封面图
/// </summary>
public string CoverImg { get; set; }
/// <summary>
/// 所属分类
/// </summary>
public int CategoryId { get; set; }
/// <summary>
/// 推送平台[1-手机端,2-Web端,3-短信,4-邮件]
/// </summary>
public int Platform { get; set; }
/// <summary>
/// 推送类型(0-立即推送,1-指定时间推送)
/// </summary>
public int SendType { get; set; }
/// <summary>
/// 推送时间
/// </summary>
public DateTime SendTime { get; set; }
/// <summary>
/// 接收人员
/// </summary>
public string ReceiveId { get; set; }
/// <summary>
/// 跳转地址
/// </summary>
public string JumpUrl { get; set; }
/// <summary>
/// 创建人姓名
/// </summary>
public string CreateByName { get; set; }
/// <summary>
/// 短信模板代码
/// </summary>
public string MsgTemplateCode { get; set; }
/// <summary>
/// 短信签名
/// </summary>
public string MsgSign { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Common.Message
{
/// <summary>
/// 消息队列配置文件
/// </summary>
public class RabbitConfig
{
/// <summary>
/// 主机名:ip地址
/// </summary>
public string HostName { get; set; }
/// <summary>
/// 端口
/// </summary>
public int Port { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 队列名称
/// </summary>
public string QueenName { get; set; }
}
}
......@@ -14,6 +14,7 @@
"Microsoft.Extensions.Configuration.Json": "3.1.8",
"NPOI": "2.5.1",
"Newtonsoft.Json": "12.0.3",
"RabbitMQ.Client": "5.1.2",
"Spire.Doc": "8.12.14"
},
"runtime": {
......@@ -519,6 +520,14 @@
}
}
},
"RabbitMQ.Client/5.1.2": {
"runtime": {
"lib/netstandard2.0/RabbitMQ.Client.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.1.2.0"
}
}
},
"runtime.native.System/4.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "2.0.0",
......@@ -1272,6 +1281,13 @@
"path": "portable.bouncycastle/1.8.6",
"hashPath": "portable.bouncycastle.1.8.6.nupkg.sha512"
},
"RabbitMQ.Client/5.1.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Xhj+un0pw4N7h37SZWptxl/NEv7f1RLHwZhXjqzkCm3w3IdbFJh+HjVyPaciD848BUYLGoEQzadx90nShsbs4Q==",
"path": "rabbitmq.client/5.1.2",
"hashPath": "rabbitmq.client.5.1.2.nupkg.sha512"
},
"runtime.native.System/4.0.0": {
"type": "package",
"serviceable": true,
......
......@@ -14,6 +14,7 @@
"Microsoft.Extensions.Configuration.Json": "3.1.8",
"NPOI": "2.5.1",
"Newtonsoft.Json": "12.0.3",
"RabbitMQ.Client": "5.1.2",
"Spire.Doc": "8.12.14"
},
"runtime": {
......@@ -519,6 +520,14 @@
}
}
},
"RabbitMQ.Client/5.1.2": {
"runtime": {
"lib/netstandard2.0/RabbitMQ.Client.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.1.2.0"
}
}
},
"runtime.native.System/4.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "2.0.0",
......@@ -1272,6 +1281,13 @@
"path": "portable.bouncycastle/1.8.6",
"hashPath": "portable.bouncycastle.1.8.6.nupkg.sha512"
},
"RabbitMQ.Client/5.1.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Xhj+un0pw4N7h37SZWptxl/NEv7f1RLHwZhXjqzkCm3w3IdbFJh+HjVyPaciD848BUYLGoEQzadx90nShsbs4Q==",
"path": "rabbitmq.client/5.1.2",
"hashPath": "rabbitmq.client.5.1.2.nupkg.sha512"
},
"runtime.native.System/4.0.0": {
"type": "package",
"serviceable": true,
......
{
"ConnectionStrings": {
//"DefaultConnection": "server=192.168.1.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
//"DefaultConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
//"DefaultConnectionPName": "MySql.Data.MySqlClient",
//"FinanceConnection": "server=192.168.1.214;user id=reborn;password=Reborn@2018;database=test_reborn_finance;CharSet=utf8mb4; Convert Zero Datetime=true; ",
//"FinanceConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=test_reborn_finance;CharSet=utf8mb4; Convert Zero Datetime=true; ",
//"FinanceConnectionPName": "MySql.Data.MySqlClient",
//"DataStatisticsConnection": "server=192.168.1.214;user id=reborn;password=Reborn@2018;database=reborn_datastatistics;CharSet=utf8mb4; Convert Zero Datetime=true; ",
//"DataStatisticsConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_datastatistics;CharSet=utf8mb4; Convert Zero Datetime=true; ",
//"DataStatisticsConnectionPName": "MySql.Data.MySqlClient"
"DefaultConnection": "server=rm-bp1tj77h6kp0d02fb.mysql.rds.aliyuncs.com;user id=reborn;password=Reborn@2018;database=uat_reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"DefaultConnectionPName": "MySql.Data.MySqlClient",
......@@ -25,7 +25,7 @@
"IsSendMsg": 2,
"AllowedHosts": "*",
"OpenValidation": "False",
"UploadSiteUrl": "http://192.168.1.214:8120",
"UploadSiteUrl": "http://192.168.20.214:8120",
"ViewFileSiteUrl": "https://viitto-1301420277.cos.ap-chengdu.myqcloud.com",
"ErpViewFileSiteUrl": "http://imgfile.oytour.com",
"Mongo": "mongodb://47.96.25.130:27017",
......
......@@ -62,7 +62,7 @@ namespace Edu.Model.CacheModel
/// </summary>
public string Token { get; set; }
/// <summary>
/// 集团Logo
......@@ -81,5 +81,40 @@ namespace Edu.Model.CacheModel
public object UploadConfig { 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
......@@ -129,5 +129,12 @@ namespace Edu.Model.CacheModel
public int ActivationStatus { get; set; }
/// <summary>
/// 班级信息
/// </summary>
public object ClassInfo { get; set; }
}
}
\ No newline at end of file
......@@ -62,8 +62,11 @@ namespace Edu.Model.Entity.Course
/// </summary>
public int CheckStatus { get; set; }
/// <summary>
/// 学习分钟数(单位:分钟)
/// </summary>
public int StudyNum { get; set; }
/// <summary>
/// 创建人
/// </summary>
......
......@@ -21,6 +21,11 @@ namespace Edu.Model.Entity.Course
/// </summary>
public string RoomName { get; set; }
public int SeatNum { get; set; }
public string RoomPic { get; set; }
/// <summary>
/// 集团编号
/// </summary>
......@@ -55,5 +60,6 @@ namespace Edu.Model.Entity.Course
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
......@@ -10,39 +10,56 @@ namespace Edu.Model.Entity.Course
[DB(ConnectionName = "DefaultConnection")]
public class RB_Class_Time
{
/// <summary>
/// 上课时间编号
/// </summary>
public int ClassTimeId { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 上课计划编号
/// </summary>
public int ClassPlanId { get; set; }
/// <summary>
/// 上课开始时间
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 上课结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
}
/// <summary>
/// 上课时间编号
/// </summary>
public int ClassTimeId { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 上课计划编号
/// </summary>
public int ClassPlanId { get; set; }
/// <summary>
/// 上课开始时间
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 上课结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 上课状态0-待上课,1-上课中,2-下课
/// </summary>
public int ClassStatus { get; set; }
/// <summary>
/// 课堂随拍图片
/// </summary>
public string SuiPai { get; set; }
/// <summary>
/// 课堂视频
/// </summary>
public string VideoUrl { get; set; }
}
}
......@@ -21,6 +21,7 @@ namespace Edu.Model.ViewModel.Course
/// ids
/// </summary>
public string Q_ClassIds { get; set; }
/// <summary>
/// 签到统计
/// </summary>
......@@ -30,5 +31,9 @@ namespace Edu.Model.ViewModel.Course
/// 已上课分钟数
/// </summary>
public int MinutesNum { get; set; }
/// 学员名称
/// </summary>
public string GuestName { get; set; }
}
}
using Edu.Common.Plugin;
using System.Collections.Generic;
using Edu.Common.Plugin;
using Edu.Model.Entity.Course;
namespace Edu.Model.ViewModel.Course
......@@ -42,5 +43,10 @@ namespace Edu.Model.ViewModel.Course
/// 教室编号【查询使用】
/// </summary>
public string QRoomIds { get; set; }
/// <summary>
/// 教室图片
/// </summary>
public List<string> RoomPicList { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Course
{
public class RB_Class_Time_Extend
{
/// <summary>
/// 老师名称
/// </summary>
public string TeacherName { get; set; }
/// <summary>
/// 老师头像
/// </summary>
public string TeacherIcon { get; set; }
/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 第几课
/// </summary>
public string CourseNum { get; set; }
/// <summary>
/// 计划id
/// </summary>
public int ClassPlanId { get; set; }
/// <summary>
/// 班级id
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 教室id
/// </summary>
public int ClassRoomId { get; set; }
/// <summary>
/// 集团
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 老师id
/// </summary>
public int TeacherId { get; set; }
/// <summary>
/// 上课时间id
/// </summary>
public int ClassTimeId { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime? NewPlanDateTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? NewEndPlanDateTime { get; set; }
/// <summary>
/// 课时
/// </summary>
public int ClassHours { get; set; }
/// <summary>
/// 备课id
/// </summary>
public int LessonPlanId { get; set; }
public string SuiPai { get; set; }
/// <summary>
/// 上课状态0-待上课,1-上课中,2-下课
/// </summary>
public int ClassStatus { get; set; }
}
}
using Edu.Model.Entity.Course;
using System.Collections.Generic;
using Edu.Model.Entity.Course;
namespace Edu.Model.ViewModel.Course
{
......@@ -21,5 +22,10 @@ namespace Edu.Model.ViewModel.Course
/// 上课时间【日期+开始时间】
/// </summary>
public string NewPlanDateTime { get; set; }
/// <summary>
/// 随拍list
/// </summary>
public List<string> SuiPaiList { get; set; }
}
}
\ No newline at end of file
......@@ -1530,5 +1530,90 @@ namespace Edu.Module.Course
#endregion
#region 教师上课挂件查询
/// <summary>
/// 获取班级上课时间
/// </summary>
/// <param name="classIds"></param>
/// <returns></returns>
public List<RB_Class_Time_Extend> GetClassTimeByRoomId(int RoomId, int Group_Id)
{
return class_TimeRepository.GetClassTimeByRoomId(RoomId, Group_Id);
}
public int GetNowClassHours(RB_Class_Time_Extend model)
{
int classHours = 0;
//班级完成的总分钟数
var FinishMinutes = class_CheckRepository.GetClassFinishMinutesRepository(model.ClassId.ToString())?.FirstOrDefault()?.FinishMinutes ?? 0;
//基础课时分钟数
var BasicMinutes = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = model.Group_Id })?.BasicMinutes ?? 45;
var nowHours = model.NewEndPlanDateTime.Value.Subtract(model.NewPlanDateTime.Value).TotalSeconds;
if (FinishMinutes > 0)
{
//完成课时数
classHours = Convert.ToInt32((FinishMinutes + Convert.ToDecimal(nowHours)) / BasicMinutes);
}
else
{
classHours = Convert.ToInt32(FinishMinutes / BasicMinutes);
}
return classHours;
}
/// <summary>
/// 更新课堂随拍
/// </summary>
/// <param name="SuiPai"></param>
/// <param name="Id"></param>
/// <returns></returns>
public bool UpdateTimeSuiPai(string SuiPai, int Id)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Class_Time_ViewModel.SuiPai),SuiPai},
};
return class_TimeRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Time_ViewModel.ClassTimeId), Id));
}
/// <summary>
/// 更新课堂上课状态
/// </summary>
/// <param name="SuiPai"></param>
/// <param name="Id"></param>
/// <returns></returns>
public bool UpdateTimeClassStatus(int classStatus, int Id)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Class_Time_ViewModel.ClassStatus),classStatus},
};
return class_TimeRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Time_ViewModel.ClassTimeId), Id));
}
/// <summary>
/// 更新课堂视频
/// </summary>
/// <param name="SuiPai"></param>
/// <param name="Id"></param>
/// <returns></returns>
public bool UpdateTimeClassVideo(string videoUrl, int Id)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Class_Time_ViewModel.VideoUrl),videoUrl},
};
return class_TimeRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Time_ViewModel.ClassTimeId), Id));
}
#endregion
}
}
......@@ -57,6 +57,8 @@ namespace Edu.Module.Course
{nameof(RB_Class_Room_ViewModel.UpdateBy),extModel.UpdateBy },
{nameof(RB_Class_Room_ViewModel.UpdateTime),extModel.UpdateTime },
{nameof(RB_Class_Room_ViewModel.School_Id),extModel.School_Id },
{nameof(RB_Class_Room_ViewModel.SeatNum),extModel.SeatNum },
{nameof(RB_Class_Room_ViewModel.RoomPic),extModel.RoomPic },
};
flag = class_RoomRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Room_ViewModel.RoomId), extModel.RoomId));
}
......
......@@ -70,19 +70,21 @@ namespace Edu.Module.Public
/// <returns></returns>
public List<object> GetStudyAbroadListModule()
{
List<object> list = new List<object>();
list.Add(new
List<object> list = new List<object>
{
Id = Common.Config.StudyAbroadDirectorId,
AuditType=1,
Name = "部门主管审核"
});
list.Add(new
{
Id = Common.Config.StudyAbroadManagerId,
AuditType = 2,
Name = "部门负责人审核"
});
new
{
Id = Common.Config.StudyAbroadDirectorId,
AuditType = 1,
Name = "部门主管审核"
},
new
{
Id = Common.Config.StudyAbroadManagerId,
AuditType = 2,
Name = "部门负责人审核"
}
};
return list;
}
#endregion
......
......@@ -18,7 +18,10 @@ namespace Edu.Repository.Course
public List<RB_Class_Check_ViewModel> GetClassCheckListRepository(RB_Class_Check_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT A.* FROM RB_Class_Check AS A WHERE 1=1 ");
builder.AppendFormat(@"
SELECT A.*,IFNULL(B.GuestName,'') AS GuestName
FROM RB_Class_Check AS A LEFT JOIN rb_order_guest AS B ON A.OrderGuestId=B.Id
WHERE 1=1 ");
if (query != null)
{
if (query.Group_Id > 0)
......
......@@ -31,6 +31,10 @@ WHERE 1=1
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_Class_Time_ViewModel.ClassPlanId), query.ClassPlanId);
}
if (query.ClassTimeId > 0)
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_Class_Time_ViewModel.ClassTimeId), query.ClassTimeId);
}
if (!string.IsNullOrEmpty(query.QClassPlanIds))
{
builder.AppendFormat(" AND {0} IN({1}) ", nameof(RB_Class_Time_ViewModel.ClassPlanId), query.QClassPlanIds);
......@@ -101,5 +105,28 @@ WHERE 1=1
builder.AppendFormat(" GROUP BY A.ClassId ");
return Get<RB_Class_Time_ViewModel>(builder.ToString()).ToList();
}
#region 教师上课挂件查询
/// <summary>
/// 获取班级上课时间
/// </summary>
/// <param name="classIds"></param>
/// <returns></returns>
public List<RB_Class_Time_Extend> GetClassTimeByRoomId(int RoomId,int Group_Id)
{
StringBuilder builder = new StringBuilder();
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
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_class as c on c.ClassId=a.ClassId
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");
return Get<RB_Class_Time_Extend>(builder.ToString()).ToList();
}
#endregion
}
}
......@@ -95,22 +95,90 @@ namespace Edu.WebApi.Controllers.APP
}
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)
{
return ApiResult.Failed("账号未激活", new { Error = 1 });
}
if (password != "Viitto!@#123")
{
password = Common.DES.Encrypt(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 });
}
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)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
//生成教育token
EduUserInfoToken eduUserInfo = new EduUserInfoToken()
{
......@@ -447,7 +515,7 @@ namespace Edu.WebApi.Controllers.APP
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("account");
string sendcode = jobj.GetStringValue("sendcode");
string sendcode = jobj.GetStringValue("sendcode");
string openid = jobj.GetStringValue("openid");
string password = jobj.GetStringValue("password");
if (string.IsNullOrWhiteSpace(sendcode))
......
......@@ -142,6 +142,7 @@ namespace Edu.WebApi.Controllers.APP
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GetSystemMsgDetails");
}
}
var retult = new
......
......@@ -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
......@@ -10,6 +10,7 @@ using Edu.Module.Course;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace Edu.WebApi.Controllers.Course
{
......@@ -530,10 +531,20 @@ namespace Edu.WebApi.Controllers.Course
CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime),
item.Mobile,
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),
DefaultMinutes= totalMinutes,
ClassDate = data.ClassDate.ToString("yyyy-MM-dd"),
GuestList = guestList
});
}
/// <summary>
......@@ -610,8 +621,9 @@ namespace Edu.WebApi.Controllers.Course
foreach (var item in list)
{
int totalNum = checkLogList.Where(x => x.ClassId == item.ClassId && x.ClassRoomId == item.ClassRoomId && x.Group_Id == item.Group_Id && x.School_Id == item.School_Id && x.ClassDate == item.ClassDate).Count();
int CheckNum = checkLogList.Where(x => x.CheckStatus == 0 && x.ClassId == item.ClassId && x.ClassRoomId == item.ClassRoomId && x.Group_Id == item.Group_Id && x.School_Id == item.School_Id && x.ClassDate == item.ClassDate).Count();
int NoCheckNum = checkLogList.Where(x => x.CheckStatus == 1 && x.ClassId == item.ClassId && x.ClassRoomId == item.ClassRoomId && x.Group_Id == item.Group_Id && x.School_Id == item.School_Id && x.ClassDate == item.ClassDate).Count();
var checkList = checkLogList.Where(x => x.CheckStatus == 0 && x.ClassId == item.ClassId && x.ClassRoomId == item.ClassRoomId && x.Group_Id == item.Group_Id && x.School_Id == item.School_Id && x.ClassDate == item.ClassDate).ToList();
var noCheckList = checkLogList.Where(x => x.CheckStatus == 1 && x.ClassId == item.ClassId && x.ClassRoomId == item.ClassRoomId && x.Group_Id == item.Group_Id && x.School_Id == item.School_Id && x.ClassDate == item.ClassDate).ToList();
var planCheckObj = new
{
item.TeacherName,
......@@ -619,9 +631,11 @@ namespace Edu.WebApi.Controllers.Course
MonthStr = item.ClassDate.ToString("MM"),
DayStr = item.ClassDate.ToString("dd"),
YearStr = item.ClassDate.ToString("yyyy"),
CheckNum,
NoCheckNum,
ColorType = item.TeacherId != item.Teacher_Id ? 1 : (totalNum == CheckNum ? 2 : 3),
CheckNum= checkList.Count(),
CheckList= checkList.Select(qitem => new { qitem.GuestName}),
NoCheckNum= noCheckList.Count(),
NoCheckList= noCheckList.Select(qitem => new { qitem.GuestName}),
ColorType = item.TeacherId != item.Teacher_Id ? 1 : (totalNum == noCheckList.Count() ? 2 : 3),
};
resultList.Add(planCheckObj);
}
......@@ -638,7 +652,26 @@ namespace Edu.WebApi.Controllers.Course
/// <returns></returns>
public ApiResult AddClassCheck()
{
List<RB_Class_Check_ViewModel> list = Common.Plugin.JsonHelper.DeserializeObject<List<RB_Class_Check_ViewModel>>(RequestParm.Msg.ToString());
List<RB_Class_Check_ViewModel> list = new List<RB_Class_Check_ViewModel>();
JArray array = JArray.Parse(RequestParm.Msg.ToString());
if (array != null && array.Count > 0)
{
foreach (var jItem in array)
{
JObject obj = JObject.Parse(jItem.ToString());
list.Add(new RB_Class_Check_ViewModel()
{
CheckStatus = obj.GetInt("CheckStatus"),
ClassDate = obj.GetDateTime("ClassDate"),
ClassRoomId = obj.GetInt("ClassRoomId"),
OrderGuestId = obj.GetInt("OrderGuestId"),
School_Id = obj.GetInt("School_Id"),
StudyNum = obj.GetInt("StudyNum"),
TeacherId = obj.GetInt("TeacherId"),
ClassId = obj.GetInt("classId"),
});
}
}
if (list == null || !list.Any())
{
return ApiResult.ParamIsNull("");
......@@ -671,6 +704,10 @@ namespace Edu.WebApi.Controllers.Course
if (signModel != null && signModel.ClassCheckId > 0)
{
item.ClassCheckId = signModel.ClassCheckId;
item.Group_Id = signModel.Group_Id;
item.CreateTime = signModel.CreateTime;
item.CreateBy = base.UserInfo.Id;
item.Status = 0;
}
else
{
......@@ -1111,5 +1148,139 @@ namespace Edu.WebApi.Controllers.Course
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
#region 老师上课挂件
[HttpGet]
[HttpPost]
[Microsoft.AspNetCore.Authorization.AllowAnonymous]
public ApiResult GetClassTimeList()
{
var ClassRoomId = base.ParmJObj.GetInt("ClassRoomId", 0);
if (ClassRoomId == 0)
{
return ApiResult.Failed("请传入教室ID");
}
var list = classModule.GetClassTimeByRoomId(ClassRoomId, 100000);
if (list == null || !list.Any())
{
return ApiResult.Failed("暂无排课安排");
}
else
{
var tempList = list.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.NewPlanDateTime.HasValue && System.DateTime.Now >= x.NewPlanDateTime.Value && x.NewEndPlanDateTime.HasValue && System.DateTime.Now < x.NewEndPlanDateTime.Value).Take(1);
if (tempList == null || !tempList.Any())
{
tempList = list.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.NewPlanDateTime.HasValue && System.DateTime.Now <= x.NewPlanDateTime.Value).Take(3);
}
var result = tempList.Select(x => new
{
TeacherName = x.TeacherName ?? "",
TeacherIcon = x.TeacherIcon ?? "",
ClassName = x.ClassName ?? "",
CourseName = x.CourseName ?? "",
CourseNum = x.CourseNum ?? "",
StartTime = x.StartTime ?? "",
EndTime = x.EndTime ?? "",
x.ClassPlanId,
x.ClassId,
x.ClassRoomId,
x.Group_Id,
x.School_Id,
x.TeacherId,
x.ClassTimeId,
DateYStr = x.NewPlanDateTime.HasValue ? x.NewPlanDateTime.Value.ToString("yyyy") : "",
DateMStr = x.NewPlanDateTime.HasValue ? x.NewPlanDateTime.Value.ToString("MM") : "",
DateDStr = x.NewPlanDateTime.HasValue ? x.NewPlanDateTime.Value.ToString("dd") : "",
x.ClassStatus,
SuiPaiList = string.IsNullOrWhiteSpace(x.SuiPai) ? new List<string>() : JsonHelper.DeserializeObject<List<string>>(x.SuiPai),
});
return ApiResult.Success(data: result);
}
}
/// <summary>
/// 更新课堂随拍照片
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult UpdateTimeSuiPai()
{
var extModel = Common.Plugin.JsonHelper.DeserializeObject<RB_Class_Time_ViewModel>(RequestParm.Msg.ToString());
if (extModel.ClassTimeId == 0)
{
return ApiResult.Failed("请传入上课时间Id");
}
if (extModel.SuiPaiList != null && extModel.SuiPaiList.Any())
{
extModel.SuiPai = Common.Plugin.JsonHelper.Serialize(extModel.SuiPaiList);
}
else
{
return ApiResult.Failed("请上传课堂随拍图片");
}
bool retult = classModule.UpdateTimeSuiPai(extModel.SuiPai, extModel.ClassTimeId);
return retult ? ApiResult.Success("上传课堂随拍成功") : ApiResult.Failed("上传课堂随拍失败");
}
/// <summary>
/// 更新上课状态
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult UpdateTimeClassStatus()
{
var extModel = Common.Plugin.JsonHelper.DeserializeObject<RB_Class_Time_ViewModel>(RequestParm.Msg.ToString());
if (extModel.ClassTimeId == 0)
{
return ApiResult.Failed("请传入上课时间Id");
}
var oldModel = classModule.GetClassTimeListRepository(new RB_Class_Time_ViewModel { ClassTimeId = extModel.ClassTimeId, Group_Id = base.UserInfo.Group_Id }).FirstOrDefault();
if (oldModel == null || oldModel.ClassTimeId == 0)
{
return ApiResult.Failed("上课计划不存在");
}
if (oldModel.ClassStatus == 2)
{
return ApiResult.Failed("已下课,请勿重复操作");
}
// extModel.ClassStatus = oldModel.ClassStatus + 1;
bool retult = classModule.UpdateTimeClassStatus(extModel.ClassStatus, extModel.ClassTimeId);
return retult ? ApiResult.Success("课堂状态更新成功") : ApiResult.Failed("课堂状态更新失败");
}
/// <summary>
/// 更新上课视频
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult UpdateTimeClassVideo()
{
var extModel = Common.Plugin.JsonHelper.DeserializeObject<RB_Class_Time_ViewModel>(RequestParm.Msg.ToString());
if (extModel.ClassTimeId == 0)
{
return ApiResult.Failed("请传入上课时间Id");
}
var oldModel = classModule.GetClassTimeListRepository(new RB_Class_Time_ViewModel { ClassTimeId = extModel.ClassTimeId, Group_Id = base.UserInfo.Group_Id }).FirstOrDefault();
if (oldModel == null || oldModel.ClassTimeId == 0)
{
return ApiResult.Failed("上课计划不存在");
}
if (string.IsNullOrWhiteSpace(extModel.VideoUrl))
{
return ApiResult.Failed("请传入视频地址");
}
// extModel.ClassStatus = oldModel.ClassStatus + 1;
bool retult = classModule.UpdateTimeClassVideo(extModel.VideoUrl, extModel.ClassTimeId);
return retult ? ApiResult.Success("课堂视频更新成功") : ApiResult.Failed("课堂视频更新失败");
}
#endregion
}
}
......@@ -116,6 +116,72 @@ namespace Edu.WebApi.Controllers.Course
var flag = classRoomModule.RemoveClassRoomModule(RoomId, Status);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
#region 甲鹤上课管理系统- 教室注册
/// <summary>
/// 获取教室列表
/// </summary>
/// <returns></returns>
[HttpGet]
[HttpPost]
[Microsoft.AspNetCore.Authorization.AllowAnonymous]
public ApiResult GetDropClassRoomList()
{
var query = new RB_Class_Room_ViewModel()
{
Group_Id = 100000
};
var list = classRoomModule.GetClassRoomListRepository(query);
var result = list.Select(x => new
{
x.School_Id,
x.RoomId,
x.RoomName,
RoomPicList = string.IsNullOrWhiteSpace(x.RoomPic) ? new List<string>() : JsonHelper.DeserializeObject<List<string>>(x.RoomPic),
x.SeatNum,
x.Group_Id
});
return ApiResult.Success(data: result);
}
/// <summary>
/// 添加修改教室
/// </summary>
/// <returns></returns>
[HttpPost]
[Microsoft.AspNetCore.Authorization.AllowAnonymous]
public ApiResult SetNoLoginClassRoom()
{
var extModel = Common.Plugin.JsonHelper.DeserializeObject<RB_Class_Room_ViewModel>(RequestParm.Msg.ToString());
if (extModel.RoomId == 0)
{
extModel.CreateTime = DateTime.Now;
extModel.CreateBy = 1;
}
extModel.UpdateBy = 1;
extModel.UpdateTime = DateTime.Now;
extModel.Group_Id = extModel.Group_Id == 0 ? 100000 : extModel.Group_Id;
if (extModel.RoomPicList != null && extModel.RoomPicList.Any())
{
extModel.RoomPic = Common.Plugin.JsonHelper.Serialize(extModel.RoomPicList);
}
else
{
extModel.RoomPic = "";
}
bool flag = classRoomModule.SetClassRoomModule(extModel);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
}
}
......@@ -70,7 +70,7 @@ namespace Edu.WebApi.Controllers.User
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed(message: $"未找到【{ account }】用户!");
return ApiResult.Failed(message: $"登录失败,账号或密码错误!");
}
else
{
......@@ -112,12 +112,12 @@ namespace Edu.WebApi.Controllers.User
var actionList = menuModule.GetPostMenuFunctionListModule(model.Post_Id.ToString());
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
UserInfo obj = new UserInfo
{
Id = model.Id,
AccountId = model.AccountId,
UserMobile=model.Account,
UserMobile = model.Account,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
......@@ -146,7 +146,7 @@ namespace Edu.WebApi.Controllers.User
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
},
StudyAbroadObj=publicModule.GetStudyAbroadListModule()
StudyAbroadObj = publicModule.GetStudyAbroadListModule()
};
UserReidsCache.UserInfoSet(Cache.CacheKey.User_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success(data: obj);
......@@ -198,6 +198,53 @@ namespace Edu.WebApi.Controllers.User
uploadConfig?.UploadDomain
};
}
if (Common.Config.IsPushMessage==1)
{
for (var i = 0; i < 10; i++)
{
Random rd = new Random();
int num = rd.Next(0, 1000);
Common.Message.PushMessageModel model = new Common.Message.PushMessageModel()
{
CategoryId = 0,
Content = DateTime.Now.ToString("yyyyMMdd HH:mm:ss fff") + "推送内容" + i.ToString(),
CoverImg = "",
CreateByName = userInfo.AccountName,
JumpUrl = "",
ReceiveId = userInfo.Id.ToString(),
SendTime = DateTime.Now,
SendType = 0,
Title = DateTime.Now.ToString("yyyyMMdd HH:mm:ss fff") + "推送标题" + i.ToString(),
};
//手机推送
if (num % 4 == 1)
{
model.Platform = 1;
}
//Web推送
else if (num % 4 == 2)
{
model.Platform = 2;
model.ReceiveId = userInfo.Id.ToString();
}
//短信推送
else if (num % 4 == 3)
{
model.Platform = 3;
model.MsgTemplateCode = "短信模板代码";
model.MsgSign = "签名";
model.ReceiveId = "13551126755";
}
//邮件推送
else
{
model.Platform = 4;
model.ReceiveId = "1006186972@qq.com";
}
Common.Message.MessageHelper.SendMessage(model);
}
}
return ApiResult.Success(data: userInfo);
}
else
......@@ -205,5 +252,147 @@ namespace Edu.WebApi.Controllers.User
return ApiResult.Failed();
}
}
/// <summary>
/// 用户登录
/// </summary>
/// <returns></returns>
[HttpGet]
[HttpPost]
[AllowAnonymous]
public ApiResult LoginTeacher()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("Account");
string password = jobj.GetStringValue("Password");
int accountType = jobj.GetInt("AccountType", 2);
int classRoomId = jobj.GetInt("ClassRoomId", 0);
if (classRoomId == 0)
{
return ApiResult.Failed("请传入教室id");
}
var model = accountModule.GetAccountListExtModule(new RB_Account_ViewModel()
{
Account = account.Trim(),
AccountType = AccountTypeEnum.Teacher
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed(message: $"本教室没有找到您的课");
}
else
{
if (password != "Viitto!@#123")
{
password = Common.DES.Encrypt(password);
if (model.Password != password)
{
return ApiResult.Failed("密码错误");
}
}
if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用,如需使用请联系管理员!");
}
var list = new Module.Course.ClassModule().GetClassTimeByRoomId(classRoomId, model.Group_Id);
var tempList = list.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.TeacherId == model.AccountId && x.NewPlanDateTime.HasValue && System.DateTime.Now >= x.NewPlanDateTime.Value.AddMinutes(-10) && x.NewEndPlanDateTime.HasValue && System.DateTime.Now < x.NewEndPlanDateTime.Value.AddMinutes(30));
if (tempList == null || !tempList.Any())
{
return ApiResult.Failed("本教室没有找到您的课");
}
var classModel = tempList.OrderBy(x => x.NewPlanDateTime).FirstOrDefault();
var extModel = new Module.Course.ClassRoomModule().GetClassRoomModule(classModel.ClassRoomId);
var classInfo = new
{
ClassName = classModel.ClassName ?? "",
CourseName = classModel.CourseName ?? "",
ClassTime = classModel.NewPlanDateTime.HasValue ? classModel.NewPlanDateTime.Value.ToString("yyyy-MM-dd HH:mm") : "",
ClassHours = new Module.Course.ClassModule().GetNowClassHours(classModel),
IsLessPlan = classModel.LessonPlanId > 0 ? 1 : 0,
RoomPicList = string.IsNullOrWhiteSpace(extModel.RoomPic) ? new List<string>() : JsonHelper.DeserializeObject<List<string>>(extModel.RoomPic),
SuiPaiList = string.IsNullOrWhiteSpace(classModel.SuiPai) ? new List<string>() : JsonHelper.DeserializeObject<List<string>>(classModel.SuiPai),
classModel.ClassId,
classModel.ClassTimeId,
classModel.ClassPlanId,
classModel.ClassRoomId,
classModel.ClassStatus,
ClassEndTime = classModel.NewEndPlanDateTime.HasValue ? classModel.NewEndPlanDateTime.Value.ToString("HH:mm") : "",
};
//生成教育token
IUserInfoToken eduUserInfo = new EduUserInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.WebAdmin,
uid = model.Id.ToString()
};
//生成ERP-Token
IUserInfoToken erpUserInfo = new ErpTokenUserInfo()
{
requestFrom = Common.Enum.ApiRequestFromEnum.ERP,
uid = model.Id.ToString(),
groupId = model.Group_Id
};
string token = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_User_Key, eduUserInfo);
string erpToken = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_ERP_User_Key, erpUserInfo);
var treeList = menuModule.GetPostMenuTreeModule(new Model.ViewModel.System.RB_Menu_ViewModel()
{
MenuType = accountType
}, out List<RB_Menu_ViewModel> userCenterList, postIds: model.Post_Id.ToString());
//获取功能权限列表
var actionList = menuModule.GetPostMenuFunctionListModule(model.Post_Id.ToString());
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
UserInfo obj = new UserInfo
{
Id = model.Id,
AccountId = model.AccountId,
UserMobile = model.Account,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = model.School_Id,
AccountName = model.AccountName,
SchoolName = model.SchoolName,
Token = token,
ErpToken = erpToken,
MenuList = treeList,
UserCenterList = userCenterList,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.WebAdmin,
DeptId = model.Dept_Id,
DeptName = model.DeptName,
PostId = model.Post_Id,
PostName = model.PostName,
ActionMenuList = actionList?.Select(qitem => new { qitem.FunctionCode, qitem.FunctionName, qitem.MenuName, qitem.MenuUrl }),
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
},
ClassInfo = classInfo,
StudyAbroadObj = publicModule.GetStudyAbroadListModule()
};
UserReidsCache.UserInfoSet(Cache.CacheKey.User_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success(data: obj);
}
}
}
}
\ No newline at end of file
......@@ -301,6 +301,24 @@ namespace Edu.WebApi.Controllers.User
var flag = schoolModule.RemoveSchoolModule(SId);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 获取学校列表
/// </summary>
/// <returns></returns>
[HttpPost]
[Microsoft.AspNetCore.Authorization.AllowAnonymous]
public ApiResult GetDropSchoolList()
{
var Group_Id = base.ParmJObj.GetInt("Group_Id", 100000);
var query = Common.Plugin.JsonHelper.DeserializeObject<RB_School_ViewModel>(RequestParm.Msg.ToString());
query.Group_Id = Group_Id;
var list = schoolModule.GetSchoolListModule(query);
return ApiResult.Success(data: list);
}
#endregion
#region 讲师管理
......
......@@ -36,11 +36,12 @@ namespace Edu.WebApi
});
List<string> corsArray = new List<string>()
{
"http://192.168.1.214:8400",
"http://192.168.20.214:8400",
"http://localhost:8400",
"http://localhost:8081",
"http://localhost:8080",
"http://localhost:8181",
"http://localhost:8182",
"http://localhost:8082",
"http://127.0.0.1:50512",
"http://127.0.0.1:20224",
......
......@@ -33,7 +33,8 @@
"VirtualHost": "/",
"Port": 5672,
"UserName": "guest",
"Password": "viitto2019"
"Password": "viitto2019",
"QueenName": "vt_sys_message"
},
"RedisSetting": {
"RedisServer": "47.96.23.199",
......@@ -56,5 +57,10 @@
//留学就业部门负责人审核编号[姚顺先]
"StudyAbroadManagerId": 52,
//合同默认抬头
"ContractDefaultTitle": "JH-DZ-CD-"
"ContractDefaultTitle": "JH-DZ-CD-",
//消息推送AppId
"PushAppId": "JiaHeJiaoYu",
//是否推送消息
"IsPushMessage": "0"
}
\ No newline at end of file
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