Commit a8c978af authored by liudong1993's avatar liudong1993

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

parents f2c48a7d 4b230b4a
using Edu.Common.Plugin;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Common.Enum.Course
{
......@@ -64,5 +61,17 @@ namespace Edu.Common.Enum.Course
/// </summary>
[EnumField("其他")]
OTHER = 9,
/// <summary>
/// 一对一中教
/// </summary>
[EnumField("一对一中教")]
OneCH = 10,
/// <summary>
/// 一对一外教
/// </summary>
[EnumField("一对一外教")]
OneFor = 11,
}
}
......@@ -317,6 +317,11 @@ namespace Edu.Model.ViewModel.Grade
/// </summary>
public decimal TotalClassHours { get;set; }
/// <summary>
/// 查询vip课程 (1- N1-N5,2-一对一)
/// </summary>
public int QIsVipCourse { get; set; }
}
/// <summary>
......
......@@ -200,5 +200,10 @@ namespace Edu.Model.ViewModel.Reserve
/// 订单数量
/// </summary>
public int OrderCount { get; set; }
/// <summary>
/// 查询没有开班的约课信息
/// </summary>
public int IsQNotReserveClassId { get; set; }
}
}
......@@ -80,10 +80,20 @@ namespace Edu.Model.ViewModel.Scroll
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 课程等级
/// </summary>
public CourseRateEnum CourseRate { get; set; }
/// <summary>
/// 上课记录
/// </summary>
public List<PCourseItem> CourseItems { get; set; }
/// <summary>
/// VIP总课次
/// </summary>
public int TotalTimes { get; set; }
}
......
......@@ -316,12 +316,11 @@ namespace Edu.Module.Duty
queryNotifyManager.ForEach(x =>
{
var path = $"/sale/orderStatistics?OrderId={model.Id}";//这个地址是欠费的通知地址,后续有H5需要改
var path = $"/h5page/TrialClass?Id={model.Id}";//这个地址是欠费的通知地址,后续有H5需要改
path = HttpUtility.UrlEncode(path);
string markdownContent = $@"`试听课通知` 学员试听课通知\n>**概要信息** \n>学员名称:{guestModel.StuName}({guestModel.StuRealMobile})\n>
预约时间:<font color='warning'>{model.ReservationDate.ToString("yyyy-MM-dd")}\n>
试听需求:<font color='warning'>{model.Demand}\n>
请点击:[查看详情]({Config.ErpUrl}/autologin?loginId={x.Id}&target={path})";
string newUrl = $"{Config.ErpUrl}/login?loginId={x.Id}&target={path}";
Common.Plugin.LogHelper.WriteInfo("试听推送::" + newUrl);
string markdownContent = $"<font color='info'>学员试听课通知</font>\n>**概要信息** \n>学员名称:<font color='warning'>{guestModel.StuName}({guestModel.StuRealMobile})</font>\n>预约时间:<font color='warning'>{Common.ConvertHelper.FormatDate(model.ReservationDate)}</font>\n>试听需求:<font color='warning'>{Common.Plugin.StringHelper.FilterHtml(model.Demand)}次课)</font>\n>请 点 击:[查看详情]({newUrl})";
Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
{
CategoryId = PushMessageCategoryEnum.ReserveClass,
......@@ -338,6 +337,7 @@ namespace Edu.Module.Duty
};
List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
new Common.Message.MessageHelper().SendMessage(pushList);
LogHelper.WriteInfo("学员试听课通知:" + JsonHelper.Serialize(pushList)) ;
});
}
#endregion
......
......@@ -76,7 +76,8 @@ WHERE 1=1
if (query.ClassScrollType > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.ClassScrollType), query.ClassScrollType);
if (query.ClassScrollType == 2) {
if (query.ClassScrollType == 2)
{
//滚动开班 默认查询当月的
builder.AppendFormat(" AND A.{0}='{1}' ", nameof(RB_Class_ViewModel.ScrollMonth), DateTime.Now.ToString("yyyy-MM"));
}
......@@ -257,7 +258,7 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id >-1)
if (query.School_Id > -1)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.School_Id), query.School_Id);
}
......@@ -405,6 +406,18 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.CouseId), query.CouseId);
}
if (query.QIsVipCourse > 0)//2024-08-30 add by:w
{
if (query.QIsVipCourse == 1)
{
builder.AppendFormat(" and B.CourseRate not IN (10,11) ");
}
else if (query.QIsVipCourse == 2)
{
builder.AppendFormat(" and B.CourseRate IN (10,11) ");
}
}
//课程分类编号
if (query.CateId > 0)
{
......@@ -496,7 +509,7 @@ WHERE 1=1
return GetPage<RB_Class_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
}
/// <summary>
/// 班级类型统计
/// </summary>
......
......@@ -31,7 +31,7 @@ namespace Edu.Repository.Reserve
builder.Append(@"
SELECT A.*,IFNULL(B.StuName,'') AS VisitorName,C.ClassDate,C.ClassTime,C.EndTime,C.ClassContent,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(E.RoomName,'') AS RoomName
,IFNULL(B.StuTel,'') AS StuTel,IFNULL(F.LessonName,'') AS LessonName,IFNULL(B.QQ,'') AS QQ,IFNULL(B.WeChatNo,'') AS WeChatNo,C.ReserveType,C.ClassPlanId
,IFNULL(G.OrderCount,0) AS OrderCount,c.ClassRoomId,C.TeacherId,c.TrialLessonId
,IFNULL(G.OrderCount,0) AS OrderCount,c.ClassRoomId,C.TeacherId,c.TrialLessonId,st.StuName
FROM RB_Visitor_Reserve AS A LEFT JOIN rb_student AS B ON A.Visitor_Id=B.StuId
LEFT JOIN
(
......@@ -43,6 +43,7 @@ FROM RB_Visitor_Reserve AS A LEFT JOIN rb_student AS B ON A.Visitor_Id=B.StuId
LEFT JOIN rb_teacher AS D ON C.TeacherId=D.TId
LEFT JOIN rb_class_room AS E ON C.ClassRoomId=E.RoomId
LEFT JOIN rb_triallesson AS F ON C.TrialLessonId=F.Id
LEFT JOIN rb_student as st on st.StuId=a.Visitor_Id
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Status), (int)DateStateEnum.Normal);
......@@ -52,13 +53,27 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Group_Id), query.Group_Id);
}
if (!string.IsNullOrEmpty(query.StartClassDate))
if (query.IsQNotReserveClassId == 1)
{
builder.AppendFormat(" AND C.{0}>='{1}' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.StartClassDate);
if (!string.IsNullOrEmpty(query.StartClassDate))
{
builder.AppendFormat(" AND A.{0}>='{1}' ", nameof(RB_Visitor_Reserve_Extend.ReservationDate), query.StartClassDate);
}
if (!string.IsNullOrEmpty(query.EndClassDate))
{
builder.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Visitor_Reserve_Extend.ReservationDate), query.EndClassDate);
}
}
if (!string.IsNullOrEmpty(query.EndClassDate))
else
{
builder.AppendFormat(" AND C.{0}<='{1} 23:59:59' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.EndClassDate);
if (!string.IsNullOrEmpty(query.StartClassDate))
{
builder.AppendFormat(" AND C.{0}>='{1}' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.StartClassDate);
}
if (!string.IsNullOrEmpty(query.EndClassDate))
{
builder.AppendFormat(" AND C.{0}<='{1} 23:59:59' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.EndClassDate);
}
}
if (query.TeacherId > 0)
{
......@@ -99,6 +114,10 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.ReserveClassId), query.ReserveClassId);
}
if (query.IsQNotReserveClassId == 1)
{
builder.AppendFormat(" AND A.{0}=0 ", nameof(RB_Visitor_Reserve_Extend.ReserveClassId));
}
}
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Visitor_Reserve_Extend.Id));
return GetPage<RB_Visitor_Reserve_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
......
......@@ -22,14 +22,28 @@ namespace Edu.Repository.Scroll
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.Id AS GuestId,A.OrderId,A.GuestName,A.GuestState,IFNULL(B.EnterID,0) AS EnterID,IFNULL(D.AssistId,0) AS HeadMasterId,B.CourseId
SELECT A.Id AS GuestId,A.OrderId,A.GuestName,A.GuestState,IFNULL(B.EnterID,0) AS EnterID,IFNULL(D.AssistId,0) AS HeadMasterId,B.CourseId,A.TotalHours AS TotalTimes
,IFNULL(cs.CourseName,'') AS CourseName,IFNULL(cs.CourseRate,0) AS CourseRate
FROM rb_order_guest AS A INNER JOIN RB_Order AS B ON A.OrderId=B.OrderId
INNER JOIN rb_class AS E ON B.ClassId=E.ClassId
INNER JOIN rb_student_orderguest AS C ON A.Id=C.GuestId
INNER JOIN RB_Course AS cs ON B.CourseId=cs.CourseId
LEFT JOIN rb_student_assist AS D ON (C.Student_Id=D.StuId AND D.AssistType=4)
WHERE 1=1 AND B.OrderState=1 AND A.GuestState in(1,5) AND B.OrderType=1 AND E.ClassScrollType=2
");
builder.AppendFormat(" AND EXISTS (SELECT 1 FROM rb_course_chapter WHERE CourseId=B.CourseId AND CourseRate IN({0})) ", (int)query.QCourseRate);
if (query.QCourseRate == Common.Enum.Course.CourseRateEnum.N5
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N4
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N3
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N2
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N1)
{
builder.AppendFormat(" AND EXISTS (SELECT 1 FROM rb_course_chapter WHERE CourseId=B.CourseId AND CourseRate IN({0})) ", (int)query.QCourseRate);
}
else
{
builder.AppendFormat(" AND cs.CourseRate IN({0}) ", (int)query.QCourseRate);
}
var list = Get<SchedulePlanResult>(builder.ToString()).ToList();
if (list != null && list.Count > 0)
......@@ -37,12 +51,11 @@ WHERE 1=1 AND B.OrderState=1 AND A.GuestState in(1,5) AND B.OrderType=1 AND E.Cl
string guestIds = string.Join(",", list.Select(qitem => qitem.GuestId));
string courseIds = string.Join(",", list.Select(qitem => qitem.CourseId));
string courseChapterSql = string.Format(@"
SELECT CourseId,ChapterGradeNo
FROM rb_course_chapter
WHERE CourseId IN({0}) AND CourseRate IN({1}) ", courseIds, (int)query.QCourseRate);
var chapterList= Get<RB_Course_Chapter>(courseChapterSql).ToList();
// string courseChapterSql = string.Format(@"
//SELECT CourseId,ChapterGradeNo
//FROM rb_course_chapter
//WHERE CourseId IN({0}) AND CourseRate IN({1}) ", courseIds, (int)query.QCourseRate);
// var chapterList= Get<RB_Course_Chapter>(courseChapterSql).ToList();
StringBuilder appointBuilder = new StringBuilder();
......
......@@ -54,7 +54,8 @@ namespace Edu.WebApi.Controllers.Course
JoinStartTime = base.ParmJObj.GetStringValue("JoinStartTime"),
JoinEndTime = base.ParmJObj.GetStringValue("JoinEndTime"),
CourseSubject = base.ParmJObj.GetInt("CourseSubject"),
ClassScrollType = base.ParmJObj.GetInt("ClassScrollType", 1)
ClassScrollType = base.ParmJObj.GetInt("ClassScrollType", 1),
QIsVipCourse = base.ParmJObj.GetInt("QIsVipCourse", 0),
};
dmodel.School_Id = -1;
var schoolId = base.ParmJObj.GetStringValue("School_Id");
......
using Edu.Common.API;
using Aliyun.Acs.Core.Retry.BackoffStrategy;
using Edu.Common.API;
using Edu.Common.Enum.Course;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Scroll;
......@@ -7,6 +8,7 @@ using Edu.Module.Course;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
......@@ -41,33 +43,46 @@ namespace Edu.WebApi.Controllers.Course
}
query.Group_Id = userInfo.Group_Id;
var dataList = scheduleCourse.GetScheduleCourseStuListModule(query);
List<object> list = new List<object>();
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
foreach (var item in dataList)
{
list.Add(new
Dictionary<string,object> jobj =new Dictionary<string, object> ();
jobj.Add("OrderId", item.OrderId);
jobj.Add("GuestId", item.GuestId);
jobj.Add("GuestName", item.GuestName);
jobj.Add("GuestState", (int)item.GuestState);
jobj.Add("CourseName", item.CourseName);
jobj.Add("CourseRate", (int)item.CourseRate);
jobj.Add("GuestStateName", item.GuestState.ToName());
jobj.Add("HeadMasterId", item.HeadMasterId);
jobj.Add("HeadMasterName", !string.IsNullOrEmpty(item.HeadMasterName) ? item.HeadMasterName : "");
jobj.Add("EnterID", item.EnterID);
jobj.Add("EnterName", !string.IsNullOrEmpty(item.EnterName) ? item.EnterName : "");
jobj.Add("TeachingMethod", (item.TeachingMethod > 0 ? item.TeachingMethod : -1));
jobj.Add("ClassProgress", (item.ClassProgress > 0 ? item.ClassProgress : 0));
jobj.Add("ScheduleStatus", (item.ScheduleStatus > 0 ? item.ScheduleStatus : -1));
jobj.Add("XGRemark", (!string.IsNullOrEmpty(item.XGRemark) ? item.XGRemark : ""));
jobj.Add("CourseItems", item?.CourseItems?.OrderBy(qitem => qitem.CourseGradeNo)?.Select(qitem => new
{
item.OrderId,
item.GuestId,
item.GuestName,
item.GuestState,
GuestStateName = item.GuestState.ToName(),
item.HeadMasterId,
HeadMasterName = !string.IsNullOrEmpty(item.HeadMasterName) ? item.HeadMasterName : "",
item.EnterID,
EnterName = !string.IsNullOrEmpty(item.EnterName) ? item.EnterName : "",
TeachingMethod = item.TeachingMethod > 0 ? item.TeachingMethod : -1,
ClassProgress = item.ClassProgress > 0 ? item.ClassProgress : 0,
ScheduleStatus=item.ScheduleStatus>0?item.ScheduleStatus:-1,
XGRemark = !string.IsNullOrEmpty(item.XGRemark) ? item.XGRemark : "",
CourseItems = item?.CourseItems?.OrderBy(qitem=>qitem.CourseGradeNo)?.Select(qitem => new
{
Date = Common.ConvertHelper.FormatDate(qitem.Date),
qitem.State,
StateName = qitem.State.ToName(),
qitem.ClassCheckId,
ChapterId = qitem.CourseGradeNo,
})
});
Date = Common.ConvertHelper.FormatDate(qitem.Date),
qitem.State,
StateName = qitem.State.ToName(),
qitem.ClassCheckId,
ChapterId = qitem.CourseGradeNo,
}));
if (query.QCourseRate == Common.Enum.Course.CourseRateEnum.N5
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N4
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N3
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N2
|| query.QCourseRate == Common.Enum.Course.CourseRateEnum.N1)
{
list.Add(jobj);
}
else
{
jobj.Add("TotalTimes", item.TotalTimes);
list.Add(jobj);
}
}
return ApiResult.Success(data: list);
}
......
......@@ -50,7 +50,8 @@ namespace Edu.WebApi.Controllers.Duty
IsQueryAll = base.ParmJObj.GetInt("IsQueryAll"),
Visitor_Id = base.ParmJObj.GetInt("Visitor_Id"),
ReserveClassId = base.ParmJObj.GetInt("ReserveClassId"),
IsReserve = base.ParmJObj.GetInt("IsReserve", 1),
IsReserve = base.ParmJObj.GetInt("IsReserve", 1),
IsQNotReserveClassId = base.ParmJObj.GetInt("IsQNotReserveClassId", 0),
};
if (query.IsQueryAll != 1)
{
......@@ -161,7 +162,7 @@ namespace Edu.WebApi.Controllers.Duty
model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = System.DateTime.Now;
model.Status = Common.Enum.DateStateEnum.Normal;
if (model.TeacherId == 0 || model.ClassRoomId == 0 || model.TrialLessonId == 0 || string.IsNullOrWhiteSpace(model.EndTime) || string.IsNullOrWhiteSpace(model.ClassTime) || model.ClassDate < Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")))
if (model.TeacherId == 0 || model.ClassRoomId == 0 || model.TrialLessonId == 0 || string.IsNullOrWhiteSpace(model.EndTime) || string.IsNullOrWhiteSpace(model.ClassTime))
{
return ApiResult.ParamIsNull();
}
......
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