Commit d7d0bd70 authored by liudong1993's avatar liudong1993

课耗统计调整

parent d53034ca
...@@ -21,10 +21,16 @@ namespace Edu.Model.ViewModel.Course ...@@ -21,10 +21,16 @@ namespace Edu.Model.ViewModel.Course
/// 教师名称 /// 教师名称
/// </summary> /// </summary>
public string TeacherName { get; set; } public string TeacherName { get; set; }
/// <summary>
/// 时间段
/// </summary>
public string TimeBucket { get; set; }
/// <summary> /// <summary>
/// 班级名称 /// 班级名称
/// </summary> /// </summary>
public string ClassName { get; set; } public string ClassName { get; set; }
/// <summary> /// <summary>
/// 代课课时 /// 代课课时
/// </summary> /// </summary>
...@@ -39,5 +45,38 @@ namespace Edu.Model.ViewModel.Course ...@@ -39,5 +45,38 @@ namespace Edu.Model.ViewModel.Course
/// 奖金确认 1是 /// 奖金确认 1是
/// </summary> /// </summary>
public int Q_BonusConfirm { get; set; } public int Q_BonusConfirm { get; set; }
#region 报表统计
/// <summary>
/// 课程id
/// </summary>
public int CouseId { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 课时数量
/// </summary>
public decimal KSNum { get; set; }
/// <summary>
/// 抵扣课时数量
/// </summary>
public decimal DKNum { get; set; }
/// <summary>
/// 小时
/// </summary>
public decimal Hours { get; set; }
/// <summary>
/// 小时课时费
/// </summary>
public decimal HourMoney { get; set; }
#endregion
} }
} }
\ No newline at end of file
...@@ -605,7 +605,7 @@ namespace Edu.Module.Course ...@@ -605,7 +605,7 @@ namespace Edu.Module.Course
List<int> TeacherIdList = blist.Select(x => x.TeacherId).Distinct().ToList(); List<int> TeacherIdList = blist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList) foreach (var item in TeacherIdList)
{ {
var qblist = blist.Where(x => x.TeacherId == item).OrderBy(x => x.UnitPrice).ThenBy(x => x.Date).ToList(); var qblist = blist.Where(x => x.TeacherId == item).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
int BasicHours = configModel.BasicHours; int BasicHours = configModel.BasicHours;
foreach (var qitem in qblist) foreach (var qitem in qblist)
{ {
......
...@@ -2364,6 +2364,157 @@ namespace Edu.Module.Finance ...@@ -2364,6 +2364,157 @@ namespace Edu.Module.Finance
return RList; return RList;
} }
/// <summary>
/// 获取老师课时汇总统计
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="teacherId"></param>
/// <param name="schoolId"></param>
/// <param name="startMonth"></param>
/// <param name="endMonth"></param>
/// <param name="groupId"></param>
/// <returns></returns>
public object GetTeacherConsumptionHoursStatistics_V2(int pageIndex, int pageSize, out long count, int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
{
List<object> RList = new List<object>();
//首先查询所有的老师
var userList = accountRepository.GetEmployeePageListRepository(pageIndex, pageSize, out count, new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, AccountId = teacherId, School_Id = schoolId, IsHoursStatistics = 1, AccountTypeStr = "2", HoursStartTime = startMonth, HoursEndTime = endMonth });
if (userList.Any())
{
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RList; }
//查询当前时间范围 这些老师的上课课时
string userIds = string.Join(",", userList.Select(x => x.AccountId));
List<RB_Teaching_BonusDetail_ViewModel> DateList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(userIds, schoolId, startMonth, endMonth, groupId);
if (list.Any())
{
foreach (var item in list)
{
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
decimal Hours = Math.Round(Convert.ToDecimal(Minutes) / 60, 2, MidpointRounding.AwayFromZero);//小时
//上课课时
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
DateList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
}
//查询期间 学生的上课总课时 + 合同课时单价
var sTimeList = class_CheckRepository.GetStudentHoursList(groupId, userIds, startMonth, endMonth);
//根据学生id
//查询课时费 (要注意 需排除每个月老师的基础课时)
foreach (var item in userList)
{
var tlist = DateList.Where(x => x.TeacherId == item.AccountId).ToList();//多班级
//初始化 基础课时
DateTime STime = Convert.ToDateTime(startMonth);
while (true)
{
DateTime ETime = STime.AddMonths(1).AddDays(-1);
var mlist = tlist.Where(x => x.Date >= STime && x.Date <= ETime).ToList();
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = mlist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var tId in TeacherIdList)
{
var qblist = mlist.Where(x => x.TeacherId == tId).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
if (STime.Month == Convert.ToDateTime(endMonth).Month)
{
break;
}
STime = STime.AddMonths(1);
}
decimal ksNum = tlist.Sum(x => x.KSNum);
decimal dkNum = tlist.Sum(x => x.DKNum);
decimal Hours = tlist.Sum(x => x.Hours);
decimal KSMoney = tlist.Sum(x => x.Money);
decimal StuMoney = Math.Round(sTimeList.Where(x => x.TeacherId == item.AccountId).Sum(x => x.CurrentDeductionHours * x.UnitPrice), 2, MidpointRounding.AwayFromZero);
RList.Add(new
{
item.Id,
item.AccountId,
item.EmployeeName,
LeaveStatus = item.LeaveStatus.ToName(),
KSNum = ksNum,
DKNum = dkNum,
Hours,
KSMoney,
StuLearnMoney = StuMoney,
item.SchoolName
});
}
}
return RList;
}
/// <summary> /// <summary>
/// 导出Excel /// 导出Excel
/// </summary> /// </summary>
...@@ -2380,43 +2531,122 @@ namespace Edu.Module.Finance ...@@ -2380,43 +2531,122 @@ namespace Edu.Module.Finance
var userList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, AccountId = teacherId, School_Id = schoolId, IsHoursStatistics = 1, AccountTypeStr = "2", HoursStartTime = startMonth, HoursEndTime = endMonth }); var userList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, AccountId = teacherId, School_Id = schoolId, IsHoursStatistics = 1, AccountTypeStr = "2", HoursStartTime = startMonth, HoursEndTime = endMonth });
if (userList.Any()) if (userList.Any())
{ {
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return new List<ExcelDataSource>(); }
//查询当前时间范围 这些老师的上课课时 //查询当前时间范围 这些老师的上课课时
string userIds = string.Join(",", userList.Select(x => x.AccountId)); string userIds = string.Join(",", userList.Select(x => x.AccountId));
var tTimeList = class_CheckRepository.GetTeacherHoursList(groupId, userIds, startMonth, endMonth); List<RB_Teaching_BonusDetail_ViewModel> DateList = new List<RB_Teaching_BonusDetail_ViewModel>();
List<RB_Class_ViewModel> ClassList = new List<RB_Class_ViewModel>(); //根据学生签到表 查询
if (tTimeList.Any()) var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(userIds, schoolId, startMonth, endMonth, groupId);
if (list.Any())
{ {
//查询班级信息 foreach (var item in list)
string classIds = string.Join(",", tTimeList.Select(x => x.ClassId).Distinct()); {
ClassList = classRepository.GetClassListRepository(new RB_Class_ViewModel() { Group_Id = groupId, Q_ClassIds = classIds }); int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
decimal Hours = Math.Round(Convert.ToDecimal(Minutes) / 60, 2, MidpointRounding.AwayFromZero);//小时
//上课课时
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
DateList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
} }
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//查询期间 学生的上课总课时 + 合同课时单价 //查询期间 学生的上课总课时 + 合同课时单价
var sTimeList = class_CheckRepository.GetStudentHoursList(groupId, userIds, startMonth, endMonth); var sTimeList = class_CheckRepository.GetStudentHoursList(groupId, userIds, startMonth, endMonth);
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return new List<ExcelDataSource>(); }
//根据学生id //根据学生id
//查询课时费 (要注意 需排除每个月老师的基础课时) //查询课时费 (要注意 需排除每个月老师的基础课时)
int Num = 1; int Num = 1;
decimal TKSNum = 0, TStuMoney = 0, THours = 0, TKSMoney = 0; decimal TKSNum = 0, TDKNum = 0, TStuMoney = 0, THours = 0, TKSMoney = 0;
foreach (var item in userList) foreach (var item in userList)
{ {
var tlist = tTimeList.Where(x => x.TeacherId == item.AccountId).ToList();//多班级 var tlist = DateList.Where(x => x.TeacherId == item.AccountId).ToList();//多班级
int TotalStudyNum = tlist.Sum(x => x.StudyNum);
decimal ksNum = Math.Round(Convert.ToDecimal(TotalStudyNum) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时 //初始化 基础课时
decimal Hours = Math.Round(Convert.ToDecimal(TotalStudyNum) / 60, 2, MidpointRounding.AwayFromZero);//小时 DateTime STime = Convert.ToDateTime(startMonth);
decimal KSMoney = 0; while (true)
foreach (var qitem in tlist)
{ {
var classModel = ClassList.Where(x => x.ClassId == qitem.ClassId).FirstOrDefault(); DateTime ETime = STime.AddMonths(1).AddDays(-1);
var typeModel = cTypeList.Where(x => x.CTypeId == classModel.ClassType).FirstOrDefault(); var mlist = tlist.Where(x => x.Date >= STime && x.Date <= ETime).ToList();
//课时费 需要每个班级 单独计算 因为 班级有附加费用
KSMoney += Math.Round(Convert.ToDecimal(qitem.StudyNum) / configModel.BasicMinutes * (configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0)), 2, MidpointRounding.AwayFromZero); #region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = mlist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var tId in TeacherIdList)
{
var qblist = mlist.Where(x => x.TeacherId == tId).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
if (STime.Month == Convert.ToDateTime(endMonth).Month)
{
break;
}
STime = STime.AddMonths(1);
} }
decimal ksNum = tlist.Sum(x => x.KSNum);
decimal dkNum = tlist.Sum(x => x.DKNum);
decimal Hours = tlist.Sum(x => x.Hours);
decimal KSMoney = tlist.Sum(x => x.Money);
decimal StuMoney = Math.Round(sTimeList.Where(x => x.TeacherId == item.AccountId).Sum(x => x.CurrentDeductionHours * x.UnitPrice), 2, MidpointRounding.AwayFromZero); decimal StuMoney = Math.Round(sTimeList.Where(x => x.TeacherId == item.AccountId).Sum(x => x.CurrentDeductionHours * x.UnitPrice), 2, MidpointRounding.AwayFromZero);
...@@ -2429,6 +2659,7 @@ namespace Edu.Module.Finance ...@@ -2429,6 +2659,7 @@ namespace Edu.Module.Finance
new ExcelColumn(value: item.LeaveStatus.ToName()){ }, new ExcelColumn(value: item.LeaveStatus.ToName()){ },
new ExcelColumn(value: item.EmployeeName){ }, new ExcelColumn(value: item.EmployeeName){ },
new ExcelColumn(value: ksNum.ToString("#0.00")){ }, new ExcelColumn(value: ksNum.ToString("#0.00")){ },
new ExcelColumn(value: dkNum.ToString("#0.00")){ },
new ExcelColumn(value: StuMoney.ToString("#0.00")){ }, new ExcelColumn(value: StuMoney.ToString("#0.00")){ },
new ExcelColumn(value: Hours.ToString("#0.00")){ }, new ExcelColumn(value: Hours.ToString("#0.00")){ },
new ExcelColumn(value: KSMoney.ToString("#0.00")){ } new ExcelColumn(value: KSMoney.ToString("#0.00")){ }
...@@ -2437,6 +2668,7 @@ namespace Edu.Module.Finance ...@@ -2437,6 +2668,7 @@ namespace Edu.Module.Finance
RList.Add(firstRow); RList.Add(firstRow);
Num++; Num++;
TKSNum += ksNum; TKSNum += ksNum;
TDKNum += dkNum;
TStuMoney += StuMoney; TStuMoney += StuMoney;
THours += Hours; THours += Hours;
TKSMoney += KSMoney; TKSMoney += KSMoney;
...@@ -2451,6 +2683,7 @@ namespace Edu.Module.Finance ...@@ -2451,6 +2683,7 @@ namespace Edu.Module.Finance
new ExcelColumn(value: ""){ }, new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ }, new ExcelColumn(value: ""){ },
new ExcelColumn(value: TKSNum.ToString("#0.00")){ }, new ExcelColumn(value: TKSNum.ToString("#0.00")){ },
new ExcelColumn(value: TDKNum.ToString("#0.00")){ },
new ExcelColumn(value: TStuMoney.ToString("#0.00")){ }, new ExcelColumn(value: TStuMoney.ToString("#0.00")){ },
new ExcelColumn(value: THours.ToString("#0.00")){ }, new ExcelColumn(value: THours.ToString("#0.00")){ },
new ExcelColumn(value: TKSMoney.ToString("#0.00")){ } new ExcelColumn(value: TKSMoney.ToString("#0.00")){ }
...@@ -2476,9 +2709,9 @@ namespace Edu.Module.Finance ...@@ -2476,9 +2709,9 @@ namespace Edu.Module.Finance
/// <param name="contractNo"></param> /// <param name="contractNo"></param>
/// <param name="group_Id"></param> /// <param name="group_Id"></param>
/// <returns></returns> /// <returns></returns>
public object GetTeacherConsumptionHoursDetialPageList(int pageIndex, int pageSize, out long count, int teacherId, int schoolId, string startMonth, string endMonth, int groupId) public List<RB_Teaching_BonusDetail_ViewModel> GetTeacherConsumptionHoursDetialPageList(int pageIndex, int pageSize, out long count, int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
{ {
List<object> RList = new List<object>(); List<RB_Teaching_BonusDetail_ViewModel> RList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询 //根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialPageList(pageIndex, pageSize, out count, teacherId, schoolId, startMonth, endMonth, groupId); var list = class_CheckRepository.GetTeacherConsumptionHoursDetialPageList(pageIndex, pageSize, out count, teacherId, schoolId, startMonth, endMonth, groupId);
if (list.Any()) { if (list.Any()) {
...@@ -2486,7 +2719,7 @@ namespace Edu.Module.Finance ...@@ -2486,7 +2719,7 @@ namespace Edu.Module.Finance
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId }); var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置 //基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId }); var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return "未配置课时费基础设置"; } if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RList; }
foreach (var item in list) { foreach (var item in list) {
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes; int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
...@@ -2495,28 +2728,69 @@ namespace Edu.Module.Finance ...@@ -2495,28 +2728,69 @@ namespace Edu.Module.Finance
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时 decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault(); var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用 //课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * (configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee); decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round((configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee) / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费 decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
RList.Add(new RList.Add(new RB_Teaching_BonusDetail_ViewModel
{ {
ClassDate = item.ClassDate.ToString("yyyy-MM-dd"), Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate, TimeBucket = item.StartDate + "~" + item.EndDate,
item.TeacherId, TeacherId = item.TeacherId,
item.TeacherName, TeacherName = item.TeacherName,
item.ClassId, ClassId = item.ClassId,
item.ClassName, ClassName = item.ClassName,
item.CouseId, CouseId = item.CouseId,
item.CourseName, CourseName = item.CourseName,
KSNum, KSNum = KSNum,
Hours, Hours = Hours,
HourMoney, HourMoney = HourMoney,
KSMoney UnitPrice = unitPrice,
Money = KSMoney
}); });
} }
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = RList.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList)
{
var qblist = RList.Where(x => x.TeacherId == item).OrderBy(x => x.UnitPrice).ThenBy(x => x.Date).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
} }
return RList; return RList;
} }
...@@ -2532,17 +2806,18 @@ namespace Edu.Module.Finance ...@@ -2532,17 +2806,18 @@ namespace Edu.Module.Finance
/// <returns></returns> /// <returns></returns>
public List<ExcelDataSource> GetTeacherConsumptionHoursDetialPageListToExcel(int teacherId, int schoolId, string startMonth, string endMonth, int groupId) public List<ExcelDataSource> GetTeacherConsumptionHoursDetialPageListToExcel(int teacherId, int schoolId, string startMonth, string endMonth, int groupId)
{ {
List<ExcelDataSource> RList = new List<ExcelDataSource>(); List<ExcelDataSource> RDateList = new List<ExcelDataSource>();
List<RB_Teaching_BonusDetail_ViewModel> RList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询 //根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(teacherId, schoolId, startMonth, endMonth, groupId); var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(teacherId.ToString(), schoolId, startMonth, endMonth, groupId);
if (list.Any()) if (list.Any())
{ {
//班级类型查询 //班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId }); var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = groupId });
//基础配置 //基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId }); var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = groupId });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RList; } if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return RDateList; }
decimal TKSNum = 0, THourMoney = 0, THours = 0, TKSMoney = 0; decimal TKSNum = 0, TDKNum = 0, THourMoney = 0, THours = 0, TKSMoney = 0;
foreach (var item in list) foreach (var item in list)
{ {
int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes; int Minutes = (int)(Convert.ToDateTime("2021-06-29 " + item.EndDate) - Convert.ToDateTime("2021-06-29 " + item.StartDate)).TotalMinutes;
...@@ -2551,32 +2826,95 @@ namespace Edu.Module.Finance ...@@ -2551,32 +2826,95 @@ namespace Edu.Module.Finance
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时 decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / configModel.BasicMinutes, 2, MidpointRounding.AwayFromZero); // 未达到一课时时间 算不算一课时
var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault(); var typeModel = cTypeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用 //课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * (configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee); decimal KSMoney = KSNum * unitPrice;
decimal HourMoney = Math.Round(unitPrice / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费
decimal HourMoney = Math.Round((configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + item.BaseHourFee) / configModel.BasicMinutes * 60, 2, MidpointRounding.AwayFromZero);//没小时课时费 RList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.TeacherId,
TeacherName = item.TeacherName,
ClassId = item.ClassId,
ClassName = item.ClassName,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
//遍历所有老师
List<int> TeacherIdList = RList.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList)
{
var qblist = RList.Where(x => x.TeacherId == item).OrderBy(x => x.UnitPrice).ThenBy(x => x.Date).ToList();
decimal BasicHours = (decimal)configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.KSNum)
{
DeductionHour = qitem.KSNum;
BasicHours -= qitem.KSNum;
DeductionMoney += qitem.KSNum * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.KSNum - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
qitem.KSNum = CourseHour;
qitem.DKNum = DeductionHour;
qitem.Money = CourseHour * qitem.UnitPrice;
if (BasicHours <= 0)
{
break;
}
}
}
}
#endregion
foreach (var item in RList) {
ExcelDataSource firstRow = new ExcelDataSource(30) ExcelDataSource firstRow = new ExcelDataSource(30)
{ {
ExcelRows = new List<ExcelColumn>() ExcelRows = new List<ExcelColumn>()
{ {
new ExcelColumn(value: item.ClassDate.ToString("yyyy-MM-dd")){ }, new ExcelColumn(value: item.Date.ToString("yyyy-MM-dd")){ },
new ExcelColumn(value: item.StartDate + "~" + item.EndDate){ }, new ExcelColumn(value: item.TimeBucket){ },
new ExcelColumn(value: item.ClassName){ }, new ExcelColumn(value: item.ClassName){ },
new ExcelColumn(value: item.CourseName){ }, new ExcelColumn(value: item.CourseName){ },
new ExcelColumn(value: item.TeacherName){ }, new ExcelColumn(value: item.TeacherName){ },
new ExcelColumn(value: KSNum.ToString("#0.00")){ }, new ExcelColumn(value: item.UnitPrice.ToString("#0.00")){ },
new ExcelColumn(value: Hours.ToString("#0.00")){ }, new ExcelColumn(value: item.KSNum.ToString("#0.00")){ },
new ExcelColumn(value: HourMoney.ToString("#0.00")){ }, new ExcelColumn(value: item.DKNum.ToString("#0.00")){ },
new ExcelColumn(value: KSMoney.ToString("#0.00")){ } new ExcelColumn(value: item.Hours.ToString("#0.00")){ },
new ExcelColumn(value: item.HourMoney.ToString("#0.00")){ },
new ExcelColumn(value: item.Money.ToString("#0.00")){ }
} }
}; };
RList.Add(firstRow); RDateList.Add(firstRow);
TKSNum += KSNum; TKSNum += item.KSNum;
THourMoney += HourMoney; TDKNum += item.DKNum;
THours += Hours; THourMoney += item.HourMoney;
TKSMoney += KSMoney; THours += item.Hours;
TKSMoney += item.Money;
} }
ExcelDataSource firstRowT = new ExcelDataSource(30) ExcelDataSource firstRowT = new ExcelDataSource(30)
{ {
ExcelRows = new List<ExcelColumn>() ExcelRows = new List<ExcelColumn>()
...@@ -2586,15 +2924,17 @@ namespace Edu.Module.Finance ...@@ -2586,15 +2924,17 @@ namespace Edu.Module.Finance
new ExcelColumn(value: ""){ }, new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ }, new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ }, new ExcelColumn(value: ""){ },
new ExcelColumn(value: ""){ },
new ExcelColumn(value: TKSNum.ToString("#0.00")){ }, new ExcelColumn(value: TKSNum.ToString("#0.00")){ },
new ExcelColumn(value: TDKNum.ToString("#0.00")){ },
new ExcelColumn(value: THours.ToString("#0.00")){ }, new ExcelColumn(value: THours.ToString("#0.00")){ },
new ExcelColumn(value: THourMoney.ToString("#0.00")){ }, new ExcelColumn(value: THourMoney.ToString("#0.00")){ },
new ExcelColumn(value: TKSMoney.ToString("#0.00")){ } new ExcelColumn(value: TKSMoney.ToString("#0.00")){ }
} }
}; };
RList.Add(firstRowT); RDateList.Add(firstRowT);
} }
return RList; return RDateList;
} }
/// <summary> /// <summary>
......
...@@ -455,12 +455,12 @@ ORDER BY p.ClassDate ASC ...@@ -455,12 +455,12 @@ ORDER BY p.ClassDate ASC
/// <param name="endMonth"></param> /// <param name="endMonth"></param>
/// <param name="group_Id"></param> /// <param name="group_Id"></param>
/// <returns></returns> /// <returns></returns>
public List<RB_Class_Check_ViewModel> GetTeacherConsumptionHoursDetialList(int teacherId, int schoolId, string startMonth, string endMonth, int group_Id) public List<RB_Class_Check_ViewModel> GetTeacherConsumptionHoursDetialList(string teacherIds, int schoolId, string startMonth, string endMonth, int group_Id)
{ {
string where = $@" "; string where = $@" ";
if (teacherId > 0) if (!string.IsNullOrEmpty(teacherIds))
{ {
where += $@" and p.TeacherId ={teacherId}"; where += $@" and p.TeacherId in({teacherIds})";
} }
if (schoolId >= 0) if (schoolId >= 0)
{ {
......
...@@ -1457,7 +1457,7 @@ namespace Edu.WebApi.Controllers.Finance ...@@ -1457,7 +1457,7 @@ namespace Edu.WebApi.Controllers.Finance
return ApiResult.Failed("日期格式有误"); return ApiResult.Failed("日期格式有误");
} }
var list = financeModule.GetTeacherConsumptionHoursStatistics(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id); var list = financeModule.GetTeacherConsumptionHoursStatistics_V2(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id);
pageModel.Count = Convert.ToInt32(count); pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list; pageModel.PageData = list;
return ApiResult.Success("", pageModel); return ApiResult.Success("", pageModel);
...@@ -1480,6 +1480,7 @@ namespace Edu.WebApi.Controllers.Finance ...@@ -1480,6 +1480,7 @@ namespace Edu.WebApi.Controllers.Finance
new ExcelColumn(value:"专职/兼职"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"专职/兼职"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"老师姓名"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"老师姓名"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"上课课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"基础课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"上课金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时转换/小时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"课时转换/小时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER } new ExcelColumn(value:"课时费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }
...@@ -1566,7 +1567,23 @@ namespace Edu.WebApi.Controllers.Finance ...@@ -1566,7 +1567,23 @@ namespace Edu.WebApi.Controllers.Finance
var list = financeModule.GetTeacherConsumptionHoursDetialPageList(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id); var list = financeModule.GetTeacherConsumptionHoursDetialPageList(pageModel.PageIndex, pageModel.PageSize, out long count, TeacherId, SchoolId, StartMonth, EndMonth, userInfo.Group_Id);
pageModel.Count = Convert.ToInt32(count); pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list; pageModel.PageData = list.Select(x => new
{
Date = x.Date.ToString("yyyy-MM-dd"),
x.TimeBucket,
x.TeacherId,
x.TeacherName,
x.ClassId,
x.ClassName,
x.CouseId,
x.CourseName,
x.KSNum,
x.DKNum,
x.Hours,
x.HourMoney,
x.UnitPrice,
KSMoney = x.Money
});
return ApiResult.Success("", pageModel); return ApiResult.Success("", pageModel);
} }
...@@ -1587,7 +1604,9 @@ namespace Edu.WebApi.Controllers.Finance ...@@ -1587,7 +1604,9 @@ namespace Edu.WebApi.Controllers.Finance
new ExcelColumn(value:"班级"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"班级"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课程"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"课程"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"老师名称"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"老师名称"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时单价"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"上课课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"上课课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"基础课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时转换/小时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"课时转换/小时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"课时费单价元/小时"){CellWidth=25,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"课时费单价元/小时"){CellWidth=25,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
new ExcelColumn(value:"老师课时费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER }, new ExcelColumn(value:"老师课时费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment