Commit 27d9e2bc authored by 罗超's avatar 罗超

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

parents 8f5363e5 c6735683
...@@ -3,6 +3,7 @@ using Edu.Common; ...@@ -3,6 +3,7 @@ using Edu.Common;
using Edu.Common.API; using Edu.Common.API;
using Edu.Common.Enum; using Edu.Common.Enum;
using Edu.Common.Enum.Customer; using Edu.Common.Enum.Customer;
using Edu.Common.Enum.User;
using Edu.Model.CacheModel; using Edu.Model.CacheModel;
using Edu.Repository.Customer; using Edu.Repository.Customer;
using Edu.Repository.User; using Edu.Repository.User;
...@@ -161,6 +162,8 @@ namespace Edu.Cache.User ...@@ -161,6 +162,8 @@ namespace Edu.Cache.User
DeptName = model.DeptName, DeptName = model.DeptName,
PostName = model.PostName, PostName = model.PostName,
Email = model.Email, Email = model.Email,
IsTenCccUser = model.IsTenCccUser,
IsCourseConsultant = (model != null && model.UserRole == UserRoleEnum.CourseConsultant) ? 1 : 0,
}; };
UserInfoSet(Cache.CacheKey.User_Login_Key + Id.ToString(), userInfo, Common.Config.JwtExpirTime); UserInfoSet(Cache.CacheKey.User_Login_Key + Id.ToString(), userInfo, Common.Config.JwtExpirTime);
} }
......
...@@ -57,5 +57,10 @@ namespace Edu.Model.Entity.Customer ...@@ -57,5 +57,10 @@ namespace Edu.Model.Entity.Customer
/// 删除状态(0-正常,1-禁用) /// 删除状态(0-正常,1-禁用)
/// </summary> /// </summary>
public DateStateEnum Status { get; set; } public DateStateEnum Status { get; set; }
/// <summary>
/// 跟进类型(见枚举)
/// </summary>
public Common.Enum.User.AssistTypeEnum AssistType { get; set; }
} }
} }
...@@ -216,5 +216,35 @@ namespace Edu.Model.Entity.User ...@@ -216,5 +216,35 @@ namespace Edu.Model.Entity.User
/// 学员真实电话号码 /// 学员真实电话号码
/// </summary> /// </summary>
public string StuRealMobile { get; set; } public string StuRealMobile { get; set; }
/// <summary>
/// 咨询日期
/// </summary>
public DateTime? ConsultDate { get; set; }
/// <summary>
/// 规划课程及报价
/// </summary>
public string PlanPrice { get; set; }
/// <summary>
/// 基本情况
/// </summary>
public string BaseCondition { get; set; }
/// <summary>
/// 需求点
/// </summary>
public string DemandPoint { get; set; }
/// <summary>
/// 抗拒点
/// </summary>
public string ResistPoint { get; set; }
/// <summary>
/// 咨询结果
/// </summary>
public string ConsultingResults { get; set; }
} }
} }
...@@ -19,5 +19,10 @@ namespace Edu.Model.ViewModel.Course ...@@ -19,5 +19,10 @@ namespace Edu.Model.ViewModel.Course
/// 章节编号 /// 章节编号
/// </summary> /// </summary>
public string QChapterIds { get; set; } public string QChapterIds { get; set; }
/// <summary>
/// 小于等于当前章节
/// </summary>
public int LessThanOrEqualChapterId { get; set; }
} }
} }
...@@ -14,5 +14,25 @@ namespace Edu.Model.ViewModel.Customer ...@@ -14,5 +14,25 @@ namespace Edu.Model.ViewModel.Customer
/// 学员编号【查询使用】 /// 学员编号【查询使用】
/// </summary> /// </summary>
public string QStuIds { get; set; } public string QStuIds { get; set; }
/// <summary>
/// 月份
/// </summary>
public string MonthStr { get; set; }
/// <summary>
/// 学员数量
/// </summary>
public int StuNum { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public string STime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public string ETime { get; set; }
} }
} }
...@@ -14,5 +14,21 @@ namespace Edu.Model.ViewModel.Exam ...@@ -14,5 +14,21 @@ namespace Edu.Model.ViewModel.Exam
/// 单词考试详情 /// 单词考试详情
/// </summary> /// </summary>
public List<RB_StuWords_ExamDetail_Extend> ExamDetailList { get; set; } public List<RB_StuWords_ExamDetail_Extend> ExamDetailList { get; set; }
/// <summary>
/// 学习分钟数
/// </summary>
public string ExamMinutes
{
get
{
string str = "";
if (this.ExamStartTime != null && this.ExamEndTime != null)
{
str = Common.ConvertHelper.CalcMinutes(Convert.ToDateTime(this.ExamStartTime), Convert.ToDateTime(this.ExamEndTime)).ToString();
}
return str;
}
}
} }
} }
...@@ -285,6 +285,48 @@ namespace Edu.Model.ViewModel.User ...@@ -285,6 +285,48 @@ namespace Edu.Model.ViewModel.User
/// </summary> /// </summary>
public decimal CompleteHours { get; set; } public decimal CompleteHours { get; set; }
#region 统计数量
/// <summary>
/// 开始跟进时间
/// </summary>
public string SFTime { get; set; }
/// <summary>
/// 结束跟进时间
/// </summary>
public string EFTime { get; set; }
/// <summary>
/// 根进查询类型 1范围内有 2范围内没有s
/// </summary>
public int Q_FType { get; set; }
/// <summary>
/// 学习中数量
/// </summary>
public int StudyNum { get; set; }
/// <summary>
/// 毕业数量
/// </summary>
public int GraduateNum { get; set; }
/// <summary>
/// 停课数量
/// </summary>
public int SuspendNum { get; set; }
/// <summary>
/// 退学数量
/// </summary>
public int DropOutNum { get; set; }
/// <summary>
/// 报名情况 1已报名 2未成交
/// </summary>
public int Q_EnrollState { get; set; }
#endregion
/// <summary> /// <summary>
/// 是否存在课程顾问(1-存在,2-不存在) /// 是否存在课程顾问(1-存在,2-不存在)
/// </summary> /// </summary>
......
...@@ -207,11 +207,6 @@ namespace Edu.Module.Course ...@@ -207,11 +207,6 @@ namespace Edu.Module.Course
/// </summary> /// </summary>
private readonly RB_Class_FeedBackRepository class_FeedBackRepository = new RB_Class_FeedBackRepository(); private readonly RB_Class_FeedBackRepository class_FeedBackRepository = new RB_Class_FeedBackRepository();
/// <summary>
/// 学员单词预习仓储层对象
/// </summary>
private readonly RB_StuWords_PrepRepository stuWords_PrepRepository = new RB_StuWords_PrepRepository();
/// <summary> /// <summary>
/// 获取班级列表 /// 获取班级列表
/// </summary> /// </summary>
...@@ -4918,15 +4913,6 @@ namespace Edu.Module.Course ...@@ -4918,15 +4913,6 @@ namespace Edu.Module.Course
{ {
ReviewNum = course_WordsRepository.GetCourseWordsNum(courseId, ReviewCourseNo, groupId); ReviewNum = course_WordsRepository.GetCourseWordsNum(courseId, ReviewCourseNo, groupId);
} }
decimal TotalScore = 0;
if (Stu_Account_Id > 0)
{
TotalScore= stuWords_PrepRepository.GetStuWordsPrepScoreRepository(new RB_StuWords_Prep_Extend()
{
CourseId = courseId,
Stu_Account_Id = Stu_Account_Id
});
}
return new return new
{ {
NextWord = NextNum, NextWord = NextNum,
...@@ -4934,7 +4920,7 @@ namespace Edu.Module.Course ...@@ -4934,7 +4920,7 @@ namespace Edu.Module.Course
ReviewWord = ReviewNum, ReviewWord = ReviewNum,
ReviewCourseNo, ReviewCourseNo,
CourseId = courseId, CourseId = courseId,
TotalScore ClassId=classId,
}; };
} }
......
This diff is collapsed.
...@@ -815,5 +815,34 @@ namespace Edu.Module.User ...@@ -815,5 +815,34 @@ namespace Edu.Module.User
studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), item.StuId)); studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), item.StuId));
} }
} }
/// <summary>
/// 更新学员咨询信息
/// </summary>
/// <param name="demodel"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetStudentConsultResults(RB_Student_ViewModel demodel, UserInfo userInfo)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Student_ViewModel.ConsultDate), demodel.ConsultDate},
{ nameof(RB_Student_ViewModel.PlanPrice), demodel.PlanPrice},
{ nameof(RB_Student_ViewModel.BaseCondition), demodel.BaseCondition},
{ nameof(RB_Student_ViewModel.DemandPoint), demodel.DemandPoint},
{ nameof(RB_Student_ViewModel.ResistPoint), demodel.ResistPoint},
{ nameof(RB_Student_ViewModel.ConsultingResults), demodel.ConsultingResults},
{ nameof(RB_Student_ViewModel.UpdateBy), userInfo.Id},
{ nameof(RB_Student_ViewModel.UpdateTime), DateTime.Now}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName = nameof(RB_Student_ViewModel.StuId),
FiledValue = demodel.StuId,
OperatorEnum =OperatorEnum.Equal
}
};
bool flag = studentRepository.Update(keyValues, wheres);
return flag ? "" : "出错了,请联系管理员";
}
} }
} }
using Edu.AOP.CustomerAttribute;
using Edu.Common.Enum;
using Edu.Common.Enum.System;
using Edu.Common.Enum.User;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.ViewModel.Customer;
using Edu.Model.ViewModel.Mall;
using Edu.Model.ViewModel.User;
using Edu.Repository.Customer;
using Edu.Repository.Mall;
using Edu.Repository.Reserve;
using Edu.Repository.System;
using Edu.Repository.User;
using System;
using System.Collections.Generic;
using System.Linq;
using VT.FW.DB;
namespace Edu.Module.User
{
/// <summary>
/// 学生统计处理类
/// </summary>
public class StudentStatModule
{
/// <summary>
/// 学生仓储层对象
/// </summary>
private readonly RB_StudentRepository studentRepository = new RB_StudentRepository();
/// <summary>
/// 学员订单关联表仓储层
/// </summary>
private readonly RB_Student_OrderGuestRepository student_OrderGuestRepository = new RB_Student_OrderGuestRepository();
/// <summary>
/// 学员跟进
/// </summary>
private readonly RB_Student_FollowRepository followRepository = new RB_Student_FollowRepository();
#region 学员跟进
/// <summary>
/// 学员跟进分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="demodel"></param>
/// <returns></returns>
public object GetStudentFollowUpPageList(int pageIndex, int pageSize, out long count, RB_Student_ViewModel demodel)
{
object Robj = new object();
var slist = student_OrderGuestRepository.GetStudentFollowUpPageList(pageIndex, pageSize, out count, demodel);
if (slist.Any()) {
string stuIds = string.Join(",", slist.Select(x => x.StuId));
//查询学生每月的跟进情况
var flist = followRepository.GetStudentFollowUpMonthList(stuIds, demodel.Group_Id);
//查询续课 学员介绍
var xlist = followRepository.GetStudentRenewMonthList(stuIds, demodel.Group_Id);//续费
var zlist = followRepository.GetStudentIntroductionMonthList(stuIds, demodel.Group_Id);//转介绍
//查询汇总数据
var TotalData = student_OrderGuestRepository.GetStudentFollowUpStat(demodel);
List<object> RList = new List<object>();
foreach (var item in slist) {
//组合所有的月份
var MonthList = flist.Where(x => x.StuId == item.StuId).Select(x => x.MonthStr).ToList();
MonthList.AddRange(xlist.Where(x => x.StuId == item.StuId).Select(x => x.MonthStr).ToList());
MonthList.AddRange(zlist.Where(x => x.StuId == item.StuId).Select(x => x.MonthStr).ToList());
MonthList = MonthList.Distinct().OrderBy(x => x).ToList();
List<object> MonthObjList = new List<object>();
foreach (var month in MonthList) {
var xmodel = xlist.Where(x => x.StuId == item.StuId && x.MonthStr == month).FirstOrDefault();
var zmodel = zlist.Where(x => x.StuId == item.StuId && x.MonthStr == month).FirstOrDefault();
var teacherModel = flist.Where(x => x.StuId == item.StuId && x.MonthStr == month && x.AssistType == AssistTypeEnum.Teacher).FirstOrDefault();
var consultantModel = flist.Where(x => x.StuId == item.StuId && x.MonthStr == month && x.AssistType == AssistTypeEnum.CourseAdviser).FirstOrDefault();
MonthObjList.Add(new
{
Month = month,
IsRenew = xmodel != null ? 1 : 2,
IntroductionNum = zmodel?.StuNum ?? 0,
Teacher = teacherModel?.Remark ?? "",
TeacherTime = teacherModel?.CreateTime.ToString("yyyy-MM-dd HH:mm") ?? "",
Consultant = consultantModel?.Remark ?? "",
ConsultantTime = consultantModel?.CreateTime.ToString("yyyy-MM-dd HH:mm") ?? ""
});
}
var StuObj = new
{
item.StuId,
item.StuName,
item.StuTel,
item.StuRealMobile,
ContractSTime = item.followUpTime,
item.CourseName,
JapanBaseInfo = item.JapanBaseInfo.ToName(),
item.StuBirthStr,
item.StuGuestState,
StuGuestStateName = item.StuGuestState.ToName(),
MonthList = MonthObjList
};
RList.Add(StuObj);
}
Robj = new
{
RList,
Stat = new
{
StuTNum = TotalData.OrderCount,
RenewNum = TotalData.RenewOrderCount,
NewNum = TotalData.OrderCount - TotalData.RenewOrderCount,
TotalData.StudyNum,
TotalData.GraduateNum,
TotalData.SuspendNum,
TotalData.DropOutNum
}
};
}
return Robj;
}
#endregion
#region 客人咨询
/// <summary>
/// 获取客人咨询分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="demodel"></param>
/// <returns></returns>
public object GetStudentConsultPageList(int pageIndex, int pageSize, out long count, RB_Student_ViewModel demodel)
{
List<object> RList = new List<object>();
var slist = student_OrderGuestRepository.GetStudentConsultPageList(pageIndex, pageSize, out count, demodel);
if (slist.Any()) {
string stuIds = string.Join(",", slist.Select(x => x.StuId));
//查询学员最近的一条跟进记录
var flist = followRepository.GetStudentFollowUpLatelyList(stuIds, demodel.Group_Id);
foreach (var item in slist) {
var fmodel = flist.Where(x => x.StuId == item.StuId).FirstOrDefault();
RList.Add(new
{
item.StuId,
item.StuName,
item.StuBirthStr,
item.StuTel,
item.StuRealMobile,
item.StuAddress,
item.StuChannelName,
EnrollState = item.Q_EnrollState,
item.CourseId,
item.CourseName,
ConsultDate = item.ConsultDate.HasValue ? item.ConsultDate.Value.ToString("yyyy-MM-dd") : "",
item.PlanPrice,
item.BaseCondition,
item.DemandPoint,
item.ResistPoint,
item.ConsultingResults,
JapanBaseInfo = item.JapanBaseInfo.ToName(),
FUTime = fmodel?.CreateTime.ToString("yyyy-MM-dd HH:mm") ?? "",
FURemark = fmodel?.Remark ?? ""
});
}
}
return RList;
}
#endregion
}
}
...@@ -86,6 +86,10 @@ WHERE 1=1 ...@@ -86,6 +86,10 @@ WHERE 1=1
{ {
builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Course_Words_Extend.ChapterId), query.QChapterIds); builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Course_Words_Extend.ChapterId), query.QChapterIds);
} }
if (query.LessThanOrEqualChapterId > 0)
{
builder.AppendFormat(" AND A.{0}<={1} ", nameof(RB_Course_Words_Extend.ChapterId), query.LessThanOrEqualChapterId);
}
} }
return Get<RB_Course_Words_Extend>(builder.ToString()).ToList(); return Get<RB_Course_Words_Extend>(builder.ToString()).ToList();
} }
......
...@@ -40,6 +40,14 @@ WHERE 1=1 ...@@ -40,6 +40,14 @@ WHERE 1=1
{ {
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Student_Follow_Extend.StuId), query.StuId); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Student_Follow_Extend.StuId), query.StuId);
} }
if (!string.IsNullOrEmpty(query.STime))
{
builder.AppendFormat(" AND A.{0} >='{1}' ", nameof(RB_Student_Follow_Extend.CreateTime), query.STime);
}
if (!string.IsNullOrEmpty(query.ETime))
{
builder.AppendFormat(" AND A.{0} <='{1} 23:59:59' ", nameof(RB_Student_Follow_Extend.CreateTime), query.ETime);
}
} }
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Student_Follow_Extend.Id)); builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Student_Follow_Extend.Id));
return GetPage<RB_Student_Follow_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList(); return GetPage<RB_Student_Follow_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
...@@ -78,5 +86,75 @@ WHERE 1=1 ...@@ -78,5 +86,75 @@ WHERE 1=1
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Student_Follow_Extend.Id)); builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Student_Follow_Extend.Id));
return Get<RB_Student_Follow_Extend>(builder.ToString()).ToList(); return Get<RB_Student_Follow_Extend>(builder.ToString()).ToList();
} }
/// <summary>
/// 获取学员跟进月度列表
/// </summary>
/// <param name="stuIds"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<RB_Student_Follow_Extend> GetStudentFollowUpMonthList(string stuIds, int group_Id)
{
string sql = $@"SELECT f.*,f1.Remark,f1.CreateTime FROM
(SELECT StuId,AssistType,DATE_FORMAT(CreateTime,'%Y-%m') as MonthStr,MAX(Id) AS Id FROM rb_student_follow WHERE Group_Id ={group_Id} and `Status` =0 and StuId in ({stuIds}) and AssistType in(2,4)
GROUP BY StuId,AssistType,DATE_FORMAT(CreateTime,'%Y-%m')
) f
INNER JOIN rb_student_follow f1 on f.Id = f1.Id
";
return Get<RB_Student_Follow_Extend>(sql).ToList();
}
/// <summary>
/// 获取学员续费月度列表
/// </summary>
/// <param name="stuIds"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<RB_Student_Follow_Extend> GetStudentRenewMonthList(string stuIds, int group_Id)
{
string sql = $@"SELECT s.StuId,DATE_FORMAT(o.CreateTime,'%Y-%m') AS MonthStr FROM rb_student s
INNER JOIN rb_student_orderguest sog on s.StuId = sog.Student_Id
INNER JOIN rb_order o on sog.OrderId = o.OrderId
INNER JOIN rb_order_guest og on og.Id = sog.GuestId
where s.Group_Id ={group_Id} and s.`Status` =0 and sog.`Status` =0 and o.OrderState <>3 and (o.RenewOrderId >0 or og.RenewState =2) and s.StuId in({stuIds})
GROUP BY s.StuId,DATE_FORMAT(o.CreateTime,'%Y-%m')
";
return Get<RB_Student_Follow_Extend>(sql).ToList();
}
/// <summary>
/// 获取学员介绍月度列表
/// </summary>
/// <param name="stuIds"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<RB_Student_Follow_Extend> GetStudentIntroductionMonthList(string stuIds, int group_Id)
{
string sql = $@"SELECT s.StuSourceId as StuId,DATE_FORMAT(o.CreateTime,'%Y-%m') AS MonthStr,COUNT(0) AS StuNum FROM rb_student s
INNER JOIN rb_student_orderguest sog on s.StuId = sog.Student_Id
INNER JOIN rb_order o on sog.OrderId = o.OrderId
INNER JOIN rb_order_guest og on og.Id = sog.GuestId
where s.Group_Id ={group_Id} and s.`Status` =0 and sog.`Status` =0 and o.OrderState <>3 and s.StuSource =4 and s.StuSourceId in({stuIds})
GROUP BY s.StuSourceId,DATE_FORMAT(o.CreateTime,'%Y-%m')
";
return Get<RB_Student_Follow_Extend>(sql).ToList();
}
/// <summary>
/// 获取学员最近的一条跟进记录
/// </summary>
/// <param name="stuIds"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public List<RB_Student_Follow_Extend> GetStudentFollowUpLatelyList(string stuIds, int group_Id)
{
string sql = $@"SELECT f.*,f1.Remark,f1.CreateTime FROM
(SELECT StuId,AssistType,MAX(Id) AS Id FROM rb_student_follow WHERE Group_Id ={group_Id} and `Status` =0 and StuId in ({stuIds}) and AssistType =2
GROUP BY StuId,AssistType
) f
INNER JOIN rb_student_follow f1 on f.Id = f1.Id
";
return Get<RB_Student_Follow_Extend>(sql).ToList();
}
} }
} }
...@@ -49,5 +49,41 @@ WHERE 1=1 ...@@ -49,5 +49,41 @@ WHERE 1=1
} }
return GetPage<RB_StuWords_Exam_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList(); return GetPage<RB_StuWords_Exam_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
} }
/// <summary>
/// 获取学员单词考试列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_StuWords_Exam_Extend> GetStuWordsExamListRepository(RB_StuWords_Exam_Extend query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_StuWords_Exam AS A
WHERE 1=1
");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.Group_Id), query.Group_Id);
}
if (query.Stu_Account_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.Stu_Account_Id), query.Stu_Account_Id);
}
if (query.CourseId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.CourseId), query.CourseId);
}
if (query.ChapterId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.ChapterId), query.ChapterId);
}
}
return Get<RB_StuWords_Exam_Extend>(builder.ToString()).ToList();
}
} }
} }
...@@ -1218,7 +1218,8 @@ order by a.ClassDate desc limit 1"; ...@@ -1218,7 +1218,8 @@ order by a.ClassDate desc limit 1";
/// <returns></returns> /// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetStudyClassPlanList(int classId, int groupId) public List<RB_Class_Plan_ViewModel> GetStudyClassPlanList(int classId, int groupId)
{ {
string sql = $@"SELECT a.*,(select count(0) from rb_class_plan p where p.`Status`=0 and p.Group_Id ={groupId} and p.ClassId ={classId} and p.ClassDate < a.ClassDate) as LessonPlanNum string sql = $@"
SELECT a.*,(select count(0) from rb_class_plan p where p.`Status`=0 and p.Group_Id ={groupId} and p.ClassId ={classId} and p.ClassDate <= a.ClassDate) as LessonPlanNum
FROM rb_class_plan as a FROM rb_class_plan as a
WHERE a.`Status`=0 and a.Group_Id ={groupId} and a.ClassId ={classId} WHERE a.`Status`=0 and a.Group_Id ={groupId} and a.ClassId ={classId}
and a.ClassDate <='{Common.ConvertHelper.FormatDate(DateTime.Now)} 23:59:59' and a.ClassDate <='{Common.ConvertHelper.FormatDate(DateTime.Now)} 23:59:59'
......
...@@ -811,14 +811,15 @@ WHERE g.`Status` =0 and g.Group_Id ={groupId} and o.OrderState <>3 and o.OrderTy ...@@ -811,14 +811,15 @@ WHERE g.`Status` =0 and g.Group_Id ={groupId} and o.OrderState <>3 and o.OrderTy
/// <returns></returns> /// <returns></returns>
public RB_Order_Guest_Extend GetOrderGusetHoursInfo(int guestId, int classId) public RB_Order_Guest_Extend GetOrderGusetHoursInfo(int guestId, int classId)
{ {
string sql = $@"select A.* ,gc.AbsenceNum,gc.LeaveNum string sql = $@"
SELECT A.* ,IFNULL(gc.AbsenceNum,0) AS AbsenceNum,IFNULL(gc.LeaveNum,0) AS LeaveNum
FROM RB_Order_Guest AS A FROM RB_Order_Guest AS A
inner JOIN ( LEFT JOIN (
SELECT OrderGuestId,SUM(CASE CheckStatus WHEN 1 THEN 1 ELSE 0 END) AS AbsenceNum,SUM(CASE CheckStatus WHEN 2 THEN 1 ELSE 0 END) AS LeaveNum SELECT OrderGuestId,SUM(CASE CheckStatus WHEN 1 THEN 1 ELSE 0 END) AS AbsenceNum,SUM(CASE CheckStatus WHEN 2 THEN 1 ELSE 0 END) AS LeaveNum
FROM rb_class_check FROM rb_class_check
WHERE `Status`=0 and CheckStatus <>0 and ClassId ={classId} GROUP BY OrderGuestId WHERE `Status`=0 and CheckStatus <>0 and ClassId ={classId} GROUP BY OrderGuestId
) AS gc on gc.OrderGuestId=a.Id ) AS gc on gc.OrderGuestId=a.Id
where A.Id ={guestId} WHERE A.Id ={guestId}
"; ";
return Get<RB_Order_Guest_Extend>(sql).FirstOrDefault(); return Get<RB_Order_Guest_Extend>(sql).FirstOrDefault();
} }
......
...@@ -55,20 +55,27 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -55,20 +55,27 @@ namespace Edu.WebApi.Controllers.Applet
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public ApiResult GetMyCenterInfo() { public ApiResult GetMyCenterInfo()
{
var userInfo = base.AppletUserInfo; var userInfo = base.AppletUserInfo;
var accountModel = accountModule.GetAccountListModule(new RB_Account_ViewModel() { Group_Id = userInfo.Group_Id, Id = userInfo.Id, AccountType = Common.Enum.User.AccountTypeEnum.Student }).FirstOrDefault(); var accountModel = accountModule.GetAccountListModule(new RB_Account_ViewModel() { Group_Id = userInfo.Group_Id, Id = userInfo.Id, AccountType = Common.Enum.User.AccountTypeEnum.Student }).FirstOrDefault();
if (accountModel == null) { return ApiResult.Failed("账号不存在"); } if (accountModel == null)
{
return ApiResult.Failed("账号不存在");
}
//获取学生信息 //获取学生信息
var stuModel = studentModule.GetStudentListModule(new RB_Student_ViewModel() { Group_Id = userInfo.Group_Id, StuId = accountModel.AccountId }).FirstOrDefault(); var stuModel = studentModule.GetStudentListModule(new RB_Student_ViewModel() { Group_Id = userInfo.Group_Id, StuId = accountModel.AccountId }).FirstOrDefault();
if (stuModel == null) { return ApiResult.Failed("账号不存在"); } if (stuModel == null)
{
return ApiResult.Failed("账号不存在");
}
//获取协助人员 //获取协助人员
List<object> RAssistList = new List<object>(); List<object> RAssistList = new List<object>();
//首先获取学员的创建人 (市场经理) //首先获取学员的创建人 (市场经理)
if (stuModel.EnterID > 0) if (stuModel.CreateBy > 0)
{ {
var EnterModel = UserReidsCache.GetUserLoginInfo(stuModel.EnterID); var EnterModel = UserReidsCache.GetUserLoginInfo(stuModel.CreateBy);
RAssistList.Add(new RAssistList.Add(new
{ {
AssistId = stuModel.EnterID, AssistId = stuModel.EnterID,
...@@ -79,7 +86,8 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -79,7 +86,8 @@ namespace Edu.WebApi.Controllers.Applet
}); });
} }
var assistList = studentModule.GetStuAssistListModule(accountModel.AccountId); var assistList = studentModule.GetStuAssistListModule(accountModel.AccountId);
foreach (var item in assistList) { foreach (var item in assistList)
{
var empModel = accountModule.GetEmployeeInfo(item.AssistId); var empModel = accountModule.GetEmployeeInfo(item.AssistId);
RAssistList.Add(new RAssistList.Add(new
{ {
...@@ -116,7 +124,8 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -116,7 +124,8 @@ namespace Edu.WebApi.Controllers.Applet
LearningInfo.ClassName LearningInfo.ClassName
}; };
} }
else { else
{
CourseInfo = new CourseInfo = new
{ {
State = 2//没有课程信息 State = 2//没有课程信息
......
...@@ -54,7 +54,7 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -54,7 +54,7 @@ namespace Edu.WebApi.Controllers.Applet
/// <summary> /// <summary>
/// 试卷处理类对象 /// 试卷处理类对象
/// </summary> /// </summary>
private readonly Module.Exam.PaperModule paperModule = AOP.AOPHelper.CreateAOPObject<Module.Exam.PaperModule>(); private readonly PaperModule paperModule = AOP.AOPHelper.CreateAOPObject<PaperModule>();
/// <summary> /// <summary>
/// 学习园地处理类对象 /// 学习园地处理类对象
/// </summary> /// </summary>
...@@ -318,6 +318,7 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -318,6 +318,7 @@ namespace Edu.WebApi.Controllers.Applet
NextCourseNo=0, NextCourseNo=0,
ReviewCourseNo=0, ReviewCourseNo=0,
CourseId=0, CourseId=0,
ClassId=0,
}; };
} }
...@@ -481,7 +482,8 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -481,7 +482,8 @@ namespace Edu.WebApi.Controllers.Applet
NextCourseNo=0, NextCourseNo=0,
ReviewWord = 0, ReviewWord = 0,
ReviewCourseNo=0, ReviewCourseNo=0,
CourseId = CourseId CourseId,
ClassId,
}; };
} }
...@@ -543,6 +545,13 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -543,6 +545,13 @@ namespace Edu.WebApi.Controllers.Applet
Group_Id = appletUserInfo.Group_Id, Group_Id = appletUserInfo.Group_Id,
Stu_Account_Id = appletUserInfo.Id Stu_Account_Id = appletUserInfo.Id
}); });
//单词测试列表
var wordsExamList = courseExamModule.GetStuWordsExamListModule(new RB_StuWords_Exam_Extend()
{
ClassId = ClassId,
CourseId=CourseId,
Stu_Account_Id= appletUserInfo.Id
});
//组装数据 //组装数据
var RList = new List<object>(); var RList = new List<object>();
foreach (var item in ctList) foreach (var item in ctList)
...@@ -553,9 +562,16 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -553,9 +562,16 @@ namespace Edu.WebApi.Controllers.Applet
decimal StudyProgress = 0; decimal StudyProgress = 0;
if (tempPrepWords != null && tempPrepWords.TotalNum > 0) if (tempPrepWords != null && tempPrepWords.TotalNum > 0)
{ {
StudyProgress = Math.Round(Convert.ToDecimal(tempPrepWords.StudyNum) / Convert.ToDecimal(tempPrepWords.TotalNum) * 100, 2); ; StudyProgress = (int)(Convert.ToDecimal(tempPrepWords.StudyNum) / Convert.ToDecimal(tempPrepWords.TotalNum) * 100);
} }
int Num = 1; int Num = 1;
decimal Score = 0;//单词测试得分
if (wordsExamList != null && wordsExamList.Count > 0)
{
Score = wordsExamList?.Where(qitem => qitem.ChapterId.ToString() == item.ChapterNo)?.OrderByDescending(qitem => qitem.CreateTime)?.FirstOrDefault()?.Score ?? 0;
}
RList.Add(new RList.Add(new
{ {
planModel?.ClassPlanId, planModel?.ClassPlanId,
...@@ -568,8 +584,11 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -568,8 +584,11 @@ namespace Edu.WebApi.Controllers.Applet
x.VideoUrl x.VideoUrl
}), }),
ChapterTree = item, ChapterTree = item,
Score=tempPrepWords?.Score??0, Score,
StudyProgress, StudyProgress,
ClassId,
CourseId,
item.ChapterNo,
NextChapterNo = chapterTreeList.Where(x => Convert.ToInt32(x.ChapterNo) > Convert.ToInt32(item.ChapterNo)).OrderBy(x => Convert.ToInt32(x.ChapterNo)).FirstOrDefault()?.ChapterNo ?? "" NextChapterNo = chapterTreeList.Where(x => Convert.ToInt32(x.ChapterNo) > Convert.ToInt32(item.ChapterNo)).OrderBy(x => Convert.ToInt32(x.ChapterNo)).FirstOrDefault()?.ChapterNo ?? ""
}); });
} }
......
...@@ -154,7 +154,12 @@ namespace Edu.WebApi.Controllers.Applet ...@@ -154,7 +154,12 @@ namespace Edu.WebApi.Controllers.Applet
} }
var flag = courseExamModule.SubmitStuWordsExamModule(model); var flag = courseExamModule.SubmitStuWordsExamModule(model);
return flag ? ApiResult.Success(data: model) : ApiResult.Failed(); return flag ? ApiResult.Success(data: new
{
model.Id,
model.Score,
model.ExamMinutes
}) : ApiResult.Failed();
} }
} }
} }
...@@ -138,6 +138,8 @@ namespace Edu.WebApi.Controllers.Customer ...@@ -138,6 +138,8 @@ namespace Edu.WebApi.Controllers.Customer
var query = new RB_Student_Follow_Extend() var query = new RB_Student_Follow_Extend()
{ {
StuId = base.ParmJObj.GetInt("StuId"), StuId = base.ParmJObj.GetInt("StuId"),
STime = base.ParmJObj.GetStringValue("STime"),
ETime = base.ParmJObj.GetStringValue("ETime"),
}; };
query.Group_Id = base.UserInfo.Group_Id; query.Group_Id = base.UserInfo.Group_Id;
var data = customerStudentModule.GetStudentFollowPageModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query); var data = customerStudentModule.GetStudentFollowPageModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query);
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.AOP;
using Edu.Cache.User;
using Edu.Cache.WeChat;
using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Sell;
using Edu.Model.ViewModel.User;
using Edu.Module.Course;
using Edu.Module.User;
using Edu.Repository.Course;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Edu.WebApi.Controllers.User
{
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class StudentStatController : BaseController
{
/// <summary>
/// 学员统计
/// </summary>
private readonly StudentStatModule studentStatModule = new StudentStatModule();
#region 学员跟进
/// <summary>
/// 获取学员根据分页列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetStudentFollowUpPageList() {
var userInfo = base.UserInfo;
ResultPageModel pmodel = JsonHelper.DeserializeObject<ResultPageModel>(base.RequestParm.Msg.ToString());
RB_Student_ViewModel demodel = JsonHelper.DeserializeObject<RB_Student_ViewModel>(base.RequestParm.Msg.ToString());
demodel.Group_Id = userInfo.Group_Id;
demodel.CreateBy = userInfo.Id;
var list = studentStatModule.GetStudentFollowUpPageList(pmodel.PageIndex, pmodel.PageSize, out long count, demodel);
pmodel.Count = count;
pmodel.PageData = list;
return ApiResult.Success("", pmodel);
}
#endregion
#region 客人咨询
/// <summary>
/// 获取学员咨询分页列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetStudentConsultPageList()
{
var userInfo = base.UserInfo;
ResultPageModel pmodel = JsonHelper.DeserializeObject<ResultPageModel>(base.RequestParm.Msg.ToString());
RB_Student_ViewModel demodel = JsonHelper.DeserializeObject<RB_Student_ViewModel>(base.RequestParm.Msg.ToString());
demodel.Group_Id = userInfo.Group_Id;
if (demodel.IsQueryMyStu == 1)
{
demodel.CreateBy = userInfo.Id;
}
var list = studentStatModule.GetStudentConsultPageList(pmodel.PageIndex, pmodel.PageSize, out long count, demodel);
pmodel.Count = count;
pmodel.PageData = list;
return ApiResult.Success("", pmodel);
}
#endregion
}
}
...@@ -1249,6 +1249,12 @@ namespace Edu.WebApi.Controllers.User ...@@ -1249,6 +1249,12 @@ namespace Edu.WebApi.Controllers.User
extModel.StuNeedsName, extModel.StuNeedsName,
extModel.StuRealMobile, extModel.StuRealMobile,
extModel.CustomerName, extModel.CustomerName,
extModel.PlanPrice,
extModel.BaseCondition,
extModel.DemandPoint,
extModel.ResistPoint,
extModel.ConsultingResults,
ConsultDate = extModel.ConsultDate.HasValue ? extModel.ConsultDate.Value.ToString("yyyy-MM-dd") : "",
}; };
return ApiResult.Success(data: obj); return ApiResult.Success(data: obj);
} }
...@@ -1341,6 +1347,28 @@ namespace Edu.WebApi.Controllers.User ...@@ -1341,6 +1347,28 @@ namespace Edu.WebApi.Controllers.User
return flag ? ApiResult.Success() : ApiResult.Failed(); return flag ? ApiResult.Success() : ApiResult.Failed();
} }
/// <summary>
/// 保存学生咨询结果
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetStudentConsultResults() {
var userInfo = base.UserInfo;
RB_Student_ViewModel demodel = JsonHelper.DeserializeObject<RB_Student_ViewModel>(base.RequestParm.Msg.ToString());
if (demodel.StuId <= 0) {
return ApiResult.ParamIsNull("请传递学员ID");
}
string msg = studentModule.SetStudentConsultResults(demodel, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
#endregion #endregion
#region 管理者管理 #region 管理者管理
......
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