Commit 7602e62f authored by 黄奎's avatar 黄奎

页面修改

parent 8cf5020d
......@@ -128,6 +128,11 @@ namespace Edu.Model.ViewModel.User
/// </summary>
public int SumScore { get; set; }
/// <summary>
/// 绑定的企业微信
/// </summary>
public string WorkUserId { get; set; }
}
/// <summary>
/// 年假天数
......
......@@ -2093,478 +2093,12 @@ namespace Edu.Module.Course
/// <returns></returns>
public virtual async Task<bool> AddClassCheckModule(List<RB_Class_Check_ViewModel> list)
{
//基础课时分钟数
var BasicMinutes = 0;
BasicMinutes = class_ConfigRepository.GetClassMinutesRepository(list[0].ClassId);
var timeModel = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel()
{
ClassTimeId = list[0].ClassTimeId
})?.FirstOrDefault();
//写日志
bool flag = true;
foreach (var item in list)
{
if (flag)
{
var guestModel = order_GuestRepository.GetEntity(item.OrderGuestId);
item.CurrentDeductionHours = timeModel?.TimeHour ?? 0;
decimal currentDeductionHours = item.CurrentDeductionHours;
if (item.CheckStatus == 2)
{
currentDeductionHours = 0;
}
if (item.ClassCheckId > 0)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Class_Check_ViewModel.CheckStatus),item.CheckStatus},
{ nameof(RB_Class_Check_ViewModel.StudyNum),item.StudyNum},
{ nameof(RB_Class_Check_ViewModel.CurrentDeductionHours),currentDeductionHours},
};
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),item.ClassCheckId)
};
flag = classCheckRepository.Update(fileds, wheres);
}
else
{
item.CurrentDeductionHours = currentDeductionHours;
item.MakeUpStatus = 1;
var newId = classCheckRepository.Insert(item);
item.ClassCheckId = newId;
flag = newId > 0;
}
var oldModel = classCheckRepository.GetGuestFinishMinutesRepository(item.OrderGuestId.ToString(), ClassCheckId: item.ClassCheckId)?.FirstOrDefault();
if (flag)
{
//更新学员完成课时
var completeHours = (oldModel?.FinishClassHours ?? 0) + currentDeductionHours;
Dictionary<string, object> orderFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.CompleteHours),completeHours }
};
var orderModel = orderRepository.GetEntity(guestModel.OrderId);
string LogContent = "";
var shenyuHours = guestModel.ValidClassHours - completeHours;
//已上课时>=有效课时,如果是,修改学员状态为停课,并且备注“有效课时消耗完毕,系统自动停课”
if (completeHours > guestModel.ValidClassHours)
{
if (Common.Config.NoCheckOrderList.Count > 0 && Common.Config.NoCheckOrderList.Contains(guestModel.OrderId))
{
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), (int)GuestStateEnum.Normal);
}
else
{
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), (int)GuestStateEnum.StopClasses);
}
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.ChangeEffectTime), System.DateTime.Now);
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.DropOutRemark), "有效课时消耗完毕,系统自动停课");
LogContent = guestModel.GuestName + "有效课时消耗完毕,系统自动停课!";
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 欠费提醒(销售)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId) && sellerInfo != null)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
else if (guestModel.TotalHours > guestModel.ValidClassHours && shenyuHours < 12)
{
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.CreateBy);
#region 即将欠费提醒(销售)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.CreateBy);
if (!string.IsNullOrEmpty(queryTargetWorkId) && sellerInfo != null)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`欠费预警` 学员即将欠费通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将欠费通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 即将欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`欠费预警` 学员即将欠费通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将欠费通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours < 12 && shenyuHours > 0)
{
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 即将结课提醒 (销售端)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId) && sellerInfo != null)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId}\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将结课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 即将结课提醒 (管理端)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_EndClass");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId} ({sellerInfo.AccountName})\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将结课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours == 0)
{
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 即将结课提醒 (销售端)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId) && sellerInfo != null)
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId}\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员已结课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 即将结课提醒 (销售端)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_EndClass");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId} ({sellerInfo.AccountName})\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员已结课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
if (item.CheckStatus == 1)
{
#region 通知缺勤信息
var param = new RB_Class_Plan_ViewModel()
{
ClassTimeId = item.ClassTimeId
};
var planModel = class_PlanRepository.GetClassPlanListExtRepository(param).FirstOrDefault();
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Absence");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/stuMan/studentManage?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>缺勤时间:<font color='warning'>{planModel.ClassDate}({planModel.StartTime}-{planModel.EndTime})</font>\n>关联单号:{guestModel.OrderId}\n>班级名称:<font>{planModel.ClassName}</font>\n>带班老师:<font>{planModel.TeacherName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员缺勤通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
flag = order_GuestRepository.Update(orderFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), item.OrderGuestId));
if (flag && !string.IsNullOrEmpty(LogContent))
{
user_ChangeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 3,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
LogContent = LogContent,
School_Id = item.School_Id,
SourceId = guestModel.Id
});
}
//缺勤和请假
if (item.CheckStatus == 1 || item.CheckStatus == 2)
{
flag = CalcGuestHoursModule(guestModel, item);
}
#region B2B同业推送
if (orderModel != null && orderModel.CustomerId > 0)
{
//最后5个课时做处理
if (completeHours > guestModel.ValidClassHours)
{
//已停课
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 3,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "停课通知",
Content = "学员" + guestModel.GuestName + " 有效课时消耗完毕,已自动停课,关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
else if (guestModel.TotalHours > guestModel.ValidClassHours && shenyuHours <= 5)
{
//即将欠费
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 1,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "欠费预警",
Content = "学员" + guestModel.GuestName + " 即将欠费,剩余课时" + shenyuHours + ",关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours <= 5 && shenyuHours >= 0)
{
//即将结课
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 2,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "结课预警",
Content = "学员" + guestModel.GuestName + " 即将结课,剩余课时" + shenyuHours + ",关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours == 0)
{
//已经结课
b2B_StudentNoticeRepository.Insert(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 4,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "结课通知",
Content = "学员" + guestModel.GuestName + " 已结课,关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
}
#endregion
}
}
}
if (MessageCenterHub.GlobalContext != null)
{
//通知教室端签到更新
await MessageCenterHub.GlobalContext.Clients.All.SendAsync("UpdateCheckin", "666");
}
bool flag = classCheckRepository.StudentCheckRepository(list,1);
//if (MessageCenterHub.GlobalContext != null)
//{
// //通知教室端签到更新
// await MessageCenterHub.GlobalContext.Clients.All.SendAsync("UpdateCheckin", "666");
//}
return flag;
}
......@@ -2586,160 +2120,6 @@ namespace Edu.Module.Course
return false;
}
/// <summary>
/// 初始化缺勤数据
/// </summary>
/// <returns></returns>
public bool InitDataModule()
{
bool flag = true;
var list = GetClassCheckListRepository(new RB_Class_Check_ViewModel());
var tempList = list?.Where(qitem => qitem.CheckStatus > 0)?.ToList();
foreach (var item in tempList)
{
if (item.ClassId > 5)
{
var guestModel = order_GuestRepository.GetEntity(item.OrderGuestId);
flag = CalcGuestHoursModule(guestModel, item);
}
}
return flag;
}
/// <summary>
/// 计算学员缺课课时
/// </summary>
/// <param name="guestModel"></param>
/// <param name="checkModel"></param>
/// <returns></returns>
public bool CalcGuestHoursModule(RB_Order_Guest guestModel, RB_Class_Check_ViewModel checkModel)
{
bool flag = true;
if (guestModel.GuestState == GuestStateEnum.Normal)
{
decimal NoFinishHours = 0;
//获取以前所有签到列表【倒叙】
var checkList = classCheckRepository.GetClassCheckListRepository(new RB_Class_Check_ViewModel()
{
ClassId = checkModel.ClassId,
OrderGuestId = checkModel.OrderGuestId,
EndDate = Common.ConvertHelper.FormatDate(checkModel.ClassDate)
}).OrderByDescending(qitem => qitem.ClassDate).ToList();
for (var i = 0; i < checkList.Count; i++)
{
if ((checkList[i].CheckStatus == 1) && (checkList[i].MakeUpStatus == 3 || checkList[i].MakeUpStatus == 4 || checkList[i].MakeUpStatus == 1))
{
NoFinishHours += checkList[i].CurrentDeductionHours;
}
else
{
break;
}
}
Dictionary<string, object> fileds = new Dictionary<string, object>();
Dictionary<string, object> checkFileds = new Dictionary<string, object>();
//缺勤课时超过12课时更新学员状态为【停课】
if (NoFinishHours >= Common.Config.AbsentHours)
{
fileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), (int)GuestStateEnum.StopClasses);
checkFileds.Add(nameof(RB_Class_Check_ViewModel.IsAbsentHours), 1);
checkFileds.Add(nameof(RB_Class_Check_ViewModel.MakeUpStatus), 4);
var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 欠费提醒(销售)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:连续缺课超过{Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:连续缺课超过{Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
if (fileds != null && fileds.Count > 0 && checkFileds != null && checkFileds.Count > 0)
{
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Order_Guest_ViewModel.Id),guestModel.Id),
};
flag = order_GuestRepository.Update(fileds, wheres);
List<WhereHelper> checkWheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),checkModel.ClassCheckId),
};
flag = classCheckRepository.Update(checkFileds, checkWheres);
}
if (flag && checkModel.CheckStatus == 1 && checkModel.IsUpdateMakeUp != 1)
{
//请假的 因为不扣课时, 无法进补课
flag = student_MakeupRepository.SetStudentMakeUpRepository(new RB_Student_Makeup()
{
Id = 0,
ClassCheckId = checkModel.ClassCheckId,
ClassDate = checkModel.ClassDate,
ClassId = checkModel.ClassId,
CreateBy = checkModel.CreateBy,
CreateTime = checkModel.CreateTime,
Group_Id = checkModel.Group_Id,
MakeUpStatus = 1,
OrderGuestId = checkModel.OrderGuestId
});
}
}
return flag;
}
/// <summary>
/// 设置修改学员补课状态
......
......@@ -4889,57 +4889,57 @@ namespace Edu.Module.Course
public bool UpdateGuestStateModule()
{
bool flag = false;
var list = order_GuestRepository.UpdateGuestStateRepository();
if (list != null && list.Count > 0)
{
string guestIds = string.Join(",", list.Select(qitem => qitem.Id));
var checkList = class_CheckRepository.GetClassCheckList(new RB_Class_Check_ViewModel() { QOrderGuestIds = guestIds });
int index = 1;
foreach (var item in list)
{
var guestCheckList = checkList.Where(qitem => qitem.OrderGuestId == item.Id);
var totalHours = guestCheckList?.Sum(qitem => qitem.CurrentDeductionHours) ?? 0;
if (item.TotalHours != totalHours)
{
decimal shengyu = item.TotalHours - totalHours;
var lastCheck = guestCheckList.OrderByDescending(qitem => qitem.ClassDate).FirstOrDefault();
DateTime classDate = DateTime.Now;
if (lastCheck != null && !string.IsNullOrEmpty(Common.ConvertHelper.FormatDate(lastCheck?.ClassDate)))
{
classDate = lastCheck.ClassDate.AddDays(1);
}
var checkModel = new RB_Class_Check()
{
ClassCheckId = 0,
ClassId = 0,
ClassDate = classDate,
Status = 0,
ClassRoomId = 0,
Group_Id = lastCheck?.Group_Id ?? 100000,
School_Id = 0,
TeacherId = 0,
OrderGuestId = item.Id,
CheckStatus = 0,
CreateBy = 0,
StudyNum = Convert.ToInt32(shengyu) * 45,
MakeUpStatus = 1,
CurrentDeductionHours = shengyu,
IsAbsentHours = 0,
ClassTimeId = 0,
};
checkModel.CreateTime = checkModel.ClassDate;
class_CheckRepository.Insert(checkModel);
}
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest.CompleteHours),item.TotalHours },
{nameof(RB_Order_Guest.GuestState), (int)GuestStateEnum.Graduate},
};
flag = order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest.Id), item.Id));
Console.WriteLine(string.Format("已完成 {0}/{1} ", index, list.Count));
index++;
}
}
//var list = order_GuestRepository.UpdateGuestStateRepository();
//if (list != null && list.Count > 0)
//{
// string guestIds = string.Join(",", list.Select(qitem => qitem.Id));
// var checkList = class_CheckRepository.GetClassCheckList(new RB_Class_Check_ViewModel() { QOrderGuestIds = guestIds });
// int index = 1;
// foreach (var item in list)
// {
// var guestCheckList = checkList.Where(qitem => qitem.OrderGuestId == item.Id);
// var totalHours = guestCheckList?.Sum(qitem => qitem.CurrentDeductionHours) ?? 0;
// if (item.TotalHours != totalHours)
// {
// decimal shengyu = item.TotalHours - totalHours;
// var lastCheck = guestCheckList.OrderByDescending(qitem => qitem.ClassDate).FirstOrDefault();
// DateTime classDate = DateTime.Now;
// if (lastCheck != null && !string.IsNullOrEmpty(Common.ConvertHelper.FormatDate(lastCheck?.ClassDate)))
// {
// classDate = lastCheck.ClassDate.AddDays(1);
// }
// var checkModel = new RB_Class_Check()
// {
// ClassCheckId = 0,
// ClassId = 0,
// ClassDate = classDate,
// Status = 0,
// ClassRoomId = 0,
// Group_Id = lastCheck?.Group_Id ?? 100000,
// School_Id = 0,
// TeacherId = 0,
// OrderGuestId = item.Id,
// CheckStatus = 0,
// CreateBy = 0,
// StudyNum = Convert.ToInt32(shengyu) * 45,
// MakeUpStatus = 1,
// CurrentDeductionHours = shengyu,
// IsAbsentHours = 0,
// ClassTimeId = 0,
// };
// checkModel.CreateTime = checkModel.ClassDate;
// class_CheckRepository.Insert(checkModel);
// }
// Dictionary<string, object> fileds = new Dictionary<string, object>()
// {
// {nameof(RB_Order_Guest.CompleteHours),item.TotalHours },
// {nameof(RB_Order_Guest.GuestState), (int)GuestStateEnum.Graduate},
// };
// flag = order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest.Id), item.Id));
// Console.WriteLine(string.Format("已完成 {0}/{1} ", index, list.Count));
// index++;
// }
//}
return flag;
}
}
......
......@@ -2863,7 +2863,8 @@ namespace Edu.Module.Course
if (gmodel != null && gmodel.CourseChapterNo < demodel.ChapterNo)
{
//ld 2022-03-08 修改为学员上课最大课时
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
Dictionary<string, object> keyValues1 = new Dictionary<string, object>()
{
{ nameof(RB_Order_Guest_ViewModel.CourseChapterNo), demodel.ChapterNo},
{ nameof(RB_Order_Guest_ViewModel.CompleteHours), demodel.ChapterNo * clist.Sum(x=>x.ClassHours)}
};
......@@ -2872,7 +2873,8 @@ namespace Edu.Module.Course
//章节已上完了 修改为 毕业
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.GuestState), Common.Enum.Course.GuestStateEnum.Graduate);
}
List<WhereHelper> wheres1 = new List<WhereHelper>() {
List<WhereHelper> wheres1 = new List<WhereHelper>()
{
new WhereHelper(){
FiledName = nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.Id),
FiledValue = gmodel.Id,
......
......@@ -943,147 +943,147 @@ namespace Edu.Module.EduTask
{
bool flag = false;
message = "";
var order = orderRepository.GetEntity(OrderId);
if (order == null)
{
message = "未找到此订单";
return false;
}
if (order.FirstOrderId <= 0)
{
message = "当前订单不是转班/分拆订单不能回归原班!";
return false;
}
var oldOrder = orderRepository.GetEntity(order.FirstOrderId);
if (oldOrder == null)
{
message = "原订单不是转班/分拆订单不能回归原班!";
return false;
}
var orderguestList = guestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() {
OrderIds = OrderId + "," + order.FirstOrderId
});
var oldGuest = orderguestList.Where(qitem=>qitem.OrderId==oldOrder.OrderId)?.FirstOrDefault()??new RB_Order_Guest_ViewModel ();
var guest = orderguestList.Where(qitem => qitem.OrderId == order.OrderId)?.FirstOrDefault() ?? new RB_Order_Guest_ViewModel();
var classList = classRepository.GetClassListRepository(new RB_Class_ViewModel()
{
Q_ClassIds = oldOrder.ClassId + "," + order.ClassId
});
//var order = orderRepository.GetEntity(OrderId);
//if (order == null)
//{
// message = "未找到此订单";
// return false;
//}
//if (order.FirstOrderId <= 0)
//{
// message = "当前订单不是转班/分拆订单不能回归原班!";
// return false;
//}
//var oldOrder = orderRepository.GetEntity(order.FirstOrderId);
//if (oldOrder == null)
//{
// message = "原订单不是转班/分拆订单不能回归原班!";
// return false;
//}
//var orderguestList = guestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() {
// OrderIds = OrderId + "," + order.FirstOrderId
//});
//var oldGuest = orderguestList.Where(qitem=>qitem.OrderId==oldOrder.OrderId)?.FirstOrDefault()??new RB_Order_Guest_ViewModel ();
//var guest = orderguestList.Where(qitem => qitem.OrderId == order.OrderId)?.FirstOrDefault() ?? new RB_Order_Guest_ViewModel();
//var classList = classRepository.GetClassListRepository(new RB_Class_ViewModel()
//{
// Q_ClassIds = oldOrder.ClassId + "," + order.ClassId
//});
var oldContract = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
{
OrderId = oldOrder.OrderId,
GuestId = oldGuest.Id,
Status=-1,
}).Where(qitem => qitem.Status == 0 || qitem.Status == 1 || qitem.Status == 2)?.FirstOrDefault();
//var oldContract = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
//{
// OrderId = oldOrder.OrderId,
// GuestId = oldGuest.Id,
// Status=-1,
//}).Where(qitem => qitem.Status == 0 || qitem.Status == 1 || qitem.Status == 2)?.FirstOrDefault();
var newContract = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
{
OrderId = order.OrderId,
GuestId = guest.Id,
Status=-1,
}).Where(qitem => qitem.Status == 0 || qitem.Status == 1 || qitem.Status == 2)?.FirstOrDefault();
//var newContract = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
//{
// OrderId = order.OrderId,
// GuestId = guest.Id,
// Status=-1,
//}).Where(qitem => qitem.Status == 0 || qitem.Status == 1 || qitem.Status == 2)?.FirstOrDefault();
var oldClassModel = classList?.Where(qitem => qitem.ClassId == oldOrder.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
var newClassModel = classList?.Where(qitem => qitem.ClassId == order.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
//原业务员
var userInfo = UserReidsCache.GetUserLoginInfo(oldOrder.EnterID);
if (guest.TotalHours != guest.CompleteHours)
{
//生成收支相抵单据
//剩余课时
var surplus = guest.TotalHours - guest.CompleteHours;
var refundMoney = Math.Round(order.PreferPrice/ guest.TotalHours * surplus, 2);
//var oldClassModel = classList?.Where(qitem => qitem.ClassId == oldOrder.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
//var newClassModel = classList?.Where(qitem => qitem.ClassId == order.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
////原业务员
//var userInfo = UserReidsCache.GetUserLoginInfo(oldOrder.EnterID);
//if (guest.TotalHours != guest.CompleteHours)
//{
// //生成收支相抵单据
// //剩余课时
// var surplus = guest.TotalHours - guest.CompleteHours;
// var refundMoney = Math.Round(order.PreferPrice/ guest.TotalHours * surplus, 2);
#region 更新学员课时
//更新老订单学员课时
Dictionary<string, object> oldGuestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_Extend.TotalHours),oldGuest.TotalHours+surplus }
};
flag= guestRepository.Update(oldGuestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), oldGuest.Id));
// #region 更新学员课时
// //更新老订单学员课时
// Dictionary<string, object> oldGuestFileds = new Dictionary<string, object>()
// {
// {nameof(RB_Order_Guest_Extend.TotalHours),oldGuest.TotalHours+surplus }
// };
// flag= guestRepository.Update(oldGuestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), oldGuest.Id));
//更新新订单学员课时
Dictionary<string, object> newGuestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_Extend.TotalHours),guest.CompleteHours },
{nameof(RB_Order_Guest_Extend.GuestState),(int)GuestStateEnum.Graduate}
};
flag = guestRepository.Update(newGuestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), guest.Id));
#endregion
// //更新新订单学员课时
// Dictionary<string, object> newGuestFileds = new Dictionary<string, object>()
// {
// {nameof(RB_Order_Guest_Extend.TotalHours),guest.CompleteHours },
// {nameof(RB_Order_Guest_Extend.GuestState),(int)GuestStateEnum.Graduate}
// };
// flag = guestRepository.Update(newGuestFileds, new WhereHelper(nameof(RB_Order_Guest_Extend.Id), guest.Id));
// #endregion
#region 更新订单应收
Dictionary<string, object> oldOrderFileds = new Dictionary<string, object>()
{
{nameof(RB_Order.PreferPrice),oldOrder.PreferPrice+refundMoney}
};
//更新原订单应收
flag = orderRepository.Update(oldOrderFileds, new WhereHelper(nameof(RB_Order.OrderId), oldOrder.OrderId));
// #region 更新订单应收
// Dictionary<string, object> oldOrderFileds = new Dictionary<string, object>()
// {
// {nameof(RB_Order.PreferPrice),oldOrder.PreferPrice+refundMoney}
// };
// //更新原订单应收
// flag = orderRepository.Update(oldOrderFileds, new WhereHelper(nameof(RB_Order.OrderId), oldOrder.OrderId));
Dictionary<string, object> newOrderFileds = new Dictionary<string, object>()
{
{nameof(RB_Order.PreferPrice),order.PreferPrice-refundMoney},
{nameof(RB_Order.IsBackClass),1}
};
//更新新订单应收
flag = orderRepository.Update(newOrderFileds, new WhereHelper(nameof(RB_Order.OrderId), order.OrderId));
#endregion
// Dictionary<string, object> newOrderFileds = new Dictionary<string, object>()
// {
// {nameof(RB_Order.PreferPrice),order.PreferPrice-refundMoney},
// {nameof(RB_Order.IsBackClass),1}
// };
// //更新新订单应收
// flag = orderRepository.Update(newOrderFileds, new WhereHelper(nameof(RB_Order.OrderId), order.OrderId));
// #endregion
#region 更新合同课时和应收
Dictionary<string, object> oldContractFileds = new Dictionary<string, object>()
{
{nameof(RB_Education_Contract.FirstClassHours),guest.CompleteHours},
{nameof(RB_Education_Contract.FirstCourseFee),order.PreferPrice-refundMoney },
{nameof(RB_Education_Contract.FirstMoney),order.PreferPrice-refundMoney },
{nameof(RB_Education_Contract.Money), order.PreferPrice-refundMoney},
{nameof(RB_Education_Contract.CNYCaps), StringHelper.MoneyToUpper((order.PreferPrice-refundMoney).ToString()) }
};
flag = education_ContractRepository.Update(oldContractFileds, new WhereHelper(nameof(RB_Education_Contract.Id), oldContract.Id));
Dictionary<string, object> newContractFileds = new Dictionary<string, object>()
{
{nameof(RB_Education_Contract.FirstClassHours), oldGuest.TotalHours+surplus},
{nameof(RB_Education_Contract.FirstCourseFee),oldOrder.PreferPrice+refundMoney },
{nameof(RB_Education_Contract.FirstMoney),oldOrder.PreferPrice+refundMoney },
{nameof(RB_Education_Contract.Money), oldOrder.PreferPrice+refundMoney},
{nameof(RB_Education_Contract.CNYCaps), StringHelper.MoneyToUpper((oldOrder.PreferPrice+refundMoney).ToString()) }
};
flag = education_ContractRepository.Update(newContractFileds, new WhereHelper(nameof(RB_Education_Contract.Id), newContract.Id));
#endregion
// #region 更新合同课时和应收
// Dictionary<string, object> oldContractFileds = new Dictionary<string, object>()
// {
// {nameof(RB_Education_Contract.FirstClassHours),guest.CompleteHours},
// {nameof(RB_Education_Contract.FirstCourseFee),order.PreferPrice-refundMoney },
// {nameof(RB_Education_Contract.FirstMoney),order.PreferPrice-refundMoney },
// {nameof(RB_Education_Contract.Money), order.PreferPrice-refundMoney},
// {nameof(RB_Education_Contract.CNYCaps), StringHelper.MoneyToUpper((order.PreferPrice-refundMoney).ToString()) }
// };
// flag = education_ContractRepository.Update(oldContractFileds, new WhereHelper(nameof(RB_Education_Contract.Id), oldContract.Id));
// Dictionary<string, object> newContractFileds = new Dictionary<string, object>()
// {
// {nameof(RB_Education_Contract.FirstClassHours), oldGuest.TotalHours+surplus},
// {nameof(RB_Education_Contract.FirstCourseFee),oldOrder.PreferPrice+refundMoney },
// {nameof(RB_Education_Contract.FirstMoney),oldOrder.PreferPrice+refundMoney },
// {nameof(RB_Education_Contract.Money), oldOrder.PreferPrice+refundMoney},
// {nameof(RB_Education_Contract.CNYCaps), StringHelper.MoneyToUpper((oldOrder.PreferPrice+refundMoney).ToString()) }
// };
// flag = education_ContractRepository.Update(newContractFileds, new WhereHelper(nameof(RB_Education_Contract.Id), newContract.Id));
// #endregion
var outlay = new OrderChangeFinace()
{
ChangeType = 2,
ClassId = order.ClassId,
GuestId = guest.Id,
OrderId = order.OrderId,
GuestName = guest.GuestName,
InCome = refundMoney,
ClassName = newClassModel.ClassName,
Class_School_Id = newClassModel.School_Id,
ReFinanceId = 0,
SName = newClassModel.SchoolName,
UserInfo = userInfo
};
//生成支出财务单据
var RelevanceFrId = CreateExpenditure(outlay, out string msg2);
// var outlay = new OrderChangeFinace()
// {
// ChangeType = 2,
// ClassId = order.ClassId,
// GuestId = guest.Id,
// OrderId = order.OrderId,
// GuestName = guest.GuestName,
// InCome = refundMoney,
// ClassName = newClassModel.ClassName,
// Class_School_Id = newClassModel.School_Id,
// ReFinanceId = 0,
// SName = newClassModel.SchoolName,
// UserInfo = userInfo
// };
// //生成支出财务单据
// var RelevanceFrId = CreateExpenditure(outlay, out string msg2);
var income = new OrderChangeFinace()
{
ChangeType = 2,
ClassId = oldOrder.ClassId,
GuestId = guest.Id,
OrderId = oldOrder.OrderId,
GuestName = guest.GuestName,
InCome = refundMoney,
ClassName = oldClassModel.ClassName,
Class_School_Id = oldClassModel.School_Id,
ReFinanceId = RelevanceFrId,
SName = oldClassModel.SchoolName,
UserInfo = userInfo
};
//生成收入财务单据
CreateInCome(income, out string msg);
}
// var income = new OrderChangeFinace()
// {
// ChangeType = 2,
// ClassId = oldOrder.ClassId,
// GuestId = guest.Id,
// OrderId = oldOrder.OrderId,
// GuestName = guest.GuestName,
// InCome = refundMoney,
// ClassName = oldClassModel.ClassName,
// Class_School_Id = oldClassModel.School_Id,
// ReFinanceId = RelevanceFrId,
// SName = oldClassModel.SchoolName,
// UserInfo = userInfo
// };
// //生成收入财务单据
// CreateInCome(income, out string msg);
//}
return flag;
}
}
......
......@@ -196,542 +196,10 @@ namespace Edu.Repository.EduTask
}
if (classCheckList != null && classCheckList.Any())
{
var orderModel = orderRepository.GetEntity(orderGuestList.FirstOrDefault().OrderId);
var classModel = classRepository.GetEntity<RB_Class_ViewModel>(model.ClassId);
var sellerInfo = accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel { Id = orderModel.EnterID, Group_Id = model.Group_Id }).FirstOrDefault();//UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
flag= AddClassCheckModule(classCheckList, timeList, orderGuestList, orderModel, classModel, sellerInfo);
//flag = classCheckRepository.StudentCheckRepository(classCheckList,1);
}
}
return flag;
}
/// <summary>
/// 新增签到
/// </summary>
/// <param name="Ids"></param>
/// <param name="DropOutRemark"></param>
/// <returns></returns>
public virtual bool AddClassCheckModule(List<RB_Class_Check_ViewModel> list, List<RB_Class_Time_ViewModel> timeList, List<RB_Order_Guest_ViewModel> orderGuestList, RB_Order orderModel, RB_Class_ViewModel classModel, Model.ViewModel.User.RB_Account_ViewModel sellerInfo)
{
//写日志
bool flag = true;
foreach (var item in list)
{
//基础课时分钟数
var BasicMinutes = 0;
BasicMinutes = class_ConfigRepository.GetClassMinutesRepository(item.ClassId);
var timeModel = timeList.Where(x => x.ClassTimeId == item.ClassTimeId).FirstOrDefault();
if (flag)
{
var guestModel = orderGuestList.Where(x => x.Id == item.OrderGuestId).FirstOrDefault();
item.CurrentDeductionHours = timeModel?.TimeHour ?? 0;
decimal currentDeductionHours = item.CurrentDeductionHours;
if (item.CheckStatus == 2)
{
currentDeductionHours = 0;
}
if (item.ClassCheckId > 0)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Class_Check_ViewModel.CheckStatus),item.CheckStatus},
{ nameof(RB_Class_Check_ViewModel.StudyNum),item.StudyNum},
{ nameof(RB_Class_Check_ViewModel.CurrentDeductionHours),currentDeductionHours},
};
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),item.ClassCheckId)
};
flag = classCheckRepository.Update(fileds, wheres);
}
else
{
item.CurrentDeductionHours = currentDeductionHours;
item.MakeUpStatus = 1;
var newId = classCheckRepository.Insert(item);
item.ClassCheckId = newId;
flag = newId > 0;
}
var oldModel = classCheckRepository.GetGuestFinishMinutesRepository(item.OrderGuestId.ToString(), ClassCheckId: item.ClassCheckId)?.FirstOrDefault();
if (flag)
{
//更新学员完成课时
var completeHours = (oldModel?.FinishClassHours ?? 0) + currentDeductionHours;
Dictionary<string, object> orderFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.CompleteHours),completeHours }
};
string LogContent = "";
var shenyuHours = guestModel.ValidClassHours - completeHours;
//已上课时>=有效课时,如果是,修改学员状态为停课,并且备注“有效课时消耗完毕,系统自动停课”
if (completeHours > guestModel.ValidClassHours)
{
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState),(int)GuestStateEnum.StopClasses);
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.ChangeEffectTime), DateTime.Now);
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.DropOutRemark), "有效课时消耗完毕,系统自动停课");
LogContent = guestModel.GuestName + "有效课时消耗完毕,系统自动停课!";
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 欠费提醒(销售)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney.ToString("0.00")}</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney.ToString("0.00")}</font>\n>停课理由:费用不足,系统自动触发停课限制\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
else if (guestModel.TotalHours > guestModel.ValidClassHours && shenyuHours < 12)
{
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 即将欠费提醒(销售)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`欠费预警` 学员即将欠费通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney.ToString("0.00")}</font>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将欠费通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 即将欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`欠费预警` 学员即将欠费通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney.ToString("0.00")}</font>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将欠费通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours < 12 && shenyuHours > 0)
{
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 即将结课提醒 (销售端)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId}\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将结课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 即将结课提醒 (管理端)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_EndClass");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId} ({sellerInfo.AccountName})\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将结课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours == 0)
{
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
#region 即将结课提醒 (销售端)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId}\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员已结课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 即将结课提醒 (销售端)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_EndClass");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId} ({sellerInfo.AccountName})\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员已结课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
if (item.CheckStatus == 1)
{
#region 通知缺勤信息
var param = new RB_Class_Plan_ViewModel()
{
ClassTimeId = item.ClassTimeId
};
var planModel = class_PlanRepository.GetClassPlanListExtRepository(param).FirstOrDefault();
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Absence");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/stuMan/studentManage?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>缺勤时间:<font color='warning'>{planModel.ClassDate}({planModel.StartTime}-{planModel.EndTime})</font>\n>关联单号:{guestModel.OrderId}\n>班级名称:<font>{planModel.ClassName}</font>\n>带班老师:<font>{planModel.TeacherName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员缺勤通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
flag = order_GuestRepository.Update(orderFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), item.OrderGuestId));
if (flag && !string.IsNullOrEmpty(LogContent))
{
user_ChangeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 3,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
LogContent = LogContent,
School_Id = item.School_Id,
SourceId = guestModel.Id
});
}
//缺勤和请假
if (item.CheckStatus == 1 || item.CheckStatus == 2)
{
flag = CalcGuestHoursModule(guestModel, item, orderModel, classModel, sellerInfo);
}
}
}
}
return flag;
}
/// <summary>
/// 计算学员缺课课时
/// </summary>
/// <param name="guestModel"></param>
/// <param name="checkModel"></param>
/// <returns></returns>
public bool CalcGuestHoursModule(RB_Order_Guest guestModel, RB_Class_Check_ViewModel checkModel, RB_Order orderModel, RB_Class_ViewModel classModel, Model.ViewModel.User.RB_Account_ViewModel sellerInfo)
{
bool flag = true;
if (guestModel.GuestState == GuestStateEnum.Normal)
{
decimal NoFinishHours = 0;
//获取以前所有签到列表【倒叙】
var checkList = classCheckRepository.GetClassCheckListRepository(new RB_Class_Check_ViewModel()
{
ClassId = checkModel.ClassId,
OrderGuestId = checkModel.OrderGuestId,
EndDate = Common.ConvertHelper.FormatDate(checkModel.ClassDate)
}).OrderByDescending(qitem => qitem.ClassDate).ToList();
for (var i = 0; i < checkList.Count; i++)
{
if ((checkList[i].CheckStatus == 1) && (checkList[i].MakeUpStatus == 3 || checkList[i].MakeUpStatus == 4 || checkList[i].MakeUpStatus == 1))
{
NoFinishHours += checkList[i].CurrentDeductionHours;
}
else
{
break;
}
}
Dictionary<string, object> fileds = new Dictionary<string, object>();
Dictionary<string, object> checkFileds = new Dictionary<string, object>();
//缺勤课时超过12课时更新学员状态为【停课】
if (NoFinishHours >= Common.Config.AbsentHours)
{
fileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), (int)GuestStateEnum.StopClasses);
checkFileds.Add(nameof(RB_Class_Check_ViewModel.IsAbsentHours), 1);
checkFileds.Add(nameof(RB_Class_Check_ViewModel.MakeUpStatus), 4);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
#region 欠费提醒(销售)
var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
if (!string.IsNullOrEmpty(queryTargetWorkId))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney.ToString("0.00")}</font>\n>停课理由:连续缺课超过{Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = queryTargetWorkId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
}
#endregion
#region 欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney.ToString("0.00")}</font>\n>停课理由:连续缺课超过{Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员欠费停课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
});
}
#endregion
}
if (fileds != null && fileds.Count > 0 && checkFileds != null && checkFileds.Count > 0)
{
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Order_Guest_ViewModel.Id),guestModel.Id),
};
flag = order_GuestRepository.Update(fileds, wheres);
List<WhereHelper> checkWheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),checkModel.ClassCheckId),
};
flag = classCheckRepository.Update(checkFileds, checkWheres);
}
if (flag && checkModel.CheckStatus == 1 && checkModel.IsUpdateMakeUp != 1)
{
//请假的 因为不扣课时, 无法进补课
flag = student_MakeupRepository.SetStudentMakeUpRepository(new RB_Student_Makeup()
{
Id = 0,
ClassCheckId = checkModel.ClassCheckId,
ClassDate = checkModel.ClassDate,
ClassId = checkModel.ClassId,
CreateBy = checkModel.CreateBy,
CreateTime = checkModel.CreateTime,
Group_Id = checkModel.Group_Id,
MakeUpStatus = 1,
OrderGuestId = checkModel.OrderGuestId
});
}
}
return flag;
}
}
}
......@@ -2,10 +2,21 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.System;
using System.Web;
using Edu.Model.Entity.Grade;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Grade;
using Edu.Model.ViewModel.Sell;
using Spire.Pdf.Exporting.XPS.Schema;
using VT.FW.DB;
using VT.FW.DB.Dapper;
using Edu.Model.Entity.Sell;
using Edu.Model.Entity.User;
using Edu.Model.ViewModel.User;
using Org.BouncyCastle.Bcpg.OpenPgp;
using Castle.Core.Internal;
namespace Edu.Repository.Grade
{
......@@ -214,6 +225,8 @@ WHERE A.`Status`=0 ");
return Get<GuestFinishMinute_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 班级签到完成学习分钟数
/// </summary>
......@@ -929,5 +942,645 @@ WHERE 1=1 AND A.Status=0 {1} ", builderMakeUp.ToString(), builderWhere.ToString
}
#endregion
/// <summary>
/// 学员签到
/// </summary>
/// <param name="list">学员信息</param>
/// <param name="CheckType">1-班课,2-约课</param>
/// <returns></returns>
public bool StudentCheckRepository(List<RB_Class_Check_ViewModel> list,int CheckType)
{
bool flag = false;
List<RB_Order_Guest_Extend> guestList = new List<RB_Order_Guest_Extend>();
List<RB_Order_ViewModel> orderList = new List<RB_Order_ViewModel>();
List<RB_Class_Time_ViewModel> classTimeList = new List<RB_Class_Time_ViewModel>();
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>();
List<RB_Class_Check_ViewModel> oldCheckList = new List<RB_Class_Check_ViewModel>();
List<RB_Class_ViewModel> classList = new List<RB_Class_ViewModel>();
List<RB_Employee_Extend> empList = new List<RB_Employee_Extend>();
if (list != null && list.Count > 0)
{
string orderGuestIds = string.Join(",", list.Select(qitem => qitem.OrderGuestId).Distinct());
if (!string.IsNullOrEmpty(orderGuestIds))
{
guestList= GetOrderGuestListRepository(orderGuestIds);
oldCheckList = GetClassCheckList(new RB_Class_Check_ViewModel() { QOrderGuestIds = orderGuestIds });
}
if (guestList != null && guestList.Count > 0)
{
string orderIds = string.Join(",", guestList.Select(qitem => qitem.OrderId).Distinct());
if (!string.IsNullOrEmpty(orderIds))
{
orderList= GetOrderListRepository(orderIds);
}
}
if (orderList != null && orderList.Count > 0)
{
string enterIDs = string.Join(",", orderList.Select(qitem => qitem.EnterID).Distinct());
if (!string.IsNullOrEmpty(enterIDs))
{
empList= GetEmployeeListRepository(enterIDs);
}
}
string classTimeIds = string.Join(",", list.Select(qitem => qitem.ClassTimeId).Distinct());
if (!string.IsNullOrEmpty(classTimeIds))
{
classTimeList = GetClassTimeListRepository(classTimeIds);
}
string classIds = string.Join(",", list.Select(qitem => qitem.ClassId).Distinct());
if (!string.IsNullOrEmpty(classIds))
{
classList= GetClassListRepository(classIds);
}
}
foreach (var item in list)
{
var guestModel = guestList?.FirstOrDefault(qitem => qitem.Id == item.OrderGuestId) ?? new RB_Order_Guest_Extend();
item.CurrentDeductionHours = classTimeList?.FirstOrDefault(qitem => qitem.ClassTimeId == item.ClassTimeId)?.TimeHour ?? 2;
decimal currentDeductionHours = item.CurrentDeductionHours;
//if (item.CheckStatus == 2)
//{
// currentDeductionHours = 0;
//}
if (item.ClassCheckId > 0)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Class_Check_ViewModel.CheckStatus),item.CheckStatus},
{ nameof(RB_Class_Check_ViewModel.StudyNum),item.StudyNum},
{ nameof(RB_Class_Check_ViewModel.CurrentDeductionHours),currentDeductionHours},
};
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),item.ClassCheckId)
};
flag = base.Update(fileds, wheres);
}
else
{
item.CurrentDeductionHours = currentDeductionHours;
item.MakeUpStatus = 1;
var newId = base.Insert(item);
item.ClassCheckId = newId;
flag = newId > 0;
}
var guestOldCheckList = oldCheckList?.Where(qitem => qitem.OrderGuestId == item.OrderGuestId && qitem.ClassTimeId != item.ClassTimeId)?.ToList() ?? new List<RB_Class_Check_ViewModel>();
decimal guestOldFinishHours = 0;
if (guestOldCheckList != null && guestOldCheckList.Count > 0)
{
guestOldFinishHours = guestOldCheckList.Sum(qitem => qitem.CurrentDeductionHours);
}
if (flag)
{
//更新学员完成课时
var completeHours = guestOldFinishHours + currentDeductionHours;
Dictionary<string, object> orderFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.CompleteHours),completeHours }
};
var orderModel = orderList?.FirstOrDefault(qitem => qitem.OrderId == guestModel.OrderId);
string LogContent = "";
var shenyuHours = guestModel.TotalHours - completeHours;
var classModel = classList?.FirstOrDefault(qitem => qitem.ClassId == guestModel.ClassId);
var sellerInfo = empList?.FirstOrDefault(qitem => qitem.EmployeeId == orderModel.EnterID);
if (shenyuHours > 0 && shenyuHours <= 12)
{
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
#region 即将结课提醒 (销售端)
if (sellerInfo != null && !string.IsNullOrEmpty(sellerInfo?.WorkUserId ?? ""))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId}\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将结课通知",
Platform = 5,
ReceiveId = sellerInfo?.WorkUserId
};
pushList.Add(modelWork);
}
#endregion
#region 即将结课提醒 (管理端)
var queryNotifyManager = GetWorkUserIdByDictRepository("Push_EndClass");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课预警` 学员即将结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId} ({sellerInfo?.EmName ?? ""})\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员即将结课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
pushList.Add(modelWork);
});
}
#endregion
}
else if (shenyuHours <= 0)
{
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
#region 即将结课提醒 (销售端)
if (sellerInfo != null && !string.IsNullOrEmpty(sellerInfo?.WorkUserId ?? ""))
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId}\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员已结课通知",
Platform = 5,
ReceiveId = sellerInfo?.WorkUserId ?? ""
};
pushList.Add(modelWork);
}
#endregion
#region 即将结课提醒 (销售端)
var queryNotifyManager = GetWorkUserIdByDictRepository("Push_EndClass");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`结课通知` 学员已结课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>剩余课时:<font color='warning'>{shenyuHours}</font>\n>是否续班:<font color='{(orderModel.RenewOrderId > 0 ? "info" : "warning")}'>{(orderModel.RenewOrderId > 0 ? "已续班(" + orderModel.RenewOrderId + ")" : "未续班")}</font>\n>关联单号:{guestModel.OrderId} ({sellerInfo?.EmName ?? ""})\n>\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员已结课通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
pushList.Add(modelWork);
});
}
#endregion
}
if (item.CheckStatus == 1)
{
#region 通知缺勤信息
var queryNotifyManager = GetWorkUserIdByDictRepository("Push_Absence");
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
// 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
var path = $"/stuMan/studentManage?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
string markdownContent = $"`缺勤通知` 学员缺勤信息告知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>缺勤时间:<font color='warning'>{Common.ConvertHelper.FormatDate(item.ClassDate)}</font>\n>关联单号:{guestModel.OrderId}\n>班级名称:<font>{classModel?.ClassName??""}</font>\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.SalePeople,
Content = markdownContent,
CoverImg = "",
CreateByName = "系统",
JumpUrl = "",
WorkMsgType = "markdown",
SendTime = DateTime.Now,
SendType = 0,
Title = "学员缺勤通知",
Platform = 5,
ReceiveId = x.WorkUserId
};
pushList.Add(modelWork);
});
}
#endregion
}
DynamicParameters guestParamters = new DynamicParameters();
string guestSql = "UPDATE RB_Order_Guest SET ";
int guestIndex = 0;
foreach (var gItem in orderFileds)
{
if (guestIndex > 0)
{
guestSql += ",";
}
guestSql += string.Format("{0}=@{0} ", gItem.Key);
guestParamters.Add(string.Format("@{0}", gItem.Key), gItem.Value);
guestIndex++;
}
guestSql += string.Format(" WHERE 1=1 AND Id=@Id ");
guestParamters.Add("@Id", item.OrderGuestId);
flag = base.Execute(guestSql, guestParamters) > 0;
if (flag && !string.IsNullOrEmpty(LogContent))
{
AddUserChangeLogRepository(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 3,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
LogContent = LogContent,
School_Id = item.School_Id,
SourceId = guestModel.Id
});
}
//缺勤和请假
if (item.CheckStatus == 1 || item.CheckStatus == 2)
{
flag = CalcGuestHoursRepository(guestModel, item);
}
#region B2B同业推送
if (orderModel != null && orderModel.CustomerId > 0)
{
//最后5个课时做处理
if (completeHours > guestModel.ValidClassHours)
{
//已停课
AddStudentNoticeRepository(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 3,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "停课通知",
Content = "学员" + guestModel.GuestName + " 有效课时消耗完毕,已自动停课,关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
else if (guestModel.TotalHours > guestModel.ValidClassHours && shenyuHours <= 5)
{
//即将欠费
AddStudentNoticeRepository(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 1,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "欠费预警",
Content = "学员" + guestModel.GuestName + " 即将欠费,剩余课时" + shenyuHours + ",关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours <= 5 && shenyuHours >= 0)
{
//即将结课
AddStudentNoticeRepository(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 2,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "结课预警",
Content = "学员" + guestModel.GuestName + " 即将结课,剩余课时" + shenyuHours + ",关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours == 0)
{
//已经结课
AddStudentNoticeRepository(new Model.Entity.Log.RB_B2B_StudentNotice()
{
Id = 0,
Type = 4,
StudentId = guestModel.Id,
CustomerId = orderModel.CustomerId,
Title = "结课通知",
Content = "学员" + guestModel.GuestName + " 已结课,关联单号:" + guestModel.OrderId + "!",
IsLook = 2,
Status = 0,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
UpdateTime = DateTime.Now
});
}
}
#endregion
}
}
if (pushList != null && pushList.Count > 0)
{
new Common.Message.MessageHelper().SendMessage(pushList);
}
return flag;
}
/// <summary>
/// 新增日志
/// </summary>
/// <param name="model"></param>
private void AddUserChangeLogRepository(Model.Entity.Log.RB_User_ChangeLog model)
{
string sql = " INSERT INTO RB_User_ChangeLog(Type,CreateBy,CreateTime,Group_Id,LogContent,School_Id,SourceId) ";
sql += " VALUES(@Type,@CreateBy,@CreateTime,@Group_Id,@LogContent,@School_Id,@SourceId) ";
base.Execute(sql, model);
}
/// <summary>
/// 新增学生消息通知
/// </summary>
/// <param name="model"></param>
private void AddStudentNoticeRepository(Model.Entity.Log.RB_B2B_StudentNotice model)
{
string sql = " INSERT INTO RB_B2B_StudentNotice(Type,StudentId,CustomerId,Title,Content,IsLook,Status,CreateBy,CreateTime,Group_Id,UpdateTime) ";
sql += " VALUES(@Type,@StudentId,@CustomerId,@Title,@Content,@IsLook,@Status,@CreateBy,@CreateTime,@Group_Id,@UpdateTime) ";
base.Execute(sql, model);
}
/// <summary>
/// 计算学员缺课课时
/// </summary>
/// <param name="guestModel"></param>
/// <param name="checkModel"></param>
/// <returns></returns>
public bool CalcGuestHoursRepository(RB_Order_Guest guestModel, RB_Class_Check_ViewModel checkModel)
{
bool flag = true;
//if (guestModel.GuestState == GuestStateEnum.Normal)
//{
// decimal NoFinishHours = 0;
// //获取以前所有签到列表【倒叙】
// var checkList = GetClassCheckListRepository(new RB_Class_Check_ViewModel()
// {
// ClassId = checkModel.ClassId,
// OrderGuestId = checkModel.OrderGuestId,
// EndDate = Common.ConvertHelper.FormatDate(checkModel.ClassDate)
// }).OrderByDescending(qitem => qitem.ClassDate).ToList();
// for (var i = 0; i < checkList.Count; i++)
// {
// if ((checkList[i].CheckStatus == 1) && (checkList[i].MakeUpStatus == 3 || checkList[i].MakeUpStatus == 4 || checkList[i].MakeUpStatus == 1))
// {
// NoFinishHours += checkList[i].CurrentDeductionHours;
// }
// else
// {
// break;
// }
// }
// Dictionary<string, object> fileds = new Dictionary<string, object>();
// Dictionary<string, object> checkFileds = new Dictionary<string, object>();
// //缺勤课时超过12课时更新学员状态为【停课】
// if (NoFinishHours >= Common.Config.AbsentHours)
// {
// fileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), (int)GuestStateEnum.StopClasses);
// checkFileds.Add(nameof(RB_Class_Check_ViewModel.IsAbsentHours), 1);
// checkFileds.Add(nameof(RB_Class_Check_ViewModel.MakeUpStatus), 4);
// var orderModel = orderRepository.GetEntity(guestModel.OrderId);
// var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
// var classModel = classRepository.GetEntity<RB_Class_ViewModel>(guestModel.ClassId);
// var sellerInfo = UserReidsCache.GetUserLoginInfo(orderModel.EnterID);
// #region 欠费提醒(销售)
// var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(orderModel.EnterID);
// if (!string.IsNullOrEmpty(queryTargetWorkId))
// {
// // 学员名称(名称+电话),剩余课时,关联单号,待收金额,班级老师,班级名称
// var path = $"/sale/myOrder?OrderId={guestModel.OrderId}";
// path = HttpUtility.UrlEncode(path);
// string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:连续缺课超过{Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={orderModel.EnterID}&target={path})";
// Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
// {
// CategoryId = PushMessageCategoryEnum.SalePeople,
// Content = markdownContent,
// CoverImg = "",
// CreateByName = "系统",
// JumpUrl = "",
// WorkMsgType = "markdown",
// SendTime = DateTime.Now,
// SendType = 0,
// Title = "学员欠费停课通知",
// Platform = 5,
// ReceiveId = queryTargetWorkId
// };
// List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
// new Common.Message.MessageHelper().SendMessage(pushList);
// }
// #endregion
// #region 欠费提醒(管理者)
// var queryNotifyManager = GetWorkUserIdByDictRepository("Push_Arrears");
// if (queryNotifyManager != null && queryNotifyManager.Count > 0)
// {
// queryNotifyManager.ForEach(x =>
// {
// var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
// path = HttpUtility.UrlEncode(path);
// string markdownContent = $"`停课通知` 学员欠费停课通知\n>**概要信息** \n>学员名称:{guestModel.GuestName}({guestModel.Mobile})\n>当前状态:<font color='warning'>停课</font>\n>关联单号:{guestModel.OrderId}({sellerInfo.AccountName})\n>\n>待收金额:<font color='warning'>¥{shengyuMoney:0.00}</font>\n>停课理由:连续缺课超过{Common.Config.AbsentHours}课时,系统自动停课\n>班级名称:<font>{classModel.ClassName}</font>\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
// Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
// {
// CategoryId = PushMessageCategoryEnum.SalePeople,
// Content = markdownContent,
// CoverImg = "",
// CreateByName = "系统",
// JumpUrl = "",
// WorkMsgType = "markdown",
// SendTime = DateTime.Now,
// SendType = 0,
// Title = "学员欠费停课通知",
// Platform = 5,
// ReceiveId = x.WorkUserId
// };
// List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
// new Common.Message.MessageHelper().SendMessage(pushList);
// });
// }
// #endregion
// }
// if (fileds != null && fileds.Count > 0 && checkFileds != null && checkFileds.Count > 0)
// {
// List<WhereHelper> wheres = new List<WhereHelper>()
// {
// new WhereHelper (nameof(RB_Order_Guest_ViewModel.Id),guestModel.Id),
// };
// flag = order_GuestRepository.Update(fileds, wheres);
// List<WhereHelper> checkWheres = new List<WhereHelper>()
// {
// new WhereHelper (nameof(RB_Class_Check_ViewModel.ClassCheckId),checkModel.ClassCheckId),
// };
// flag = classCheckRepository.Update(checkFileds, checkWheres);
// }
// if (flag && checkModel.CheckStatus == 1 && checkModel.IsUpdateMakeUp != 1)
// {
// //请假的 因为不扣课时, 无法进补课
// flag = student_MakeupRepository.SetStudentMakeUpRepository(new RB_Student_Makeup()
// {
// Id = 0,
// ClassCheckId = checkModel.ClassCheckId,
// ClassDate = checkModel.ClassDate,
// ClassId = checkModel.ClassId,
// CreateBy = checkModel.CreateBy,
// CreateTime = checkModel.CreateTime,
// Group_Id = checkModel.Group_Id,
// MakeUpStatus = 1,
// OrderGuestId = checkModel.OrderGuestId
// });
// }
//}
return flag;
}
/// <summary>
/// 根据订单编号获取订单列表
/// </summary>
/// <param name="OrderIds"></param>
/// <returns></returns>
public List<RB_Order_ViewModel> GetOrderListRepository(string OrderIds)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Order AS A
WHERE 1=1 AND A.OrderId IN({0})
",OrderIds);
return base.Get<RB_Order_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取学员列表
/// </summary>
/// <param name="GuestIds"></param>
/// <returns></returns>
public List<RB_Order_Guest_Extend> GetOrderGuestListRepository(string GuestIds)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM rb_order_guest AS A
WHERE 1=1 AND A.Id IN({0})
",GuestIds);
return base.Get<RB_Order_Guest_Extend>(builder.ToString()).ToList();
}
/// <summary>
/// 获取上课时段
/// </summary>
/// <param name="ClassTimeIds"></param>
/// <returns></returns>
public List<RB_Class_Time_ViewModel> GetClassTimeListRepository(string ClassTimeIds)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Class_Time AS A
WHERE 1=1 AND A.ClassTimeId IN({0})
", ClassTimeIds);
return Get<RB_Class_Time_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级列表
/// </summary>
/// <param name="ClassIds"></param>
/// <returns></returns>
public List<RB_Class_ViewModel> GetClassListRepository(string ClassIds)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Class AS A
WHERE 1=1 AND A.ClassId IN({0})
",ClassIds);
return Get<RB_Class_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取指定人员的企业微信ID
/// </summary>
/// <param name="id">教师编号</param>
/// <returns></returns>
public List<RB_Employee_Extend> GetEmployeeListRepository(string Ids)
{
string sql = $"SELECT EmployeeId,EmName,WorkUserId FROM RB_Employee WHERE EmployeeId IN({Ids})";
return base.Get<RB_Employee_Extend>(sql).ToList();
}
/// <summary>
/// 获取指定DictKey的推送人员信息
/// </summary>
/// <param name="departmentIds"></param>
/// <returns></returns>
public List<RB_Account_ViewModel> GetWorkUserIdByDictRepository(string dictKey)
{
string sql = $"SELECT Id,WorkUserId FROM rb_account a where EXISTS(select DictKey from rb_dictvalue where DictKey='{dictKey}' and FIND_IN_SET(a.Id,Content)>0) and WorkUserId is not null";
return Get<RB_Account_ViewModel>(sql).ToList();
}
}
}
......@@ -122,7 +122,7 @@ namespace Edu.WebApi.Controllers.Applet
{
State = 1,
TotalHours = guestModel?.TotalHours ?? 0,
CompleteHours = CompleteHours,
CompleteHours,
MakeUpHours = guestModel?.MakeUpHours ?? 0,
AbsenceNum = guestModel?.AbsenceNum ?? 0,
LeaveNum = guestModel?.LeaveNum ?? 0,
......
......@@ -58,7 +58,9 @@ namespace Edu.WebApi.Controllers.Course
CourseName = base.ParmJObj.GetStringValue("CourseName"),
ClassNo = base.ParmJObj.GetStringValue("ClassNo"),
CourseSubject = base.ParmJObj.GetInt("CourseSubject"),
ClassScrollType = base.ParmJObj.GetInt("ClassScrollType", 1)
ClassScrollType = base.ParmJObj.GetInt("ClassScrollType", 1),
StartTime = base.ParmJObj.GetStringValue("StartTime"),
EndTime = base.ParmJObj.GetStringValue("EndTime"),
};
query.Group_Id = base.UserInfo.Group_Id;
List<object> result = new List<object>();
......@@ -581,16 +583,6 @@ namespace Edu.WebApi.Controllers.Course
return ApiResult.Success(data: data);
}
/// <summary>
/// 初始化数据
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult InitData()
{
bool flag = classModule.InitDataModule();
return flag ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 修改班级状态
......@@ -1244,27 +1236,6 @@ namespace Edu.WebApi.Controllers.Course
EndDate = list.FirstOrDefault().ClassDate.ToString("yyyy-MM-dd HH:mm:ss"),
ClassTimeId = list.FirstOrDefault().ClassTimeId,
});
#region 验证是否存在学员编号
if (list.Count == 1)
{
if (list[0].OrderGuestId == 0)
{
var guestId = classModule.GetStudentOrderGuestIdByClassTimeIDModule(list[0].StuId, list[0].ClassTimeId);
if (guestId == 0)
{
return ApiResult.ParamIsNull(message: "当前课程不是你的上课内容,请联系前台");
}
else
{
list[0].OrderGuestId = guestId;
}
}
if (checkLogList.Where(x => x.OrderGuestId == list[0].OrderGuestId && x.CheckStatus == list[0].CheckStatus).Any())
{
return ApiResult.Success(message: "check_repeat");
}
}
#endregion
if (list == null || !list.Any())
{
......@@ -1284,23 +1255,6 @@ namespace Edu.WebApi.Controllers.Course
}
#endregion
//获取班级的学员信息
var orderGuestList = classModule.GetOrderGuestListModule(new RB_Order_Guest_ViewModel { Group_Id = groupId, ClassId = list.FirstOrDefault().ClassId, QEffectStatus = 1 });
//判断今天有课没有
var planList = classModule.GetClassPlanEntityModule(new RB_Class_Plan_ViewModel
{
Group_Id = groupId,
ClassId = list.FirstOrDefault().ClassId,
QClassDateStr = Common.ConvertHelper.FormatDate(list.FirstOrDefault().ClassDate),
});
if (planList == null || !planList.Any())
{
return ApiResult.Failed("今日无课程,无须签到");
}
foreach (var item in list)
{
var signModel = checkLogList?.Where(qitem => qitem.ClassDate.ToString("yyyy-MM-dd") == item.ClassDate.ToString("yyyy-MM-dd") && qitem.ClassId == item.ClassId && qitem.OrderGuestId == item.OrderGuestId)?.FirstOrDefault();
......@@ -1311,7 +1265,6 @@ namespace Edu.WebApi.Controllers.Course
item.CreateTime = signModel.CreateTime;
item.CreateBy = Uid;
item.Status = 0;
#region 验证缺席 补课是否已处理
if (signModel.CheckStatus == 1 && item.CheckStatus != 1)
{
......
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