Commit a3a5b121 authored by liudong1993's avatar liudong1993

1 跳课

parent 0e48510b
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Scroll
{
/// <summary>
/// 滚动开班跳课类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Scroll_SkipCourse
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 学生ID
/// </summary>
public int StuId { get; set; }
/// <summary>
/// 订单OrderGuestId
/// </summary>
public int GuestId { get; set; }
/// <summary>
/// 课程ID
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 第几章节
/// </summary>
public int ChapterNo { get; set; }
/// <summary>
/// 删除
/// </summary>
public int Status { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
\ No newline at end of file
...@@ -30,6 +30,11 @@ namespace Edu.Model.ViewModel.Scroll ...@@ -30,6 +30,11 @@ namespace Edu.Model.ViewModel.Scroll
/// </summary> /// </summary>
public string StuIds { get; set; } public string StuIds { get; set; }
/// <summary>
/// 订单GuestIDs
/// </summary>
public string GuestIds { get; set; }
/// <summary> /// <summary>
/// 老师ID /// 老师ID
/// </summary> /// </summary>
......
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Model.Entity.Scroll;
namespace Edu.Model.ViewModel.Scroll
{
/// <summary>
/// 滚动开班跳课扩展类
/// </summary>
public class RB_Scroll_SkipCourse_ViewModel : RB_Scroll_SkipCourse
{
/// <summary>
/// 章节Ids
/// </summary>
public string ChapterNos { get; set; }
/// <summary>
/// 开始的章节
/// </summary>
public int SChapterNo { get; set; }
}
}
\ No newline at end of file
...@@ -225,5 +225,10 @@ namespace Edu.Model.ViewModel.Sell ...@@ -225,5 +225,10 @@ namespace Edu.Model.ViewModel.Sell
/// 学员负责人 /// 学员负责人
/// </summary> /// </summary>
public string StuCreateByName { get; set; } public string StuCreateByName { get; set; }
/// <summary>
/// 预约数量
/// </summary>
public int AppointNum { get; set; }
} }
} }
...@@ -98,6 +98,10 @@ namespace Edu.Module.Course ...@@ -98,6 +98,10 @@ namespace Edu.Module.Course
/// 字典 /// 字典
/// </summary> /// </summary>
private readonly Rb_dictvalueRepository dictvalueRepository = new Rb_dictvalueRepository(); private readonly Rb_dictvalueRepository dictvalueRepository = new Rb_dictvalueRepository();
/// <summary>
/// 跳课记录
/// </summary>
private readonly RB_Scroll_SkipCourseRepository scroll_SkipCourseRepository = new RB_Scroll_SkipCourseRepository();
#region 班次 #region 班次
...@@ -531,7 +535,7 @@ namespace Edu.Module.Course ...@@ -531,7 +535,7 @@ namespace Edu.Module.Course
courseModel.CourseName, courseModel.CourseName,
TempleteList TempleteList
}; };
} }
/// <summary> /// <summary>
/// 获取可预约老师的列表 /// 获取可预约老师的列表
...@@ -2202,5 +2206,93 @@ namespace Edu.Module.Course ...@@ -2202,5 +2206,93 @@ namespace Edu.Module.Course
} }
#endregion #endregion
#region 学员跳课
/// <summary>
/// 学员跳课
/// </summary>
/// <param name="demodel"></param>
/// <param name="chapterNoList"></param>
/// <returns></returns>
public string SetGuestStartChapter(RB_Scroll_SkipCourse_ViewModel demodel, List<int> chapterNoList)
{
var ogModel = order_GuestRepository.GetEntity(demodel.GuestId);
var courseModel = courseRepository.GetEntity(demodel.CourseId);
if (courseModel.IsScrollClass != 1) { return "改学员不是约课学生,无法跳课"; }
//验证是否OK
if (chapterNoList.Contains(1)) {
//从第一次课开始跳 都成立
var sList = scroll_SkipCourseRepository.GetList(new RB_Scroll_SkipCourse_ViewModel() { Group_Id = demodel.Group_Id, StuId = demodel.StuId, GuestId = demodel.GuestId });
if (sList.Any()) {
return "已有跳课数据,无法从第一次课开始跳";
}
}
else
{
#region 验证是否有预约待确认的
var sureList = scroll_AppointmentRepository.GetAppointList(new RB_Scroll_Appointment_ViewModel() { Group_Id = demodel.Group_Id, StuId = demodel.StuId, State = Common.Enum.Course.CourseAppointStateEnum.WaitSure });
if (sureList.Any()) {
return "改学生有待确认的预约,无法设置跳课";
}
#endregion
int MinChapterNo = chapterNoList.Min(x => x);
//我已预约的
var myAppointModel = scroll_AppointmentRepository.GetMyAppointmentNum(demodel.StuId, demodel.Group_Id);
int AppointNum = myAppointModel?.ScrollMinNum ?? 0;//已预约的次数
if (demodel.SChapterNo > 0)
{
if (demodel.SChapterNo != MinChapterNo) {
return "开始课程有误";
}
}
else
{
if (ogModel.CourseChapterNo + 1 + AppointNum != MinChapterNo)
{
return "开始章节有误,请刷新后再试(" + (ogModel.CourseChapterNo + 1 + AppointNum) + ")";
}
}
if (ogModel.CourseChapterNo + chapterNoList.Count() + AppointNum > ogModel.TotalChapterNo) {
return "总章节为" + ogModel.TotalChapterNo + ",当前跳课超过了最大章节";
}
}
//更新订单学生表
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Order_Guest_ViewModel.CourseChapterNo), ogModel.CourseChapterNo + chapterNoList.Count()},
{ nameof(RB_Order_Guest_ViewModel.CompleteHours), ogModel.CompleteHours + chapterNoList.Count() *2}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Order_Guest_ViewModel.Id),
FiledValue = demodel.GuestId,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag = order_GuestRepository.Update(keyValues, wheres);
if (flag)
{
//增加补课记录
foreach (var ChapterNo in chapterNoList)
{
demodel.ChapterNo = ChapterNo;
scroll_SkipCourseRepository.Insert(demodel);
}
if (chapterNoList.Contains(1) || demodel.SChapterNo > 0) {
//更新约课记录的章节 (依次增加)
scroll_AppointmentRepository.UpdateAppointSkipCourse(demodel.StuId, demodel.GuestId, ChapterNum: chapterNoList.Count(), demodel.SChapterNo, demodel.Group_Id);
}
return "";
}
return "出错了,请联系管理员";
}
#endregion
} }
} }
...@@ -23,6 +23,7 @@ using Edu.Repository.Finance; ...@@ -23,6 +23,7 @@ using Edu.Repository.Finance;
using Edu.Repository.Flow; using Edu.Repository.Flow;
using Edu.Repository.Grade; using Edu.Repository.Grade;
using Edu.Repository.Log; using Edu.Repository.Log;
using Edu.Repository.Scroll;
using Edu.Repository.Sell; using Edu.Repository.Sell;
using Edu.Repository.User; using Edu.Repository.User;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
...@@ -126,6 +127,10 @@ namespace Edu.Module.Course ...@@ -126,6 +127,10 @@ namespace Edu.Module.Course
/// 学生仓储层对象 /// 学生仓储层对象
/// </summary> /// </summary>
private readonly RB_StudentRepository studentRepository = new RB_StudentRepository(); private readonly RB_StudentRepository studentRepository = new RB_StudentRepository();
/// <summary>
/// 约课记录
/// </summary>
private readonly RB_Scroll_AppointmentRepository scroll_AppointmentRepository = new RB_Scroll_AppointmentRepository();
/// <summary> /// <summary>
...@@ -498,7 +503,9 @@ namespace Edu.Module.Course ...@@ -498,7 +503,9 @@ namespace Edu.Module.Course
}); });
} }
string GuestIds = string.Join(",", orderstudentList.Select(x => x.Id));
var appointList = scroll_AppointmentRepository.GetAppointList(new Model.ViewModel.Scroll.RB_Scroll_Appointment_ViewModel() { Group_Id = demodel.Group_Id, GuestIds = GuestIds, State = CourseAppointStateEnum.WaitCourse });
foreach (var item in orderstudentList) foreach (var item in orderstudentList)
{ {
var tempAssistList = assistList?.Where(qitem => qitem.StuId == item.StuId)?.ToList(); var tempAssistList = assistList?.Where(qitem => qitem.StuId == item.StuId)?.ToList();
...@@ -536,6 +543,8 @@ namespace Edu.Module.Course ...@@ -536,6 +543,8 @@ namespace Edu.Module.Course
{ {
item.StuSourceIdName = transStudentList?.FirstOrDefault(qitem => qitem.StuId == item.StuSourceId)?.StuName ?? ""; item.StuSourceIdName = transStudentList?.FirstOrDefault(qitem => qitem.StuId == item.StuSourceId)?.StuName ?? "";
} }
item.AppointNum = appointList.Where(x => x.GuestId == item.Id)?.Count() ?? 0;
} }
} }
return orderstudentList; return orderstudentList;
......
...@@ -174,6 +174,10 @@ ORDER BY r.Id desc "; ...@@ -174,6 +174,10 @@ ORDER BY r.Id desc ";
{ {
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.StuId)} in({demodel.StuIds})"; where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.StuId)} in({demodel.StuIds})";
} }
if (!string.IsNullOrEmpty(demodel.GuestIds))
{
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.GuestId)} in({demodel.GuestIds})";
}
if (demodel.CourseId > 0) if (demodel.CourseId > 0)
{ {
where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.CourseId)} ={demodel.CourseId}"; where += $@" and r.{nameof(RB_Scroll_Appointment_ViewModel.CourseId)} ={demodel.CourseId}";
...@@ -232,5 +236,21 @@ WHERE {where} ...@@ -232,5 +236,21 @@ WHERE {where}
ORDER BY r.Id desc "; ORDER BY r.Id desc ";
return Get<RB_Scroll_Appointment_ViewModel>(sql, parameters).ToList(); return Get<RB_Scroll_Appointment_ViewModel>(sql, parameters).ToList();
} }
/// <summary>
/// 更新预约章节
/// </summary>
/// <param name="stuId"></param>
/// <param name="guestId"></param>
/// <param name="ChapterNum"></param>
/// <param name="groupId"></param>
public void UpdateAppointSkipCourse(int stuId, int guestId, int ChapterNum,int SChapterNo, int groupId)
{
string sql = $@"UPDATE rb_scroll_appointment SET ChapterNo = ChapterNo +{ChapterNum} WHERE Group_Id ={groupId} and StuId ={stuId} and GuestId ={guestId} ";
if (SChapterNo > 0) {
sql += $@" and ChapterNo >={SChapterNo}";
}
Execute(sql);
}
} }
} }
using Edu.Common.Enum;
using Edu.Model.Entity.Scroll;
using Edu.Model.ViewModel.Scroll;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;
namespace Edu.Repository.Scroll
{
/// <summary>
/// 滚动开班跳课仓储层
/// </summary>
public class RB_Scroll_SkipCourseRepository : BaseRepository<RB_Scroll_SkipCourse>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_Scroll_SkipCourse_ViewModel> GetList(RB_Scroll_SkipCourse_ViewModel demodel)
{
DynamicParameters parameters = new DynamicParameters();
string where = $@" 1=1 and r.{nameof(RB_Scroll_SkipCourse_ViewModel.Status)} =0";
if (demodel.Group_Id > 0)
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (demodel.StuId > 0)
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.StuId)} ={demodel.StuId}";
}
if (demodel.GuestId > 0)
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.GuestId)} ={demodel.GuestId}";
}
if (demodel.CourseId > 0)
{
where += $@" and r.{nameof(RB_Scroll_SkipCourse_ViewModel.CourseId)} ={demodel.CourseId}";
}
string sql = $@"
SELECT * From RB_Scroll_SkipCourse r
WHERE {where}
ORDER BY r.Id asc ";
return Get<RB_Scroll_SkipCourse_ViewModel>(sql, parameters).ToList();
}
}
}
...@@ -568,5 +568,54 @@ namespace Edu.WebApi.Controllers.Course ...@@ -568,5 +568,54 @@ namespace Edu.WebApi.Controllers.Course
} }
#endregion #endregion
#region 学员管理
/// <summary>
/// 设置学员 跳课
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetGuestStartChapter() {
var userInfo = base.UserInfo;
RB_Scroll_SkipCourse_ViewModel demodel = JsonHelper.DeserializeObject<RB_Scroll_SkipCourse_ViewModel>(base.RequestParm.Msg.ToString());
if (demodel.StuId <= 0 || demodel.GuestId <= 0) {
return ApiResult.ParamIsNull("请传递学生");
}
if (demodel.CourseId <= 0) {
return ApiResult.ParamIsNull("请传递课程ID");
}
if (string.IsNullOrEmpty(demodel.ChapterNos)) {
return ApiResult.ParamIsNull("请选择跳过的章节");
}
List<int> ChapterNoList = JsonHelper.DeserializeObject<List<int>>("[" + demodel.ChapterNos + "]");
int MinSort = ChapterNoList.Min(x => x);
string ShiftSort = "";
for (var i = 0; i < ChapterNoList.Count(); i++)
{
ShiftSort += (MinSort + i) + ",";
}
if (ShiftSort != demodel.ChapterNos + ",")
{
return ApiResult.ParamIsNull("需连续的章节");
}
demodel.Status = 0;
demodel.Group_Id = userInfo.Group_Id;
demodel.CreateBy = userInfo.Id;
demodel.CreateTime = DateTime.Now;
demodel.UpdateBy = userInfo.Id;
demodel.UpdateTime = DateTime.Now;
string msg = scrollClassModule.SetGuestStartChapter(demodel, ChapterNoList);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
#endregion
} }
} }
...@@ -410,7 +410,9 @@ namespace Edu.WebApi.Controllers.Course ...@@ -410,7 +410,9 @@ namespace Edu.WebApi.Controllers.Course
CreateTypeName = item.CreateType.ToName(), CreateTypeName = item.CreateType.ToName(),
item.StuSourceId, item.StuSourceId,
item.StuSourceIdName, item.StuSourceIdName,
item.EnterpriseName item.EnterpriseName,
item.CourseChapterNo,
item.AppointNum
}); });
} }
pageModel.Count = rowsCount; pageModel.Count = rowsCount;
......
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