Commit f26c94bd authored by 黄奎's avatar 黄奎

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

parents 54f76830 3b62dd09
......@@ -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; }
}
}
......@@ -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; }
}
}
......@@ -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>
......
......@@ -813,5 +813,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 ? "" : "出错了,请联系管理员";
}
}
}
......@@ -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();
}
}
}
......@@ -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
}
}
......@@ -1233,6 +1233,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);
}
......@@ -1325,6 +1331,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