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;
}
}
}