using Edu.Common.Enum;
using Edu.Model.ViewModel.Customer;
using Edu.Repository.Customer;
using Edu.Repository.User;
using System;
using System.Collections.Generic;
using System.Text;
using VT.FW.DB;
using System.Linq;
using Edu.Model.ViewModel.User;
using Edu.Common.Plugin;
using Edu.Repository.System;
using Edu.Model.Entity.System;
using Edu.Model.ViewModel.System;
using Edu.Cache.Customer;
using Edu.Repository.StudyAbroad;
using Edu.Model.ViewModel.StudyAbroad;
using Edu.Common.Enum.System;
using Newtonsoft.Json.Linq;
using Edu.Model.CacheModel;

namespace Edu.Module.Customer
{
    /// <summary>
    /// 客户学员处理类对象
    /// </summary>
    public class CustomerStudentModule
    {
        /// <summary>
        /// 学员约访表仓储层对象
        /// </summary>
        private readonly RB_Student_AppointmentRepository student_AppointmentRepository = new RB_Student_AppointmentRepository();

        /// <summary>
        /// 学员跟进仓储层对象
        /// </summary>
        private readonly RB_Student_FollowRepository student_FollowRepository = new RB_Student_FollowRepository();

        /// <summary>
        /// 学员到访表仓储层对象
        /// </summary>
        private readonly RB_Student_VisitRepository student_VisitRepository = new RB_Student_VisitRepository();

        /// <summary>
        /// 学员日志仓储层对象
        /// </summary>
        private readonly RB_Student_LogRepository student_LogRepository = new RB_Student_LogRepository();

        /// <summary>
        /// 校区仓储层对象
        /// </summary>
        private readonly RB_SchoolRepository schoolRepository = new RB_SchoolRepository();

        /// <summary>
        /// 员工对象仓储层对象
        /// </summary>
        private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();

        /// <summary>
        /// 学员订单仓储层对象
        /// </summary>
        private readonly RB_Student_OrderGuestRepository student_OrderGuestRepository = new RB_Student_OrderGuestRepository();

        /// <summary>
        /// 学员协助人员仓储层对象
        /// </summary>
        private readonly RB_Student_AssistRepository student_AssistRepository = new RB_Student_AssistRepository();

        /// <summary>
        /// 客户阶段仓储层对象
        /// </summary>
        private readonly RB_StageRepository stageRepository = new RB_StageRepository();

        /// <summary>
        /// 客户类型仓储层对象
        /// </summary>
        private readonly RB_Student_TypeRepository student_TypeRepository = new RB_Student_TypeRepository();

        /// <summary>
        /// 学习目的仓储层对象
        /// </summary>
        private readonly RB_LearningGoalsRepository learningGoalsRepository = new RB_LearningGoalsRepository();

        /// <summary>
        /// 来源渠道仓储层对象
        /// </summary>
        private readonly RB_ChannelRepository channelRepository = new RB_ChannelRepository();

        /// <summary>
        /// 客户需求仓储层对象
        /// </summary>
        private readonly RB_NeedsRepository needsRepository = new RB_NeedsRepository();

        private readonly Rb_dictvalueRepository dictvalueRepository = new Rb_dictvalueRepository();

        /// <summary>
        /// 留学就业项目仓储层对象
        /// </summary>
        private readonly RB_StudyAbroadRepository studyAbroadRepository = new RB_StudyAbroadRepository();

        /// <summary>
        /// 学员仓储层对象
        /// </summary>
        private readonly RB_StudentRepository studentRepository = new RB_StudentRepository();


        #region 学员约访

        /// <summary>
        /// 获取学员约访分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_Appointment_Extend> GetStudentAppointmentPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_Appointment_Extend query)
        {
            return student_AppointmentRepository.GetStudentAppointmentPageRepository(pageIndex, pageSize, out rowsCount, query);
        }

