using Edu.AOP.CustomerAttribute; using Edu.Common.Enum; using Edu.Common.Enum.User; 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 StudentModule { /// <summary> /// 学生仓储层对象 /// </summary> private readonly RB_StudentRepository studentRepository = new RB_StudentRepository(); /// <summary> /// 地区仓储层对象 /// </summary> private readonly RB_DestinationRepository destinationRepository = new RB_DestinationRepository(); /// <summary> /// 同业 /// </summary> private readonly RB_CustomerRepository customerRepository = new RB_CustomerRepository(); /// <summary> /// 账号处理类 /// </summary> private readonly AccountModule accountModule = new AccountModule(); /// <summary> /// 小程序用户仓储层对象 add by:W 2021-09-15 /// </summary> private readonly RB_Member_UserRepository member_UserRepository = new RB_Member_UserRepository(); /// <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(); /// <summary> /// 学员协助人员仓储层对象 /// </summary> private readonly RB_Student_AssistRepository student_AssistRepository = new RB_Student_AssistRepository(); /// <summary> /// 学员到访仓储层对象 /// </summary> private readonly RB_Student_VisitRepository student_VisitRepository = new RB_Student_VisitRepository(); /// <summary> /// 学员试听课仓储层对象 /// </summary> private readonly RB_Visitor_ReserveRepository visitor_ReserveRepository = new RB_Visitor_ReserveRepository(); /// <summary> /// 获取学生列表 /// </summary> /// <param name="query"></param> /// <returns></returns> public List<RB_Student_ViewModel> GetStudentListModule(RB_Student_ViewModel query) { return studentRepository.GetStudentListRepository(query); } /// <summary> /// 获取学生分页列表 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="rowsCount"></param> /// <param name="query"></param> /// <returns></returns> public List<RB_Student_ViewModel> GetStudentPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_ViewModel query) { var list = studentRepository.GetStudentPageListRepository(pageIndex, pageSize, out rowsCount, query); if (list != null && list.Count > 0) { string stuIds = string.Join(",", list.Select(qitem => qitem.StuId)); //学员跟进 var followList= followRepository.GetStudentFollowListRepository(new Model.ViewModel.Customer.RB_Student_Follow_Extend() { QStuIds = stuIds }); //学员订单 var stuOrderList = student_OrderGuestRepository.GetStrOrderGuestListRepository(new RB_Student_OrderGuest_ViewModel() { QStudentIds = stuIds }); //本周新增 var stuList= studentRepository.GetCustomerStuWeekListRepository(new RB_Student_ViewModel() { CustomerId = query.CustomerId }); //协助人员列表 var assistList = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend() { QStuIds = stuIds }); List<int> empIdList= Common.ConvertHelper.StringToList(string.Join(",", list.Select(qitem => qitem.StuSourceId))); List<int> aIds = Common.ConvertHelper.StringToList(string.Join(",", assistList.Select(qitem => qitem.AssistId))); List<RB_Account_ViewModel> accountList = new List<RB_Account_ViewModel>(); if (aIds!=null&&aIds.Count>0) { empIdList.AddRange(aIds); } if (empIdList != null && empIdList.Count > 0) { accountList = accountModule.GetAccountListExtModule(new RB_Account_ViewModel() { QIds = string.Join(",", empIdList) }); } //学员到访统计 var visitList = student_VisitRepository.GetStudentVisitStaticRepository(new RB_Student_Visit_Extend() { QStuIds = stuIds }); //学员试听统计 var stuReserveList = visitor_ReserveRepository.GetStuReserveStaticsListRepository(new Model.ViewModel.Reserve.RB_Visitor_Reserve_Extend() { QVisitor_Ids = stuIds }); var provideList = list.Where(qitem => qitem.ProviceId > 0).Select(qitem => qitem.ProviceId).ToList(); var cityList = list.Where(qitem => qitem.CityId > 0).Select(qitem => qitem.CityId).ToList(); var areaList = list.Where(qitem => qitem.AreaId > 0).Select(qitem => qitem.AreaId).ToList(); List<int> ids = new List<int>(); if (provideList != null && provideList.Count > 0) { ids.AddRange(provideList); } if (cityList != null && cityList.Count > 0) { ids.AddRange(cityList); } if (areaList != null && areaList.Count > 0) { ids.AddRange(areaList); } string qIds = ""; if (ids != null && ids.Count > 0) { qIds = string.Join(",", ids); } else { qIds = "0"; } var destinationList = destinationRepository.GetDestinationListRepository(new Model.ViewModel.System.RB_Destination_ViewModel() { Ids = qIds }); foreach (var item in list) { var tempOrderList = stuOrderList?.Where(qitem => qitem.Student_Id == item.StuId)?.ToList(); var tempFollow = followList?.Where(qitem => qitem.StuId == item.StuId)?.OrderByDescending(qitem => qitem.Id)?.FirstOrDefault(); item.followUpTime = Common.ConvertHelper.FormatTime(tempFollow?.CreateTime); item.WeekCount = stuList?.Count()??0; item.TodayCount = stuList?.Where(qitem => Common.ConvertHelper.FormatDate(qitem.CreateTime) == Common.ConvertHelper.FormatDate(DateTime.Now))?.Count() ?? 0; item.OrderCount = tempOrderList?.Count() ?? 0; item.RenewOrderCount = tempOrderList?.Where(qitem => qitem.RenewState == 2)?.Count()??0; item.StuGuestState = tempOrderList?.OrderByDescending(qitem => qitem.OrderId)?.LastOrDefault()?.StuGuestState ?? 0; item.AreaName = (destinationList?.FirstOrDefault(qitem => qitem.ID == item.ProviceId)?.Name ?? "") + "/" + (destinationList?.FirstOrDefault(qitem => qitem.ID == item.CityId)?.Name ?? "") + "/" + (destinationList?.FirstOrDefault(qitem => qitem.ID == item.AreaId)?.Name ?? ""); var tempAssistList = assistList?.Where(qitem => qitem.StuId == item.StuId)?.ToList(); foreach (var sItem in tempAssistList) { sItem.AssistName = accountList?.FirstOrDefault(qitem => qitem.Id == sItem.AssistId)?.AccountName ?? ""; } item.AssistList = tempAssistList; item.VisitCount = visitList?.FirstOrDefault(qitem => qitem.StuId == item.StuId)?.VisitCount ?? 0; item.TrialLessonCount = stuReserveList?.FirstOrDefault(qitem => qitem.Visitor_Id == item.StuId)?.TrialLessonCount ?? 0; item.StuSourceIdName = accountList?.FirstOrDefault(qitem => qitem.Id == item.StuSourceId)?.AccountName ?? ""; } } return list; } /// <summary> /// 检查学员是否存在资料库 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool CheckStudentModule(RB_Student_ViewModel model) { List<WhereHelper> where = new List<WhereHelper>() { new WhereHelper(nameof(RB_Student_ViewModel.Group_Id),model.Group_Id), new WhereHelper(nameof(RB_Student_ViewModel.StuTel),model.StuTel), }; if (model.StuId > 0) { where.Add(new WhereHelper() { FiledName = nameof(RB_Student_ViewModel.StuId), FiledValue = model.StuId, OperatorEnum = OperatorEnum.NotEqual }); } return studentRepository.Exists(where); } /// <summary> /// 添加修改学生 /// </summary> /// <param name="model"></param> /// <param name="fromApp">来至于同业 1是</param> /// <returns></returns> public bool SetStudentModule(RB_Student_ViewModel model, int fromApp =0) { bool IsInsert = false; if (model.StuId == 0) { IsInsert = true; } bool flag = studentRepository.SetStudentRepository(model); if (flag) { if (IsInsert && model.CustomerId > 0 && fromApp == 1) { var queryTargetWorkId = accountModule.GetWorkUserIdModule(model.CreateBy); if (!string.IsNullOrEmpty(queryTargetWorkId)) { var cmodel = customerRepository.GetEntity(model.CustomerId); var path = $"/sale/visitorRegistrat?StuId={model.StuId}"; path = System.Web.HttpUtility.UrlEncode(path); string markdownContent = $"`同业添加学生通知` \n>**概要信息** \n>同业名称:{cmodel.CustomerName}({cmodel.ContactNumber})\n>学生名称:{model.StuName}\n>学生电话:{model.StuTel}\n>请点击:[查看详情]({Common.Config.ErpUrl}/autologin?loginId={model.CreateBy}&target={path})"; Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel() { CategoryId = Common.Enum.System.PushMessageCategoryEnum.B2BCustomerStu, Content = markdownContent, CoverImg = "", CreateByName = "系统", JumpUrl = "", WorkMsgType = "markdown", SendTime = DateTime.Now, SendType = 0, Title = "同业添加学生通知", Platform = 5, ReceiveId = queryTargetWorkId }; Common.Message.MessageHelper.SendMessage(modelWork); } } } return flag; } /// <summary> /// 学员转交 /// </summary> /// <param name="StuId">学员编号</param> /// <param name="CreateBy">负责人</param> /// <param name="OperateId">操作人</param> /// <returns></returns> public bool ForwardStudentModule(int StuId, int CreateBy,int OperateId) { return studentRepository.ForwardStudentRepository(StuId, CreateBy, OperateId); } /// <summary> /// 根据学生编号获取学生实体类 /// </summary> /// <param name="StuId"></param> /// <returns></returns> public RB_Student_ViewModel GetStudentModule(int StuId) { var extModel = studentRepository.GetEntity<RB_Student_ViewModel>(StuId); if (extModel != null && extModel.StuId > 0) { var assistList = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend() { StuId = extModel.StuId }); extModel.AssistList = assistList; } return extModel; } /// <summary> /// 更新学生状态 /// </summary> /// <param name="StuId"></param> /// <param name="Status"></param> /// <returns></returns> public bool RemoveStudentModule(int StuId, int Status) { bool flag = false; var model = GetStudentModule(StuId); if (model != null && model.StuId > 0) { Dictionary<string, object> fileds = new Dictionary<string, object>() { {nameof(RB_Student_ViewModel.Status), Status}, }; flag = studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), StuId)); var accountList = accountModule.GetAccountListExtModule(new RB_Account_ViewModel() { AccountId = model.StuId, Account = model.StuTel, AccountType = AccountTypeEnum.Student }); if (accountList != null && accountList.Count > 0) { flag = accountModule.SetAccountStatusModule(new RB_Account_ViewModel() { AccountType = AccountTypeEnum.Student, AccountId = model.StuId, UpdateTime = DateTime.Now, Status = (DateStateEnum)Status }); } } return flag; } /// <summary> /// 更新学员【禁用、启用】 /// </summary> /// <param name="StuId"></param> /// <param name="IsDisable">0-禁用,1-启用</param> /// <returns></returns> public bool UpdateStudentIsDisableModule(object StuId, int IsDisable) { bool flag; Dictionary<string, object> fileds = new Dictionary<string, object>() { {nameof(RB_Student_ViewModel.IsDisable), IsDisable}, }; flag = studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), StuId)); return flag; } /// <summary> /// 创建学生账号 /// </summary> /// <param name="StuId"></param> /// <param name="UserInfo"></param> /// <returns></returns> [TransactionCallHandler] public virtual bool CreateStudentAccountModule(int StuId, UserInfo user) { bool flag = false; var model = GetStudentModule(StuId); if (model != null && model.StuId > 0) { var accountList = accountModule.GetAccountListExtModule(new RB_Account_ViewModel() { Account = model.StuTel, AccountType = AccountTypeEnum.Student }); if (accountList == null || (accountList != null && accountList.Count == 0)) { flag = accountModule.SetAccountModule(new RB_Account_ViewModel() { Account = model.StuTel, Password = Common.DES.Encrypt(Common.Config.DefaultPwd), AccountType = AccountTypeEnum.Student, AccountId = model.StuId, CreateBy = user.Id, UpdateBy = user.Id, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, Group_Id = model.Group_Id, School_Id = model.School_Id, Status = model.Status }); } } return flag; } #region 学生兴趣爱好 /// <summary> /// 新增学生兴趣 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool SetStudentInterest(RB_Student_ViewModel model) { if (model.StuId == 0) { return false; } else { Dictionary<string, object> fileds = new Dictionary<string, object>() { {nameof(RB_Student_ViewModel.Interest),model.Interest }, {nameof(RB_Student_ViewModel.JapanBaseInfo),(int)model.JapanBaseInfo }, {nameof(RB_Student_ViewModel.StuIcon),model.StuIcon.Trim() }, {nameof(RB_Student_ViewModel.StuSex),model.StuSex }, {nameof(RB_Student_ViewModel.UpdateTime),System.DateTime.Now } }; return studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), model.StuId)); } } #endregion /// <summary> /// 根据学生id获取同班账户,必须是未开班/学习中的 /// </summary> /// <param name="teacherIds"></param> /// <returns></returns> public List<RB_Student_ViewModel> GetListByStudentId(int Student_Id, int Group_Id) { return studentRepository.GetListByStudentId(Student_Id, Group_Id); } /// <summary> /// 根据学生id获取学生的班级课程学校信息 /// </summary> /// <param name="teacherIds"></param> /// <returns></returns> public List<RB_Student_ViewModel> GetStudentInfo(int Student_Id, int Group_Id) { return studentRepository.GetStudentInfo(Student_Id, Group_Id); } #region 小程序用户 /// <summary> /// 根据条件获取用户实体 /// </summary> /// <param name="query"></param> /// <returns></returns> public RB_Member_User_Extend GetMemberUserEntityModule(RB_Member_User_Extend query) { return member_UserRepository.GetMemberUserEntityRepository(query); } #endregion } }