using Edu.AOP.CustomerAttribute; using Edu.Common.Enum.Course; using Edu.Common.Enum.Sale; using Edu.Common.Plugin; using Edu.Model.CacheModel; using Edu.Model.Entity.Course; using Edu.Model.Entity.EduTask; using Edu.Model.ViewModel.Course; using Edu.Model.ViewModel.Grade; using Edu.Model.ViewModel.Scroll; using Edu.Model.ViewModel.Sell; using Edu.Module.Course; using Edu.Repository.Course; using Edu.Repository.Customer; using Edu.Repository.EduTask; using Edu.Repository.Grade; using Edu.Repository.Scroll; using Edu.Repository.Sell; using Edu.Repository.User; using System; using System.Collections.Generic; using System.Linq; using System.Text; using VT.FW.DB; namespace Edu.Module.EduTask { public class CourseVipModule { /// /// VIP课程申请仓储层 /// private readonly RB_Course_VipRepository course_VipRepository = new RB_Course_VipRepository(); /// /// 教务单据仓储层对象 /// private readonly RB_Education_ReceiptRepository education_ReceiptRepository = new RB_Education_ReceiptRepository(); /// /// 课程仓储层对象 /// public readonly RB_CourseRepository courseRepository = new RB_CourseRepository(); /// /// 课程章节对象 /// public readonly RB_Course_ChapterRepository course_ChapterRepository = new RB_Course_ChapterRepository(); /// /// 上课时段 /// private readonly RB_Scroll_CourseTimeRepository scroll_CourseTimeRepository = new RB_Scroll_CourseTimeRepository(); /// /// 学员协助人员仓储层对象 /// private readonly RB_Student_AssistRepository student_AssistRepository = new RB_Student_AssistRepository(); /// /// 班级处理类对象 /// private readonly ClassModule classModule = new ClassModule(); /// /// 学生 /// private readonly RB_StudentRepository studentRepository = new RB_StudentRepository(); private readonly OrderModule orderModule = new OrderModule(); /// /// 新增修改停课申请 /// /// [TransactionCallHandler] public virtual bool SetCourseVipModule(RB_Course_Vip_Extend extModel,out string message) { message = ""; bool flag = false; if (extModel.Id > 0) { Dictionary fileds = new Dictionary() { {nameof(RB_Course_Vip_Extend.CourseName),extModel.CourseName }, {nameof(RB_Course_Vip_Extend.Remarks),extModel.Remarks }, }; flag = course_VipRepository.Update(fileds, new WhereHelper(nameof(RB_Course_Vip_Extend.Id), extModel.Id)); } else { var newId = course_VipRepository.Insert(extModel); extModel.Id = newId; flag = newId > 0; if (flag) { var educationReceipt = new RB_Education_Receipt() { Id = 0, Title = "Vip课程申请", ReceiptType = Common.Enum.Finance.ReceiptTypeEnum.VipCourse, RelationId = newId, ClassId = 0, Group_Id = extModel.Group_Id, School_Id = extModel.School_Id, CreateBy = extModel.CreateBy, CreateTime = extModel.CreateTime, UpdateBy = extModel.UpdateBy, UpdateTime = extModel.UpdateTime, VerifyStatus = Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit, ReceiptFile = "" }; flag = education_ReceiptRepository.SetEducationReceiptRepository(educationReceipt, out message); } } return flag; } /// /// 计算章节次数 /// /// 上课时段编号 /// 课时类型(1-课时,2-小时) /// 总时间 /// 提示信息 /// public int CalcChapterTimesModule(int CourseTimeId,int HourType,decimal TotalHour,out decimal StudyMinutes,out decimal StudyHours, out string message) { message = ""; var timeModel = scroll_CourseTimeRepository.GetList(new RB_Scroll_CourseTime_ViewModel() { CourseTimeIds = CourseTimeId.ToString() })?.FirstOrDefault(); List timeList = new List(); decimal totalMinutes = 0; if (HourType == 1) { totalMinutes = TotalHour * 45; } else { totalMinutes = TotalHour * 60; } StudyMinutes = 0; StudyHours = 0; if (timeModel != null && !string.IsNullOrEmpty(timeModel.Content)) { timeList = JsonHelper.DeserializeObject>(timeModel.Content); StudyMinutes = timeList?.FirstOrDefault()?.Minutes ?? 60; StudyHours= timeList?.FirstOrDefault()?.ClassHours ?? 2; } int times = 0; if (Convert.ToInt32(totalMinutes) % Convert.ToInt32(StudyMinutes) == 0) { times = Convert.ToInt32(totalMinutes) / Convert.ToInt32(StudyMinutes); } else { times = Convert.ToInt32(totalMinutes) / Convert.ToInt32(StudyMinutes) + 1; message = "总课时和上课时段存在冲突,请调整课时或小时!"; } return times; } /// /// Vip课程申请转订单 /// /// /// public virtual bool SetCourseVipToOrderModule(RB_Course_Vip model, UserInfo userInfo) { bool flag = false; if (model != null) { var courseModel = new RB_Course_ViewModel() { CourseId = 0, CoverImg = "", CourseName = model.CourseName, CourseIntro = "", CateId = 12,//日语VIP订制系列 OriginalPrice = model.CoursePrice, SellPrice = model.CoursePrice, ChineseHours=model.TotalHour, ClassHours = model.TotalHour, CourseTimeId = model.CourseTimeId, }; courseModel.CreateBy = model.CreateBy; courseModel.CreateTime = DateTime.Now; courseModel.UpdateBy = model.CreateBy; courseModel.UpdateTime = DateTime.Now; courseModel.Group_Id = model.Group_Id; courseModel.School_Id = 0; courseModel.Status = Common.Enum.DateStateEnum.Normal; courseModel.Teacher_Ids = ""; courseModel.IsShowChapterNo = 0; courseModel.CourseFeature = ""; courseModel.IsOpenStepPrice = 0; courseModel.IsRenew = 0; courseModel.RenewOgPrice = 0; courseModel.RenewSlPrice = 0; courseModel.Saleplat = "1,2,3"; courseModel.IsKCourse = 0; courseModel.CourseRate = CourseRateEnum.Advanced; courseModel.CourseSubject = 1; courseModel.B2BIcon = ""; courseModel.B2BBackground = ""; courseModel.CourseEmphasis = ""; courseModel.ContractInfo = ""; courseModel.IsScrollClass = 1; courseModel.ScrollMinNum = 1; courseModel.ScrollMaxNum = 1; courseModel.OpenBankLevel = "[1,2,3,4,5,6]"; //价格设置 courseModel.CommissionReType = 2; //直客首次和续费默认成0 courseModel.B2CRatio = 0; courseModel.B2CReNewRatio = 0; //首次 25%(同行) 15%(校代) 500(学员转介绍) 15%(内推) 0(直客) //续费 5 %(同行) 5 %(校代) 0 (学员转介绍) 5% (内推) 0(直客) courseModel.B2BRebateRatio = model.CoursePrice * Convert.ToDecimal(0.05); courseModel.B2BRebateRatioType = CourseRebateSetEnum.NextMonth; courseModel.B2BReNewRatio = model.CoursePrice * Convert.ToDecimal(0.05); courseModel.B2BReNewRatioType = CourseRebateSetEnum.NextMonth; courseModel.SchoolRebateRatio = model.CoursePrice * Convert.ToDecimal(0.15); courseModel.SchoolRebateRatioType = CourseRebateSetEnum.NextMonth; courseModel.SchoolReNewRatio = model.CoursePrice * Convert.ToDecimal(0.05); courseModel.SchoolReNewRatioType = CourseRebateSetEnum.NextMonth; courseModel.TransIntroductceRatio = 500; courseModel.TransIntroductceRatioType = CourseRebateSetEnum.NextMonth; courseModel.TransIntroductceReNewRatio = 0; courseModel.TransIntroductceReNewRatioType = CourseRebateSetEnum.NextMonth; courseModel.InnerRecommendRatio = model.CoursePrice * Convert.ToDecimal(0.15); courseModel.InnerRecommendRatioType = CourseRebateSetEnum.NextMonth; courseModel.InnerRecommendReNewRatio = model.CoursePrice * Convert.ToDecimal(0.05); courseModel.InnerRecommendReNewRatioType = CourseRebateSetEnum.NextMonth; courseModel.B2CRbRatio = 0; courseModel.B2CRbRatioType = CourseRebateSetEnum.NextMonth; courseModel.B2CRNRatio = 0; courseModel.B2CRNRatioType = CourseRebateSetEnum.NextMonth; flag = courseRepository.SetCourseRepository(courseModel, out int newCourseId); //添加课程章节 if (flag) { int times = CalcChapterTimesModule(model.CourseTimeId, model.HourType, model.TotalHour,out decimal StudyMinutes,out decimal ClassHours, out string msg); var courseChapterList = new List(); for (var i = 0; i < times; i++) { int Num = Convert.ToInt32(i) + 1; courseChapterList.Add(new RB_Course_Chapter_ViewModel() { ChapterId = 0, CourseId = newCourseId, ChapterNo = (Num).ToString(), ChapterName = string.Format("第{0}次课", Num), ChapterContent = "", ParentId = 0, OpenStatus = 1, Progress = 0, CreateBy = model.CreateBy, CreateTime = DateTime.Now, UpdateBy = model.CreateBy, UpdateTime = DateTime.Now, Status = Common.Enum.DateStateEnum.Normal, OpenStart = DateTime.Now, OpenEnd = DateTime.Now, School_Id = 0, Group_Id = model.Group_Id, SortNum = Num, StudyHours = Convert.ToDouble(ClassHours), StudyMinutes = Convert.ToDouble(StudyMinutes), Objectives = "", Requirement = "", CourseRate = CourseRateEnum.Advanced, CurrentHours = 0, ChapterGradeNo = Num, }); } if (courseChapterList != null && courseChapterList.Count > 0) { flag = course_ChapterRepository.SetBatchInsertCourseChapterRepository(courseChapterList); } } RB_Class_ViewModel classModel = new RB_Class_ViewModel(); //添加班级 if (flag) { classModel.CreateBy = userInfo.Id; classModel.CreateTime = DateTime.Now; classModel.UpdateBy = userInfo.Id; classModel.UpdateTime = DateTime.Now; classModel.Group_Id = userInfo.Group_Id; classModel.ClassName = model.CourseName; classModel.CouseId = newCourseId; classModel.ClassPersion = 9999; classModel.OpenTime = DateTime.Now; classModel.EndOrderTime = DateTime.Now; classModel.OriginalPrice = 0; classModel.SellPrice = model.CoursePrice; classModel.IsStepPrice = 0; classModel.ClassRoomId = 0; classModel.IsOpenCommission = 0; classModel.CommissionType = 0; classModel.CommissionValue = 0; classModel.ClassHours =Convert.ToInt32(model.TotalHour); classModel.ClassStyle = 0; classModel.ClassStatus = ClassStatusEnum.StudyIng; classModel.InnerRemark = ""; classModel.OutRemark = ""; classModel.School_Id = 0; classModel.ClassType = 0; classModel.IsSubscribe = 0; classModel.IsDeduction = 0; classModel.Point = 0; classModel.CourseClassType = 0; classModel.StudentNumType = 0; classModel.ClassHourMinute = 0; classModel.ClassScrollType = 2; classModel.ScrollMonth = DateTime.Now.ToString("yyyy-MM"); flag = classModule.SetClassModule(classModel); } //添加订单 if (flag) { var assistList = student_AssistRepository.GetStudentAssistListRepository(new Model.ViewModel.Customer.RB_Student_Assist_Extend() { StuId = model.StuId }); var stuModel = studentRepository.GetEntity(model.StuId); RB_Order_ViewModel demodel = new RB_Order_ViewModel() { OrderId = 0, ClassId = classModel.ClassId, GuestNum = 1, OrderSource = 0, OrderType = OrderTypeEnum.CourseOrder, PreferPrice = model.CoursePrice, SaleRemark = model.Remarks, SourceId = 0, Unit_Price = model.CoursePrice, HelpEnterId = 0, GeneralOccupation = "", EduOccupation = "", OrderNature = 0, OldPreferPrice = 0, CourseId = newCourseId, StartClassHours = 0, JoinType = OrderJoinTypeEnum.Normal, TargetJoinType = OrderJoinTypeEnum.Normal, StuIds = model.StuId.ToString(), OrderIdentify = 2, EnterID = model.CreateBy, ScrollSchoolId = 0 }; if (stuModel != null && stuModel.CreateType == Common.Enum.User.StuCreateTypeEnum.CustomerInput) { demodel.CustomerId = stuModel.StuSourceId; } if (assistList != null && assistList.Count > 0) { demodel.CourseConsultantId = assistList?.FirstOrDefault(qitem => qitem.AssistType == Common.Enum.User.AssistTypeEnum.CourseAdviser)?.AssistId ?? 0; demodel.HelpEnterId = assistList?.FirstOrDefault(qitem => qitem.AssistType == Common.Enum.User.AssistTypeEnum.Teacher)?.AssistId ?? 0; } demodel.Group_Id = userInfo.Group_Id; demodel.School_Id = userInfo.School_Id; demodel.Dept_Id = userInfo.DeptId; demodel.OrderForm = OrderFormEnum.Computer; if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.OrderIdentify != 2) { demodel.EnterID = userInfo.Id; //由前端传递了, 可能会不存在 (此字段为市场人员) } demodel.OrderState = OrderStateEnum.Normal; demodel.TradeWay = TradeWayEnum.OnLine; demodel.CreateBy = userInfo.Id; demodel.CreateTime = DateTime.Now; demodel.UpdateBy = userInfo.Id; demodel.UpdateTime = DateTime.Now; //userInfo, false, out message flag = orderModule.SetClassOrderModule(demodel, userInfo, false, out string message); } } return flag; } } }