Commit 29f5cd70 authored by liudong1993's avatar liudong1993

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

parents 9bc7b442 b421f15a
using Edu.Common.Enum;
using Edu.Common.Enum.User;
using System;
using System.Collections.Generic;
using System.Text;
using VT.FW.DB;
namespace Edu.Model.Entity.Customer
{
/// <summary>
/// 学员协助人员实体类
/// </summary>
[Serializable]
/// <summary>
/// 学员协助人员实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Student_Assist
{
......
......@@ -138,7 +138,7 @@ namespace Edu.Model.Entity.Scroll
public int AppointType { get; set; }
/// <summary>
/// 课等级ID (枚举) CourseGradeNo 组成唯一
/// 课等级ID (枚举) CourseGradeNo 组成唯一
/// </summary>
public CourseRateEnum CourseGradeId { get; set; }
......
using Edu.Common.Enum.Course;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Scroll
{
/// <summary>
/// 排课查询
/// </summary>
[Serializable]
public class ScheduleQuery
{
/// <summary>
/// 课程等级
/// </summary>
public CourseRateEnum QCourseRate { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
}
}
using Edu.Common.Enum.Course;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Scroll
{
/// <summary>
/// 排课返回实体类
/// </summary>
[Serializable]
public class SchedulePlanResult
{
/// <summary>
/// 学员RB_Order_Guest 表Id
/// </summary>
public int GuestId { get; set; }
/// <summary>
/// 订单编号
/// </summary>
public int OrderId { get; set; }
/// <summary>
/// 学员名称
/// </summary>
public string GuestName { get; set; }
/// <summary>
/// 上课方式
/// </summary>
public int TeachingMethod { get; set; }
/// <summary>
/// 上课进度
/// </summary>
public decimal ClassProgress { get; set; }
/// <summary>
/// 排课状态
/// </summary>
public int ScheduleStatus { get; set; }
/// <summary>
/// 学管备注
/// </summary>
public string XGRemark { get; set; }
/// <summary>
/// 学员状态
/// </summary>
public GuestStateEnum GuestState { get; set; }
/// <summary>
/// 业务人员
/// </summary>
public int EnterID { get; set; }
/// <summary>
/// 业务人员名称
/// </summary>
public string EnterName { get; set; }
/// <summary>
/// 班主任Id
/// </summary>
public int HeadMasterId { get; set; }
/// <summary>
/// 班主任姓名
/// </summary>
public string HeadMasterName { get; set; }
/// <summary>
/// 报名课程Id
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 报名课程名称
/// </summary>
public string CourseName { get; set; }
public List<PCourseItem> CourseItems { get; set; }
}
/// <summary>
/// 课程项目
/// </summary>
[Serializable]
public class PCourseItem
{
/// <summary>
/// 学员Id,rb_scroll_appointment表GuestId对应rb_order_guest表Id
/// </summary>
public int GuestId { get; set; }
/// <summary>
/// 报名课程ID
/// </summary>
public int LearnCourseId { get; set; }
/// <summary>
/// 约课日期
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// 状态 1待确认 2待上课 3已上课 4缺席 5取消
/// </summary>
public CourseAppointStateEnum State { get; set; }
/// <summary>
/// 签到Id(0-未签到)
/// </summary>
public int ClassCheckId { get; set; }
/// <summary>
/// 课程等级ID (枚举) CourseGradeNo 组成唯一
/// </summary>
public CourseRateEnum CourseGradeId { get; set; }
/// <summary>
/// 课程等级 对应的章节 与CourseGradeId 组成唯一 【hk2022-07-07直接修改为rb_course_chapter 中的chapterNo 需要消课的章节】
/// </summary>
public int CourseGradeNo { get; set; }
/// <summary>
/// 每次课消耗课时
/// </summary>
public decimal CurrentDeductionHours { get; set; }
}
}
using Edu.Model.ViewModel.Scroll;
using Edu.Model.ViewModel.User;
using Edu.Repository.Scroll;
using Edu.Repository.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Edu.Module.Course
{
/// <summary>
/// 排课相关处理类
/// </summary>
public class ScheduleCourseModule
{
/// <summary>
/// 排课相关处理类
/// </summary>
private ScheduleCourseRepository scheduleCourseRepository = new ScheduleCourseRepository();
private RB_AccountRepository accountRepository = new RB_AccountRepository();
/// <summary>
/// 排课计划表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<SchedulePlanResult> GetScheduleCourseStuListModule(ScheduleQuery query)
{
var list = scheduleCourseRepository.GetScheduleCourseStuListRepository(query);
if (list != null && list.Count > 0)
{
List<int> IdList = new List<int>();
var tempHeadMaster = list.Select(qitem => qitem.HeadMasterId).Distinct();
if (tempHeadMaster != null && tempHeadMaster.Count() > 0)
{
IdList.AddRange(tempHeadMaster);
}
var tempEnterId = list.Select(qitem => qitem.EnterID).Distinct();
if (tempEnterId != null && tempEnterId.Count() > 0)
{
IdList.AddRange(tempEnterId);
}
List<RB_Account_ViewModel> empList = new List<RB_Account_ViewModel>();
if (IdList != null && IdList.Count > 0)
{
string Ids = string.Join(",", IdList.Distinct());
empList= accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel() { QIds = Ids });
}
foreach (var item in list)
{
if (item.HeadMasterId > 0)
{
item.HeadMasterName = empList?.FirstOrDefault(qitem => qitem.Id == item.HeadMasterId)?.AccountName ?? "";
}
if (item.EnterID > 0)
{
item.EnterName = empList?.FirstOrDefault(qitem => qitem.Id == item.EnterID)?.AccountName ?? "";
}
}
}
return list;
}
}
}
......@@ -672,119 +672,7 @@ namespace Edu.Module.Course
var list = scroll_AppointmentRepository.GetList(new RB_Scroll_Appointment_ViewModel() { Group_Id = groupId, CourseEndTimeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), State = Common.Enum.Course.CourseAppointStateEnum.WaitCourse });
if (list.Any())
{
//查询所有的上课计划
string planIds = string.Join(",", list.Select(x => x.ClassPlanId).Distinct());
//再查询上课时间
var timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { Group_Id = groupId, QClassPlanIds = planIds });
string Date = DateTime.Now.ToString("yyyy-MM-dd");
string orderGuestIds = string.Join(",", list.Select(x => x.GuestId).Distinct());
var oldCheck = class_CheckRepository.GetClassCheckList(new RB_Class_Check_ViewModel() { Group_Id = groupId, StartDate = Date, EndDate = Date, QOrderGuestIds = orderGuestIds });
foreach (var item in list)
{
//更新约课为已上课
Dictionary<string, object> keyValues = new Dictionary<string, object>()
{
{ nameof(RB_Scroll_Appointment_ViewModel.State), Common.Enum.Course.CourseAppointStateEnum.Coursed}
};
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName = nameof(RB_Scroll_Appointment_ViewModel.Id),
FiledValue = item.Id,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag = scroll_AppointmentRepository.Update(keyValues, wheres);
if (flag)
{
var clist = JsonHelper.DeserializeObject<List<CourseTimeModel>>(item.CourseTime);
//更新 order_guest 表 上课章节 请假也暂时先算完成课时(请假应该是有补课的)
var gmodel = order_GuestRepository.GetEntity(item.GuestId);
if (gmodel != null)
{
//ld 2022-03-08 修改为学员上课最大课时
Dictionary<string, object> keyValues1 = new Dictionary<string, object>();
if (item.CreateTime <= new DateTime(2022, 7, 8))
{
if (gmodel.CourseChapterNo < item.ChapterNo)
{
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.CourseChapterNo), item.ChapterNo);
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.CompleteHours), item.ChapterNo * clist.Sum(x => x.ClassHours));
if (gmodel.TotalChapterNo <= item.ChapterNo)
{
//章节已上完了 修改为 毕业
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.GuestState), Common.Enum.Course.GuestStateEnum.Graduate);
}
}
}
//HK 2022-07-08修改
else
{
if (gmodel.CourseChapterNo < item.CourseGradeNo)
{
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.CourseChapterNo), item.CourseGradeNo);
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.CompleteHours), item.CourseGradeNo * clist.Sum(x => x.ClassHours));
if (gmodel.TotalChapterNo <= item.CourseGradeNo)
{
//章节已上完了 修改为 毕业
keyValues1.Add(nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.GuestState), Common.Enum.Course.GuestStateEnum.Graduate);
}
}
}
List<WhereHelper> wheres1 = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName = nameof(Model.ViewModel.Sell.RB_Order_Guest_ViewModel.Id),
FiledValue = gmodel.Id,
OperatorEnum =OperatorEnum.Equal
}
};
if (keyValues1 != null && keyValues1.Count > 0)
{
order_GuestRepository.Update(keyValues1, wheres1);
}
}
if (item.AppointType != 3)
{
//写入签到数据表 (非重复上课的 才写入签到数据)
var tlist = timeList.Where(x => x.ClassPlanId == item.ClassPlanId).ToList();
foreach (var qitem in tlist)
{
var ccModel = clist.Where(x => x.StartTime == qitem.StartTime).FirstOrDefault();
if (ccModel != null && !oldCheck.Where(x => x.OrderGuestId == item.GuestId && x.ClassTimeId == qitem.ClassTimeId).Any())
{
//没有数据的插入 (有数据情况 =》 请假数据)
class_CheckRepository.Insert(new RB_Class_Check()
{
ClassCheckId = 0,
ClassId = 0,
ClassDate = item.Date,
Status = 0,
ClassRoomId = item.RoomId,
Group_Id = item.Group_Id,
School_Id = qitem.School_Id,
TeacherId = item.TeacherId,
OrderGuestId = item.GuestId,
CheckStatus = 0,
CreateBy = 0,
CreateTime = DateTime.Now,
StudyNum = ccModel.Minutes,
MakeUpStatus = 1,
CurrentDeductionHours = ccModel.ClassHours,
IsAbsentHours = 0,
ClassTimeId = qitem.ClassTimeId
});
}
}
}
}
}
class_CheckRepository.AppointStuCheckRepository(list);
}
}
#endregion
......
This diff is collapsed.
using Edu.Model.Entity.Course;
using Edu.Model.Entity.Grade;
using Edu.Model.ViewModel.Scroll;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Edu.Repository.Scroll
{
/// <summary>
/// 排课
/// </summary>
public class ScheduleCourseRepository:BaseRepository<RB_Class_Course>
{
/// <summary>
/// 排课计划表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<SchedulePlanResult> GetScheduleCourseStuListRepository(ScheduleQuery query)
{
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
FROM rb_order_guest AS A INNER JOIN RB_Order AS B ON A.OrderId=B.OrderId
LEFT JOIN rb_student_orderguest AS C ON A.Id=C.GuestId
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)
");
builder.AppendFormat(" AND EXISTS (SELECT 1 FROM rb_course_chapter WHERE CourseId=B.CourseId AND CourseRate IN({0})) ", (int)query.QCourseRate);
var list = Get<SchedulePlanResult>(builder.ToString()).ToList();
if (list != null && list.Count > 0)
{
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();
StringBuilder appointBuilder = new StringBuilder();
appointBuilder.AppendFormat(@"
SELECT A.Date,A.AccountId,A.State,A.GuestId,A.LearnCourseId,A.CourseGradeId,A.CourseGradeNo,IFNULL(C.ClassCheckId,0) AS ClassCheckId,IFNULL(C.CurrentDeductionHours,0) AS CurrentDeductionHours
FROM rb_scroll_appointment AS A LEFT JOIN rb_class_time AS B ON A.ClassPlanId=B.ClassPlanId
LEFT JOIN rb_class_check AS C ON B.ClassTimeId=C.ClassTimeId AND A.GuestId=C.OrderGuestId
WHERE 1=1 AND A.State NOT IN(5)
");
appointBuilder.AppendFormat(@" AND A.GuestId IN({0}) ", guestIds);
appointBuilder.AppendFormat(@" AND A.LearnCourseId IN ({0}) ", courseIds);
appointBuilder.AppendFormat(@" AND A.CourseGradeId IN ({0}) ", (int)query.QCourseRate);
var courseList = Get<PCourseItem>(appointBuilder.ToString()).ToList();
foreach (var item in list)
{
item.CourseItems = courseList?.Where(qitem => qitem.GuestId == item.GuestId && qitem.LearnCourseId == item.CourseId)?.ToList() ?? new List<PCourseItem>();
if (item.CourseItems != null && item.CourseItems.Count > 0)
{
item.ClassProgress = item.CourseItems.Sum(qitem => qitem.CurrentDeductionHours);
}
}
}
return list;
}
}
}
......@@ -1927,7 +1927,7 @@ namespace Edu.WebApi.Controllers.Course
new ExcelColumn(value:"下单日期"){CellWidth=20,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"下单人"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"市场人员"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课程顾问"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
//new ExcelColumn(value:"课程顾问"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"协助老师"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"班级"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"开班时间"){CellWidth=20,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
......@@ -1994,7 +1994,7 @@ namespace Edu.WebApi.Controllers.Course
new ExcelColumn(value: item.CreateTime.ToString("yyyy-MM-dd HH:mm")){ },
new ExcelColumn(value: (item.CreateBy > 0 ? UserReidsCache.GetUserLoginInfo(item.CreateBy)?.AccountName ?? "" : "")){ },
new ExcelColumn(value: (item.EnterID > 0 ? UserReidsCache.GetUserLoginInfo(item.EnterID)?.AccountName ?? "" : "")){ },
new ExcelColumn(value: (item.CourseConsultantId > 0 ? UserReidsCache.GetUserLoginInfo(item.CourseConsultantId)?.AccountName ?? "" : "")){ },
//new ExcelColumn(value: (item.CourseConsultantId > 0 ? UserReidsCache.GetUserLoginInfo(item.CourseConsultantId)?.AccountName ?? "" : "")){ },
new ExcelColumn(value: (item.HelpEnterId > 0 ? UserReidsCache.GetUserLoginInfo(item.HelpEnterId)?.AccountName ?? "" : "")){ },
new ExcelColumn(value: item.ClassName){ },
new ExcelColumn(value: item.OpenTime.ToString("yyyy-MM-dd")){ },
......@@ -2030,7 +2030,7 @@ namespace Edu.WebApi.Controllers.Course
new ExcelColumn(value: "合计"){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
//new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
......
using Edu.Common.API;
using Edu.Common.Enum.Course;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Scroll;
using Edu.Model.ViewModel.Sell;
using Edu.Module.Course;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
namespace Edu.WebApi.Controllers.Course
{
/// <summary>
/// 排课相关处理类
/// </summary>
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class ScheduleCourseController : BaseController
{
private ScheduleCourseModule scheduleCourse = new ScheduleCourseModule();
/// <summary>
/// 获取待排课学员
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetScheduleCourseStu()
{
var userInfo = base.UserInfo;
var query = new ScheduleQuery()
{
QCourseRate = (CourseRateEnum)base.ParmJObj.GetInt("CourseRate"),
};
if (query.QCourseRate <= 0)
{
return ApiResult.ParamIsNull(message: "请选择课程等级");
}
query.Group_Id = userInfo.Group_Id;
var dataList = scheduleCourse.GetScheduleCourseStuListModule(query);
List<object> list = new List<object>();
foreach (var item in dataList)
{
list.Add(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?.Select(qitem => new
{
Date = Common.ConvertHelper.FormatDate(qitem.Date),
qitem.State,
StateName = qitem.State.ToName(),
qitem.ClassCheckId,
ChapterId = qitem.CourseGradeNo,
})
});
}
return ApiResult.Success(data: list);
}
}
}
......@@ -1131,27 +1131,6 @@ namespace Edu.WebApi.Controllers.Course
#endregion
#region 初始化约课数据
/// <summary>
/// 初始化约课数据
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult InitializeAppointmentData()
{
var userInfo = base.UserInfo;
string msg = scrollClassModule.InitializeAppointmentData(userInfo.Group_Id);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
#endregion
#region 学员管理
......
......@@ -407,7 +407,7 @@ namespace Edu.WebApi.Controllers.User
{
new ExcelColumn("学生"){ CellWidth=15,Rowspan=2},
new ExcelColumn("电话"){ CellWidth=15,Rowspan=2},
new ExcelColumn("课程顾问"){ CellWidth=15,Rowspan=2},
//new ExcelColumn("课程顾问"){ CellWidth=15,Rowspan=2},
new ExcelColumn("班主任"){ CellWidth=10,Rowspan=2},
new ExcelColumn("合同时间"){ CellWidth=15,Rowspan=2},
new ExcelColumn("所报课程"){ CellWidth=20,Rowspan=2},
......@@ -442,7 +442,7 @@ namespace Edu.WebApi.Controllers.User
{
ExcelRows = new List<ExcelColumn>()
{
new ExcelColumn(),
//new ExcelColumn(),
new ExcelColumn(),
new ExcelColumn(),
new ExcelColumn(),
......@@ -508,7 +508,7 @@ namespace Edu.WebApi.Controllers.User
}
}
}
columns.Add(new ExcelColumn(courseManager));
//columns.Add(new ExcelColumn(courseManager));
columns.Add(new ExcelColumn(teacherNamager));
columns.Add(new ExcelColumn(item.ContractSTime));
columns.Add(new ExcelColumn(item.CourseName));
......
......@@ -922,7 +922,7 @@ namespace Edu.WebApi.Controllers.User
ExcelRows = new List<ExcelColumn>()
{
new ExcelColumn("昵称"){ CellWidth=20},
new ExcelColumn("课程顾问"){ CellWidth=10},
//new ExcelColumn("课程顾问"){ CellWidth=10},
new ExcelColumn("协助老师"){ CellWidth=10},
new ExcelColumn("是否报名"){ CellWidth=10},
new ExcelColumn("性别"){ CellWidth=10},
......@@ -973,7 +973,7 @@ namespace Edu.WebApi.Controllers.User
ExcelRows = new List<ExcelColumn>()
{
new ExcelColumn(item.StuName),
new ExcelColumn(course),
//new ExcelColumn(course),
new ExcelColumn(teacher),
new ExcelColumn(orderStr),
new ExcelColumn(item.StuSex==0?"男":"女"),
......
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