using Edu.Model.CacheModel;
using Edu.Model.ViewModel.Course;
using Edu.Repository.Course;
using System;
using System.Collections.Generic;
using System.Linq;
using VT.FW.DB;
using Edu.Model.Entity.EduTask;
using Edu.Repository.EduTask;
using Edu.Common.Enum.User;
using Edu.Common.Enum.Sale;
using Edu.Model.ViewModel.BackClass;
using Edu.Model.ViewModel.Sell;
using Edu.Repository.BackClass;
using Edu.Repository.Grade;
using Edu.Repository.Contract;
using Edu.Model.Entity.Contract;
using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Contract;
using Edu.Common.Enum.Course;
using Edu.Model.ViewModel.User;
namespace Edu.Module.Course
{
///
/// 订单处理类
///
public partial class OrderModule
{
///
/// 学员退课单据仓储层对象
///
private readonly RB_Student_BackClassRepository student_BackClassRepository = new RB_Student_BackClassRepository();
///
/// 学员签到仓储层对象
///
private readonly RB_Class_CheckRepository class_CheckRepository = new RB_Class_CheckRepository();
///
/// 班级基础配置表仓储层对象
///
private readonly RB_Class_ConfigRepository class_ConfigRepository = new RB_Class_ConfigRepository();
///
/// 教务单据
///
private readonly RB_Education_ReceiptRepository education_ReceiptRepository = new RB_Education_ReceiptRepository();
///
/// 退课协议仓储层对象
///
private readonly RB_BackClass_ProtocolRepository backClass_ProtocolRepository = new RB_BackClass_ProtocolRepository();
///
/// 创建退课流程
///
///
///
///
///
///
///
///
/// 退课协议申明
///
///
public virtual bool CreateBackClassApplyModule(int GuestId, int OrderId, string reason, UserInfo userinfo, string receiptFile, string BackAccountName, string BackAccount, string StateMent, out string message)
{
bool flag;
message = "";
var guestModel = order_GuestRepository.GetEntity(GuestId);
var orderModel = orderRepository.GetEntity(OrderId);
if (guestModel == null)
{
message = "旅客信息不正确!";
return false;
}
if (orderModel == null)
{
message = "订单信息不正确!";
return false;
}
//班级实体类
var classModel = classRepository.GetEntity(orderModel.ClassId);
if (classModel == null)
{
message = "未找到对应的班级信息!";
return false;
}
//获取教师实体信息
var teacherModel = accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel()
{
AccountId = classModel.Teacher_Id,
AccountType = Common.Enum.User.AccountTypeEnum.Teacher
})?.FirstOrDefault();
var teacherId = teacherModel?.Id ?? 0;
var saleMan = accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel()
{
Id = orderModel.EnterID
})?.FirstOrDefault();
var totalBackCount = student_BackClassRepository.GetStudentBackClassNumRepository();
string backNum;
if (totalBackCount < 10000)
{
backNum = String.Format("{0:00000}", totalBackCount);
}
else
{
backNum = totalBackCount.ToString();
}
var stuCheckList = class_CheckRepository.GetGuestFinishMinutesRepository(GuestId.ToString());
//完成课时数
var FinishHours = stuCheckList?.Sum(qitem => qitem.FinishClassHours) ?? 0;
var courseModel = new RB_Course();
if (orderModel.CourseId > 0)
{
courseModel = courseRepository.GetEntity(orderModel.CourseId);
}
else
{
courseModel = courseRepository.GetEntity(classModel.CouseId);
}
//预计退款金额
decimal backMoney = 0;
backMoney = orderRepository.CalcBackMoneyRepository(orderModel, courseModel, FinishHours, out _);
var backClassModel = new RB_Student_BackClass_ViewModel()
{
BackId = 0,
AuditStatus = WFRrocessStatus.NotAudit,
BackMoney = Math.Round(backMoney, 2),
BackNum = "T" + backNum,
ClassId = orderModel.ClassId,
CreateBy = userinfo.Id,
CreateTime = DateTime.Now,
FinishHours = Convert.ToInt32(FinishHours),
Group_Id = userinfo.Group_Id,
GuestId = GuestId,
SchoolId = guestModel.School_Id,
StudentId = GuestId,
TeacherId = teacherId,
OrderId = OrderId,
ApplyReason = reason,
FlowId = Common.Config.BackClassFlowId,
BackAccountName = BackAccountName,
BackAccount = BackAccount,
};
var newBackId = student_BackClassRepository.Insert(backClassModel);
backClassModel.BackId = newBackId;
flag = newBackId > 0;
if (flag)
{
flag = education_ReceiptRepository.SetEducationReceiptRepository(new RB_Education_Receipt()
{
Id = 0,
Title = "退课单据",
ClassId = orderModel.ClassId,
OrderId = orderModel.OrderId,
ReceiptType = Common.Enum.Finance.ReceiptTypeEnum.BackClass,
RelationId = backClassModel.BackId,
Group_Id = orderModel.Group_Id,
School_Id = orderModel.School_Id,
CreateBy = userinfo.Id,
CreateTime = DateTime.Now,
UpdateBy = userinfo.Id,
UpdateTime = DateTime.Now,
RecipientIds = "",
VerifyStatus = Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit,
ReceiptFile = receiptFile
}, out message);
if (flag)
{
Dictionary fileds = new Dictionary()
{
{nameof(RB_Order_Guest_ViewModel.GuestState),(int)GuestStateEnum.DropOutApplyIng}
};
flag = order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), GuestId));
}
}
//生成退课协议
if (flag)
{
string FinaceNum = "";
var flist = financeRepository.GetListSingle(new Model.ViewModel.Finance.RB_Finance_Extend() { RB_Group_Id = orderModel.Group_Id, FinanceType = 2, IsSelectNormal = 1, OrderIdStr = OrderId.ToString(), GuestIdStr = GuestId.ToString() });
if (flist != null && flist.Count > 0)
{
FinaceNum = string.Join(",", flist.Select(qitem => qitem.FrID));
}
var contractModel = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel()
{
OrderId = OrderId,
GuestId = GuestId,
Status = -1
})?.FirstOrDefault();
string ProtocolNum = (contractModel?.ContractNo ?? "") + "-T";
RB_BackClass_Protocol model = new RB_BackClass_Protocol()
{
Id = 0,
BackId = newBackId,
ProtocolNum = ProtocolNum,
PartyAName = guestModel.GuestName,
PartyAGuardian = "",
PartyBName = "成都市锦江区甲鹤外语培训学校有限公司",
PartyBLegal = "",
SignDate = null,
OldSaleMan = saleMan?.AccountName ?? "",
OldCourseName = courseModel?.CourseName ?? "",
OldSellPrice = courseModel?.SellPrice ?? 0,
OldDiscountMoney = orderModel?.PerDiscountMoney ?? 0,
OldIncome = ((orderModel?.Income ?? 0) + (orderModel?.PlatformTax ?? 0) - (orderModel?.Refund ?? 0)) / orderModel.GuestNum,
OldFinaceNum = FinaceNum,
OldReceiveMan = saleMan?.AccountName ?? "",
TotalClassHours = guestModel.TotalHours,
CompleteHours = guestModel.CompleteHours,
SurplusHours = guestModel.TotalHours - guestModel.CompleteHours,
BackMoney = backClassModel.BackMoney,
AuditStatus = (int)Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit,
CreateBy = orderModel.EnterID,
CreateTime = DateTime.Now,
Group_Id = classModel.Group_Id,
School_Id = classModel.School_Id,
StateMent = StateMent
};
flag = backClass_ProtocolRepository.Insert(model) > 0;
}
return flag;
}
///
/// 处理订单生效状态
///
///
public virtual bool DealOrderEffectStatusModule()
{
bool flag = false;
var orderList = orderRepository.GetOrderListRepository(new RB_Order_ViewModel()
{
OrderState = Common.Enum.Course.OrderStateEnum.Normal,
JoinType = OrderJoinTypeEnum.InsertClass,
Q_EffectTime = Common.ConvertHelper.FormatDate(DateTime.Now)
});
if (orderList != null && orderList.Count > 0)
{
var tempOrderList = orderList.Where(qitem => qitem.EffectStatus == 0)?.ToList();
if (tempOrderList != null && tempOrderList.Count > 0)
{
foreach (var item in tempOrderList)
{
Dictionary fileds1 = new Dictionary()
{
{ nameof(RB_Order_ViewModel.EffectStatus),1 }
};
//更新当前订单为“生效中”
flag = orderRepository.Update(fileds1, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), item.OrderId));
if (item.UpOrderId > 0)
{
Dictionary fileds2 = new Dictionary()
{
{ nameof(RB_Order_ViewModel.EffectStatus),2 }
};
//更新前置订单为“完成”
flag = orderRepository.Update(fileds2, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), item.UpOrderId));
}
}
}
}
return flag;
}
///
/// 处理学员状态
///
///
public virtual bool DealGuestStateModule()
{
bool flag = false;
var guestList = order_GuestRepository.GetCommonOrderGuestListRepository(new RB_Order_Guest_ViewModel()
{
QFinishGuest = 1
});
if (guestList != null && guestList.Count > 0)
{
foreach (var item in guestList.Take(1))
{
Dictionary fileds = new Dictionary()
{
{ nameof(RB_Order_Guest_ViewModel.GuestState),(int)GuestStateEnum.Graduate},
{ nameof(RB_Order_Guest_ViewModel.GraduationTime),DateTime.Now},
};
flag = order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), item.Id));
}
}
return flag;
}
///
/// 获取客户转订单时客户的续费状态
///
///
///
///
///
public object GetOrderGuestRenewState(string stuIds, UserInfo userInfo, out string message)
{
message = "";
//查询学生列表
var StuList = studentRepository.GetStudentListRepository(new RB_Student_ViewModel() { Group_Id = userInfo.Group_Id, StuIds = stuIds, School_Id = -1 });
//根据客人手机号码 验证是否是续费
if (StuList.Select(x => x.CustomerId).Distinct().Count() > 1)
{
message = "只能选择同一同行的客户报名";
return false;
}
int CustomerId = StuList.FirstOrDefault().CustomerId;
var glist = order_GuestRepository.GetGuestListForMobile(StuList.Select(x => x.StuTel).ToList(), CustomerId, userInfo.Group_Id);
if (glist.Any())
{
foreach (var item in StuList)
{
if (glist.Where(x => x.Mobile == item.StuTel).Any())
{
item.IsRenewGuest = 1;//是续费的
}
}
}
int RenewNum = glist.Select(x => x.Mobile).Distinct().Count();//续费订单数量
return new
{
CustomerId,
RenewNum,
StuList = StuList.Select(x => new
{
x.StuId,
x.StuName,
x.StuTel,
x.IsRenewGuest
})
};
}
///
/// 通过我的学生直接转订单客人
///
///
///
///
///
public string SetMyStudentToGuest(int orderId, string stuIds, UserInfo userInfo)
{
var orderModel = orderRepository.GetEntity(orderId);
var courseModel = courseRepository.GetEntity(orderModel.CourseId);
//查询学生列表
var StuList = studentRepository.GetStudentListRepository(new RB_Student_ViewModel() { Group_Id = userInfo.Group_Id, StuIds = stuIds, School_Id = -1 });
//根据客人手机号码 验证是否是续费
if (StuList.Select(x => x.CustomerId).Distinct().Count() > 1)
{
return "只能选择同一同行的学生";
}
if (StuList.FirstOrDefault().CustomerId != orderModel.CustomerId)
{
return "同业信息有误";
}
//验证数量
int StuNum = StuList.Count();
var glist = order_GuestRepository.GetSingleListRepository(new RB_Order_Guest_ViewModel() { Group_Id = userInfo.Group_Id, OrderId = orderModel.OrderId, GuestState = GuestStateEnum.Normal });
if (glist.Count() + StuNum > orderModel.GuestNum)
{
return "学生选择超出" + (glist.Count() + StuNum - orderModel.GuestNum) + "位";
}
foreach (var item in StuList) {
if (glist.Where(x => x.Mobile == item.StuTel).Any()) {
return "学生" + item.StuName + "已录入学生名单中,请核实后再试";
}
}
foreach (var item in StuList)
{
var guestModel = new RB_Order_Guest_ViewModel()
{
Id = 0,
OrderId = orderModel.OrderId,
ClassId = orderModel.ClassId,
GuestName = item.StuName,
GuestState = GuestStateEnum.Normal,
Profession = item?.StuProfession ?? "",
Sex = (item?.StuSex ?? 1) + 1,
Age = item.StuBirth.HasValue ? DateTime.Now.Year - item.StuBirth.Value.Year : 18,
Mobile = item?.StuTel ?? "",
Basics = "",
Education = item?.StuEducation ?? GuestEducationEnum.N2,
GuestSource = orderModel.OrderSource,
LearningGoals = item?.StuPurpose ?? GuestLearningGoalsEnum.Love,
Contact = item?.StuContract ?? "",
ContactMobile = item?.StuContractMobile ?? "",
Status = 0,
Group_Id = orderModel.Group_Id,
School_Id = orderModel.School_Id,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
UpdateBy = userInfo.Id,
UpdateTime = DateTime.Now,
DropOutRemark = "",
IDCard = item?.StuIDCard ?? "",
Domicile = item?.StuIDCardAddress ?? "",
ContactAddress = item?.StuAddress ?? "",
SourceId = 0,
GraduatedSchool = "",
GraduatedMajor = "",
VolunteerMajor = "",
Price = 0,
StudyRemark = "",
CompleteHours = 0,
MakeUpHours = 0,
StuIcon = item.StuIcon,
TotalHours = Convert.ToInt32(courseModel.ClassHours),
RenewState = 1
};
SetOrderGuestInfo(guestModel, out string Nmessage);
}
return "";
}
}
}