Commit db70f5b4 authored by 吴春's avatar 吴春

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

parents 89935a88 87c3468d
......@@ -27,6 +27,7 @@ namespace Edu.Common.Enum.Course
/// </summary>
[EnumField("已上课")]
Coursed = 3,
/// <summary>
/// 缺席
/// </summary>
......@@ -38,6 +39,11 @@ namespace Edu.Common.Enum.Course
/// </summary>
[EnumField("取消")]
Cancel = 5,
/// <summary>
/// 学员消课专用,不计算老师课时费,计算学员签到
/// </summary>
[EnumField("学员消课")]
StuCheck=6
}
}
......@@ -46,10 +46,10 @@ namespace Edu.Model.Entity.Scroll
/// </summary>
public string ShiftSort { get; set; }
/// <summary>
/// 状态 1待确认 2待上课 3已上课 4缺席 5取消
/// </summary>
public CourseAppointStateEnum State { get; set; }
/// <summary>
/// 状态 1待确认 2待上课 3已上课 4缺席 5取消 6学员消课专用,不计算老师课时费,计算学员签到
/// </summary>
public CourseAppointStateEnum State { get; set; }
/// <summary>
/// 删除
......@@ -145,5 +145,10 @@ namespace Edu.Model.Entity.Scroll
/// 课程等级 对应的章节 与CourseGradeId 组成唯一 【hk2022-07-07直接修改为rb_course_chapter 中的chapterNo 需要消课的章节】
/// </summary>
public int CourseGradeNo { get; set; }
}
/// <summary>
/// 是否扣除学员课时(1-扣除,0-不扣)
/// </summary>
public int IsCalcStuCheck { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Scroll
{
/// <summary>
/// 学员取消上课参数
/// </summary>
[Serializable]
public class CancelAppointmentModel
{
/// <summary>
/// 上课老师Id(RB_Teacher表TId)
/// </summary>
public int AccountId { get; set; }
/// <summary>
/// 上课日期
/// </summary>
public string Date { get; set; }
/// <summary>
/// 预约时段
/// </summary>
public string ShiftSort { get; set; }
/// <summary>
/// 取消学员
/// </summary>
public List<StuAppointItem> StuList { get; set; }
}
public class StuAppointItem
{
/// <summary>
/// rb_scroll_appointment表Id
/// </summary>
public int AppointId { get; set; }
/// <summary>
/// 是否扣除学员课时
/// </summary>
public int IsCalcStuCheck { get; set; }
}
}
......@@ -186,6 +186,26 @@ namespace Edu.Model.ViewModel.Scroll
/// 上课结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 上课教师
/// </summary>
public int ClassRoomId { get; set; }
/// <summary>
/// 上课教室
/// </summary>
public string RoomName { get; set; }
/// <summary>
/// 预约编号
/// </summary>
public int AppointId { get; set; }
/// <summary>
/// 预约班次
/// </summary>
public string ShiftSort { get; set; }
}
......
......@@ -5190,11 +5190,14 @@ namespace Edu.Module.Course
#endregion
var stuModel = stuTimeList.Where(x => x.OrderGuestId == item.GuestId).FirstOrDefault();
item.UseClassHours = (stuModel?.CurrentDeductionHours ?? 0);
item.Unit_Price = 0;
item.Unit_Price = guestModel?.ClassUnitPrice ?? 0;
item.UseCourseFee = 0;
if (item.TotalClassHours2 > 0)
{
item.Unit_Price = Math.Round(item.TotalCourseFee2 / item.TotalClassHours2, 6, MidpointRounding.AwayFromZero);//根据合同计算(包含优惠, 需减去课件费等)
if (item.Unit_Price <= 0)
{
item.Unit_Price = Math.Round(item.TotalCourseFee2 / item.TotalClassHours2, 6, MidpointRounding.AwayFromZero);//根据合同计算(包含优惠, 需减去课件费等)
}
item.UseCourseFee = Math.Round((Convert.ToDecimal(item.UseClassHours) / item.TotalClassHours2) * item.TotalCourseFee2, 6, MidpointRounding.AwayFromZero);
//if (item.TotalDiscountMoney2 > 0)
//{
......
using Edu.Model.Entity.Grade;
using Edu.Common.Plugin;
using Edu.Model.Entity.Grade;
using Edu.Model.Entity.Sell;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Grade;
using Edu.Model.ViewModel.Question;
using Edu.Model.ViewModel.Scroll;
using Edu.Model.ViewModel.Sell;
......@@ -32,6 +34,8 @@ namespace Edu.Module.Course
private RB_Order_GuestRepository guestRepository = new RB_Order_GuestRepository();
private RB_Class_CheckRepository checkRepository = new RB_Class_CheckRepository();
private RB_CourseRepository courseRepository = new RB_CourseRepository();
private RB_Class_RoomRepository class_RoomRepository = new RB_Class_RoomRepository();
private RB_Scroll_AppointmentRepository appointmentRepository = new RB_Scroll_AppointmentRepository();
/// <summary>
/// 排课计划表
......@@ -44,10 +48,16 @@ namespace Edu.Module.Course
if (list != null && list.Count > 0)
{
List<int> IdList = new List<int>();
List<int> roomIdList = new List<int>();
foreach (var item in list)
{
if (item.CourseItems != null && item.CourseItems.Count > 0)
{
var tempRoomArray = item.CourseItems.Select(qitem => qitem.ClassRoomId).Distinct();
if (tempRoomArray != null && tempRoomArray.Count() > 0)
{
roomIdList.AddRange(tempRoomArray);
}
var tempArray = item.CourseItems.Select(qitem => qitem.AccountId).Distinct();
if (tempArray != null && tempArray.Count() > 0)
{
......@@ -71,6 +81,15 @@ namespace Edu.Module.Course
string Ids = string.Join(",", IdList.Distinct());
empList= accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel() { QIds = Ids });
}
List<RB_Class_Room_ViewModel> roomList = new List<RB_Class_Room_ViewModel>();
if(roomIdList!=null && roomIdList.Count > 0)
{
string roomIds = string.Join(",", roomIdList.Distinct());
if (!string.IsNullOrEmpty(roomIds))
{
roomList= class_RoomRepository.GetClassRoomListExtRepository(roomIds);
}
}
foreach (var item in list)
{
......@@ -88,6 +107,10 @@ namespace Edu.Module.Course
foreach(var subItem in item.CourseItems)
{
subItem.TeacherName = empList?.FirstOrDefault(qitem => qitem.Id == subItem.AccountId)?.AccountName ?? "";
if (subItem.ClassRoomId > 0)
{
subItem.RoomName = roomList?.FirstOrDefault(qitem => qitem.RoomId == subItem.ClassRoomId)?.RoomName ?? "";
}
}
}
}
......@@ -121,7 +144,6 @@ namespace Edu.Module.Course
return flag;
}
/// <summary>
/// 修改学员,学管备注
/// </summary>
......@@ -169,7 +191,6 @@ namespace Edu.Module.Course
return flag;
}
/// <summary>
/// 修改学员上课方式
/// </summary>
......@@ -227,5 +248,46 @@ namespace Edu.Module.Course
}
return list;
}
/// <summary>
/// 获取预约详情
/// </summary>
/// <param name="Date"></param>
/// <param name="AccountId"></param>
/// <param name="ShiftSort"></param>
/// <returns></returns>
public object GetStuAppointPlanModule(string Date, int AccountId, string ShiftSort)
{
object obj = new object();
var tempList = appointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel { StartTime = Date, EntTime = Date, AccountId = AccountId, ShiftSort = ShiftSort });
if (tempList != null && tempList.Count > 0)
{
var firstModel = tempList.FirstOrDefault();
obj = new
{
firstModel.CourseId,
firstModel.CourseGradeNo,
firstModel.Date,
firstModel.RoomId,
firstModel.ShiftSort,
firstModel.TeacherId,
firstModel.ChapterNo,
ChooseStuList = tempList.Select(qitem => new
{
CourseId= qitem.LearnCourseId,
qitem.StuId,
qitem.CourseGradeId,
qitem.GuestId,
qitem.CourseGradeNo,
AppointmentId= qitem.Id,
qitem.StuName,
qitem.IsCalcStuCheck,
qitem.State,
StateName=qitem.State.ToName()
}),
};
}
return obj;
}
}
}
......@@ -669,10 +669,15 @@ namespace Edu.Module.Course
public void CreateScrollChapter(int groupId = 100000)
{
//查询当前时间已结束的预约课
var list = scroll_AppointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel() { Group_Id = groupId, CourseEndTimeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), State = Common.Enum.Course.CourseAppointStateEnum.WaitCourse });
var list = scroll_AppointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel() { Group_Id = groupId, CourseEndTimeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") });
if (list.Any())
{
class_CheckRepository.AppointStuCheckRepository(list);
var tempList = list.Where(qitem => qitem.State == Common.Enum.Course.CourseAppointStateEnum.WaitCourse || qitem.State == Common.Enum.Course.CourseAppointStateEnum.StuCheck)?.ToList();
if(tempList.Any())
{
class_CheckRepository.AppointStuCheckRepository(tempList);
}
}
}
#endregion
......
......@@ -1732,201 +1732,7 @@ namespace Edu.Module.Course
#endregion
}
/// <summary>
/// 后台取消预约
/// </summary>
/// <param name="stuIds"></param>
/// <param name="teacherId"></param>
/// <param name="date"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string CancelAppointment(string AppointIds, int teacherId, string date, UserInfo userInfo)
{
bool flag = false;
//查询当日 所有的预约记录
var list = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = userInfo.Group_Id, StartTime = date, EntTime = date, TeacherId = teacherId, AppointIds = AppointIds });
if (list.Where(x => x.State != Common.Enum.Course.CourseAppointStateEnum.WaitSure).Any()) { return "已确认预约,无法取消"; }
if (list.Select(x => x.ShiftSort).Distinct().Count() > 1) { return "只能单次约课取消"; }
#region 获取token 推送订阅消息
string Appid = Config.JiaXiaoHeAppId;
var Secret = Config.JiaXiaoHeAppSecret;
string tokenKey = "DATA_JiaXiaoHeToken_" + Appid;
string token = Cache.WeChat.WeChatReidsCache2.GetToken(tokenKey);
if (Config.IsLocal == 1)
{
token = "";
}
else
{
if (string.IsNullOrEmpty(token))
{
token = WeChatHelper.GetAccessToken(Appid, Secret);
Cache.WeChat.WeChatReidsCache2.Set(tokenKey, token);
}
if (string.IsNullOrEmpty(token))
{
return "取消失败,请联系管理员(token)";
}
}
#endregion
foreach (var item in list)
{
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), item.Remark +";后台管理取消"},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateTime), DateTime.Now}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = item.Id,
OperatorEnum =OperatorEnum.Equal
}
};
flag = scroll_AppointmentRepository.Update(keyValues, wheres);
if (flag)
{
//给学生推送 取消课程的订阅消息
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)
{
bool IsCancel = false;
if (qitem.Date == item.Date)
{
//验证时段
if (Convert.ToInt32(qitem.ShiftSort.Replace(",", "")) > Convert.ToInt32(item.ShiftSort.Replace(",", "")))
{
IsCancel = true;
}
}
else
{
IsCancel = true;
}
if (IsCancel)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Scroll_Appointment_ViewModel.State), Common.Enum.Course.CourseAppointStateEnum.Cancel},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateTime), DateTime.Now},
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = qitem.Id,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag1 = scroll_AppointmentRepository.Update(keyValues1, wheres1);
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);
}
}
}
}
}
#endregion
}
else
{
return "出错了,请联系管理员";
}
}
if (flag)
{
var firstModel = list.FirstOrDefault();
string CourseTime = firstModel.CourseSTime + "~" + firstModel.CourseETime;
string StuName = string.Join(",", list.Select(x => x.StuName));
string Scroll_Notice = dictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = userInfo.Group_Id, DictKey = "Scroll_Notice" }).FirstOrDefault()?.Content ?? "";
if (!string.IsNullOrEmpty(Scroll_Notice))
{
//查询推送老师
var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = userInfo.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'>{Common.ConvertHelper.FormatDate(firstModel.Date)}</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, "取消学生预约通知");
}
}
}
}
return "";
}
/// <summary>
/// 后台确认预约
......@@ -2884,6 +2690,8 @@ namespace Edu.Module.Course
//验证都OK了 插入预约数据
if (demodel.Id <= 0)
{
//默认扣除学生课时
demodel.IsCalcStuCheck = 1;
AppointId = scroll_AppointmentRepository.Insert(demodel);
}
else
......@@ -3001,7 +2809,7 @@ namespace Edu.Module.Course
/// <param name="date"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public async Task<string> CancelSureAppointmentAsync(string AppointIds, int teacherId, string date, string shiftSort, UserInfo userInfo)
public async Task<string> CancelSureAppointmentModuleAsync(string AppointIds, int teacherId, string date, string shiftSort, UserInfo userInfo)
{
bool flag = false;
List<int> appointList = JsonHelper.DeserializeObject<List<int>>("[" + AppointIds + "]");
......@@ -3157,6 +2965,427 @@ namespace Edu.Module.Course
return "";
}
/// <summary>
/// 后台取消预约(取消单个学生预约)
/// </summary>
/// <param name="stuIds"></param>
/// <param name="teacherId"></param>
/// <param name="date"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string CancelAppointmentModule(string AppointIds, int teacherId, string date, UserInfo userInfo)
{
bool flag = false;
//查询当日 所有的预约记录
var list = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = userInfo.Group_Id, StartTime = date, EntTime = date, TeacherId = teacherId, AppointIds = AppointIds });
if (list.Where(x => x.State != Common.Enum.Course.CourseAppointStateEnum.WaitSure).Any()) { return "已确认预约,无法取消"; }
if (list.Select(x => x.ShiftSort).Distinct().Count() > 1) { return "只能单次约课取消"; }
#region 获取token 推送订阅消息
string Appid = Config.JiaXiaoHeAppId;
var Secret = Config.JiaXiaoHeAppSecret;
string tokenKey = "DATA_JiaXiaoHeToken_" + Appid;
string token = Cache.WeChat.WeChatReidsCache2.GetToken(tokenKey);
if (Config.IsLocal == 1)
{
token = "";
}
else
{
if (string.IsNullOrEmpty(token))
{
token = WeChatHelper.GetAccessToken(Appid, Secret);
Cache.WeChat.WeChatReidsCache2.Set(tokenKey, token);
}
if (string.IsNullOrEmpty(token))
{
return "取消失败,请联系管理员(token)";
}
}
#endregion
foreach (var item in list)
{
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), item.Remark +";后台管理取消"},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateTime), DateTime.Now}
};
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = item.Id,
OperatorEnum =OperatorEnum.Equal
}
};
flag = scroll_AppointmentRepository.Update(keyValues, wheres);
if (flag)
{
//给学生推送 取消课程的订阅消息
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)
{
bool IsCancel = false;
if (qitem.Date == item.Date)
{
//验证时段
if (Convert.ToInt32(qitem.ShiftSort.Replace(",", "")) > Convert.ToInt32(item.ShiftSort.Replace(",", "")))
{
IsCancel = true;
}
}
else
{
IsCancel = true;
}
if (IsCancel)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>()
{
{ nameof(RB_Scroll_Appointment_ViewModel.State), Common.Enum.Course.CourseAppointStateEnum.Cancel},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateTime), DateTime.Now},
};
List<WhereHelper> wheres1 = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = qitem.Id,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag1 = scroll_AppointmentRepository.Update(keyValues1, wheres1);
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);
}
}
}
}
}
#endregion
}
else
{
return "出错了,请联系管理员";
}
}
if (flag)
{
var firstModel = list.FirstOrDefault();
string CourseTime = firstModel.CourseSTime + "~" + firstModel.CourseETime;
string StuName = string.Join(",", list.Select(x => x.StuName));
string Scroll_Notice = dictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = userInfo.Group_Id, DictKey = "Scroll_Notice" }).FirstOrDefault()?.Content ?? "";
if (!string.IsNullOrEmpty(Scroll_Notice))
{
//查询推送老师
var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = userInfo.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'>{Common.ConvertHelper.FormatDate(firstModel.Date)}</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, "取消学生预约通知");
}
}
}
}
return "";
}
/// <summary>
/// 后台取消预约(取消已确认约课)
/// </summary>
/// <param name="AppointIds">预约编号</param>
/// <param name="teacherId"></param>
/// <param name="date"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public bool CancelSureAppointmentNewModule(CancelAppointmentModel model, UserInfo userInfo,out string message)
{
message = "";
bool flag = false;
List<int> appointList = model.StuList.Select(qitem=>qitem.AppointId).ToList();
//查询当日 所有的预约记录
var alllist = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = userInfo.Group_Id, StartTime = model.Date, EntTime = model.Date, AccountId = model.AccountId, ShiftSort = model.ShiftSort });
var list = alllist.Where(x => appointList.Contains(x.Id)).ToList();
if (list.Count() != appointList.Count())
{
message = "取消数量对不上";
return false;
}
if (list.Where(x =>x.State != Common.Enum.Course.CourseAppointStateEnum.WaitCourse && x.State != Common.Enum.Course.CourseAppointStateEnum.Coursed).Any())
{
message = "非已确认预约,无法取消";
return false;
}
#region 获取token 推送订阅消息
string Appid = Config.JiaXiaoHeAppId;
var Secret = Config.JiaXiaoHeAppSecret;
string tokenKey = "DATA_JiaXiaoHeToken_" + Appid;
string token = Cache.WeChat.WeChatReidsCache2.GetToken(tokenKey);
if (Config.IsLocal == 1)
{
token = "";
}
else
{
if (string.IsNullOrEmpty(token))
{
token = WeChatHelper.GetAccessToken(Appid, Secret);
Cache.WeChat.WeChatReidsCache2.Set(tokenKey, token);
}
}
#endregion
bool isCancelAll = false;//判断是否是全部取消
if (list.Count() == alllist.Count())
{
isCancelAll = true;//全部取消
}
foreach (var item in list)
{
var currentStu= model.StuList.FirstOrDefault(qitem => qitem.AppointId == item.Id);
item.IsCalcStuCheck = currentStu.IsCalcStuCheck;
Dictionary<string, object> keyValues = new Dictionary<string, object>()
{
{ nameof(RB_Scroll_Appointment_ViewModel.IsCalcStuCheck),item.IsCalcStuCheck},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_Scroll_Appointment_ViewModel.UpdateTime), DateTime.Now}
};
if (item.IsCalcStuCheck == 1)
{
keyValues.Add(nameof(RB_Scroll_Appointment_ViewModel.Remark), item.Remark + ";后台管理取消,并扣除学生课时");
keyValues.Add(nameof(RB_Scroll_Appointment_ViewModel.State), (int)Common.Enum.Course.CourseAppointStateEnum.StuCheck);
}
else
{
keyValues.Add(nameof(RB_Scroll_Appointment_ViewModel.Remark), item.Remark + ";后台管理取消已确认的约课");
keyValues.Add(nameof(RB_Scroll_Appointment_ViewModel.State), (int)Common.Enum.Course.CourseAppointStateEnum.Cancel);
}
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = item.Id,
OperatorEnum =OperatorEnum.Equal
}
};
flag = scroll_AppointmentRepository.Update(keyValues, wheres);
if (flag)
{
//给学生推送 取消课程的订阅消息
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);
}
if (item.State == Common.Enum.Course.CourseAppointStateEnum.Coursed)
{
//已上课 要删除 签到记录
var checkList = class_CheckRepository.GetClassCheckListRepository(new RB_Class_Check_ViewModel() { Group_Id = userInfo.Group_Id, OrderGuestId = item.GuestId, QClassPlanIds = item.ClassPlanId.ToString() });
foreach (var qitem in checkList)
{
if (item.IsCalcStuCheck == 0)
{
class_CheckRepository.Delete(qitem);
//更新学员完成课时
var oldCheckList =class_CheckRepository.GetClassCheckList(new RB_Class_Check_ViewModel() { QOrderGuestIds = item.GuestId.ToString() });
decimal finishHours = 0;
if (oldCheckList != null && oldCheckList.Count > 0)
{
finishHours = oldCheckList.Sum(qitem => qitem.CurrentDeductionHours);
}
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_Extend.CompleteHours), finishHours},
{nameof(RB_Order_Guest_Extend.StudyRemark),"后台取消签到"}
};
order_GuestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), item.GuestId));
}
}
}
}
else
{
return false;
}
}
if (flag)
{
if (isCancelAll)
{
var newList = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = userInfo.Group_Id, StartTime = model.Date, EntTime = model.Date, AccountId = model.AccountId, ShiftSort = model.ShiftSort });
//全都都消耗学员课时 就删除上课计划
if (((newList?.Where(qitem => qitem.IsCalcStuCheck == 1)?.Count()) ?? 0) == 0)
{
//全部取消了 删除对应 计划 + 上课时段
string planIds = string.Join(",", list.Select(x => x.ClassPlanId).Distinct());
var planlist = class_PlanRepository.GetClassPlanListRepository(new RB_Class_Plan_ViewModel() { Group_Id = userInfo.Group_Id, QClassPlanIds = planIds, PlanType = 2 });
var timelist = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { Group_Id = userInfo.Group_Id, QClassPlanIds = planIds });
foreach (var item in planlist)
{
class_PlanRepository.Delete(item);
var tlist = timelist.Where(x => x.ClassPlanId == item.ClassPlanId).ToList();
foreach (var qitem in tlist)
{
class_TimeRepository.Delete(qitem);
}
}
}
}
var firstModel = list.FirstOrDefault();
string CourseTime = firstModel.CourseSTime + "~" + firstModel.CourseETime;
string StuName = string.Join(",", list.Select(x => x.StuName));
string Scroll_Notice = dictvalueRepository.GetList(new RB_Dictvalue_Extend() { RB_Group_id = userInfo.Group_Id, DictKey = "Scroll_Notice" }).FirstOrDefault()?.Content ?? "";
if (!string.IsNullOrEmpty(Scroll_Notice))
{
//查询推送老师
var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = userInfo.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'>{Common.ConvertHelper.FormatDate(firstModel.Date)}</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, "取消学生预约通知");
}
}
}
}
return flag;
}
/// <summary>
/// 修改上课教室
/// </summary>
......
......@@ -518,15 +518,17 @@ GROUP BY tt.TeacherId,tt.ClassId;";
public List<RB_Class_Check_ViewModel> GetStudentHoursList(int groupId, string userIds, string startMonth, string endMonth)
{
string sql = $@"SELECT q.TeacherId,q.OrderGuestId,q.CurrentDeductionHours,
case when q.ClassUnitPrice >0 then q.ClassUnitPrice else
case when q.ClassHours>0 and q.TotalSub >0 then
(q.CourseFee - q.DiscountMoney) /q.ClassHours
else 0 END AS UnitPrice
else 0 END END AS UnitPrice
FROM (
SELECT tt.TeacherId,tt.OrderGuestId,tt.CurrentDeductionHours
,IFNULL(o.PreferPrice,0) -IFNULL(o.TextbookFee,0) -IFNULL(o.CoursewareFee,0) as CourseFee
,IFNULL(o.DiscountMoney,0) as DiscountMoney
,IFNULL(o.PreferPrice,0) as TotalSub
,IFNULL(g.TotalHours,0) as ClassHours
,IFNULL(g.ClassUnitPrice,0) as ClassUnitPrice
FROM(
SELECT p.TeacherId,p.OrderGuestId,SUM(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
WHERE p.`Status`=0 and p.Group_Id ={groupId} and p.TeacherId in ({userIds}) and p.ClassDate >= '{startMonth}' and p.ClassDate <='{endMonth} 23:59:59'
......@@ -571,7 +573,7 @@ GROUP BY tt.TeacherId,tt.OrderGuestId
string sql = $@"
SELECT p.TeacherId,t2.TeacherName,t2.BaseHourFee,t2.BaseHoursEnabled,t2.EnableTime,t2.BaseHoursAdd,if(cp.PlanType=2,'预约课',c.ClassName) as ClassName,if(cp.PlanType=2,co2.CourseName,co.CourseName) as CourseName,p.ClassId,if(cp.PlanType=2,co2.AddHoursMoney,co.AddHoursMoney) as CourseAddHoursMoney,
c.ClassType,c.ClassNo,if(cp.PlanType=2,s2.SName,s.SName) as SName,c.ClassHourMinute,if(cp.PlanType=2,cp.CourseId,c.CouseId) as CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.CurrentDeductionHours) as CurrentDeductionHours
c.ClassType,c.ClassNo,if(cp.PlanType=2,s2.SName,s.SName) as SName,c.ClassHourMinute,if(cp.PlanType=2,cp.CourseId,c.CouseId) as CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.IsCalcTeacFee =1 then p.CurrentDeductionHours else 0 end) as CurrentDeductionHours
FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
inner join rb_class_plan cp on t.ClassPlanId = cp.ClassPlanId
......@@ -616,7 +618,7 @@ ORDER BY p.ClassDate ASC
string sql = $@"
SELECT p.TeacherId,t2.TeacherName,t2.BaseHourFee,t2.BaseHoursEnabled,t2.EnableTime,if(cp.PlanType=2,'预约课',c.ClassName) as ClassName,if(cp.PlanType=2,co2.CourseName,co.CourseName) as CourseName,if(cp.PlanType=2,co2.AddHoursMoney,co.AddHoursMoney) as CourseAddHoursMoney,
p.ClassId,if(cp.PlanType=2,s2.SName,s.SName) as SName,c.ClassType,c.ClassNo,c.ClassHourMinute,if(cp.PlanType=2,cp.CourseId,c.CouseId) as CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
p.ClassId,if(cp.PlanType=2,s2.SName,s.SName) as SName,c.ClassType,c.ClassNo,c.ClassHourMinute,if(cp.PlanType=2,cp.CourseId,c.CouseId) as CouseId,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,Max(case when p.IsCalcTeacFee =1 then p.CurrentDeductionHours else 0 end) as CurrentDeductionHours FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
inner join rb_class_plan cp on t.ClassPlanId = cp.ClassPlanId
LEFT JOIN rb_teacher t2 on p.TeacherId = t2.TId
......@@ -682,9 +684,10 @@ ORDER BY p.ClassDate ASC
string sql = $@"
SELECT tt.*,
case when tt.ClassUnitPrice>0 then tt.ClassUnitPrice else
case when tt.ClassHours>0 and tt.TotalSub >0 then
(tt.CourseFee - tt.DiscountMoney) /tt.ClassHours
else 0 END AS UnitPrice
else 0 END END AS UnitPrice
FROM (
SELECT p.OrderGuestId,p.CurrentDeductionHours,t2.GuestName,p.TeacherId,t3.TeacherName,t2.OrderId,ec.ContractNo,if(cp.PlanType=2,'预约课',c.ClassName) as ClassName,c.ClassNo,if(cp.PlanType=2,co2.CourseName,co.CourseName) as CourseName,p.ClassId,if(cp.PlanType=2,cp.CourseId,c.CouseId) as CouseId
,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,o.EnterID,o.HelpEnterId
......@@ -692,6 +695,7 @@ SELECT p.OrderGuestId,p.CurrentDeductionHours,t2.GuestName,p.TeacherId,t3.Teache
,IFNULL(o.DiscountMoney,0) as DiscountMoney
,IFNULL(o.PreferPrice,0) as TotalSub
,IFNULL(t2.TotalHours,0) as ClassHours
,IFNULL(t2.ClassUnitPrice,0) as ClassUnitPrice
,o.JoinType,o.TargetJoinType,o.SourceOrderId,o.TargetOrderId
FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
......@@ -761,9 +765,10 @@ ORDER BY tt.ClassDate ASC
string sql = $@"
SELECT tt.*,
case when tt.ClassUnitPrice >0 then tt.ClassUnitPrice else
case when tt.ClassHours>0 and tt.TotalSub >0 then
(tt.CourseFee - tt.DiscountMoney) /tt.ClassHours
else 0 END AS UnitPrice
else 0 END END AS UnitPrice
FROM (
SELECT p.OrderGuestId,p.CurrentDeductionHours,t2.GuestName,p.TeacherId,t3.TeacherName,t2.OrderId,ec.ContractNo,if(cp.PlanType=2,'预约课',c.ClassName) as ClassName,c.ClassNo,if(cp.PlanType=2,co2.CourseName,co.CourseName) as CourseName,p.ClassId,if(cp.PlanType=2,cp.CourseId,c.CouseId) as CouseId
,p.ClassDate,p.ClassTimeId,t.StartTime as StartDate,t.EndTime as EndDate,o.EnterID,o.HelpEnterId
......@@ -771,6 +776,7 @@ SELECT p.OrderGuestId,p.CurrentDeductionHours,t2.GuestName,p.TeacherId,t3.Teache
,IFNULL(o.DiscountMoney,0) as DiscountMoney
,IFNULL(o.PreferPrice,0) as TotalSub
,IFNULL(t2.TotalHours,0) as ClassHours
,IFNULL(t2.ClassUnitPrice,0) as ClassUnitPrice
FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
inner join rb_class_plan cp on t.ClassPlanId = cp.ClassPlanId
......@@ -821,15 +827,17 @@ WHERE p.`Status` =0 and p.Group_Id ={groupId} and case when cp.PlanType=2 then t
{
string sql = $@"SELECT hq.ClassId, SUM(hq.CurrentDeductionHours * hq.UnitPrice) AS UnitPrice FROM (
SELECT q.ClassId,q.OrderGuestId,q.CurrentDeductionHours,
case when q.ClassUnitPrice >0 then q.ClassUnitPrice else
case when q.ClassHours>0 and q.TotalSub >0 then
(q.CourseFee - q.DiscountMoney) /q.ClassHours
else 0 END AS UnitPrice
else 0 END END AS UnitPrice
FROM (
SELECT tt.ClassId,tt.OrderGuestId,tt.CurrentDeductionHours
,IFNULL(o.PreferPrice,0) -IFNULL(o.TextbookFee,0) -IFNULL(o.CoursewareFee,0) as CourseFee
,IFNULL(o.DiscountMoney,0) as DiscountMoney
,IFNULL(o.PreferPrice,0) as TotalSub
,IFNULL(g.TotalHours,0) as ClassHours
,IFNULL(g.ClassUnitPrice,0) as ClassUnitPrice
FROM(
SELECT case when cp.PlanType=2 then t2.ClassId else p.ClassId end as ClassId,p.OrderGuestId,SUM(p.CurrentDeductionHours) as CurrentDeductionHours FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
......@@ -1345,30 +1353,22 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
string orderGuestIds = string.Join(",", list.Select(x => x.GuestId).Distinct());
var guestList= GetOrderGuestListRepository(orderGuestIds);
var oldCheckList = GetClassCheckList(new RB_Class_Check_ViewModel() { QOrderGuestIds = orderGuestIds });
foreach (var item in list)
{
//更新约课为已上课
Dictionary<string, object> keyValues = new Dictionary<string, object>()
string tempSql = " UPDATE RB_Scroll_Appointment SET State={0} WHERE Id={1} ";
string newSql = "";
if (item.State == Common.Enum.Course.CourseAppointStateEnum.WaitSure)
{
{ nameof(RB_Scroll_Appointment_ViewModel.State), Common.Enum.Course.CourseAppointStateEnum.Coursed}
};
List<WhereHelper> wheres = new List<WhereHelper>()
newSql = string.Format(tempSql, (int)Common.Enum.Course.CourseAppointStateEnum.Coursed, item.Id);
}
else if (item.State == Common.Enum.Course.CourseAppointStateEnum.StuCheck)
{
new WhereHelper()
{
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = item.Id,
OperatorEnum =OperatorEnum.Equal
}
};
string appointSql = string.Format(" UPDATE RB_Scroll_Appointment SET State={0} WHERE Id={1} ", (int)Common.Enum.Course.CourseAppointStateEnum.Coursed, item.Id);
flag = base.Execute(appointSql) > 0;
newSql = string.Format(tempSql, (int)Common.Enum.Course.CourseAppointStateEnum.StuCheck, item.Id);
}
flag = base.Execute(newSql) > 0;
if (flag)
{
var clist = JsonHelper.DeserializeObject<List<CourseTimeModel>>(item.CourseTime);
//更新 order_guest 表 上课章节 请假也暂时先算完成课时(请假应该是有补课的)
var gmodel = guestList?.FirstOrDefault(qitem => qitem.Id == item.GuestId);
var tempClassTimeList = timeList?.Where(qitem => qitem.ClassPlanId == item.ClassPlanId)?.ToList() ?? new List<RB_Class_Time_ViewModel>();
var guestOldCheckList = oldCheckList?.Where(qitem => qitem.OrderGuestId == item.GuestId && !tempClassTimeList.Any(sItem => sItem.ClassTimeId == qitem.ClassTimeId))?.ToList() ?? new List<RB_Class_Check_ViewModel>();
......@@ -1417,8 +1417,7 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
var ccModel = clist.Where(x => x.StartTime == qitem.StartTime).FirstOrDefault();
if (ccModel != null && !oldCheckList.Where(x => x.OrderGuestId == item.GuestId && x.ClassTimeId == qitem.ClassTimeId).Any())
{
//没有数据的插入 (有数据情况 =》 请假数据)
base.Insert(new RB_Class_Check()
var checkModel = new RB_Class_Check()
{
ClassCheckId = 0,
ClassId = 0,
......@@ -1437,8 +1436,14 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
CurrentDeductionHours = ccModel.ClassHours,
IsAbsentHours = 0,
ClassTimeId = qitem.ClassTimeId,
IsCalcTeacFee=1,
});
IsCalcTeacFee = 1,
};
if (item.State == Common.Enum.Course.CourseAppointStateEnum.StuCheck)
{
checkModel.IsCalcTeacFee = 0;
}
//没有数据的插入 (有数据情况 =》 请假数据)
base.Insert(checkModel);
}
}
}
......
......@@ -4,6 +4,7 @@ using Edu.Model.Entity.Grade;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Grade;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
......@@ -78,10 +79,6 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Room_ViewModel.Group_Id), query.Group_Id);
}
//if (query.School_Id > 0)
//{
// builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Room_ViewModel.School_Id), query.School_Id);
//}
if (!string.IsNullOrEmpty(query.RoomName))
{
builder.AppendFormat(" AND A.{0} LIKE @RoomName ", nameof(RB_Class_Room_ViewModel.RoomName));
......@@ -134,5 +131,24 @@ WHERE 1=1 ");
return Get<RB_Class_Room_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 根据教室编号获取教室列表
/// </summary>
/// <param name="RoomIds"></param>
/// <returns></returns>
public List<RB_Class_Room_ViewModel> GetClassRoomListExtRepository(string RoomIds)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,B.SName AS SchoolName
FROM RB_Class_Room AS A LEFT JOIN rb_school AS B ON A.School_Id=B.SId
WHERE 1=1 ");
if (!string.IsNullOrEmpty(RoomIds))
{
builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Class_Room_ViewModel.RoomId), RoomIds);
}
return Get<RB_Class_Room_ViewModel>(builder.ToString()).ToList();
}
}
}
\ No newline at end of file
......@@ -92,7 +92,7 @@ WHERE 1=1 AND B.OrderState=1 AND B.OrderType=1 AND E.ClassScrollType=2
appointBuilder.AppendFormat(@"
SELECT A.Date,A.AccountId,A.State,A.GuestId,A.LearnCourseId,A.CourseGradeId,A.CourseGradeNo,IFNULL(C.ClassCheckId,0) AS ClassCheckId
,IFNULL(C.CurrentDeductionHours,0) AS CurrentDeductionHours,IFNULL(C.AttendanceMethod,0) AS AttendanceMethod,IFNULL(A.CourseSTime,'') AS StartTime
,IFNULL(A.CourseETime,'') AS EndTime
,IFNULL(A.CourseETime,'') AS EndTime,IFNULL(A.RoomId,0) AS ClassRoomId,A.Id AS AppointId,A.ShiftSort
FROM rb_scroll_appointment AS A LEFT JOIN rb_class_time AS B ON A.ClassPlanId=B.ClassPlanId
LEFT JOIN rb_class_check AS C ON B.ClassTimeId=C.ClassTimeId AND A.GuestId=C.OrderGuestId
WHERE 1=1 AND A.State IN(1,2,3) AND A.AppointType IN(1,2)
......
......@@ -462,6 +462,7 @@ namespace Edu.WebApi.Controllers.Course
var ID = base.ParmJObj.GetInt("ContractId");
var CType = base.ParmJObj.GetInt("CType");
string curl = Common.Config.UploadSiteUrl + string.Format(@"/Home/EducationContractInfo?ID={0}&CType={1}", ID, CType);
Common.Plugin.LogHelper.WriteInfo("合同下载:" + curl);
var flag = new ToPdfHelper().HtmlWJtoPdf(tempPath, curl);
return ApiResult.Success("", path);
}
......
......@@ -6,6 +6,7 @@ using Edu.Module.Course;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Org.BouncyCastle.Bcpg.OpenPgp;
using System;
using System.Collections.Generic;
using System.Linq;
......@@ -49,7 +50,7 @@ namespace Edu.WebApi.Controllers.Course
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
foreach (var item in dataList)
{
Dictionary<string,object> jobj =new Dictionary<string, object> ();
Dictionary<string, object> jobj = new Dictionary<string, object>();
jobj.Add("OrderId", item.OrderId);
jobj.Add("StuId", item.StuId);
jobj.Add("GuestId", item.GuestId);
......@@ -80,7 +81,12 @@ namespace Edu.WebApi.Controllers.Course
StartTime = !string.IsNullOrEmpty(qitem.StartTime) ? qitem.StartTime : "",
EndTime = !string.IsNullOrEmpty(qitem.EndTime) ? qitem.EndTime : "",
TeacherName = !string.IsNullOrEmpty(qitem.TeacherName) ? qitem.TeacherName : "",
RoomName = !string.IsNullOrEmpty(qitem.RoomName) ? qitem.RoomName : "",
qitem.AppointId,
qitem.AccountId,
qitem.ShiftSort,
}));
if (query.QCourseRate == Common.Enum.Course.CourseRateEnum.N5
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N4
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N3
......@@ -99,6 +105,20 @@ namespace Edu.WebApi.Controllers.Course
}
/// <summary>
/// 获取学员预约上课计划
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetStuAppointPlan()
{
string Date = base.ParmJObj.GetStringValue("Date");
int AccountId = base.ParmJObj.GetInt("AccountId");
string ShiftSort = base.ParmJObj.GetStringValue("ShiftSort");
var obj = scheduleCourse.GetStuAppointPlanModule(Date, AccountId, ShiftSort);
return ApiResult.Success(data: obj);
}
/// <summary>
/// 修改学员,排课状态
/// </summary>
......@@ -176,8 +196,8 @@ namespace Edu.WebApi.Controllers.Course
{
var pageModel = new ResultPageModel()
{
PageIndex=base.ParmJObj.GetInt("PageIndex"),
PageSize=base.ParmJObj.GetInt("PageSize"),
PageIndex = base.ParmJObj.GetInt("PageIndex"),
PageSize = base.ParmJObj.GetInt("PageSize"),
};
var query = new ScrollAppointmentQuery()
{
......
......@@ -874,6 +874,7 @@ namespace Edu.WebApi.Controllers.Course
newModel.UpdateTime = DateTime.Now;
newModel.Id = sObj.GetInt("AppointmentId");
newModel.StuName = sObj.GetStringValue("StuName");
newModel.IsCalcStuCheck = sObj.GetInt("IsCalcStuCheck");
list.Add(newModel);
}
}
......@@ -1003,7 +1004,7 @@ namespace Edu.WebApi.Controllers.Course
{
return ApiResult.ParamIsNull();
}
string msg = scrollClassModule.CancelSureAppointmentAsync(AppointIds, TeacherId, Date, ShiftSort, userInfo).Result;
string msg = scrollClassModule.CancelSureAppointmentModuleAsync(AppointIds, TeacherId, Date, ShiftSort, userInfo).Result;
if (msg == "")
{
return ApiResult.Success();
......@@ -1015,7 +1016,7 @@ namespace Edu.WebApi.Controllers.Course
}
/// <summary>
/// 取消预约
/// 取消预约(单个取消学生预约)
/// </summary>
/// <returns></returns>
[HttpPost]
......@@ -1029,8 +1030,7 @@ namespace Edu.WebApi.Controllers.Course
{
return ApiResult.ParamIsNull();
}
string msg = scrollClassModule.CancelAppointment(AppointIds, TeacherId, Date, userInfo);
string msg = scrollClassModule.CancelAppointmentModule(AppointIds, TeacherId, Date, userInfo);
if (msg == "")
{
return ApiResult.Success();
......@@ -1042,6 +1042,40 @@ namespace Edu.WebApi.Controllers.Course
}
/// <summary>
/// 取消学员上课 {HK New}
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult CancelStuAppointment()
{
var userInfo = base.UserInfo;
CancelAppointmentModel model = new CancelAppointmentModel()
{
AccountId= base.ParmJObj.GetInt("AccountId", 0),
Date = base.ParmJObj.GetStringValue("Date"),
ShiftSort = base.ParmJObj.GetStringValue("ShiftSort"),
StuList=new List<StuAppointItem>(),
};
string StuListStr = base.ParmJObj.GetStringValue("ChooseStuList");
if (!string.IsNullOrEmpty(StuListStr))
{
JArray jarray = JArray.Parse(StuListStr);
foreach (var jItem in jarray)
{
JObject jobj = JObject.Parse(Common.Plugin.JsonHelper.Serialize(jItem));
model.StuList.Add(new StuAppointItem() { AppointId = jobj.GetInt("AppointId"), IsCalcStuCheck = jobj.GetInt("IsCalcStuCheck") });
}
}
if (model.StuList.Count <= 0)
{
return ApiResult.ParamIsNull(message: "请选择要取消的学员!");
}
bool flag = scrollClassModule.CancelSureAppointmentNewModule(model, userInfo,out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
/// <summary>
/// 切换约课老师
/// </summary>
......
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