        /// <summary>
        /// 新增学员约访
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetStudentAppointmentModule(RB_Student_Appointment_Extend model)
        {
            bool flag = false;
            string logContent = "";
            string logTitle = "";
            if (model.Id > 0)
            {
                var oldModel = GetStudentAppointmentModule(model.Id);
                if (oldModel.AppointmentPoint != model.AppointmentPoint)
                {
                    logContent += string.Format("约访地点:由【{0}】=>【{1}】,", oldModel.AppointmentPoint, model.AppointmentPoint);
                }
                if (oldModel.AppointmentTime != model.AppointmentTime)
                {
                    logContent += string.Format("约访时间:由【{0}】=>【{1}】,", oldModel.AppointmentTime, model.AppointmentTime);
                }
                if (oldModel.Remark != model.Remark)
                {
                    logContent += string.Format("备注:由【{0}】=>【{1}】,", oldModel.Remark, model.Remark);
                }
                if (oldModel.Feedback != model.Feedback)
                {
                    logContent += string.Format("反馈:由【{0}】=>【{1}】,", oldModel.Feedback, model.Feedback);
                }
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Student_Appointment_Extend.AppointmentPoint),model.AppointmentPoint },
                    {nameof(RB_Student_Appointment_Extend.AppointmentTime),model.AppointmentTime },
                    {nameof(RB_Student_Appointment_Extend.Remark),model.Remark },
                };
                flag = student_AppointmentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Appointment_Extend.Id), model.Id));
                logTitle = "修改学员约访";
            }
            else
            {
                var newId = student_AppointmentRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
                logTitle = "新增学员约访";
                logContent = model.Remark;
                if (flag) {
                    //增加 跟进记录
                    #region 验证用户的类型
                    var assistList = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend() { StuId = model.StuId });
                    var assistModel = assistList.Where(x => x.AssistId == model.CreateBy).FirstOrDefault();
                    var AssistType = assistModel?.AssistType ?? 0;
                    #endregion
                    
                    student_FollowRepository.Insert(new Model.Entity.Customer.RB_Student_Follow()
                    {
                        StuId = model.StuId,
                        AssistType = AssistType,
                        CreateBy = model.CreateBy,
                        CreateTime = model.CreateTime,
                        Group_Id = model.Group_Id,
                        Id = 0,
                        Remark = $"客人约访:约访时间【{ Common.ConvertHelper.FormatTimeStr2(model.AppointmentTime)}】,约访地点【{model.AppointmentPoint}】,备注【{model.Remark}】",
                        Status = DateStateEnum.Normal,
                        UpdateBy = model.UpdateBy,
                        UpdateTime = model.UpdateTime
                    });
                }
            }
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.Appointment, logTitle, logContent, model.CreateBy);
            return flag;
        }

        /// <summary>
        /// 新增修改约访反馈
        /// </summary>
        /// <param name="Feedback"></param>
        /// <param name="Id"></param>
        /// <param name="OperateId"></param>
        /// <returns></returns>
        public bool SetStudentAppointmentFeedBackModule(string Feedback, int Id, int OperateId)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Student_Appointment_Extend.Feedback),Feedback },
            };
            var oldModel = GetStudentAppointmentModule(Id);
            string logTitle = "修改约访";
            string logContent = "";
            if (oldModel.Feedback != Feedback)
            {
                logContent += string.Format("反馈信息:由【{0}】=>【{1}】", oldModel.Feedback, Feedback);
            }
            bool flag = student_AppointmentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Appointment_Extend.Id), Id));
            student_LogRepository.AddStuLogRepository(oldModel.StuId, Common.Enum.Log.StudentLogTypeEnum.Appointment, logTitle, logContent, OperateId);
            return flag;
        }

        /// <summary>
        /// 根据编号获取学员约访信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public RB_Student_Appointment_Extend GetStudentAppointmentModule(object Id)
        {
            var extModel = student_AppointmentRepository.GetEntity<RB_Student_Appointment_Extend>(Id);
            return extModel;
        }

        /// <summary>
        /// 删除学员约访
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemoveStudentAppointmentModule(object Id, int Uid)
        {
            bool flag = false;
            var model = GetStudentAppointmentModule(Id);
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                { nameof(RB_Student_Appointment_Extend.Status),(int)DateStateEnum.Delete}
            };
            flag = student_AppointmentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Appointment_Extend.Id), Id));
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.Appointment, "删除约访", "删除约访信息", Uid);
            return flag;
        }

        #endregion

        #region 学员跟进

        /// <summary>
        /// 获取学员跟进分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_Follow_Extend> GetStudentFollowPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_Follow_Extend query)
        {
            return student_FollowRepository.GetStudentFollowPageRepository(pageIndex, pageSize, out rowsCount, query);
        }

        /// <summary>
        /// 新增修改学员跟进
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetStudentFollowModule(RB_Student_Follow_Extend model)
        {
            bool flag = false;
            string logContent = "";
            string logTitle = "";
            var assistList = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend() { StuId = model.StuId });
            if (model.Id > 0)
            {
                var oldModel = GetStudentFollowModule(model.Id);
                if (oldModel.Remark != model.Remark)
                {
                    logContent += string.Format("跟进内容:由【{0}】=>【{1}】", oldModel.Remark, model.Remark);
                }
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Student_Follow_Extend.Remark),model.Remark }
                };
                flag = student_FollowRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Follow_Extend.Id), model.Id));
                logTitle = "修改跟进内容";
            }
            else
            {
                #region 验证用户的类型

                var assistModel = assistList.Where(x => x.AssistId == model.CreateBy).FirstOrDefault();
                model.AssistType = assistModel?.AssistType ?? 0;
                #endregion
                var newId = student_FollowRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
                logTitle = "新增跟进";
                logContent = model.Remark;
             
            }
            try
            {
                var smodel = studentRepository.GetEntity(model.StuId);
                string markdownContent = $"`学员跟进通知` \n>**概要信息** \n>学员名称:{smodel?.StuName ?? ""}\n>跟进内容:{model.Remark} \n>";
                Common.Message.PushMessageModel modelWork = new Common.Message.PushMessageModel()
                {
                    CategoryId = PushMessageCategoryEnum.B2BCustomerStu,
                    Content = markdownContent,
                    CoverImg = "",
                    CreateByName = "系统",
                    JumpUrl = "",
                    WorkMsgType = "markdown",
                    SendTime = DateTime.Now,
                    SendType = 0,
                    Title = "新增学员跟进通知",
                    Platform = 5,
                };
                if (smodel != null && smodel.CreateBy > 0)
                {
                    var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(smodel.CreateBy);
                    if (!string.IsNullOrEmpty(queryTargetWorkId))
                    {
                        modelWork.ReceiveId = queryTargetWorkId;
                        List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
                        new Common.Message.MessageHelper().SendMessage(pushList);
                    }
                }
                if (assistList != null && assistList.Count > 0)
                {
                    foreach (var item in assistList)
                    {
                        var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(item.AssistId);
                        if (!string.IsNullOrEmpty(queryTargetWorkId))
                        {
                            modelWork.ReceiveId = queryTargetWorkId;
                            List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
                            new Common.Message.MessageHelper().SendMessage(pushList);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Common.Plugin.LogHelper.Write(ex, "SetStudentFollowModule");
            }
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.Follow, logTitle, logContent, model.CreateBy);
            return flag;
        }

 

        /// <summary>
        /// 根据编号获取学员跟进信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public RB_Student_Follow_Extend GetStudentFollowModule(object Id)
        {
            var extModel = student_FollowRepository.GetEntity<RB_Student_Follow_Extend>(Id);
            return extModel;
        }

        /// <summary>
        /// 根据跟进编号删除学员跟进信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemoveStudentFollowModule(object Id, int Uid)
        {
            var model = GetStudentFollowModule(Id);
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Student_Follow_Extend.Status), (int)DateStateEnum.Delete}
            };
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.Follow, "删除跟进", "删除跟进信息", Uid);
            return student_FollowRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Follow_Extend.Id), Id));
        }
        #endregion

        #region 学员到访

        /// <summary>
        /// 获取学员到访分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_Visit_Extend> GetStudentVisitPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_Visit_Extend query)
        {
            var list = student_VisitRepository.GetStudentVisitPageRepository(pageIndex, pageSize, out rowsCount, query);
            if (list != null && list.Count > 0)
            {
                string sids = string.Join(",", list.Select(qitem => qitem.School_Id));
                string empIds = string.Join(",", list.Select(qitem => qitem.ReceptionPersion));
                var schoolList = schoolRepository.GetSchoolListRepository(new Model.ViewModel.User.RB_School_ViewModel()
                {
                    QSIds = sids
                });
                var empList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel()
                {
                    QIds = empIds
                });
                foreach (var item in list)
                {
                    item.SchoolName = schoolList?.FirstOrDefault(qitem => qitem.SId == item.School_Id)?.SName ?? "";
                    item.ReceptionPersionName = empList?.FirstOrDefault(qitem => qitem.Id == item.ReceptionPersion)?.EmployeeName ?? "";
                }
            }
            return list;
        }

        /// <summary>
        /// 获取到访列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_Visit_Extend> GetStudentVisitListModule(RB_Student_Visit_Extend query)
        {
            var list = student_VisitRepository.GetStudentVisitListRepository(query);
            if (list != null && list.Count > 0)
            {
                string sids = string.Join(",", list.Select(qitem => qitem.School_Id));
                string empIds = string.Join(",", list.Select(qitem => qitem.ReceptionPersion));
                var schoolList = schoolRepository.GetSchoolListRepository(new Model.ViewModel.User.RB_School_ViewModel()
                {
                    QSIds = sids
                });
                var empList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel()
                {
                    QIds = empIds
                });
                foreach (var item in list)
                {
                    item.SchoolName = schoolList?.FirstOrDefault(qitem => qitem.SId == item.School_Id)?.SName ?? "";
                    item.ReceptionPersionName = empList?.FirstOrDefault(qitem => qitem.Id == item.ReceptionPersion)?.EmployeeName ?? "";
                    item.ReceptionPersionTel = empList?.FirstOrDefault(qitem => qitem.Id == item.ReceptionPersion)?.EmployeeTel ?? "";

                }
            }
            return list;
        }

        /// <summary>
        /// 新增修改学员到访
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetStudentVisitModule(RB_Student_Visit_Extend model)
        {
            bool flag = false;
            string logContent = "";
            string logTitle = "";
            if (model.Id > 0)
            {
                var oldModel = GetStudentVisitModule(model.Id);
                logTitle = "修改到访";
                if (oldModel.School_Id != model.School_Id)
                {
                    var schoolList = schoolRepository.GetSchoolListRepository(new Model.ViewModel.User.RB_School_ViewModel() { QSIds = oldModel.School_Id + "," + model.School_Id });
                    logContent += string.Format("校区:由【{0}】=>【{1}】,",
                        schoolList.FirstOrDefault(qitem => qitem.SId == oldModel.School_Id)?.SName,
                        schoolList.FirstOrDefault(qitem => qitem.SId == model.School_Id)?.SName);
                }
                if (oldModel.Date != model.Date)
                {
                    logContent += string.Format("日期:由【{0}】=>【{1}】,", Common.ConvertHelper.FormatDate(oldModel.Date), Common.ConvertHelper.FormatDate(model.Date));
                }
                if (oldModel.VisitTime != model.VisitTime)
                {
                    logContent += string.Format("到访时间:由【{0}】=>【{1}】,", oldModel.VisitTime, model.VisitTime);
                }
                if (oldModel.ReceptionPersion != model.ReceptionPersion)
                {
                    var empList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel()
                    {
                        QIds = oldModel.ReceptionPersion + "," + model.ReceptionPersion
                    });
                    logContent += string.Format("接待人:由【{0}】=>【{1}】,",
                        empList?.FirstOrDefault(qitem => qitem.Id == oldModel.ReceptionPersion)?.EmployeeName,
                        empList?.FirstOrDefault(qitem => qitem.Id == model.ReceptionPersion)?.EmployeeName);
                }
                if (oldModel.Remark != model.Remark)
                {
                    logContent += string.Format("备注:由【{0}】=>【{1}】,", oldModel.Remark, model.Remark);
                }
                if (oldModel.Feedback != model.Feedback)
                {
                    logContent += string.Format("反馈信息:由【{0}】=>【{1}】,", oldModel.Feedback, model.Feedback);
                }
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Student_Visit_Extend.School_Id),model.School_Id },
                    {nameof(RB_Student_Visit_Extend.Date),model.Date },
                    {nameof(RB_Student_Visit_Extend.VisitTime),model.VisitTime },
                    {nameof(RB_Student_Visit_Extend.ReceptionPersion),model.ReceptionPersion },
                    {nameof(RB_Student_Visit_Extend.Remark),model.Remark },
                };
                flag = student_VisitRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Visit_Extend.Id), model.Id));
            }
            else
            {
                var newId = student_VisitRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
                logTitle = "新增到访";
                logContent = model.Remark;
                if (flag)
                {
                    //增加 跟进记录
                    #region 验证用户的类型
                    var assistList = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend() { StuId = model.StuId });
                    var assistModel = assistList.Where(x => x.AssistId == model.CreateBy).FirstOrDefault();
                    var AssistType = assistModel?.AssistType ?? 0;
                    #endregion
                    student_FollowRepository.Insert(new Model.Entity.Customer.RB_Student_Follow()
                    {
                        StuId = model.StuId,
                        AssistType = AssistType,
                        CreateBy = model.CreateBy,
                        CreateTime = model.CreateTime,
                        Group_Id = model.Group_Id,
                        Id = 0,
                        Remark = $"客人到访:到访时间【{Common.ConvertHelper.FormatDate(model.Date) + " " + model.VisitTime}】,到访校区【{schoolRepository.GetEntity(model.School_Id)?.SName ?? ""}】,接待人【{accountRepository.GetEmployeeInfo(model.ReceptionPersion)?.EmployeeName ?? ""}】,备注【{model.Remark}】",
                        Status = DateStateEnum.Normal,
                        UpdateBy = model.UpdateBy,
                        UpdateTime = model.UpdateTime
                    });

                    //获取学生信息
                    //var smodel = studentRepository.GetEntity(model.StuId);
                    //if (smodel != null && smodel.StuStage == Common.Enum.User.StuStageEnum.NewStu)
                    //{
                    //    Dictionary<string, object> keyValues = new Dictionary<string, object>() {
                    //        { nameof(RB_Student_ViewModel.StuStage), Common.Enum.User.StuStageEnum.PreliminaryCommunication}
                    //    };
                    //    List<WhereHelper> wheres = new List<WhereHelper>() {
                    //        new WhereHelper(){
                    //            FiledName = nameof (RB_Student_ViewModel.StuId),
                    //                FiledValue = model.StuId,
                    //                OperatorEnum =OperatorEnum.Equal
                    //            }
                    //    };
                    //    studentRepository.Update(keyValues, wheres);
                    //    student_LogRepository.Insert(new Model.Entity.Customer.RB_Student_Log()
                    //    {
                    //        LogId = 0,
                    //        CreateBy = model.CreateBy,
                    //        CreateTime = DateTime.Now,
                    //        CreateType = 1,
                    //        Group_Id = model.Group_Id,
                    //        LogContent = "首次拜访,客户阶段由'" + (Common.Enum.User.StuStageEnum.NewStu.ToName()) + "'自动转换为'" + (Common.Enum.User.StuStageEnum.PreliminaryCommunication.ToName()) + "'",
                    //        LogTitle = "客户阶段变更",
                    //        LogType = Common.Enum.Log.StudentLogTypeEnum.BasicInfo,
                    //        StuId = model.StuId
                    //    });
                    //}
                }
            }
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.Visit, logTitle, logContent, model.CreateBy);
            return flag;
        }

        /// <summary>
        /// 新增修改反馈
        /// </summary>
        /// <param name="Feedback"></param>
        /// <param name="Id"></param>
        /// <param name="OperateId"></param>
        /// <returns></returns>
        public bool SetStudentVisitFeedbackModule(string Feedback, int Id, int OperateId, int IsVisit)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Student_Visit_Extend.Feedback),Feedback },
                {nameof(RB_Student_Visit_Extend.IsVisit),IsVisit },
            };
            var oldModel = GetStudentVisitModule(Id);
            string logTitle = "修改到访";
            string logContent = "";
            if (oldModel.Feedback != Feedback)
            {
                logContent += string.Format("反馈信息:由【{0}】=>【{1}】", oldModel.Feedback, Feedback);
            }
            if (oldModel.IsVisit != IsVisit)
            {
                logContent += string.Format("到访状态:由【{0}】=>【{1}】", oldModel.IsVisitStr, (IsVisit == 1 ? "已到访" : "未到访"));
            }
            bool flag = student_VisitRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Visit_Extend.Id), Id));
            student_LogRepository.AddStuLogRepository(oldModel.StuId, Common.Enum.Log.StudentLogTypeEnum.Visit, logTitle, logContent, OperateId);
            return flag;
        }

        /// <summary>
        /// 根据编号获取学员到访信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public RB_Student_Visit_Extend GetStudentVisitModule(object id)
        {
            var extModel = student_VisitRepository.GetEntity<RB_Student_Visit_Extend>(id);
            return extModel;
        }

        /// <summary>
        /// 根据到访编号删除学员到访信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemoveStudentVisitModule(object Id, int Uid)
        {
            var model = GetStudentVisitModule(Id);
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Student_Visit_Extend.Status), (int)DateStateEnum.Delete}
            };
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.Visit, "删除到访", "删除客户到访", Uid);
            return student_VisitRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Visit_Extend.Id), Id));
        }
        #endregion

        #region 学员日志

        /// <summary>
        /// 获取学员日志分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_Log_Extend> GetStudentLogPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_Log_Extend query)
        {
            var list = student_LogRepository.GetStudentLogPageRepository(pageIndex, pageSize, out rowsCount, query);
            return list;
        }

        #endregion

        #region 学员订单和合同

        

        /// <summary>
        /// 获取学员关联订单分页列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_OrderGuest_ViewModel> GetStuOrderGuestPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_OrderGuest_ViewModel query)
        {
            var list = student_OrderGuestRepository.GetStuOrderGuestPageRepository(pageIndex, pageSize, out rowsCount, query);
            if (list != null && list.Count > 0)
            {
                var tempList = list?.Where(qitem => qitem.OrderType == Common.Enum.Sale.OrderTypeEnum.StudyabroadOrder && qitem.SourceId > 0)?.ToList();
                List<RB_StudyAbroad_ViewModel> studyList = new List<RB_StudyAbroad_ViewModel>();
                if (tempList != null)
                {
                    string SourceIds = string.Join(",", tempList.Select(qitem => qitem.SourceId));
                    if (!string.IsNullOrEmpty(SourceIds))
                    {
                        studyList = studyAbroadRepository.GetStudyAbroadListRepository(new RB_StudyAbroad_ViewModel()
                        {
                            QIds = SourceIds
                        });
                    }
                }
                foreach (var item in list)
                {
                    if (item.OrderType == Common.Enum.Sale.OrderTypeEnum.StudyabroadOrder && item.SourceId > 0)
                    {
                        item.CourseId = item.SourceId;
                        item.CourseName = studyList?.Where(qitem => qitem.Id == item.SourceId)?.FirstOrDefault()?.Name ?? "";
                    }
                }
            }
            return list;
        }


        /// <summary>
        /// 获取学员关联订单合同分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_OrderGuest_ViewModel> GetStuOrderGuestContractPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Student_OrderGuest_ViewModel query)
        {
            var list = student_OrderGuestRepository.GetStuContractGuestPageRepository(pageIndex, pageSize, out rowsCount, query);
            return list;
        }

        #endregion

        #region 协助人员

        /// <summary>
        /// 新增修改协助人员
        /// </summary>
        /// <param name="StuId"></param>
        /// <param name="AssistList"></param>
        /// <returns></returns>
        public bool SetStudentAssistModule(int StuId, RB_Student_Assist_Extend model, int Uid)
        {
            bool flag = true;
            string logTitle = "协助人员";
            string logContent = "";
            var oldModel = student_AssistRepository.GetEntity(model.Id);
            model.CreateBy = Uid;
            model.CreateTime = DateTime.Now;
            List<Employee_ViewModel> empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel()
            {
                QIds = (oldModel?.AssistId ?? 0) + "," + model.AssistId
            });

            if (model.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Student_Assist_Extend.AssistType),model.AssistType },
                    {nameof(RB_Student_Assist_Extend.AssistId),model.AssistId },
                };
                if (oldModel!=null&&oldModel.AssistId != model.AssistId)
                {
                    logContent += string.Format("修改协同人员:【{0}】=>【{1}】",
                                 empList?.FirstOrDefault(qitem => qitem.Id == (oldModel?.AssistId ?? 0))?.EmployeeName,
                                 empList?.FirstOrDefault(qitem => qitem.Id == model.AssistId)?.EmployeeName
                                 );
                }
                logContent += string.Format("修改协同类型:【{0}】=>【{1}】", oldModel.AssistType.ToName(), model.AssistType.ToName());
                flag = student_AssistRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Assist_Extend.Id), model.Id));
            }
            else
            {
                logContent += string.Format("新增协同人员:" + empList?.FirstOrDefault(qitem => qitem.Id == model.AssistId)?.EmployeeName);
                logContent += string.Format(" 协同类型:【{0}】",  model.AssistType.ToName());
                var newId = student_AssistRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
            }
            //推送
            var stuAssistList = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend() { StuId = StuId });
            if (stuAssistList != null && stuAssistList.Count > 0)
            {
                var stuModel= studentRepository.GetEntity(StuId);
                var empModel = accountRepository.GetEmployeeInfo(Uid); 
                foreach (var item in stuAssistList)
                {
                    var queryTargetWorkId = accountRepository.GetWorkUserIdRepository(item.AssistId);
                    if (!string.IsNullOrEmpty(queryTargetWorkId))
                    {
                        string markdownContent = $"`学员推送提醒` \n>**概要信息** \n>学员姓名:{stuModel.StuName}\n>推送人:{empModel.EmployeeName}\n>备注:您收到了一个新的学员名单,请及时跟进\n>";
                        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
                        };
                        List<Common.Message.PushMessageModel> pushList = new List<Common.Message.PushMessageModel>() { modelWork };
                        new Common.Message.MessageHelper().SendMessage(pushList);
                    }
                }
            }
            student_LogRepository.AddStuLogRepository(StuId, Common.Enum.Log.StudentLogTypeEnum.BasicInfo, logTitle, logContent, Uid);
            return flag;
        }


        /// <summary>
        /// 删除协助人员
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="Uid"></param>
        /// <returns></returns>
        public bool RemoveStudentAssistModule(int Id, int Uid)
        {
            bool flag = false;
            string logTitle = "删除协助人员";
            string logContent = "";
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Student_Assist_Extend.Status),(int)DateStateEnum.Delete}
            };
            var model = student_AssistRepository.GetEntity(Id);

            var empModel = accountRepository.GetEmployeeListRepository(new Employee_ViewModel()
            {
                QIds = model.AssistId.ToString()
            })?.FirstOrDefault();
            logContent += string.Format("删除协助人员:{0}", empModel?.EmployeeName);
            student_LogRepository.AddStuLogRepository(model.StuId, Common.Enum.Log.StudentLogTypeEnum.BasicInfo, logTitle, logContent, Uid);
            flag = student_AssistRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Assist_Extend.Id), Id));
            return flag;
        }

        /// <summary>
        /// 检查协助类型是否存在
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public bool CheckAssistTypeExistsModule(RB_Student_Assist_Extend query)
        {
            List<WhereHelper> list = new List<WhereHelper>
            {
                new WhereHelper(nameof(RB_Student_Assist_Extend.AssistType), (int)query.AssistType),
                new WhereHelper(nameof(RB_Student_Assist_Extend.Status), (int)DateStateEnum.Normal),
                new WhereHelper(nameof(RB_Student_Assist_Extend.StuId), query.StuId)
            };
            if (query.Id > 0)
            {
                list.Add(new WhereHelper()
                {
                    FiledName = nameof(RB_Student_Assist_Extend.Id),
                    FiledValue = query.Id,
                    OperatorEnum = OperatorEnum.NotEqual
                });
            }
            return student_AssistRepository.Exists(list);
        }        

        /// <summary>
        /// 推送课程顾问
        /// </summary>
        /// <param name="studIds"></param>
        /// <param name="uid"></param>
        /// <returns></returns>
        public (bool result, string msg) SetStudentAssistBatchModule(string studIds,int uid)
        {
            //语培推送配置
            var pushKey = "PUSH_STU_UNION_EMP";
            var pushRule = "PUSH_STU_RULETYPE";
            //留学就业类推送配置
            string studyabroad = "PUSH_STU_STUDYABROAD";
            //配置列表
            var dicList = dictvalueRepository.GetList(new RB_Dictvalue_Extend()
            {
                QDictKeys = string.Format("'{0}','{1}','{2}'", pushKey, pushRule, studyabroad)
            });
            var stuList = studentRepository.GetStudentListRepository(new RB_Student_ViewModel() { StuIds = studIds.TrimStart(',').TrimEnd(',') });
            var push = dicList.Where(qitem => qitem.DictKey == pushKey).FirstOrDefault();
            var rule = dicList.Where(qitem => qitem.DictKey == pushRule).FirstOrDefault();
            var study= dicList.Where(qitem => qitem.DictKey == studyabroad).FirstOrDefault();
            var mask = string.Empty;
            if (stuList != null && stuList.Count > 0)
            {
                foreach (var item in stuList)
                {
                    var model = new RB_Student_Assist_Extend()
                    {
                        Id = 0,
                        AssistType = Common.Enum.User.AssistTypeEnum.CourseAdviser,
                        StuId = item.StuId,
                        Status = DateStateEnum.Normal
                    };
                    if (!string.IsNullOrEmpty(study.Content))
                    {
                        JArray jArray = JArray.Parse(study.Content);
                        if (jArray != null && jArray.Count > 0)
                        {
                            bool isExists = false;
                            RB_Dictvalue_Extend tempItem = null;
                            foreach (var jItem in jArray)
                            {
                                JObject sObj = JObject.Parse(jItem.ToString());
                                if (!isExists&& sObj.GetStringValue("Code").Contains(item.StuNeeds.ToString()))
                                {
                                    isExists = true;
                                    tempItem = new RB_Dictvalue_Extend()
                                    {
                                        Content= sObj.GetStringValue("Content"),
                                        Mask= sObj.GetStringValue("Mask"),
                                    };
                                }
                            }
                            if (isExists)
                            {
                                mask += PushStudyManagerModule(tempItem, model, uid);
                            }
                            else
                            {
                                mask += PushCourseManagerModule(push, rule, model, uid);
                            }
                        }
                    }
                    //语培客户分配规则
                    else
                    {
                        mask += PushCourseManagerModule(push, rule, model, uid);
                    }
                }
                return (true, "学员批量转课程顾问成功,已分别转给顾问:" + mask);
            }
            else
            {
                return (false, "未获取到学员信息");
            }
        }

        /// <summary>
        /// 推送学员给留学顾问
        /// </summary>
        /// <param name="study"></param>
        /// <param name="model"></param>
        /// <param name="uid"></param>
        /// <returns></returns>
        private string PushStudyManagerModule(RB_Dictvalue_Extend study, RB_Student_Assist_Extend model,int uid)
        {
            string mask = "";
            var idArray = Common.ConvertHelper.StringToList(study.Content);
            var nameArray = Common.ConvertHelper.StringToFileList(study.Mask);
            if (idArray != null && idArray.Count > 0)
            {
                model.AssistId = idArray[0];
                SetStudentAssistModule(model.StuId, model, uid);
                mask += mask.Contains("," + nameArray[0]) ? "" : "," + nameArray[0];
            }
            return mask;
        }

        /// <summary>
        /// 推送学员给普通课程顾问
        /// </summary>
        /// <param name="push"></param>
        /// <param name="rule"></param>
        /// <param name="model"></param>
        /// <param name="uid"></param>
        /// <param name="mask"></param>
        private string PushCourseManagerModule(RB_Dictvalue_Extend push, RB_Dictvalue_Extend rule, RB_Student_Assist_Extend model,int uid)
        {
            string mask = "";
            var guwen = push.Content.Split(',', StringSplitOptions.RemoveEmptyEntries);
            var guwenName = push.Mask.Split(',', StringSplitOptions.RemoveEmptyEntries);
            if (guwen.Length > 0)
            {
                if (rule.Content.Equals("1"))
                {
                    Random ran = new Random();
                    var cur = ran.Next(0, guwen.Length - 1);
                    model.AssistId = int.Parse(guwen[cur]);
                    SetStudentAssistModule(model.StuId, model, uid);
                    mask += mask.Contains("," + guwenName[cur]) ? "" : "," + guwenName[cur];
                }
                else
                {
                    var cache = CustomerRedisCache.Get();
                    if (cache >= guwen.Length)
                    {
                        CustomerRedisCache.Set(1);
                        cache = 0;
                    }
                    model.AssistId = int.Parse(guwen[cache]);
                    SetStudentAssistModule(model.StuId, model, uid);
                    mask += mask.Contains("," + guwenName[cache]) ? "" : "," + guwenName[cache];
                }
            }
            return mask;
        }

        /// <summary>
        /// 获取学员协助人员列表
        /// </summary>
        /// <param name="StuId"></param>
        /// <returns></returns>
        public List<RB_Student_Assist_Extend> GeStudentAssistListModule(int StuId)
        {
            var list = student_AssistRepository.GetStudentAssistListRepository(new RB_Student_Assist_Extend()
            {
                StuId = StuId
            });
            string aIds = string.Join(",", list.Select(qitem => qitem.AssistId));
            List<RB_Account_ViewModel> accountList = new List<RB_Account_ViewModel>();
            if (!string.IsNullOrEmpty(aIds))
            {
                accountList = accountRepository.GetAccountListExtRepository(new RB_Account_ViewModel() { QIds = aIds });
            }
            foreach (var item in list)
            {
                item.AssistName = accountList?.FirstOrDefault(qitem => qitem.Id == item.AssistId)?.AccountName ?? "";
            }
            return list;
        }

        #endregion

        #region 客户阶段

        /// <summary>
        /// 获取客户阶段列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Stage> GetStageListModule(RB_Stage query)
        {
            var list = stageRepository.GetStageListRepostory(query);
            return list;
        }

        /// <summary>
        /// 新增修改客户阶段
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetStageModule(RB_Stage model)
        {
            bool flag = false;
            if (model.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Stage.No),model.No },
                    {nameof(RB_Stage.StageName),model.StageName },
                    {nameof(RB_Stage.UpdateBy),model.UpdateBy },
                    {nameof(RB_Stage.UpdateTime),model.UpdateTime },
                };
                flag = stageRepository.Update(fileds, new WhereHelper(nameof(RB_Stage.Id), model.Id));
            }
            else
            {
                var newId = stageRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
            }
            return flag;
        }

        /// <summary>
        /// 删除客户阶段
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemodeStageModule(int Id)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Stage.Status),(int)DateStateEnum.Delete },
            };
            bool flag = stageRepository.Update(fileds, new WhereHelper(nameof(RB_Stage.Id), Id));
            return flag;
        }

        #endregion

        #region 客户类型
        /// <summary>
        /// 获取客户类型列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Student_Type_Extend> GetStudentTypeListModule(RB_Student_Type_Extend query)
        {
            var list = student_TypeRepository.GetStudentTypeListRepository(query);
            return list;
        }

        /// <summary>
        /// 新增修改客户类型
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetStudentTypeModule(RB_Student_Type_Extend model)
        {
            bool flag = false;
            if (model.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Student_Type_Extend.No),model.No },
                    {nameof(RB_Student_Type_Extend.Name),model.Name },
                    {nameof(RB_Student_Type_Extend.Info),model.Info },
                    {nameof(RB_Student_Type_Extend.UpdateBy),model.UpdateBy },
                    {nameof(RB_Student_Type_Extend.UpdateTime),model.UpdateTime },
                };
                flag = student_TypeRepository.Update(fileds, new WhereHelper(nameof(RB_Student_Type_Extend.Id), model.Id));
            }
            else
            {
                var newId = student_TypeRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
            }
            return flag;
        }

        /// <summary>
        /// 删除客户类型
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemodeStudentTypeModule(int Id)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Student_Type_Extend.Status),(int)DateStateEnum.Delete },
            };
            bool flag = student_TypeRepository.Update(fileds, new WhereHelper(nameof(RB_Stage.Id), Id));
            return flag;
        }
        #endregion

        #region 学习目的

        /// <summary>
        /// 获取学习目的分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_LearningGoals_Extend> GetLearningGoalsPageModule(int pageIndex, int pageSize, out long rowsCount, RB_LearningGoals_Extend query)
        {
            var list = learningGoalsRepository.GetLearningGoalsPageRepository(pageIndex, pageSize, out rowsCount, query);
            return list;
        }

        /// <summary>
        /// 获取学习目的列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_LearningGoals_Extend> GetLearningGoalsListModule(RB_LearningGoals_Extend query)
        {
            var list = learningGoalsRepository.GetLearningGoalsListRepository(query);
            return list;
        }

        /// <summary>
        /// 获取学习目的实体类
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public RB_LearningGoals_Extend GetLearningGoalsExtEntityModule(int Id)
        {
            var extModel = learningGoalsRepository.GetLearningGoalsExtEntityRepository(Id);
            return extModel;
        }

        /// <summary>
        /// 新增修改学习目的
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetLearningGoalsModule(RB_LearningGoals_Extend model)
        {
            bool flag = false;
            if (model.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_LearningGoals_Extend.Name),model.Name },
                    {nameof(RB_LearningGoals_Extend.UpdateBy),model.UpdateBy },
                    {nameof(RB_LearningGoals_Extend.UpdateTime),model.UpdateTime },
                };
                flag = learningGoalsRepository.Update(fileds, new WhereHelper(nameof(RB_LearningGoals_Extend.Id), model.Id));
            }
            else
            {
                var newId = learningGoalsRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
            }
            return flag;

        }

        /// <summary>
        /// 删除学习目的
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemoveLearningGoalsModule(int Id)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_LearningGoals_Extend.Status),(int)DateStateEnum.Delete },
            };
            bool flag = learningGoalsRepository.Update(fileds, new WhereHelper(nameof(RB_LearningGoals_Extend.Id), Id));
            return flag;
        }

        #endregion

        #region 客户渠道
        /// <summary>
        /// 获取渠道分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Channel_Extend> GetChannelPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Channel_Extend query)
        {
            var list = channelRepository.GetChannelPageRepository(pageIndex, pageSize, out rowsCount, query);
            return list;
        }


        /// <summary>
        /// 获取渠道列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Channel_Extend> GetChannelListModule(RB_Channel_Extend query)
        {
            var list = channelRepository.GetChannelListRepository(query);
            return list;
        }

        /// <summary>
        /// 获取学习目的实体类
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public RB_Channel_Extend GetChannelExtEntityModule(int Id)
        {
            var extModel = channelRepository.GetChannelExtEntityRepository(Id);
            return extModel;
        }

        /// <summary>
        /// 新增修改收客渠道
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetChannelModule(RB_Channel_Extend model)
        {
            bool flag = false;
            if (model.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Channel_Extend.Name),model.Name },
                    {nameof(RB_Channel_Extend.UpdateBy),model.UpdateBy },
                    {nameof(RB_Channel_Extend.UpdateTime),model.UpdateTime },
                    {nameof(RB_Channel_Extend.StaticType),model.StaticType },
                };
                flag = channelRepository.Update(fileds, new WhereHelper(nameof(RB_Channel_Extend.Id), model.Id));
            }
            else
            {
                var newId = channelRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
            }
            return flag;
        }

        /// <summary>
        /// 删除收客渠道
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemoveChannelModule(int Id)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Channel_Extend.Status),(int)DateStateEnum.Delete},
            };
            var flag = channelRepository.Update(fileds, new WhereHelper(nameof(RB_Channel_Extend.Id), Id));
            return flag;
        }
        #endregion

        #region 客户需求

        /// <summary>
        /// 获取客户需求分页列表
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="rowsCount"></param>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Needs_Extend> GetNeedsPageModule(int pageIndex, int pageSize, out long rowsCount, RB_Needs_Extend query)
        {
            var list = needsRepository.GetNeedsPageRepository(pageIndex, pageSize, out rowsCount, query);
            return list;
        }

        /// <summary>
        /// 获取客户需求列表
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public List<RB_Needs_Extend> GetNeedsListModule(RB_Needs_Extend query)
        {
            var list = needsRepository.GetNeedsListRepository(query);
            return list;
        }

        /// <summary>
        /// 获取客户需求实体类
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public RB_Needs_Extend GetNeedsExtEntityModule(int Id)
        {
            var extModel = needsRepository.GetNeedsExtEntityRepository(Id);
            return extModel;
        }

        /// <summary>
        /// 新增修改客户需求
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool SetNeedsModule(RB_Needs_Extend model)
        {
            bool flag = false;
            if (model.Id > 0)
            {
                Dictionary<string, object> fileds = new Dictionary<string, object>()
                {
                    {nameof(RB_Needs_Extend.Name),model.Name },
                    {nameof(RB_Needs_Extend.UpdateBy),model.UpdateBy },
                    {nameof(RB_Needs_Extend.UpdateTime),model.UpdateTime },
                };
                flag = needsRepository.Update(fileds, new WhereHelper(nameof(RB_Needs_Extend.Id), model.Id));
            }
            else
            {
                var newId = needsRepository.Insert(model);
                model.Id = newId;
                flag = newId > 0;
            }
            return flag;
        }

        /// <summary>
        /// 删除客户需求
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool RemoveNeedsModule(int Id)
        {
            Dictionary<string, object> fileds = new Dictionary<string, object>()
            {
                {nameof(RB_Needs_Extend.Status),(int)DateStateEnum.Delete},
            };
            var flag = needsRepository.Update(fileds, new WhereHelper(nameof(RB_Needs_Extend.Id), Id));
            return flag;
        }
        #endregion

        #region 学员填报上传 + 顾问给市场提成确认

        /// <summary>
        /// 学员填表上传
        /// </summary>
        /// <param name="stuId"></param>
        /// <param name="voucher"></param>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        public bool SetStudentVoucher(int stuId, string voucher, UserInfo userInfo)
        {
            Dictionary<string, object> keyValues = new Dictionary<string, object>() {
                { nameof(RB_Student_ViewModel.FileVoucher), voucher},
            };
            List<WhereHelper> wheres = new List<WhereHelper>() {
                new WhereHelper (){
                 FiledName = nameof(RB_Student_ViewModel.StuId),
                  FiledValue = stuId,
                   OperatorEnum =OperatorEnum.Equal
                }
            };
            bool flag = studentRepository.Update(keyValues, wheres);
            if (flag) {
                student_LogRepository.Insert(new Model.Entity.Customer.RB_Student_Log()
                {
                    LogId = 0,
                    CreateBy = userInfo.Id,
                    CreateTime = DateTime.Now,
                    CreateType = 1,
                    Group_Id = userInfo.Group_Id,
                    LogContent = "上传学员填表附件",
                    LogTitle = "上传资料",
                    LogType = Common.Enum.Log.StudentLogTypeEnum.BasicInfo,
                    StuId = stuId
                });
            }
            return flag;
        }

        /// <summary>
        /// 确认邀约咨询30分钟以上  1是
        /// </summary>
        /// <param name="stuId"></param>
        /// <param name="isSureConsultTime"></param>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        public bool SetStudentSureConsult(int stuId, int isSureConsultTime, UserInfo userInfo)
        {
            Dictionary<string, object> keyValues = new Dictionary<string, object>() {
                { nameof(RB_Student_ViewModel.IsSureConsultTime), isSureConsultTime},
            };
            List<WhereHelper> wheres = new List<WhereHelper>() {
                new WhereHelper (){
                 FiledName = nameof(RB_Student_ViewModel.StuId),
                  FiledValue = stuId,
                   OperatorEnum =OperatorEnum.Equal
                }
            };
            bool flag = studentRepository.Update(keyValues, wheres);
            if (flag)
            {
                student_LogRepository.Insert(new Model.Entity.Customer.RB_Student_Log()
                {
                    LogId = 0,
                    CreateBy = userInfo.Id,
                    CreateTime = DateTime.Now,
                    CreateType = 1,
                    Group_Id = userInfo.Group_Id,
                    LogContent = $"修改学生是否邀约咨询30分钟以上【{(isSureConsultTime == 1 ? "是" : "否")}】",
                    LogTitle = "修改咨询状态",
                    LogType = Common.Enum.Log.StudentLogTypeEnum.BasicInfo,
                    StuId = stuId
                });
            }
            return flag;
        }

        #endregion
    }
}