using Edu.Common.Enum;
using Edu.Model.ViewModel.Reserve;
using Edu.Repository.Reserve;
using System;
using System.Collections.Generic;
using System.Text;
using VT.FW.AOP.CustomerAttribute;
using VT.FW.DB;
using System.Linq;
using Edu.Repository.Course;
using Edu.Common.Enum.System;
using Edu.Cache.User;
using Edu.Model.CacheModel;
using Edu.Repository.User;
using Edu.Common.Message;
using Edu.Model.ViewModel.Grade;
using Edu.Repository.Grade;
using Edu.Repository.Customer;
using Edu.Model.ViewModel.User;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Customer;
using Edu.Model.Entity.Customer;
using Edu.Repository.Scroll;
namespace Edu.Module.Duty
{
///
/// 访客约课处理类
///
public class VisitorReserveModule
{
///
/// 访客约课仓储层对象
///
private readonly RB_Visitor_ReserveRepository visitor_ReserveRepository = new RB_Visitor_ReserveRepository();
///
/// 约课班级信息仓储层对象
///
private readonly RB_Reserve_ClassRepository reserve_ClassRepository = new RB_Reserve_ClassRepository();
///
/// 上课计划仓储层对象
///
private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository();
///
/// 账号管理仓储层对象
///
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
///
/// 学员仓储层对象
///
private readonly RB_StudentRepository studentRepository = new RB_StudentRepository();
///
/// 学员协助人员
///
private readonly RB_Student_AssistRepository student_AssistRepository = new RB_Student_AssistRepository();
///
/// 学员日志仓储层对象
///
private readonly RB_Student_LogRepository student_LogRepository = new RB_Student_LogRepository();
///
/// 学员订单仓储层对象
///
private readonly RB_Student_OrderGuestRepository student_OrderGuestRepository = new RB_Student_OrderGuestRepository();
///
/// 学员预约课
///
private readonly RB_Scroll_AppointmentRepository scroll_AppointmentRepository = new RB_Scroll_AppointmentRepository();
///
/// 获取访客约课分页列表
///
///
///
///
///
///
public List GetVisitorReservePageModule(int pageIndex, int pageSize, out long rowsCount, RB_Visitor_Reserve_Extend query)
{
return visitor_ReserveRepository.GetVisitorReservePageRepository(pageIndex, pageSize, out rowsCount, query);
}
///
/// 获取访客约课列表
///
///
///
public List GetVisitorReserveListModule(RB_Visitor_Reserve_Extend query)
{
return visitor_ReserveRepository.GetVisitorReserveListRepository(query);
}
///
/// 新增修改访客约课
///
///
///
[TransactionCallHandler]
public virtual bool SetVisitorReserveModule(RB_Visitor_Reserve_Extend model, out string message)
{
message = "";
bool flag;
var reserveClass = new RB_Reserve_Class_Extend()
{
ClassContent = model.ClassContent,
CreateTime = model.CreateTime,
CreateBy = model.CreateBy,
ClassRoomId = model.ClassRoomId,
ClassDate = model.ClassDate,
ClassTime = model.ClassTime,
Group_Id = model.Group_Id,
ReserveClassId = 0,
School_Id = model.School_Id,
Status = DateStateEnum.Normal,
TeacherId = model.TeacherId,
UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime,
EndTime = model.EndTime,
TrialLessonId = model.TrialLessonId,
ClassPlanId = model.ClassPlanId,
ReserveType = model.ReserveType
};
if (model.ReserveClassId <= 0)
{
if (model.ReserveType == 1)
{
//跟班 先查询该计划是否已有试听班级
var remodel = reserve_ClassRepository.GetReserveClassListRepository(new RB_Reserve_Class_Extend() { Group_Id = model.Group_Id, ReserveType = 1, ClassPlanId = model.ClassPlanId }).FirstOrDefault();
if (remodel != null)
{
model.ReserveClassId = remodel.ReserveClassId;
}
else
{
var newFlag = SetReserveClassModule(reserveClass, out string newMsg);
if (!newFlag)
{
message = newMsg;
return false;
}
model.ReserveClassId = reserveClass.ReserveClassId;
}
}
else
{
var newFlag = SetReserveClassModule(reserveClass, out string newMsg);
if (!newFlag)
{
message = newMsg;
return false;
}
model.ReserveClassId = reserveClass.ReserveClassId;
}
}
if (visitor_ReserveRepository.ExistsVisitorReserveRepository(model))
{
message = string.Format("已存在此访客的预约试听课信息,请重新选择!");
return false;
}
if (model.Id > 0)
{
Dictionary fileds = new Dictionary()
{
{nameof(RB_Visitor_Reserve_Extend.UpdateBy),model.UpdateBy },
{nameof(RB_Visitor_Reserve_Extend.UpdateTime),model.UpdateTime },
{nameof(RB_Visitor_Reserve_Extend.ReserveClassId),model.ReserveClassId },
{nameof(RB_Visitor_Reserve_Extend.Remark),model.Remark },
};
flag = visitor_ReserveRepository.Update(fileds, new WhereHelper(nameof(RB_Visitor_Reserve_Extend.Id), model.Id));
}
else
{
var newId = visitor_ReserveRepository.Insert(model);
model.Id = newId;
flag = newId > 0;
}
return flag;
}
///
/// 根据编号获取访客约课
///
///
///
public RB_Visitor_Reserve_Extend GetVisitorReserveModule(int Id)
{
var extModel = visitor_ReserveRepository.GetEntity(Id);
return extModel;
}
///
/// 删除访客约课
///
///
///
public bool RemoveVisitorReserveModule(int Id)
{
Dictionary fileds = new Dictionary()
{
{nameof(RB_Visitor_Reserve_Extend.Status),(int)DateStateEnum.Delete },
};
var flag = visitor_ReserveRepository.Update(fileds, new WhereHelper(nameof(RB_Visitor_Reserve_Extend.Id), Id));
return flag;
}
///
/// 删除访客约课
///
///
///
public bool UpdateVisitorReserveStatusModule(int Id, int ReserveStatus, string Remark)
{
Dictionary fileds = new Dictionary()
{
{nameof(RB_Visitor_Reserve_Extend.ReserveStatus),ReserveStatus },
};
if (!string.IsNullOrEmpty(Remark))
{
fileds.Add(nameof(RB_Visitor_Reserve_Extend.Remark), Remark);
}
var flag = visitor_ReserveRepository.Update(fileds, new WhereHelper(nameof(RB_Visitor_Reserve_Extend.Id), Id));
return flag;
}
///
/// 获取约课班级分页列表
///
///
///
///
///
///
public List GetReserveClassPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Reserve_Class_Extend query)
{
var list = reserve_ClassRepository.GetReserveClassPageRepository(pageIndex, pageSize, out rowsCount, query);
if (list != null && list.Count > 0)
{
string ids = string.Join(",", list.Select(qitem => qitem.ReserveClassId));
var visitorList = visitor_ReserveRepository.GetVisitorReserveStaticsListRepository(new RB_Visitor_Reserve_Extend()
{
Q_ReserveClassIds = ids
});
List stuOrderList = new List();
if (visitorList != null && visitorList.Count > 0)
{
string visitorIds = string.Join(",", visitorList.Select(qitem => qitem.Visitor_Id));
if (!string.IsNullOrEmpty(visitorIds))
{
stuOrderList = student_OrderGuestRepository.GetStrOrderGuestListRepository(new RB_Student_OrderGuest_ViewModel()
{
QStudentIds = visitorIds
});
}
}
foreach (var item in list)
{
var tempList = visitorList?.Where(qitem => qitem.ReserveClassId == item.ReserveClassId);
item.JoinNum = tempList?.Count() ?? 0;
item.VisitorList = tempList?.ToList() ?? new List();
int OrderCount = 0;
int failCount = 0;
foreach (var subItem in tempList)
{
if (!(stuOrderList.Where(qitem => qitem.Student_Id == subItem.Visitor_Id)?.Count() > 0))
{
failCount++;
}
if ((stuOrderList.Where(qitem => qitem.Student_Id == subItem.Visitor_Id)?.Count() > 0))
{
OrderCount++;
}
}
item.FailCount = failCount;
item.OrderCount = OrderCount;
if (item.OrderCount > 0)
{
item.ConversionRates = decimal.Round(item.JoinNum / item.OrderCount, 2);
}
else
{
item.ConversionRates = 0;
}
}
}
return list;
}
///
/// 获取约课班级列表
///
///
///
public List GetReserveClassListModule(RB_Reserve_Class_Extend query)
{
return reserve_ClassRepository.GetReserveClassListRepository(query);
}
///
/// 新增修改约课班级
///
///
///
public bool SetReserveClassModule(RB_Reserve_Class_Extend model, out string message)
{
bool flag;
message = "";
var UserInfo = UserReidsCache.GetUserLoginInfo(model.CreateBy);
var chooseDateTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.ClassDate) + " " + model.ClassTime);
var chooseEndTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.ClassDate) + " " + model.EndTime);
if (model.ReserveType != 1)
{
#region 教师验证
if (CheckClassTeacherModule(chooseDateTime, chooseEndTime, model, out string newMsg))
{
message = newMsg;
return false;
}
#endregion
#region 验证教室
if (CheckClassRoomModule(chooseDateTime, chooseEndTime, model, out string roomMessage))
{
message = roomMessage;
return false;
}
#endregion
#region 验证预约课
if (CheckAppointmentModule(chooseDateTime, chooseEndTime, model, out string appointMessage))
{
message = appointMessage;
return false;
}
#endregion
}
if (model.ReserveClassId > 0)
{
var oldModel = GetReserveClassModule(model.ReserveClassId);
Dictionary fileds = new Dictionary()
{
{nameof(RB_Reserve_Class_Extend.TeacherId),model.TeacherId },
{nameof(RB_Reserve_Class_Extend.ClassDate),model.ClassDate },
{nameof(RB_Reserve_Class_Extend.ClassTime),model.ClassTime },
{nameof(RB_Reserve_Class_Extend.EndTime),model.EndTime },
{nameof(RB_Reserve_Class_Extend.ClassRoomId),model.ClassRoomId },
{nameof(RB_Reserve_Class_Extend.ClassContent),model.ClassContent },
{nameof(RB_Reserve_Class_Extend.UpdateBy),model.UpdateBy },
{nameof(RB_Reserve_Class_Extend.UpdateTime),model.UpdateTime },
{nameof(RB_Reserve_Class_Extend.TrialLessonId),model.TrialLessonId },
};
flag = reserve_ClassRepository.Update(fileds, new WhereHelper(nameof(RB_Reserve_Class_Extend.ReserveClassId), model.ReserveClassId));
if (flag && model.TeacherId != oldModel.TeacherId)
{
var teacherList = accountRepository.GetAccountListRepository(new Model.ViewModel.User.RB_Account_ViewModel()
{
Group_Id = model.Group_Id,
QAccountIds = (model?.TeacherId ?? 0) + "," + (oldModel?.TeacherId ?? 0),
AccountType = Common.Enum.User.AccountTypeEnum.Teacher
});
Common.Message.PushMessageModel pushModel = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.ReserveClass,
Content = "您有新的试听课信息!请查收",
CoverImg = "",
CreateByName = UserInfo.AccountName,
JumpUrl = $"/course/classPlan?ClassType=2",
SendTime = DateTime.Now,
SendType = 0,
Title = "试听课",
Platform = 2,
ReceiveId = (teacherList.Where(qitem => qitem.AccountId == model.TeacherId)?.FirstOrDefault()?.Id ?? 0).ToString(),
};
Common.Message.PushMessageModel pushModel2 = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.ReserveClass,
Content = "您有试听课被取消!请查收",
CoverImg = "",
CreateByName = UserInfo.AccountName,
JumpUrl = $"/course/classPlan?ClassType=2",
SendTime = DateTime.Now,
SendType = 0,
Title = "试听课",
Platform = 2,
ReceiveId = (teacherList.Where(qitem => qitem.AccountId == oldModel.TeacherId)?.FirstOrDefault()?.Id ?? 0).ToString(),
};
List messageList = new List
{
pushModel,
pushModel2
};
new Common.Message.MessageHelper().SendMessage(messageList);
}
}
else
{
var newId = reserve_ClassRepository.Insert(model);
model.ReserveClassId = newId;
flag = newId > 0;
var teacherModel = accountRepository.GetAccountListRepository(new Model.ViewModel.User.RB_Account_ViewModel()
{
Group_Id = model.Group_Id,
AccountId = model.TeacherId,
AccountType = Common.Enum.User.AccountTypeEnum.Teacher
})?.FirstOrDefault();
Common.Message.PushMessageModel pushModel = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.ReserveClass,
Content = "您有新的试听课信息!请查收",
CoverImg = "",
CreateByName = UserInfo.AccountName,
JumpUrl = $"/course/classPlan?ClassType=2",
SendTime = DateTime.Now,
SendType = 0,
Title = "试听课",
Platform = 2,
ReceiveId = (teacherModel?.Id ?? 0).ToString(),
};
if (flag)
{
List pushList = new List() { pushModel };
new Common.Message.MessageHelper().SendMessage(pushList);
}
}
return flag;
}
///
/// 检查老师是否有上课安排
///
///
///
///
///
///
public bool CheckClassTeacherModule(DateTime chooseDateTime, DateTime chooseEndTime, RB_Reserve_Class_Extend model, out string message)
{
message = "";
var planList = class_PlanRepository.GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel()
{
TeacherId = model.TeacherId,
QClassDateStr = Common.ConvertHelper.FormatDate(model.ClassDate),
Group_Id = model.Group_Id
});
if (planList != null && planList.Count > 0)
{
foreach (var item in planList)
{
var startTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.StartTime);
var endTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.EndTime);
if (chooseDateTime < endTime && chooseEndTime > startTime)
{
message = string.Format("此教师已有 {0} {1}-{2}【{3}】正常上课计划!请重新选择时间", Common.ConvertHelper.FormatDate(model.ClassDate), item.StartTime, item.EndTime, item.ClassName);
return true;
}
}
}
var checkModel = new RB_Reserve_Class_Extend()
{
ClassDate = model.ClassDate,
ClassTime = model.ClassTime,
EndTime = model.EndTime,
ReserveClassId = model.ReserveClassId,
TeacherId = model.TeacherId
};
if (CheckReserveClassExistsModule(checkModel))
{
message = string.Format("此教师已有 {0} {1}-{2} 试听课计划!请重新选择时间", Common.ConvertHelper.FormatDate(model.ClassDate), model.ClassTime, model.EndTime);
return true;
}
return false;
}
///
/// 检查教室是否重复
///
///
///
///
///
///
public bool CheckClassRoomModule(DateTime chooseDateTime, DateTime chooseEndTime, RB_Reserve_Class_Extend model, out string RoomMessage)
{
RoomMessage = "";
var planList = class_PlanRepository.GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel()
{
ClassRoomId = model.ClassRoomId,
QClassDateStr = Common.ConvertHelper.FormatDate(model.ClassDate),
Group_Id = model.Group_Id
});
if (planList != null && planList.Count > 0)
{
foreach (var item in planList)
{
var startTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.StartTime);
var endTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.EndTime);
if (chooseDateTime < endTime && chooseEndTime > startTime)
{
RoomMessage = string.Format("此教室已有 {0} {1}-{2}【{3}】正常上课计划!请重新选择时间", Common.ConvertHelper.FormatDate(model.ClassDate), item.StartTime, item.EndTime, item.ClassName);
return true;
}
}
}
var checkModel = new RB_Reserve_Class_Extend()
{
ClassDate = model.ClassDate,
ClassTime = model.ClassTime,
EndTime = model.EndTime,
ReserveClassId = model.ReserveClassId,
ClassRoomId = model.ClassRoomId
};
if (CheckReserveClassExistsModule(checkModel))
{
RoomMessage = string.Format("此教室已有 {0} {1}-{2} 试听课计划!请重新选择时间", Common.ConvertHelper.FormatDate(model.ClassDate), model.ClassTime, model.EndTime);
return true;
}
return false;
}
///
/// 检查预约课是否重复
///
///
///
///
///
///
public bool CheckAppointmentModule(DateTime chooseDateTime, DateTime chooseEndTime, RB_Reserve_Class_Extend model, out string AppointMessage)
{
AppointMessage = "";
var planList = scroll_AppointmentRepository.GetList(new Model.ViewModel.Scroll.RB_Scroll_Appointment_ViewModel()
{
TeacherId = model.TeacherId,
StartTime = Common.ConvertHelper.FormatDate(model.ClassDate),
EntTime = Common.ConvertHelper.FormatDate(model.ClassDate),
Group_Id = model.Group_Id
});
if (planList != null && planList.Any())
{
foreach (var item in planList)
{
var startTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.Date) + " " + item.CourseSTime);
var endTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.Date) + " " + item.CourseETime);
if ((chooseDateTime > startTime && chooseDateTime < endTime) || (chooseEndTime > startTime && chooseEndTime < endTime))
{
AppointMessage = string.Format("此教师已有 {0} {1}-{2}预约课计划!请重新选择时间", Common.ConvertHelper.FormatDate(model.ClassDate), item.CourseSTime, item.CourseETime);
return true;
}
}
}
return false;
}
///
/// 检查预约课程是否存在
///
///
///
public bool CheckReserveClassExistsModule(RB_Reserve_Class_Extend model)
{
return reserve_ClassRepository.ExistsReserveClassRepository(model);
}
///
/// 根据编号获取约课班级
///
///
///
public RB_Reserve_Class_Extend GetReserveClassModule(int ReserveClassId)
{
var extModel = reserve_ClassRepository.GetReserveClassListRepository(new RB_Reserve_Class_Extend() { ReserveClassId = ReserveClassId })?.FirstOrDefault();
return extModel;
}
///
/// 根据编号删除约课班级
///
///
///
///
public bool RemoveReserveClassModule(int ReserveClassId, UserInfo UserInfo, out string message)
{
message = "";
var visitorReserve = visitor_ReserveRepository.GetVisitorReserveStaticsListRepository(new RB_Visitor_Reserve_Extend()
{
Q_ReserveClassIds = ReserveClassId.ToString()
});
if ((visitorReserve?.Count ?? 0) > 0)
{
message = "此试听课存在客户报名信息,不能删除!";
return false;
}
Dictionary fileds = new Dictionary()
{
{nameof(RB_Visitor_Reserve_Extend.Status),(int)DateStateEnum.Delete },
};
var flag = reserve_ClassRepository.Update(fileds, new WhereHelper(nameof(RB_Reserve_Class_Extend.ReserveClassId), ReserveClassId));
var model = GetReserveClassModule(ReserveClassId);
if (model != null)
{
var teacherModel = accountRepository.GetAccountListRepository(new RB_Account_ViewModel()
{
Group_Id = model.Group_Id,
AccountId = model.TeacherId,
AccountType = Common.Enum.User.AccountTypeEnum.Teacher
})?.FirstOrDefault();
Common.Message.PushMessageModel pushModel = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.ReserveClass,
Content = "您有试听课信息被取消!请查收",
CoverImg = "",
CreateByName = UserInfo.AccountName,
JumpUrl = $"/course/classPlan?ClassType=2",
SendTime = DateTime.Now,
SendType = 0,
Title = "试听课",
Platform = 2,
ReceiveId = (teacherModel?.Id ?? 0).ToString(),
};
if (flag)
{
List pushList = new List() { pushModel };
new Common.Message.MessageHelper().SendMessage(pushList);
}
}
return flag;
}
}
}