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;
using Edu.Common.API;
using Edu.Common.Enum;
using Edu.Common.Enum.Customer;
using Edu.Common.Enum.User;
using Edu.Model.CacheModel;
using Edu.Repository.Customer;
using Edu.Repository.User;
......@@ -161,6 +162,8 @@ namespace Edu.Cache.User
DeptName = model.DeptName,
PostName = model.PostName,
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);
}
......
......@@ -57,5 +57,10 @@ namespace Edu.Model.Entity.Customer
/// 删除状态(0-正常,1-禁用)
/// </summary>
public DateStateEnum Status { get; set; }
/// <summary>
/// 跟进类型(见枚举)
/// </summary>
public Common.Enum.User.AssistTypeEnum AssistType { get; set; }
}
}
......@@ -216,5 +216,35 @@ namespace Edu.Model.Entity.User
/// 学员真实电话号码
/// </summary>
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
/// 章节编号
/// </summary>
public string QChapterIds { get; set; }
/// <summary>
/// 小于等于当前章节
/// </summary>
public int LessThanOrEqualChapterId { get; set; }
}
}
......@@ -14,5 +14,25 @@ namespace Edu.Model.ViewModel.Customer
/// 学员编号【查询使用】
/// </summary>
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
/// 单词考试详情
/// </summary>
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
/// </summary>
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>
/// 是否存在课程顾问(1-存在,2-不存在)
/// </summary>
......
......@@ -207,11 +207,6 @@ namespace Edu.Module.Course
/// </summary>
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>
......@@ -4918,15 +4913,6 @@ namespace Edu.Module.Course
{
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
{
NextWord = NextNum,
......@@ -4934,7 +4920,7 @@ namespace Edu.Module.Course
ReviewWord = ReviewNum,
ReviewCourseNo,
CourseId = courseId,
TotalScore
ClassId=classId,
};
}
......
......@@ -57,6 +57,11 @@ namespace Edu.Module.Exam
QChapterIds = ChapterId + "," + NextChapterId
});
var totalList = course_WordsRepository.GetCourseWordsListRepository(new RB_Course_Words_Extend()
{
CourseId = CourseId,
LessThanOrEqualChapterId = ChapterId,
})?.OrderBy(qitem => Guid.NewGuid())?.ToList();
var reviewList = list?.Where(qitem => qitem.ChapterId == ChapterId)?.OrderBy(qitem => Guid.NewGuid())?.ToList();
var prepList = list?.Where(qitem => qitem.ChapterId == NextChapterId)?.OrderBy(qitem => Guid.NewGuid())?.ToList();
List<object> reviewGroupList = new List<object>();
......@@ -66,15 +71,16 @@ namespace Edu.Module.Exam
{
for (var i = 0; i < reviewList.Count; i++)
{
var titleRandomNum= Common.ConvertHelper.CreateRandomNum();
var titleRandomNum = Common.ConvertHelper.CreateRandomNum();
var tempWords = reviewList[i];
var count = totalList?.Where(qitem => qitem.Id != tempWords.Id)?.Count()??0;
// reviewGroupList.Add(CreateSingleModule(tempWords,totalList));
//选择题
if (titleRandomNum % 2 == 0)
{
var tempList = reviewList.Where(qitem => qitem.Id != tempWords.Id)?.Take(3)?.ToList();
if (tempList != null && tempList.Count > 2)
if (count > 2)
{
reviewGroupList.Add(CreateSingleModule(tempWords, tempList));
reviewGroupList.Add(CreateSingleModule(tempWords, totalList));
}
else
{
......@@ -124,7 +130,7 @@ namespace Edu.Module.Exam
}
else
{
title = string.Format("根据中文意思【{0}】,填写单词.", item.ChineseMean);
}
}
......@@ -132,7 +138,7 @@ namespace Edu.Module.Exam
{
if (!string.IsNullOrEmpty(item.ChineseMean))
{
title = string.Format("根据中文意思【{0}】,填写单词.", item.ChineseMean);
}
else
......@@ -140,8 +146,8 @@ namespace Edu.Module.Exam
title = string.Format("根据日语书写【{0}】,填写单词.", item.WordWrite);
}
}
var fillinObj= new
var fillinObj = new
{
QuestionTypeName = "填空题",
QuestionTypeId = 3,
......@@ -155,7 +161,7 @@ namespace Edu.Module.Exam
item.WordWrite,
item.ChineseMean,
item.FileUrl,
IsTrue=0,
IsTrue = 0,
};
return fillinObj;
}
......@@ -164,33 +170,17 @@ namespace Edu.Module.Exam
/// 创建单选题
/// </summary>
/// <returns></returns>
public object CreateSingleModule(RB_Course_Words_Extend item,List<RB_Course_Words_Extend> chooseList)
public object CreateSingleModule(RB_Course_Words_Extend item, List<RB_Course_Words_Extend> totalList)
{
string title = "我是问题";
int randNum = Common.ConvertHelper.CreateRandomNum();
List<optionItem> options = new List<optionItem>();
var tempList = totalList?.OrderBy(qitem => Guid.NewGuid())?.ToList();
switch (randNum)
{
//根据单词选择中文意思
case 0:
title = string.Format("请选择【{0}】单词的正确中文意思.", item.WordContent);
options.Add(new optionItem()
{
Content = item.ChineseMean,
IsAnswer = true,
Name = "",
ShowName = ""
});
foreach (var cItem in chooseList)
{
options.Add(new optionItem()
{
Content = cItem.ChineseMean,
IsAnswer = false,
Name = "",
ShowName = "",
});
}
title = CreateDefaultQuestion(item, tempList, options);
break;
//根据中文意思选择单词
case 1:
......@@ -202,62 +192,88 @@ namespace Edu.Module.Exam
Name = "",
ShowName = ""
});
foreach (var cItem in chooseList)
for (var i = 0; i < 3; i++)
{
var cItem = tempList[i];
options.Add(new optionItem()
{
Content = cItem.WordContent,
Content = !string.IsNullOrEmpty(cItem.WordContent)
? cItem.WordContent
: (totalList?.FirstOrDefault(qitem => qitem.Id != item.Id &&!string.IsNullOrEmpty(qitem.WordContent))?.WordContent ?? ""),
IsAnswer = false,
Name = "",
ShowName = "",
});
}
break;
//根据日语书写选择中文意思
case 2:
title = item.WordWrite;
title = string.Format("请选择【{0}】所对应的单词.", item.WordWrite);
options.Add(new optionItem()
{
Content = item.WordContent,
IsAnswer = true,
Name = "",
ShowName = ""
});
foreach (var cItem in chooseList)
if (!string.IsNullOrEmpty(item.WordWrite) && !string.IsNullOrEmpty(item.WordContent))
{
title = string.Format("请选择【{0}】所对应的单词.", item.WordWrite);
options.Add(new optionItem()
{
Content = cItem.WordContent,
IsAnswer = false,
Content = item.WordContent,
IsAnswer = true,
Name = "",
ShowName = "",
ShowName = ""
});
for (var i = 0; i < 3; i++)
{
var cItem = tempList[i];
options.Add(new optionItem()
{
Content = !string.IsNullOrEmpty(cItem.WordContent)
? cItem.WordContent :
(totalList?.FirstOrDefault(qitem => qitem.Id != item.Id&&!string.IsNullOrEmpty(qitem.WordContent))?.WordContent ?? ""),
IsAnswer = false,
Name = "",
ShowName = "",
});
}
}
else
{
title = CreateDefaultQuestion(item, totalList, options);
}
break;
//根据中文意思选日语书写
case 3:
title = string.Format("请选择【{0}】所对应日语书写.", item.ChineseMean);
options.Add(new optionItem()
{
Content = item.WordWrite,
IsAnswer = true,
Name = "",
ShowName = ""
});
foreach (var cItem in chooseList)
if (!string.IsNullOrEmpty(item.WordWrite)&&!string.IsNullOrEmpty(item.ChineseMean))
{
title = string.Format("请选择【{0}】所对应日语书写.", item.ChineseMean);
options.Add(new optionItem()
{
Content = cItem.WordWrite,
IsAnswer = false,
Content = item.WordWrite,
IsAnswer = true,
Name = "",
ShowName = "",
ShowName = ""
});
for (var i = 0; i < 3; i++)
{
var cItem = tempList[i];
options.Add(new optionItem()
{
Content = !string.IsNullOrEmpty(cItem.WordWrite)
? cItem.WordWrite
:(totalList?.FirstOrDefault(qitem => qitem.Id != item.Id &&!string.IsNullOrEmpty(qitem.WordWrite))?.WordWrite ?? ""),
IsAnswer = false,
Name = "",
ShowName = "",
});
}
}
else
{
title = CreateDefaultQuestion(item, totalList, options);
}
break;
}
options = options?.OrderBy(qitem => Guid.NewGuid())?.ToList();
string Answer = "";
for (var j = 1; j <= options.Count; j++)
{
......@@ -288,6 +304,38 @@ namespace Edu.Module.Exam
return singleObj;
}
/// <summary>
/// 生成默认的选择题
/// </summary>
/// <param name="item"></param>
/// <param name="totalList"></param>
/// <param name="options"></param>
/// <returns></returns>
public string CreateDefaultQuestion(RB_Course_Words_Extend item, List<RB_Course_Words_Extend> totalList, List<optionItem> options)
{
string title = string.Format("请选择【{0}】单词的正确中文意思.", item.WordContent);
options.Add(new optionItem()
{
Content = item.ChineseMean,
IsAnswer = true,
Name = "",
ShowName = ""
});
for (var i = 0; i < 3; i++)
{
var cItem = totalList[i];
options.Add(new optionItem()
{
Content = !string.IsNullOrEmpty(cItem.ChineseMean) ? cItem.ChineseMean :
(totalList?.FirstOrDefault(qitem =>qitem.Id!=item.Id && !string.IsNullOrEmpty(qitem.ChineseMean))?.ChineseMean ?? ""),
IsAnswer = false,
Name = "",
ShowName = "",
});
}
return title;
}
/// <summary>
/// 单词学习或复习
/// </summary>
......@@ -295,18 +343,18 @@ namespace Edu.Module.Exam
/// <param name="ChapterId">当前章节编号</param>
/// <param name="ReviewChapterId">复习章节编号</param>
/// <returns></returns>
public object GetStudyCourseWords(int CourseId, int ChapterId, int ReviewChapterId,int Stu_Account_Id)
public object GetStudyCourseWords(int CourseId, int ChapterId, int ReviewChapterId, int Stu_Account_Id)
{
List<object> list = new List<object>();
List<object> reviewList = new List<object>();
var dataList = course_WordsRepository.GetCourseWordsListRepository(new RB_Course_Words_Extend()
{
CourseId = CourseId,
QChapterIds = ChapterId+","+ ReviewChapterId
QChapterIds = ChapterId + "," + ReviewChapterId
});
if (dataList != null && dataList.Count > 0)
{
foreach (var item in dataList.Where(qitem=>qitem.ChapterId==ChapterId))
foreach (var item in dataList.Where(qitem => qitem.ChapterId == ChapterId))
{
list.Add(new
{
......@@ -376,7 +424,7 @@ namespace Edu.Module.Exam
var wordsList = course_WordsRepository.GetCourseWordsListRepository(new RB_Course_Words_Extend()
{
CourseId = model.CourseId,
QChapterIds = model.ChapterId+","+model.ReviewCourseChapterId
QChapterIds = model.ChapterId + "," + model.ReviewCourseChapterId
});
//当前章节单词总数
var currentChapterCount = wordsList?.Where(qitem => qitem.ChapterId == model.ChapterId)?.Count() ?? 0;
......@@ -402,7 +450,7 @@ namespace Edu.Module.Exam
else
{
fileds.Add(nameof(RB_StuWords_Prep_Extend.ReviewNum), model.ReviewNum);
model.StudyNum =oldModel.PrepNum+ model.ReviewNum;
model.StudyNum = oldModel.PrepNum + model.ReviewNum;
}
fileds.Add(nameof(RB_StuWords_Prep_Extend.StudyNum), model.StudyNum);
model.Score = GetScoreModule(model.PrepNum, currentChapterCount);
......@@ -438,16 +486,16 @@ namespace Edu.Module.Exam
int score = 0;
if (TotalNum > 0)
{
var progress= Convert.ToDecimal(StartNum) / Convert.ToDecimal(TotalNum) * 100;
var progress = Convert.ToDecimal(StartNum) / Convert.ToDecimal(TotalNum) * 100;
if (progress > 0 && progress <= 33)
{
score = 1;
}
if (progress > 33 && progress < 70)
if (progress > 34 && progress < 66)
{
score = 2;
}
if (progress >= 70)
if (progress >= 66)
{
score = 3;
}
......@@ -530,5 +578,16 @@ namespace Edu.Module.Exam
}
return flag;
}
/// <summary>
/// 获取学员单词考试列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_StuWords_Exam_Extend> GetStuWordsExamListModule(RB_StuWords_Exam_Extend query)
{
var list = stuWords_ExamRepository.GetStuWordsExamListRepository(query);
return list;
}
}
}
......@@ -815,5 +815,34 @@ namespace Edu.Module.User
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
{
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();
}
......
......@@ -40,6 +40,14 @@ WHERE 1=1
{
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));
return GetPage<RB_Student_Follow_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
......@@ -78,5 +86,75 @@ WHERE 1=1
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Student_Follow_Extend.Id));
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
}
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";
/// <returns></returns>
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
WHERE a.`Status`=0 and a.Group_Id ={groupId} and a.ClassId ={classId}
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
/// <returns></returns>
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
inner 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
FROM rb_class_check
WHERE `Status`=0 and CheckStatus <>0 and ClassId ={classId} GROUP BY OrderGuestId
) AS gc on gc.OrderGuestId=a.Id
where A.Id ={guestId}
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
FROM rb_class_check
WHERE `Status`=0 and CheckStatus <>0 and ClassId ={classId} GROUP BY OrderGuestId
) AS gc on gc.OrderGuestId=a.Id
WHERE A.Id ={guestId}
";
return Get<RB_Order_Guest_Extend>(sql).FirstOrDefault();
}
......
......@@ -163,7 +163,7 @@ WHERE 1=1
}
}
return GetPage<RB_Student_OrderGuest_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
}
/// <summary>
/// 根据退课编号查询学员信息
......@@ -219,5 +219,322 @@ WHERE og.Status =0 and g.`Status` =0 and o.Group_Id ={group_Id} and o.OrderState
ORDER BY {(Type == 1 ? "c.OpenTime asc" : "c.OpenTime desc")} LIMIT 1";
return Get<RB_Student_OrderGuest_ViewModel>(sql).FirstOrDefault();
}
#region 学员跟进
/// <summary>
/// 获取学员跟进分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_Student_ViewModel> GetStudentFollowUpPageList(int pageIndex, int pageSize, out long count, RB_Student_ViewModel demodel)
{
DynamicParameters parameters = new DynamicParameters();
string where = " 1=1 and s.Status =0 ";
if (demodel.Group_Id > 0) {
where += $" and s.{nameof(RB_Student_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (!string.IsNullOrEmpty(demodel.StuName)) {
where += $" and s.{nameof(RB_Student_ViewModel.StuName)} like @StuName";
parameters.Add("StuName", "%" + demodel.StuName + "%");
}
if (!string.IsNullOrEmpty(demodel.StuRealMobile)) {
where += $" and s.{nameof(RB_Student_ViewModel.StuRealMobile)} like @StuRealMobile";
parameters.Add("StuRealMobile", "%" + demodel.StuRealMobile + "%");
}
if (!string.IsNullOrEmpty(demodel.QQ))
{
where += $" and s.{nameof(RB_Student_ViewModel.QQ)} like @QQ";
parameters.Add("QQ", "%" + demodel.QQ + "%");
}
if (!string.IsNullOrEmpty(demodel.WeChatNo))
{
where += $" and s.{nameof(RB_Student_ViewModel.WeChatNo)} like @WeChatNo";
parameters.Add("WeChatNo", "%" + demodel.WeChatNo + "%");
}
if (demodel.StuType > 0)
{
where += $" and s.{nameof(RB_Student_ViewModel.StuType)} ={demodel.StuType}";
}
if (demodel.StuGuestState > 0)
{
where += $" and org.GuestState ={(int)demodel.StuGuestState}";
}
if (!string.IsNullOrEmpty(demodel.SFTime) && !string.IsNullOrEmpty(demodel.EFTime))
{
if (demodel.Q_FType == 1)
{
where += $" and f.Id is not null";
}
else
{
where += $" and f.Id is null";
}
}
if (demodel.BelongType > 0)
{
//全部
if (demodel.BelongType == 1)
{
where += $@" AND (s.CreateBy={demodel.CreateBy} OR s.StuId IN (SELECT StuId FROM rb_student_assist WHERE AssistId ={demodel.CreateBy} AND `Status`=0))";
}
//我负责的
else if (demodel.BelongType == 2)
{
where += $" AND s.{nameof(RB_Student_ViewModel.CreateBy)} ={demodel.CreateBy} ";
}
//我协同的
else if (demodel.BelongType == 3)
{
where += $" AND s.StuId IN (SELECT StuId FROM rb_student_assist WHERE AssistId ={demodel.CreateBy} AND `Status`=0) ";
}
//我下属的
else if (demodel.BelongType == 4)
{
if (demodel.CreateIds != null && demodel.CreateIds.Count > 0)
{
string createIds = string.Join(",", demodel.CreateIds);
if (!string.IsNullOrEmpty(createIds))
{
where += $" AND (s.{nameof(RB_Student_ViewModel.CreateBy)} IN({createIds}) OR s.StuId IN (SELECT StuId FROM rb_student_assist WHERE AssistId IN({createIds}) AND `Status`=0)) ";
}
}
else
{
where += $" AND s.{nameof(RB_Student_ViewModel.CreateBy)} ={demodel.CreateBy} ";
}
}
}
else
{
if (demodel.CreateBy > 0)
{
where += $" AND s.{nameof(RB_Student_ViewModel.CreateBy)} ={demodel.CreateBy} ";
}
}
string sql = $@"SELECT s.StuId,s.StuName,s.StuTel,s.StuRealMobile,s.QQ,DATE_FORMAT(ec.CreateTime,'%Y-%m-%d') as followUpTime,c.CourseId,c.CourseName,s.JapanBaseInfo,s.StuBirth,org.GuestState as StuGuestState
FROM rb_student s
INNER JOIN rb_student_orderguest og on og.Student_Id = s.StuId
INNER JOIN (SELECT og.Student_Id,MAX(og.Id) as Id FROM rb_student_orderguest og
INNER JOIN rb_order o on og.OrderId = o.OrderId
WHERE o.OrderState <>3 GROUP BY og.Student_Id) stu on og.Id = stu.Id and og.Student_Id = s.StuId
INNER JOIN rb_order_guest org on org.Id = og.GuestId
INNER JOIN rb_order o on og.OrderId = o.OrderId
INNER JOIN rb_course c on o.CourseId = c.CourseId
LEFT JOIN rb_education_contract ec on ec.GuestId = og.GuestId";
if (!string.IsNullOrEmpty(demodel.SFTime) && !string.IsNullOrEmpty(demodel.EFTime)) {
//增加跟进链表
sql += $@"LEFT JOIN rb_student_follow f on s.StuId = f.StuId and f.`Status` =0 and f.CreateTime >='{demodel.SFTime}' and f.CreateTime <='{demodel.EFTime} 23:59:59'";
}
sql += $" where {where} ";
if ((!string.IsNullOrEmpty(demodel.SFTime) && !string.IsNullOrEmpty(demodel.EFTime)))
{
sql += $" GROUP BY s.StuId";
}
sql += $" order by s.StuId desc";
return GetPage<RB_Student_ViewModel>(pageIndex, pageSize, out count, sql, parameters).ToList();
}
/// <summary>
/// 获取人数统计
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public RB_Student_ViewModel GetStudentFollowUpStat(RB_Student_ViewModel demodel) {
DynamicParameters parameters = new DynamicParameters();
string where = " 1=1 and s.Status =0 ";
if (demodel.Group_Id > 0)
{
where += $" and s.{nameof(RB_Student_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (!string.IsNullOrEmpty(demodel.StuName))
{
where += $" and s.{nameof(RB_Student_ViewModel.StuName)} like @StuName";
parameters.Add("StuName", "%" + demodel.StuName + "%");
}
if (!string.IsNullOrEmpty(demodel.StuRealMobile))
{
where += $" and s.{nameof(RB_Student_ViewModel.StuRealMobile)} like @StuRealMobile";
parameters.Add("StuRealMobile", "%" + demodel.StuRealMobile + "%");
}
if (!string.IsNullOrEmpty(demodel.QQ))
{
where += $" and s.{nameof(RB_Student_ViewModel.QQ)} like @QQ";
parameters.Add("QQ", "%" + demodel.QQ + "%");
}
if (!string.IsNullOrEmpty(demodel.WeChatNo))
{
where += $" and s.{nameof(RB_Student_ViewModel.WeChatNo)} like @WeChatNo";
parameters.Add("WeChatNo", "%" + demodel.WeChatNo + "%");
}
if (demodel.StuType > 0)
{
where += $" and s.{nameof(RB_Student_ViewModel.StuType)} ={demodel.StuType}";
}
if (demodel.StuGuestState > 0)
{
where += $" and org.GuestState ={(int)demodel.StuGuestState}";
}
if (!string.IsNullOrEmpty(demodel.SFTime) && !string.IsNullOrEmpty(demodel.EFTime))
{
if (demodel.Q_FType == 1)
{
where += $" and f.Id is not null";
}
else
{
where += $" and f.Id is null";
}
}
string sql = $@"
select count(0) as OrderCount,sum(case when t.RenewState = 1 then 1 else 0 end) AS RenewOrderCount,
SUM(CASE WHEN t.StuGuestState =1 THEN 1 ELSE 0 END) AS StudyNum,
SUM(CASE WHEN t.StuGuestState =2 THEN 1 ELSE 0 END) AS DropOutNum,
SUM(CASE WHEN t.StuGuestState =5 THEN 1 ELSE 0 END) AS SuspendNum,
SUM(CASE WHEN t.StuGuestState =7 THEN 1 ELSE 0 END) AS GraduateNum
from(
SELECT s.StuId,s.StuName,s.StuTel,s.StuRealMobile,s.QQ,ec.CreateTime,c.CourseId,c.CourseName,s.JapanBaseInfo,s.StuBirth,org.GuestState as StuGuestState,
case when o.RenewOrderId >0 or org.RenewState =2 then 1 else 0 end AS RenewState
FROM rb_student s
{(demodel.IsQueryMyStu == 1 ? "INNER JOIN rb_student_assist sa on s.StuId = sa.StuId and sa.`Status` =0 and sa.AssistId =" + demodel.CreateBy : "")}
INNER JOIN rb_student_orderguest og on og.Student_Id = s.StuId
INNER JOIN (SELECT og.Student_Id,MAX(og.Id) as Id FROM rb_student_orderguest og
INNER JOIN rb_order o on og.OrderId = o.OrderId
WHERE o.OrderState <>3 GROUP BY og.Student_Id) stu on og.Id = stu.Id and og.Student_Id = s.StuId
INNER JOIN rb_order_guest org on org.Id = og.GuestId
INNER JOIN rb_order o on og.OrderId = o.OrderId
INNER JOIN rb_course c on o.CourseId = c.CourseId
LEFT JOIN rb_education_contract ec on ec.GuestId = og.GuestId";
if (!string.IsNullOrEmpty(demodel.SFTime) && !string.IsNullOrEmpty(demodel.EFTime))
{
//增加跟进链表
sql += $@"LEFT JOIN rb_student_follow f on s.StuId = f.StuId and f.`Status` =0 and f.CreateTime >='{demodel.SFTime}' and f.CreateTime <='{demodel.EFTime} 23:59:59'";
}
sql += $" where {where} ";
if ((!string.IsNullOrEmpty(demodel.SFTime) && !string.IsNullOrEmpty(demodel.EFTime)) || demodel.IsQueryMyStu == 1)
{
sql += $" GROUP BY s.StuId";
}
sql += $" order by s.StuId desc)t";
return Get<RB_Student_ViewModel>(sql, parameters).FirstOrDefault();
}
/// <summary>
/// 获取学员咨询分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_Student_ViewModel> GetStudentConsultPageList(int pageIndex, int pageSize, out long count, RB_Student_ViewModel demodel)
{
DynamicParameters parameters = new DynamicParameters();
string where = " 1=1 and s.Status =0 ";
if (demodel.Group_Id > 0)
{
where += $" and s.{nameof(RB_Student_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (!string.IsNullOrEmpty(demodel.StuName))
{
where += $" and s.{nameof(RB_Student_ViewModel.StuName)} like @StuName";
parameters.Add("StuName", "%" + demodel.StuName + "%");
}
if (!string.IsNullOrEmpty(demodel.StuRealMobile))
{
where += $" and s.{nameof(RB_Student_ViewModel.StuRealMobile)} like @StuRealMobile";
parameters.Add("StuRealMobile", "%" + demodel.StuRealMobile + "%");
}
if (!string.IsNullOrEmpty(demodel.QQ))
{
where += $" and s.{nameof(RB_Student_ViewModel.QQ)} like @QQ";
parameters.Add("QQ", "%" + demodel.QQ + "%");
}
if (!string.IsNullOrEmpty(demodel.WeChatNo))
{
where += $" and s.{nameof(RB_Student_ViewModel.WeChatNo)} like @WeChatNo";
parameters.Add("WeChatNo", "%" + demodel.WeChatNo + "%");
}
if (demodel.StuType > 0)
{
where += $" and s.{nameof(RB_Student_ViewModel.StuType)} ={demodel.StuType}";
}
if (demodel.StuGuestState > 0)
{
where += $" and org.GuestState ={(int)demodel.StuGuestState}";
}
if (demodel.Q_EnrollState > 0) {
if (demodel.Q_EnrollState == 1)
{
where += $" and o.OrderId is not null";
}
else {
where += $" and o.OrderId is null";
}
}
if (demodel.BelongType > 0)
{
//全部
if (demodel.BelongType == 1)
{
where += $@" AND (s.CreateBy={demodel.CreateBy} OR s.StuId IN (SELECT StuId FROM rb_student_assist WHERE AssistId ={demodel.CreateBy} AND `Status`=0))";
}
//我负责的
else if (demodel.BelongType == 2)
{
where += $" AND s.{nameof(RB_Student_ViewModel.CreateBy)} ={demodel.CreateBy} ";
}
//我协同的
else if (demodel.BelongType == 3)
{
where += $" AND s.StuId IN (SELECT StuId FROM rb_student_assist WHERE AssistId ={demodel.CreateBy} AND `Status`=0) ";
}
//我下属的
else if (demodel.BelongType == 4)
{
if (demodel.CreateIds != null && demodel.CreateIds.Count > 0)
{
string createIds = string.Join(",", demodel.CreateIds);
if (!string.IsNullOrEmpty(createIds))
{
where += $" AND (s.{nameof(RB_Student_ViewModel.CreateBy)} IN({createIds}) OR s.StuId IN (SELECT StuId FROM rb_student_assist WHERE AssistId IN({createIds}) AND `Status`=0)) ";
}
}
else
{
where += $" AND s.{nameof(RB_Student_ViewModel.CreateBy)} ={demodel.CreateBy} ";
}
}
}
else
{
if (demodel.CreateBy > 0)
{
where += $" AND s.{nameof(RB_Student_ViewModel.CreateBy)} ={demodel.CreateBy} ";
}
}
string sql = $@"SELECT s.*,case when o.OrderId is null then 2 else 1 end as Q_EnrollState,og.GuestState,c.CourseId,c.CourseName,ch.Name as StuChannelName
FROM rb_student s
LEFT JOIN (
SELECT sog.Student_Id,MAX(og.Id) AS GuestId FROM rb_student_orderguest sog
INNER JOIN rb_order o on sog.OrderId = o.OrderId
INNER JOIN rb_order_guest og on sog.GuestId = og.Id
WHERE o.Group_Id =100000 and sog.`Status` =0 and o.OrderState <>3 and og.`Status` =0 GROUP BY sog.Student_Id
) ot on s.StuId = ot.Student_Id
LEFT JOIN rb_order_guest og on ot.GuestId = og.Id
LEFT JOIN rb_order o on og.OrderId = o.OrderId
LEFT JOIN rb_course c on o.CourseId = c.CourseId
LEFT JOIN rb_channel ch on s.StuChannel = ch.Id
WHERE 1=1
GROUP BY s.StuId order by s.StuId desc";
return GetPage<RB_Student_ViewModel>(pageIndex, pageSize, out count, sql, parameters).ToList();
}
#endregion
}
}
......@@ -55,20 +55,27 @@ namespace Edu.WebApi.Controllers.Applet
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMyCenterInfo() {
public ApiResult GetMyCenterInfo()
{
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();
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();
if (stuModel == null) { return ApiResult.Failed("账号不存在"); }
if (stuModel == null)
{
return ApiResult.Failed("账号不存在");
}
//获取协助人员
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
{
AssistId = stuModel.EnterID,
......@@ -79,7 +86,8 @@ namespace Edu.WebApi.Controllers.Applet
});
}
var assistList = studentModule.GetStuAssistListModule(accountModel.AccountId);
foreach (var item in assistList) {
foreach (var item in assistList)
{
var empModel = accountModule.GetEmployeeInfo(item.AssistId);
RAssistList.Add(new
{
......@@ -116,7 +124,8 @@ namespace Edu.WebApi.Controllers.Applet
LearningInfo.ClassName
};
}
else {
else
{
CourseInfo = new
{
State = 2//没有课程信息
......
......@@ -54,7 +54,7 @@ namespace Edu.WebApi.Controllers.Applet
/// <summary>
/// 试卷处理类对象
/// </summary>
private readonly Module.Exam.PaperModule paperModule = AOP.AOPHelper.CreateAOPObject<Module.Exam.PaperModule>();
private readonly PaperModule paperModule = AOP.AOPHelper.CreateAOPObject<PaperModule>();
/// <summary>
/// 学习园地处理类对象
/// </summary>
......@@ -318,6 +318,7 @@ namespace Edu.WebApi.Controllers.Applet
NextCourseNo=0,
ReviewCourseNo=0,
CourseId=0,
ClassId=0,
};
}
......@@ -481,7 +482,8 @@ namespace Edu.WebApi.Controllers.Applet
NextCourseNo=0,
ReviewWord = 0,
ReviewCourseNo=0,
CourseId = CourseId
CourseId,
ClassId,
};
}
......@@ -543,6 +545,13 @@ namespace Edu.WebApi.Controllers.Applet
Group_Id = appletUserInfo.Group_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>();
foreach (var item in ctList)
......@@ -553,9 +562,16 @@ namespace Edu.WebApi.Controllers.Applet
decimal StudyProgress = 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;
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
{
planModel?.ClassPlanId,
......@@ -568,8 +584,11 @@ namespace Edu.WebApi.Controllers.Applet
x.VideoUrl
}),
ChapterTree = item,
Score=tempPrepWords?.Score??0,
Score,
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 ?? ""
});
}
......
......@@ -154,7 +154,12 @@ namespace Edu.WebApi.Controllers.Applet
}
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
var query = new RB_Student_Follow_Extend()
{
StuId = base.ParmJObj.GetInt("StuId"),
STime = base.ParmJObj.GetStringValue("STime"),
ETime = base.ParmJObj.GetStringValue("ETime"),
};
query.Group_Id = base.UserInfo.Group_Id;
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
extModel.StuNeedsName,
extModel.StuRealMobile,
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);
}
......@@ -1341,6 +1347,28 @@ namespace Edu.WebApi.Controllers.User
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
#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