Commit f13b4d2e authored by liudong1993's avatar liudong1993

1

parent aadcc7cc
......@@ -136,5 +136,10 @@ namespace Edu.Model.Entity.Scroll
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 类型 1 正常 2补课 3重上课
/// </summary>
public int AppointType { get; set; }
}
}
\ No newline at end of file
......@@ -37,6 +37,11 @@ namespace Edu.Model.Entity.Scroll
/// </summary>
public int ChapterNo { get; set; }
/// <summary>
/// 状态 1未补课 2已补课
/// </summary>
public int State { get; set; }
/// <summary>
/// 删除
/// </summary>
......
......@@ -19,6 +19,16 @@ namespace Edu.Model.ViewModel.Scroll
/// 开始的章节
/// </summary>
public int SChapterNo { get; set; }
/// <summary>
/// 学员
/// </summary>
public string StuName { get; set; }
/// <summary>
/// 订单ID
/// </summary>
public int OrderId { get; set; }
}
}
\ No newline at end of file
......@@ -3857,7 +3857,7 @@ namespace Edu.Module.Course
StartTime = STime,
EndTime = ETime,
CompleteProgress = -1,
GuestList = item.Select(qitem => new { GuestName = qitem.StuName }),
GuestList = item.Select(qitem => new { GuestName = qitem.StuName, qitem.AppointType }),
AppointState = item.Where(x => x.State == CourseAppointStateEnum.WaitSure).Any() ? 1 : 2,
item.FirstOrDefault().ScrollMinNum
});
......@@ -4378,7 +4378,7 @@ namespace Edu.Module.Course
EndTime = ETime,
CompleteProgress = -1,
FeedBackStatus = 0,
GuestList = item.Select(qitem => new { GuestName = qitem.StuName }),
GuestList = item.Select(qitem => new { GuestName = qitem.StuName, qitem.AppointType }),
AppointState = item.Where(x => x.State == CourseAppointStateEnum.WaitSure).Any() ? 1 : 2,
item.FirstOrDefault().ScrollMinNum
});
......@@ -4596,7 +4596,7 @@ namespace Edu.Module.Course
StartTime = STime,
EndTime = ETime,
CompleteProgress = -1,
GuestList = item.Select(qitem => new { GuestName = qitem.StuName, qitem.StuId, AppointmentId = qitem.Id }),
GuestList = item.Select(qitem => new { GuestName = qitem.StuName, qitem.StuId, AppointmentId = qitem.Id, qitem.AppointType }),
AppointState = item.Where(x => x.State == CourseAppointStateEnum.WaitSure).Any() ? 1 : 2,
item.Key.ShiftSort,
EnrollNum = item.Count(),
......
......@@ -64,6 +64,10 @@ namespace Edu.Module.Course
/// 账号
/// </summary>
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
/// <summary>
/// 跳课记录
/// </summary>
private readonly RB_Scroll_SkipCourseRepository scroll_SkipCourseRepository = new RB_Scroll_SkipCourseRepository();
#region 滚动开班
......@@ -228,12 +232,15 @@ namespace Edu.Module.Course
string CourseTime = CourseTimeList.Min(x => x.StartTime) + "~" + CourseTimeList.Max(x => x.EndTime);
string StartTime = item.Key.Date.ToString("yyyy-MM-dd") + " " + CourseTimeList.Min(x => x.StartTime);
//开始验证学生的数量是否达标
if (item.Where(x => !CancelStuId.Contains(x.StuId)).Count() < item.Key.ScrollMinNum)
if (item.Where(x => !CancelStuId.Contains(x.StuId) && x.AppointType !=3).Count() < item.Key.ScrollMinNum)
{
//人数未达标 取消课程
foreach (var qitem in item.Where(x => !CancelStuId.Contains(x.StuId)))
{
if (qitem.AppointType != 3)
{
CancelStuId.Add(qitem.StuId);
}
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Scroll_Appointment_ViewModel.State), Common.Enum.Course.CourseAppointStateEnum.Cancel},
{ nameof(RB_Scroll_Appointment_ViewModel.Remark), qitem.Remark +";人数"+item.Where(x => !CancelStuId.Contains(x.StuId)).Count()+",成本人数"+item.Key.ScrollMinNum+",未满足定时器取消"+DateTime.Now},
......@@ -251,7 +258,40 @@ namespace Edu.Module.Course
//给学生推送 取消课程的订阅消息
SendAppointmentCancelMsg(token, qitem.StuOpenId, qitem, StartTime);
if (qitem.AppointType == 2)
{
//更新补课
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Scroll_SkipCourse_ViewModel.State),1}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.StuId),
FiledValue = qitem.StuId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.GuestId),
FiledValue = qitem.GuestId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.ChapterNo),
FiledValue = qitem.ChapterNo,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.State),
FiledValue = 2,
OperatorEnum =OperatorEnum.Equal
}
};
scroll_SkipCourseRepository.Update(keyValues1, wheres1);
}
#region 之后的取消
if (qitem.AppointType !=3)
{
var clist = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = groupId, StartTime = qitem.Date.ToString("yyyy-MM-dd"), StuId = qitem.StuId, State = Common.Enum.Course.CourseAppointStateEnum.WaitSure });
foreach (var qcitem in clist)
{
......@@ -286,6 +326,37 @@ namespace Edu.Module.Course
{
//给学生推送 取消课程的订阅消息
SendAppointmentCancelMsg(token, qcitem.StuOpenId, qcitem, qcitem.Date.ToString("yyyy-MM-dd") + " " + qcitem.CourseSTime);
if (qcitem.AppointType == 2)
{
//更新补课
Dictionary<string, object> keyValues12 = new Dictionary<string, object>() {
{ nameof(RB_Scroll_SkipCourse_ViewModel.State),1}
};
List<WhereHelper> wheres12 = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.StuId),
FiledValue = qcitem.StuId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.GuestId),
FiledValue = qcitem.GuestId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.ChapterNo),
FiledValue = qcitem.ChapterNo,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.State),
FiledValue = 2,
OperatorEnum =OperatorEnum.Equal
}
};
scroll_SkipCourseRepository.Update(keyValues12, wheres12);
}
}
}
}
}
......@@ -297,11 +368,7 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(item.Key.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>课程取消通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{item.Key.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{CourseTime}</font>\n>
取消原因:<font color='comment'>截止仅有{item.Count()}报名,预约人数未达到最低成班人数 {item.Key.ScrollMinNum}人</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={item.Key.AccountId}&target={recipientPath})";
var content = $"<font color='info'>课程取消通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{item.Key.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{CourseTime}</font>\n>取消原因:<font color='comment'>截止仅有{item.Count()}报名,预约人数未达到最低成班人数 {item.Key.ScrollMinNum}人</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={item.Key.AccountId}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, item.Key.WorkUserId, "课程取消通知");
}
}
......@@ -378,13 +445,7 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(item.Key.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>课程预约成功通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{item.Key.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{CourseTime}</font>\n>
上课课程:<font color='warning'>{item.Key.CourseName}(第{item.Key.ChapterNo}次课)</font>\n>
上课教室:<font color='warning'>{item.Key.RoomName}({item.Key.RoomSchoolName})</font>\n>
上课人数:<font color='comment'>{item.Count()}人</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={item.Key.AccountId}&target={recipientPath})";
var content = $"<font color='info'>课程预约成功通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{item.Key.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{CourseTime}</font>\n>上课课程:<font color='warning'>{item.Key.CourseName}(第{item.Key.ChapterNo}次课)</font>\n>上课教室:<font color='warning'>{item.Key.RoomName}({item.Key.RoomSchoolName})</font>\n>上课人数:<font color='comment'>{item.Count()}人</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={item.Key.AccountId}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, item.Key.WorkUserId, "课程预约成功通知");
}
}
......@@ -431,7 +492,7 @@ namespace Edu.Module.Course
string CourseTime = CourseTimeList.Min(x => x.StartTime) + "~" + CourseTimeList.Max(x => x.EndTime);
string StartTime = item.Key.Date.ToString("yyyy-MM-dd") + " " + CourseTimeList.Min(x => x.StartTime);
//开始验证学生的数量是否达标
if (item.Count() < item.Key.ScrollMinNum)
if (item.Where(x=>x.AppointType!=3).Count() < item.Key.ScrollMinNum)
{
foreach (var empModel in empList)
{
......@@ -439,12 +500,7 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(empModel.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>课程即将取消通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{item.Key.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{CourseTime}</font>\n>
上课老师:<font color='warning'>{item.Key.TeacherName}</font>\n>
取消原因:<font color='comment'>截止目前仅有{item.Count()}报名,预约人数未达到最低成班人数 {item.Key.ScrollMinNum}人,即将取消</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
var content = $"<font color='info'>课程即将取消通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{item.Key.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{CourseTime}</font>\n>上课老师:<font color='warning'>{item.Key.TeacherName}</font>\n>取消原因:<font color='comment'>截止目前仅有{item.Where(x=>x.AppointType!=3).Count()}报名,预约人数未达到最低成班人数 {item.Key.ScrollMinNum}人,即将取消</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, empModel.WorkUserId, "课程即将取消通知");
}
}
......@@ -614,7 +670,7 @@ namespace Edu.Module.Course
var clist = JsonHelper.DeserializeObject<List<CourseTimeModel>>(item.CourseTime);
//更新 order_guest 表 上课章节 请假也暂时先算完成课时(请假应该是有补课的)
var gmodel = order_GuestRepository.GetEntity(item.GuestId);
if (gmodel != null) {
if (gmodel != null && gmodel.CourseChapterNo < item.ChapterNo) {
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.CourseChapterNo), gmodel.CourseChapterNo +1},
{ nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.CompleteHours), gmodel.CompleteHours + clist.Sum(x=>x.ClassHours)}
......@@ -628,9 +684,12 @@ namespace Edu.Module.Course
};
order_GuestRepository.Update(keyValues1, wheres1);
}
//写入签到数据表
if (item.AppointType != 3)
{
//写入签到数据表 (非重复上课的 才写入签到数据)
var tlist = timeList.Where(x => x.ClassPlanId == item.ClassPlanId).ToList();
foreach (var qitem in tlist) {
foreach (var qitem in tlist)
{
var ccModel = clist.Where(x => x.StartTime == qitem.StartTime).FirstOrDefault();
if (!oldCheck.Where(x => x.OrderGuestId == item.GuestId && x.ClassTimeId == qitem.ClassTimeId).Any())
{
......@@ -661,6 +720,7 @@ namespace Edu.Module.Course
}
}
}
}
#endregion
}
}
......@@ -75,6 +75,10 @@ namespace Edu.Module.Course
/// </summary>
private readonly RB_Order_GuestRepository order_GuestRepository = new RB_Order_GuestRepository();
/// <summary>
/// 订单
/// </summary>
private readonly RB_OrderRepository orderRepository = new RB_OrderRepository();
/// <summary>
/// 学生
/// </summary>
private readonly RB_StudentRepository studentRepository = new RB_StudentRepository();
......@@ -884,6 +888,7 @@ namespace Edu.Module.Course
demodel.CourseSTime = timeList.Min(x => x.StartTime);
demodel.CourseETime = timeList.Max(x => x.EndTime);
demodel.LearnCourseId = learnModel.CourseId;
demodel.AppointType = 1;
//验证都OK了 插入预约数据
bool flag = scroll_AppointmentRepository.Insert(demodel) > 0;
......@@ -899,12 +904,7 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(empModel.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>学生预约通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{demodel.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{demodel.CourseSTime + "~" + demodel.CourseETime}</font>\n>
上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(demodel.AccountId)?.EmployeeName ?? ""}</font>\n>
约课备注:<font color='comment'>学生 {studentRepository.GetEntity(demodel.StuId)?.StuName ?? ""}已约课</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
var content = $"<font color='info'>学生预约通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{demodel.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{demodel.CourseSTime + "~" + demodel.CourseETime}</font>\n>上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(demodel.AccountId)?.EmployeeName ?? ""}</font>\n>约课备注:<font color='comment'>学生 {studentRepository.GetEntity(demodel.StuId)?.StuName ?? ""}已约课</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, empModel.WorkUserId, "学生预约通知");
}
}
......@@ -1038,13 +1038,8 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(empModel.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>学生预约取消通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{appontModel.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{appontModel.CourseSTime + "~" + appontModel.CourseETime}</font>\n>
上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(appontModel.AccountId)?.EmployeeName ?? ""}</font>\n>
取消备注:<font color='comment'>学生 {StuName}自行取消预约</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, "LiuDong", "学生预约取消通知");
var content = $"<font color='info'>学生预约取消通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{appontModel.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{appontModel.CourseSTime + "~" + appontModel.CourseETime}</font>\n>上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(appontModel.AccountId)?.EmployeeName ?? ""}</font>\n>取消备注:<font color='comment'>学生 {StuName}自行取消预约</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, empModel.WorkUserId, "学生预约取消通知");
}
}
}
......@@ -1085,12 +1080,7 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(empModel.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>学生预约取消通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{item.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{item.CourseSTime + "~" + item.CourseETime}</font>\n>
上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(item.AccountId)?.EmployeeName ?? ""}</font>\n>
取消备注:<font color='comment'>学生 {StuName}取消预约前面课程,连带此次课程取消预约,请注意排课</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
var content = $"<font color='info'>学生预约取消通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{item.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{item.CourseSTime + "~" + item.CourseETime}</font>\n>上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(item.AccountId)?.EmployeeName ?? ""}</font>\n>取消备注:<font color='comment'>学生 {StuName}取消预约前面课程,连带此次课程取消预约,请注意排课</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, empModel.WorkUserId, "学生预约取消通知");
}
}
......@@ -1502,33 +1492,34 @@ namespace Edu.Module.Course
demodel.CourseSTime = timeList.Min(x => x.StartTime);
demodel.CourseETime = timeList.Max(x => x.EndTime);
demodel.LearnCourseId = learnModel.CourseId;
demodel.AppointType = 1;
//验证都OK了 插入预约数据
AppointId = scroll_AppointmentRepository.Insert(demodel);
bool flag = AppointId > 0;
if (flag) {
//后台多半是 陈兴梅自行约课, 暂时不推送消息
// string Scroll_Notice = dictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = demodel.Group_Id, DictKey = "Scroll_Notice" }).FirstOrDefault()?.Content ?? "";
// if (!string.IsNullOrEmpty(Scroll_Notice))
// {
// //查询推送老师
// var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = demodel.Group_Id, QIds = Scroll_Notice });
// foreach (var empModel in empList)
// {
// //给老师推送课程 信息
// if (!string.IsNullOrEmpty(empModel.WorkUserId))
// {
// var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
// var content = $@"<font color='info'>后台预约通知</font>\n>**概要信息** \n>
//上课日期:<font color='warning'>{demodel.Date.ToString("yyyy-MM-dd")}</font>\n>
//上课时段:<font color='warning'>{demodel.CourseSTime+"~"+ demodel.CourseETime}</font>\n>
//上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(demodel.AccountId)?.EmployeeName??""}</font>\n>
//约课备注:<font color='comment'>后台管理给学生 {studentRepository.GetEntity(demodel.StuId)?.StuName??""}的约课</font>\n>
//请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
// PushWorkChatHelper.PushToWorkChat(content, "LiuDong", "后台预约通知");
// }
// }
// }
// string Scroll_Notice = dictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = demodel.Group_Id, DictKey = "Scroll_Notice" }).FirstOrDefault()?.Content ?? "";
// if (!string.IsNullOrEmpty(Scroll_Notice))
// {
// //查询推送老师
// var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = demodel.Group_Id, QIds = Scroll_Notice });
// foreach (var empModel in empList)
// {
// //给老师推送课程 信息
// if (!string.IsNullOrEmpty(empModel.WorkUserId))
// {
// var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
// var content = $@"<font color='info'>后台预约通知</font>\n>**概要信息** \n>
//上课日期:<font color='warning'>{demodel.Date.ToString("yyyy-MM-dd")}</font>\n>
//上课时段:<font color='warning'>{demodel.CourseSTime+"~"+ demodel.CourseETime}</font>\n>
//上课老师:<font color='warning'>{accountRepository.GetEmployeeInfo(demodel.AccountId)?.EmployeeName??""}</font>\n>
//约课备注:<font color='comment'>后台管理给学生 {studentRepository.GetEntity(demodel.StuId)?.StuName??""}的约课</font>\n>
//请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
// PushWorkChatHelper.PushToWorkChat(content, empModel.WorkUserId, "后台预约通知");
// }
// }
// }
}
return flag ? "" : "出错了,请联系管理员";
#endregion
......@@ -1593,7 +1584,39 @@ namespace Edu.Module.Course
//给学生推送 取消课程的订阅消息
SendAppointmentCancelMsg(token, item.StuOpenId, item, item.Date.ToString("yyyy-MM-dd") + " " + item.CourseSTime, "老师操作取消预约");
if (item.AppointType == 2) {
//更新补课
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Scroll_SkipCourse_ViewModel.State),1}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.StuId),
FiledValue = item.StuId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.GuestId),
FiledValue = item.GuestId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.ChapterNo),
FiledValue = item.ChapterNo,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.State),
FiledValue = 2,
OperatorEnum =OperatorEnum.Equal
}
};
scroll_SkipCourseRepository.Update(keyValues1, wheres1);
}
#region 之后的取消
if (item.AppointType == 1)
{
var clist = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = userInfo.Group_Id, StartTime = item.Date.ToString("yyyy-MM-dd"), StuId = item.StuId, State = Common.Enum.Course.CourseAppointStateEnum.WaitSure });
foreach (var qitem in clist)
{
......@@ -1624,9 +1647,40 @@ namespace Edu.Module.Course
}
};
bool flag1 = scroll_AppointmentRepository.Update(keyValues1, wheres1);
if (flag1) {
if (flag1)
{
//给学生推送 取消课程的订阅消息
SendAppointmentCancelMsg(token, qitem.StuOpenId, qitem, qitem.Date.ToString("yyyy-MM-dd") + " " + qitem.CourseSTime, "老师操作取消预约");
if (qitem.AppointType == 2) {
//更新补课
Dictionary<string, object> keyValues12 = new Dictionary<string, object>() {
{ nameof(RB_Scroll_SkipCourse_ViewModel.State),1}
};
List<WhereHelper> wheres12 = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.StuId),
FiledValue = qitem.StuId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.GuestId),
FiledValue = qitem.GuestId,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.ChapterNo),
FiledValue = qitem.ChapterNo,
OperatorEnum =OperatorEnum.Equal
},
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.State),
FiledValue = 2,
OperatorEnum =OperatorEnum.Equal
}
};
scroll_SkipCourseRepository.Update(keyValues12, wheres12);
}
}
}
}
}
......@@ -1652,12 +1706,7 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(empModel.WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>取消学生预约通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{firstModel.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{CourseTime}</font>\n>
上课老师:<font color='warning'>{firstModel.TeacherName}</font>\n>
取消原因:<font color='comment'>后台管理取消 {StuName}的约课</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
var content = $"<font color='info'>取消学生预约通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{firstModel.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{CourseTime}</font>\n>上课老师:<font color='warning'>{firstModel.TeacherName}</font>\n>取消原因:<font color='comment'>后台管理取消 {StuName}的约课</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={empModel.Id}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, empModel.WorkUserId, "取消学生预约通知");
}
}
......@@ -1683,7 +1732,7 @@ namespace Edu.Module.Course
if (!list.Any()) { return "不存在预约,无法确认"; }
//写入计划
var firstModel = list.FirstOrDefault();
if (list.Count() < firstModel.ScrollMinNum) { return "最小成班人数:" + firstModel.ScrollMinNum; }
if (list.Where(x => x.AppointType != 3).Count() < firstModel.ScrollMinNum) { return "最小成班人数:" + firstModel.ScrollMinNum; }
int planId = class_PlanRepository.Insert(new RB_Class_Plan()
{
......@@ -1780,14 +1829,8 @@ namespace Edu.Module.Course
if (!string.IsNullOrEmpty(WorkUserId))
{
var recipientPath = HttpUtility.UrlEncode($"/stu/subscribe");//地址需要后台功能做了之后吧
var content = $@"<font color='info'>课程预约成功通知</font>\n>**概要信息** \n>
上课日期:<font color='warning'>{firstModel.Date.ToString("yyyy-MM-dd")}</font>\n>
上课时段:<font color='warning'>{CourseTime}</font>\n>
上课课程:<font color='warning'>{firstModel.CourseName}(第{firstModel.ChapterNo}次课)</font>\n>
上课教室:<font color='warning'>{firstModel.RoomName}({firstModel.RoomSchoolName})</font>\n>
上课人数:<font color='comment'>{list.Count()}人</font>\n>
请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={firstModel.AccountId}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, "LiuDong", "课程预约成功通知");
var content = $"<font color='info'>课程预约成功通知</font>\n>**概要信息** \n>上课日期:<font color='warning'>{firstModel.Date.ToString("yyyy-MM-dd")}</font>\n>上课时段:<font color='warning'>{CourseTime}</font>\n>上课课程:<font color='warning'>{firstModel.CourseName}(第{firstModel.ChapterNo}次课)</font>\n>上课教室:<font color='warning'>{firstModel.RoomName}({firstModel.RoomSchoolName})</font>\n>上课人数:<font color='comment'>{list.Count()}人</font>\n>请 点 击:[查看详情]({Config.ErpUrl}/autologin?loginId={firstModel.AccountId}&target={recipientPath})";
PushWorkChatHelper.PushToWorkChat(content, WorkUserId, "课程预约成功通知");
}
}
}
......@@ -2004,6 +2047,353 @@ namespace Edu.Module.Course
}
return false;
}
/// <summary>
/// 获取可补课的学员列表
/// </summary>
/// <param name="chapterNo"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public List<RB_Scroll_SkipCourse_ViewModel> GetCanMakeupStuList(int chapterNo, UserInfo userInfo)
{
var list = scroll_SkipCourseRepository.GetList(new RB_Scroll_SkipCourse_ViewModel() { Group_Id = userInfo.Group_Id, ChapterNo = chapterNo, State = 1 });
return list;
}
/// <summary>
/// 补课
/// </summary>
/// <param name="demodel"></param>
/// <param name="appointId"></param>
/// <returns></returns>
public string SetAppointmentMakeup(RB_Scroll_Appointment_ViewModel demodel, out int AppointId)
{
AppointId = 0;
#region 验证补课
var makeupModel = scroll_SkipCourseRepository.GetList(new RB_Scroll_SkipCourse_ViewModel() { Group_Id = demodel.Group_Id, ChapterNo = demodel.ChapterNo, StuId = demodel.StuId, GuestId = demodel.GuestId, State = 1 }).FirstOrDefault();
if (makeupModel == null) { return "补课记录不存在/已补课"; }
#endregion
#region 学生的课程
//获取课程信息
var courseModel = courseRepository.GetEntity(makeupModel.CourseId);
if (courseModel.CourseTimeId <= 0) { return "课程未关联上课时段"; }
//查询课程使用的上课时段
var ctModel = scroll_CourseTimeRepository.GetEntity<RB_Scroll_CourseTime_ViewModel>(courseModel.CourseTimeId);
if (!string.IsNullOrEmpty(ctModel.Content))
{
ctModel.TimeList = JsonHelper.DeserializeObject<List<CourseTimeModel>>(ctModel.Content);
}
else { return "上课时段未配置"; }
double NextAppointMinutes = 0;
//查询下一次课的耗时分钟数 前端需要根据这个分钟数
var chapterModel = course_ChapterRepository.GetChapterListRepository(new RB_Course_Chapter_ViewModel() { Group_Id = demodel.Group_Id, CourseId = makeupModel.CourseId, ChapterNo = makeupModel.ChapterNo.ToString() }).FirstOrDefault();
NextAppointMinutes = chapterModel?.StudyMinutes ?? 0;
demodel.CourseGradeId = chapterModel?.CourseRate ?? 0;
#endregion
#region 组装排班
string Date = demodel.Date.ToString("yyyy-MM-dd");
demodel.AccountId = teacherRepository.GetTeacherByTId(demodel.TeacherId, demodel.Group_Id).FirstOrDefault().AccountId;
//验证当日老师的数据
var planList = scroll_PlanRepository.GetList(new RB_Scroll_Plan_ViewModel() { Group_Id = demodel.Group_Id, AccountId = demodel.AccountId, STime = Date, ETime = Date });
if (!planList.Any()) { return "老师当日未查询到可预约课,请刷新后再试"; }
//开始验证 此时段数据是否可以预约
var pcList = class_PlanRepository.GetClassPlanModelRepository(new RB_Class_Plan_ViewModel() { Group_Id = demodel.Group_Id, QClassDateStr = Date, TeacherId = demodel.TeacherId });
if (pcList.Any())
{
//查询计划的时间段
string planids = string.Join(",", pcList.Select(x => x.ClassPlanId));
var ctList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { Group_Id = demodel.Group_Id, QClassPlanIds = planids });
foreach (var item in pcList)
{
item.PlanTimeList = ctList.Where(x => x.ClassPlanId == item.ClassPlanId).ToList();
}
}
var rcList = reserve_ClassRepository.GetReserveClassListRepository(new Model.ViewModel.Reserve.RB_Reserve_Class_Extend() { Group_Id = demodel.Group_Id, StartClassDate = Date, EndClassDate = Date, TeacherId = demodel.TeacherId });
//再查询当日已预约情况
var appointList = scroll_AppointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel() { Group_Id = demodel.Group_Id, StartTime = Date, EntTime = Date });
//开始遍历老师了
foreach (var item in planList)
{
//查询班次
var shiftModel = scroll_ShiftRepository.GetList(new RB_Scroll_Shift_ViewModel() { Group_Id = demodel.Group_Id, Id = item.ShiftId }).FirstOrDefault();
//上课时段
item.CourseTimeList = ctModel.TimeList.Where(x => Convert.ToDateTime("2020-01-01 " + x.StartTime) >= Convert.ToDateTime("2020-01-01 " + shiftModel.StartTime) && Convert.ToDateTime("2020-01-01 " + x.EndTime) <= Convert.ToDateTime("2020-01-01 " + shiftModel.EndTime)).RefMapperToList<CourseTimeExtend>();
//查询该时段内 是否已有正常排课
var pc2List = pcList.Where(x => x.TeacherId == item.TeacherId).ToList();
foreach (var qitem in pc2List)
{
foreach (var citem in qitem.PlanTimeList)
{
DateTime CSDate = Convert.ToDateTime("2022-01-01 " + citem.StartTime);
DateTime CEDate = Convert.ToDateTime("2022-01-01 " + citem.EndTime);
//开始验证重复数据
var HList = item.CourseTimeList.Where(x => (x.SDate <= CSDate && CSDate <= x.EDate) || (x.SDate <= CEDate && CEDate <= x.EDate)).ToList();
foreach (var hitem in HList)
{
hitem.State = 2;//已有排课 不可预约
}
}
}
//查询该时段内 是否已有正常试听
var rc2List = rcList.Where(x => x.TeacherId == item.TeacherId).ToList();
foreach (var qitem in rc2List)
{
DateTime CSDate = Convert.ToDateTime("2022-01-01 " + qitem.ClassTime);
DateTime CEDate = Convert.ToDateTime("2022-01-01 " + qitem.EndTime);
//开始验证重复数据
var HList = item.CourseTimeList.Where(x => (x.SDate <= CSDate && CSDate <= x.EDate) || (x.SDate <= CEDate && CEDate <= x.EDate)).ToList();
foreach (var hitem in HList)
{
hitem.State = 2;//已有排课 不可预约
}
}
//查询已预约情况
var aList = appointList.Where(x => x.TeacherId == item.TeacherId).ToList();
aList.GroupBy(x => new { x.CourseGradeId, x.ChapterNo, x.ShiftSort }).ToList().ForEach(x =>
{
var firstModel = x.FirstOrDefault();
List<int> SortList = JsonHelper.DeserializeObject<List<int>>("[" + x.Key.ShiftSort + "]");
item.CourseTimeList.Where(y => SortList.Contains(y.Sort)).ToList().ForEach(z => {
z.MinPeopleNum = firstModel.ScrollMinNum;
z.MaxPeopleNum = firstModel.ScrollMaxNum;
z.State = 3;//已预约了
if (x.Where(x => x.StuId == demodel.StuId).Any())
{
z.State = 2;//我预约的
}
z.CourseId = firstModel.CourseId;
z.CourseGradeId = x.Key.CourseGradeId;
z.CourseName = firstModel.CourseName;
z.CourseChapterNo = x.Key.ChapterNo;
z.PeopleNum = x.Count();
});
});
}
#endregion
#region 开始预约
var planModel = planList.FirstOrDefault();
var timeList = planModel.CourseTimeList.Where(x => ("," + demodel.ShiftSort + ",").Contains("," + x.Sort + ",")).ToList();
if (timeList.Sum(x => x.Minutes) != NextAppointMinutes) { return "预约时长不正确"; }
if (timeList.Where(x => x.State == 2).Any()) { return "此时段不可预约,请刷新后再试"; }
foreach (var item in timeList.Where(x => x.State == 3))
{
if (demodel.CourseGradeId != item.CourseGradeId) { return "预约课次等级不一致"; }
if (demodel.ChapterNo != item.CourseChapterNo) { return "预约课程章节不一致"; }
if (item.PeopleNum + 1 > item.MaxPeopleNum) { return "该时段已预约满,请预约其他时段"; }
demodel.CourseId = item.CourseId;
}
demodel.CourseEndTime = Convert.ToDateTime(Date + " " + timeList.Max(x => x.EndTime));//上完课的时间
demodel.CourseTime = JsonHelper.Serialize(timeList.Select(x => new { x.Sort, x.StartTime, x.EndTime, x.Minutes, x.ClassHours }));
demodel.RoomId = planModel.RoomId;//上课教室
demodel.GuestId = makeupModel.GuestId;
demodel.OrderId = makeupModel.OrderId;
demodel.CourseSTime = timeList.Min(x => x.StartTime);
demodel.CourseETime = timeList.Max(x => x.EndTime);
demodel.LearnCourseId = makeupModel.CourseId;
demodel.AppointType = 2;
//验证都OK了 插入预约数据
AppointId = scroll_AppointmentRepository.Insert(demodel);
bool flag = AppointId > 0;
if (flag)
{
//更新补课
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Scroll_SkipCourse_ViewModel.State),2}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_SkipCourse_ViewModel.Id),
FiledValue = makeupModel.Id,
OperatorEnum =OperatorEnum.Equal
}
};
scroll_SkipCourseRepository.Update(keyValues, wheres);
}
return flag ? "" : "出错了,请联系管理员";
#endregion
}
/// <summary>
/// 获取可重复上课的学员
/// </summary>
/// <param name="stuName"></param>
/// <param name="chapterNo"></param>
/// <param name="courseGradeId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public List<RB_Scroll_Appointment_ViewModel> GetCanAppointmentAgainList(string stuName, int chapterNo, int courseGradeId, UserInfo userInfo)
{
return scroll_AppointmentRepository.GetCanAppointmentAgainList(stuName, chapterNo, courseGradeId, userInfo.Group_Id);
}
/// <summary>
/// 重上课
/// </summary>
/// <param name="demodel"></param>
/// <param name="appointId"></param>
/// <returns></returns>
public string SetAppointmentAgain(RB_Scroll_Appointment_ViewModel demodel, out int AppointId)
{
AppointId = 0;
#region 验证次数
int AgainNum = Convert.ToInt32(dictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = demodel.Group_Id, DictKey = "Scroll_AgainCourse" }).FirstOrDefault()?.Content ?? "1");
var AppointList = scroll_AppointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel() { Group_Id = demodel.Group_Id, StuId = demodel.StuId, GuestId = demodel.GuestId, ChapterNo = demodel.ChapterNo, CourseGradeId = demodel.CourseGradeId });
if (AppointList.Where(x => x.AppointType == 3).Count() >= AgainNum)
{
return "当次进度重上次数已用完";
}
var AppointModel = AppointList.Where(x => x.AppointType == 1 || x.AppointType == 2).FirstOrDefault();
#endregion
#region 学生的课程
//获取课程信息
var courseModel = courseRepository.GetEntity(AppointModel.LearnCourseId);
if (courseModel.CourseTimeId <= 0) { return "课程未关联上课时段"; }
//查询课程使用的上课时段
var ctModel = scroll_CourseTimeRepository.GetEntity<RB_Scroll_CourseTime_ViewModel>(courseModel.CourseTimeId);
if (!string.IsNullOrEmpty(ctModel.Content))
{
ctModel.TimeList = JsonHelper.DeserializeObject<List<CourseTimeModel>>(ctModel.Content);
}
else { return "上课时段未配置"; }
double NextAppointMinutes = 0;
//查询下一次课的耗时分钟数 前端需要根据这个分钟数
var chapterModel = course_ChapterRepository.GetChapterListRepository(new RB_Course_Chapter_ViewModel() { Group_Id = demodel.Group_Id, CourseId = AppointModel.LearnCourseId, ChapterNo = demodel.ChapterNo.ToString() }).FirstOrDefault();
NextAppointMinutes = chapterModel?.StudyMinutes ?? 0;
demodel.CourseGradeId = chapterModel?.CourseRate ?? 0;
#endregion
#region 组装排班
string Date = demodel.Date.ToString("yyyy-MM-dd");
demodel.AccountId = teacherRepository.GetTeacherByTId(demodel.TeacherId, demodel.Group_Id).FirstOrDefault().AccountId;
//验证当日老师的数据
var planList = scroll_PlanRepository.GetList(new RB_Scroll_Plan_ViewModel() { Group_Id = demodel.Group_Id, AccountId = demodel.AccountId, STime = Date, ETime = Date });
if (!planList.Any()) { return "老师当日未查询到可预约课,请刷新后再试"; }
//开始验证 此时段数据是否可以预约
var pcList = class_PlanRepository.GetClassPlanModelRepository(new RB_Class_Plan_ViewModel() { Group_Id = demodel.Group_Id, QClassDateStr = Date, TeacherId = demodel.TeacherId });
if (pcList.Any())
{
//查询计划的时间段
string planids = string.Join(",", pcList.Select(x => x.ClassPlanId));
var ctList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { Group_Id = demodel.Group_Id, QClassPlanIds = planids });
foreach (var item in pcList)
{
item.PlanTimeList = ctList.Where(x => x.ClassPlanId == item.ClassPlanId).ToList();
}
}
var rcList = reserve_ClassRepository.GetReserveClassListRepository(new Model.ViewModel.Reserve.RB_Reserve_Class_Extend() { Group_Id = demodel.Group_Id, StartClassDate = Date, EndClassDate = Date, TeacherId = demodel.TeacherId });
//再查询当日已预约情况
var appointList = scroll_AppointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel() { Group_Id = demodel.Group_Id, StartTime = Date, EntTime = Date });
//开始遍历老师了
foreach (var item in planList)
{
//查询班次
var shiftModel = scroll_ShiftRepository.GetList(new RB_Scroll_Shift_ViewModel() { Group_Id = demodel.Group_Id, Id = item.ShiftId }).FirstOrDefault();
//上课时段
item.CourseTimeList = ctModel.TimeList.Where(x => Convert.ToDateTime("2020-01-01 " + x.StartTime) >= Convert.ToDateTime("2020-01-01 " + shiftModel.StartTime) && Convert.ToDateTime("2020-01-01 " + x.EndTime) <= Convert.ToDateTime("2020-01-01 " + shiftModel.EndTime)).RefMapperToList<CourseTimeExtend>();
//查询该时段内 是否已有正常排课
var pc2List = pcList.Where(x => x.TeacherId == item.TeacherId).ToList();
foreach (var qitem in pc2List)
{
foreach (var citem in qitem.PlanTimeList)
{
DateTime CSDate = Convert.ToDateTime("2022-01-01 " + citem.StartTime);
DateTime CEDate = Convert.ToDateTime("2022-01-01 " + citem.EndTime);
//开始验证重复数据
var HList = item.CourseTimeList.Where(x => (x.SDate <= CSDate && CSDate <= x.EDate) || (x.SDate <= CEDate && CEDate <= x.EDate)).ToList();
foreach (var hitem in HList)
{
hitem.State = 2;//已有排课 不可预约
}
}
}
//查询该时段内 是否已有正常试听
var rc2List = rcList.Where(x => x.TeacherId == item.TeacherId).ToList();
foreach (var qitem in rc2List)
{
DateTime CSDate = Convert.ToDateTime("2022-01-01 " + qitem.ClassTime);
DateTime CEDate = Convert.ToDateTime("2022-01-01 " + qitem.EndTime);
//开始验证重复数据
var HList = item.CourseTimeList.Where(x => (x.SDate <= CSDate && CSDate <= x.EDate) || (x.SDate <= CEDate && CEDate <= x.EDate)).ToList();
foreach (var hitem in HList)
{
hitem.State = 2;//已有排课 不可预约
}
}
//查询已预约情况
var aList = appointList.Where(x => x.TeacherId == item.TeacherId).ToList();
aList.GroupBy(x => new { x.CourseGradeId, x.ChapterNo, x.ShiftSort }).ToList().ForEach(x =>
{
var firstModel = x.FirstOrDefault();
List<int> SortList = JsonHelper.DeserializeObject<List<int>>("[" + x.Key.ShiftSort + "]");
item.CourseTimeList.Where(y => SortList.Contains(y.Sort)).ToList().ForEach(z => {
z.MinPeopleNum = firstModel.ScrollMinNum;
z.MaxPeopleNum = firstModel.ScrollMaxNum;
z.State = 3;//已预约了
if (x.Where(x => x.StuId == demodel.StuId).Any())
{
z.State = 2;//我预约的
}
z.CourseId = firstModel.CourseId;
z.CourseGradeId = x.Key.CourseGradeId;
z.CourseName = firstModel.CourseName;
z.CourseChapterNo = x.Key.ChapterNo;
z.PeopleNum = x.Count();
});
});
}
#endregion
#region 开始预约
var planModel = planList.FirstOrDefault();
var timeList = planModel.CourseTimeList.Where(x => ("," + demodel.ShiftSort + ",").Contains("," + x.Sort + ",")).ToList();
if (timeList.Sum(x => x.Minutes) != NextAppointMinutes) { return "预约时长不正确"; }
if (timeList.Where(x => x.State == 2).Any()) { return "此时段不可预约,请刷新后再试"; }
foreach (var item in timeList.Where(x => x.State == 3))
{
if (demodel.CourseGradeId != item.CourseGradeId) { return "预约课次等级不一致"; }
if (demodel.ChapterNo != item.CourseChapterNo) { return "预约课程章节不一致"; }
if (item.PeopleNum + 1 > item.MaxPeopleNum) { return "该时段已预约满,请预约其他时段"; }
demodel.CourseId = item.CourseId;
}
demodel.CourseEndTime = Convert.ToDateTime(Date + " " + timeList.Max(x => x.EndTime));//上完课的时间
demodel.CourseTime = JsonHelper.Serialize(timeList.Select(x => new { x.Sort, x.StartTime, x.EndTime, x.Minutes, x.ClassHours }));
demodel.RoomId = planModel.RoomId;//上课教室
demodel.GuestId = AppointModel.GuestId;
demodel.OrderId = AppointModel.OrderId;
demodel.CourseSTime = timeList.Min(x => x.StartTime);
demodel.CourseETime = timeList.Max(x => x.EndTime);
demodel.LearnCourseId = AppointModel.LearnCourseId;
demodel.AppointType = 3;
//验证都OK了 插入预约数据
AppointId = scroll_AppointmentRepository.Insert(demodel);
bool flag = AppointId > 0;
return flag ? "" : "出错了,请联系管理员";
#endregion
}
#endregion
#region 初始化
......@@ -2294,5 +2684,107 @@ namespace Edu.Module.Course
}
#endregion
#region 学员上课记录
/// <summary>
/// 获取学员上课记录
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public object GetStuLearnChapterList(RB_Scroll_Appointment_ViewModel demodel)
{
List<object> Rlist = new List<object>();
//获取学生所有的报名信息
var ogList = student_OrderGuestRepository.GetStrOrderGuestListRepository(new RB_Student_OrderGuest_ViewModel() { Student_Id = demodel.StuId });
if (ogList.Any()) {
//获取所有的订单信息
string orderIds = string.Join(",", ogList.Select(x => x.OrderId));
var orderList = orderRepository.GetOrderListRepository(new RB_Order_ViewModel() { Group_Id = demodel.Group_Id, QOrderIds = orderIds });
//查询订单Guest
string orderGuestIds = string.Join(",", ogList.Select(x => x.OrderId));
var orderGuestList = order_GuestRepository.GetSingleListRepository(new RB_Order_Guest_ViewModel() { Group_Id = demodel.Group_Id, OrderGuestIds = orderGuestIds });
//根据学生 查询所有的约课数据
var AppointList = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = demodel.Group_Id, StuId = demodel.StuId });
//查询所有的 补课记录
var SkipList = scroll_SkipCourseRepository.GetList(new RB_Scroll_SkipCourse_ViewModel() { Group_Id = demodel.Group_Id, StuId = demodel.StuId });
foreach (var item in orderList) {
List<object> ChapterList = new List<object>();
var ogModel = ogList.Where(x => x.OrderId == item.OrderId).FirstOrDefault();
var oguestModel = orderGuestList.Where(x => x.Id == ogModel.GuestId).FirstOrDefault();
//根据课程Id 查询 上课课程
var cList = course_ChapterRepository.GetChapterListRepository(new RB_Course_Chapter_ViewModel() { Group_Id = demodel.Group_Id, CourseId = item.CourseId });
if (item.ClassScrollType == 2)
{
//预约课
int CourseChapterNo = AppointList.Any() ? AppointList.Max(x => x.ChapterNo) : 0;
int CourseChapterNo2 = SkipList.Any()? SkipList.Max(x => x.ChapterNo) : 0;
CourseChapterNo = CourseChapterNo < CourseChapterNo2 ? CourseChapterNo2 : CourseChapterNo;
cList.Where(x => x.SortNum <= CourseChapterNo).OrderByDescending(x => x.SortNum).ToList().ForEach(x =>
{
var AppointModel = AppointList.Where(y => y.ChapterNo == x.SortNum && y.AppointType != 3 && y.LearnCourseId == item.CourseId).FirstOrDefault();
var SkipModel = SkipList.Where(y => y.ChapterNo == x.SortNum && y.CourseId == item.CourseId).FirstOrDefault();
int AgainNum = AppointList.Where(y => y.ChapterNo == x.SortNum && y.AppointType == 3 && y.LearnCourseId == item.CourseId).Count();
int State = 0;
int AppointState = 0;
if (AppointModel != null)
{
//正常约课
if (AppointModel.AppointType == 1)
{
State = 1;//正常上课
}
else if (AppointModel.AppointType == 2)
{
State = 2;//补课
}
AppointState = (int)AppointModel.State;
}
if (SkipModel != null && SkipModel.State == 1)
{
State = 3;//跳课
}
ChapterList.Add(new
{
x.ChapterNo,
x.ChapterName,
State,
AppointState,
AgainNum
});
});
}
else {
//跟班
int CourseChapterNo = oguestModel?.CourseChapterNo ?? 0;
ChapterList.AddRange(cList.Where(x => x.SortNum <= CourseChapterNo).OrderByDescending(x=>x.SortNum).Select(x => new
{
x.ChapterNo,
x.ChapterName,
State = 1,
AppointState = 3,
AgainNum = 0
}));
}
Rlist.Add(new
{
item.OrderId,
item.CourseId,
item.CourseName,
item.ClassScrollType,
oguestModel.CourseChapterNo,
oguestModel.TotalChapterNo,
ChapterList
});
}
}
return Rlist;
}
#endregion
}
}
......@@ -56,6 +56,10 @@ namespace Edu.Repository.Scroll
{
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.StuId)} in({demodel.StuIds})";
}
if (demodel.AppointType > 0)
{
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.AppointType)} ={demodel.AppointType}";
}
string sql = $@"
SELECT r.*,c.AccountId as TeacherId,s.StuName,cou.CourseName,cou.ScrollMinNum,cou.ScrollMaxNum From RB_Scroll_Appointment r
......@@ -210,6 +214,10 @@ ORDER BY r.Id desc ";
{
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.ShiftSort)} ='{demodel.ShiftSort}'";
}
if (demodel.AppointType > 0)
{
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.AppointType)} ={demodel.AppointType}";
}
if (demodel.Q_AppointState > 0) {
if (demodel.Q_AppointState == 1)
{
......@@ -252,5 +260,22 @@ ORDER BY r.Id desc ";
}
Execute(sql);
}
/// <summary>
/// 获取可重复上课的学员
/// </summary>
/// <param name="stuName"></param>
/// <param name="chapterNo"></param>
/// <param name="courseGradeId"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<RB_Scroll_Appointment_ViewModel> GetCanAppointmentAgainList(string stuName, int chapterNo, int courseGradeId, int group_Id)
{
string sql = $@"SELECT a.Id,a.StuId,a.GuestId,a.OrderId,a.CourseId,s.StuName FROM rb_scroll_appointment a
LEFT JOIN rb_student s on a.StuId = s.StuId
WHERE a.Group_Id ={group_Id} and a.State =3 and a.AppointType =1 and a.ChapterNo ={chapterNo} and a.courseGradeId ={courseGradeId} and s.StuName LIKE '%{stuName}%'
ORDER BY a.OrderId DESC";
return Get<RB_Scroll_Appointment_ViewModel>(sql).ToList();
}
}
}
......@@ -40,10 +40,20 @@ namespace Edu.Repository.Scroll
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.CourseId)} ={demodel.CourseId}";
}
if (demodel.ChapterNo > 0)
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.ChapterNo)} ={demodel.ChapterNo}";
}
if (demodel.State > 0)
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.State)} ={demodel.State}";
}
string sql = $@"
SELECT * From RB_Scroll_SkipCourse r
SELECT r.*,s.StuName,g.OrderId From RB_Scroll_SkipCourse r
left join rb_student s on r.StuId = s.StuId
left join rb_order_guest g on r.GuestId = g.Id
WHERE {where}
ORDER BY r.Id asc ";
return Get<RB_Scroll_SkipCourse_ViewModel>(sql, parameters).ToList();
......
......@@ -122,7 +122,7 @@ namespace Edu.Repository.Sell
}
string sql = $@"
SELECT o.*,c.ClassName,t.TeacherName,t.TeacherIcon,IFNULL(course.CourseName,'') AS CourseName,c.OpenTime,IFNULL(course.ClassHours,0) AS ClassHours
SELECT o.*,c.ClassName,c.ClassScrollType,t.TeacherName,t.TeacherIcon,IFNULL(course.CourseName,'') AS CourseName,c.OpenTime,IFNULL(course.ClassHours,0) AS ClassHours
FROM RB_Order o
LEFT JOIN rb_class c on o.ClassId = c.ClassId
LEFT JOIN rb_teacher t on c.Teacher_Id = t.TId
......
......@@ -170,14 +170,15 @@ namespace Edu.WebApi.Controllers.Applet
var userInfo = base.AppletUserInfo;
var Robj = scrollClassModule.GetScrollAppointmentBaseInfo(userInfo, out string Rmsg);
if (Rmsg == "")
{
return ApiResult.Success("", Robj);
}
else
{
return ApiResult.Failed(Rmsg);
}
return ApiResult.Failed("此功能暂未开通使用");
//if (Rmsg == "")
//{
// return ApiResult.Success("", Robj);
//}
//else
//{
// return ApiResult.Failed(Rmsg);
//}
}
/// <summary>
......@@ -194,13 +195,14 @@ namespace Edu.WebApi.Controllers.Applet
}
Date = Convert.ToDateTime(Date).ToString("yyyy-MM-dd");
var Robj = scrollClassModule.GetScrollAppointmentTeacherList(userInfo, Date, SchoolId, out string Rmsg);
if (Rmsg == "")
{
return ApiResult.Success("", Robj);
}
else {
return ApiResult.Failed(Rmsg);
}
return ApiResult.Failed("此功能暂未开通使用");
//if (Rmsg == "")
//{
// return ApiResult.Success("", Robj);
//}
//else {
// return ApiResult.Failed(Rmsg);
//}
}
/// <summary>
......
......@@ -546,6 +546,188 @@ namespace Edu.WebApi.Controllers.Course
}
}
/// <summary>
/// 获取可补课的学生列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetCanMakeupStuList() {
var userInfo = base.UserInfo;
int ChapterNo = base.ParmJObj.GetInt("ChapterNo", 0);
if (ChapterNo <= 0) {
return ApiResult.ParamIsNull();
}
var list = scrollClassModule.GetCanMakeupStuList(ChapterNo, userInfo);
return ApiResult.Success("", list.Select(x => new
{
x.Id,
x.StuId,
x.StuName,
x.GuestId,
x.CourseId,
x.OrderId
}));
}
/// <summary>
/// 学生补课
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetAppointmentMakeup() {
var userInfo = base.UserInfo;
RB_Scroll_Appointment_ViewModel demodel = JsonHelper.DeserializeObject<RB_Scroll_Appointment_ViewModel>(base.RequestParm.Msg.ToString());
if (demodel.TeacherId <= 0)
{
return ApiResult.ParamIsNull("请传递老师编号ID");
}
if (demodel.Date <= DateTime.Now)
{
return ApiResult.ParamIsNull("预约日期有误");
}
if (string.IsNullOrEmpty(demodel.ShiftSort))
{
return ApiResult.ParamIsNull("请传递上课时段");
}
if (demodel.StuId <= 0)
{
return ApiResult.ParamIsNull("请传递学生ID");
}
if (demodel.GuestId <= 0)
{
return ApiResult.ParamIsNull("请传递学生ID");
}
if (demodel.ChapterNo <= 0)
{
return ApiResult.ParamIsNull("请传递上课章节");
}
#region 验证是否连续的时段
List<int> SortList = JsonHelper.DeserializeObject<List<int>>("[" + demodel.ShiftSort + "]");
int MinSort = SortList.Min(x => x);
string ShiftSort = "";
for (var i = 0; i < SortList.Count(); i++)
{
ShiftSort += (MinSort + i) + ",";
}
if (ShiftSort != demodel.ShiftSort + ",")
{
return ApiResult.ParamIsNull("需预约连续的时段");
}
#endregion
demodel.State = CourseAppointStateEnum.WaitSure;
demodel.Status = 0;
demodel.Group_Id = userInfo.Group_Id;
demodel.CreateBy = userInfo.Id;
demodel.CreateTime = DateTime.Now;
demodel.UpdateBy = userInfo.Id;
demodel.UpdateTime = DateTime.Now;
string msg = scrollClassModule.SetAppointmentMakeup(demodel, out int AppointId);
if (msg == "")
{
return ApiResult.Success("", AppointId);
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 获取可重上课的学员
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetCanAppointmentAgainList() {
var userInfo = base.UserInfo;
string StuName = base.ParmJObj.GetStringValue("StuName");//学生名称 模糊查询
int ChapterNo = base.ParmJObj.GetInt("ChapterNo", 0);
int CourseGradeId = base.ParmJObj.GetInt("CourseGradeId", 0);
if (string.IsNullOrEmpty(StuName) || ChapterNo <= 0 || CourseGradeId <= 0) {
return ApiResult.ParamIsNull();
}
var list = scrollClassModule.GetCanAppointmentAgainList(StuName, ChapterNo, CourseGradeId, userInfo);
return ApiResult.Success("", list.Select(x => new
{
x.Id,
x.StuId,
x.StuName,
x.GuestId,
x.OrderId,
x.CourseId
}));
}
/// <summary>
/// 学生重上课
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetAppointmentAgain()
{
var userInfo = base.UserInfo;
RB_Scroll_Appointment_ViewModel demodel = JsonHelper.DeserializeObject<RB_Scroll_Appointment_ViewModel>(base.RequestParm.Msg.ToString());
if (demodel.TeacherId <= 0)
{
return ApiResult.ParamIsNull("请传递老师编号ID");
}
if (demodel.Date <= DateTime.Now)
{
return ApiResult.ParamIsNull("预约日期有误");
}
if (string.IsNullOrEmpty(demodel.ShiftSort))
{
return ApiResult.ParamIsNull("请传递上课时段");
}
if (demodel.StuId <= 0)
{
return ApiResult.ParamIsNull("请传递学生ID");
}
if (demodel.GuestId <= 0)
{
return ApiResult.ParamIsNull("请传递学生ID");
}
if (demodel.ChapterNo <= 0)
{
return ApiResult.ParamIsNull("请传递上课章节");
}
#region 验证是否连续的时段
List<int> SortList = JsonHelper.DeserializeObject<List<int>>("[" + demodel.ShiftSort + "]");
int MinSort = SortList.Min(x => x);
string ShiftSort = "";
for (var i = 0; i < SortList.Count(); i++)
{
ShiftSort += (MinSort + i) + ",";
}
if (ShiftSort != demodel.ShiftSort + ",")
{
return ApiResult.ParamIsNull("需预约连续的时段");
}
#endregion
demodel.State = CourseAppointStateEnum.WaitSure;
demodel.Status = 0;
demodel.Group_Id = userInfo.Group_Id;
demodel.CreateBy = userInfo.Id;
demodel.CreateTime = DateTime.Now;
demodel.UpdateBy = userInfo.Id;
demodel.UpdateTime = DateTime.Now;
string msg = scrollClassModule.SetAppointmentAgain(demodel, out int AppointId);
if (msg == "")
{
return ApiResult.Success("", AppointId);
}
else
{
return ApiResult.Failed(msg);
}
}
#endregion
#region 初始化约课数据
......@@ -606,6 +788,7 @@ namespace Edu.WebApi.Controllers.Course
demodel.CreateTime = DateTime.Now;
demodel.UpdateBy = userInfo.Id;
demodel.UpdateTime = DateTime.Now;
demodel.State = 1;
string msg = scrollClassModule.SetGuestStartChapter(demodel, ChapterNoList);
if (msg == "")
{
......@@ -617,5 +800,26 @@ namespace Edu.WebApi.Controllers.Course
}
#endregion
#region 学员上课
/// <summary>
/// 获取学员上课列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetStuLearnChapterList() {
var userInfo = base.UserInfo;
RB_Scroll_Appointment_ViewModel demodel = JsonHelper.DeserializeObject<RB_Scroll_Appointment_ViewModel>(base.RequestParm.Msg.ToString());
if (demodel.StuId <= 0) {
return ApiResult.ParamIsNull("请传递学生ID");
}
demodel.Group_Id = userInfo.Group_Id;
var list = scrollClassModule.GetStuLearnChapterList(demodel);
return ApiResult.Success("", list);
}
#endregion
}
}
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