Commit 23a09c18 authored by liudong1993's avatar liudong1993

提成修改+ 班级月度课耗

parent b9d89f22
......@@ -52,5 +52,10 @@ namespace Edu.Model.Entity.Course
/// </summary>
public string Financials { get; set; }
/// <summary>
/// 已发放人员列表
/// </summary>
public string EmpIds { get; set; }
}
}
......@@ -1612,6 +1612,69 @@ namespace Edu.Module.Course
}
}
/// <summary>
/// 获取未发放提成用户列表 + 提成金额
/// </summary>
/// <param name="periodId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public object GetSellCommissionSendEmployeeList(int periodId, UserInfo userInfo)
{
var model = sell_Commission_PeriodsRepository.GetEntity(periodId);
if (model == null) { return "周期不存在"; }
List<int> EmpIdList = new List<int>();
if (!string.IsNullOrEmpty(model.EmpIds)) {
EmpIdList = JsonHelper.DeserializeObject<List<int>>("[" + model.EmpIds + "]");
}
var list = GetSellCommissionUserList(new RB_Sell_Commission_Details_ViewModel() { Group_Id = userInfo.Group_Id, PeriodId = periodId });
return ApiResult.Success("", list.Select(x => new
{
x.UserId,
x.UserName,
x.StudentCount,
CurrentPeriodMoney = x.CurrentPeriodMoney + x.CurrentExtraMoney,
IsGiveOut = EmpIdList.Contains(x.UserId) ? 1 : 2
}));
}
/// <summary>
/// 设置发放提成
/// </summary>
/// <param name="periodId"></param>
/// <param name="empIds"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetSellCommissionSendEmployee(int periodId, string empIds, UserInfo userInfo)
{
var model = sell_Commission_PeriodsRepository.GetEntity(periodId);
if (model == null) { return "周期不存在"; }
List<int> EmpIdList = new List<int>();
if (!string.IsNullOrEmpty(model.EmpIds))
{
EmpIdList = JsonHelper.DeserializeObject<List<int>>("[" + model.EmpIds + "]");
}
List<int> NewIdList = JsonHelper.DeserializeObject<List<int>>("[" + empIds + "]");
foreach (var item in NewIdList) {
if (EmpIdList.Contains(item)) {
return "用户ID" + item + "已发放了提成,无法重复发放";
}
}
EmpIdList.AddRange(NewIdList);
string empids2 = string.Join(",", EmpIdList);
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Sell_Commission_Periods_ViewModel.EmpIds),empids2}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName= nameof(RB_Sell_Commission_Periods_ViewModel.Id),
FiledValue=periodId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = sell_Commission_PeriodsRepository.Update(keyValues, wheres);
return flag ? "" : "出错了,请联系管理员";
}
#endregion
......
......@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using Edu.Common.Enum.Finance;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.Entity.Finance;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Finance;
......@@ -3182,5 +3183,222 @@ namespace Edu.Module.Finance
return list;
}
#endregion
#region 班级相关统计
/// <summary>
/// 班级月度课耗统计
/// </summary>
/// <param name="classId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public object GetClassMonthStatistics(int classId, UserInfo userInfo)
{
var classModel = classRepository.GetEntity(classId);
if (classModel == null) { return ""; }
string StartTime = classModel.OpenTime.ToString("yyyy-MM-dd");
string EndTime = DateTime.Now.ToString("yyyy-MM-dd");
#region 班级下老师的课时费
List<RB_Teaching_BonusDetail_ViewModel> TeacherHoursList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList("", -1, classId, StartTime, EndTime, userInfo.Group_Id);
if (list.Any())
{
//班级类型查询
var cTypeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = userInfo.Group_Id });
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = userInfo.Group_Id });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return TeacherHoursList; }
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 ClassHourMinute = configModel.BasicMinutes;//课时分钟数
if (item.ClassHourMinute > 0) { ClassHourMinute = item.ClassHourMinute; }
decimal KSNum = Math.Round(Convert.ToDecimal(Minutes) / ClassHourMinute, 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 / ClassHourMinute * 60, 2, MidpointRounding.AwayFromZero);//每小时课时费
TeacherHoursList.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,
ClassNo = item.ClassNo,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = KSNum,
Hours = Hours,
HourMoney = HourMoney,
UnitPrice = unitPrice,
Money = KSMoney
});
}
//初始化 基础课时
DateTime STime = Convert.ToDateTime(StartTime);
while (true)
{
DateTime ETime = STime.AddMonths(1).AddDays(-1);
var mlist = TeacherHoursList.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 item in TeacherIdList)
{
var qblist = mlist.Where(x => x.TeacherId == item).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.ToString("yyyy-MM") == Convert.ToDateTime(EndTime).ToString("yyyy-MM"))
{
break;
}
STime = STime.AddMonths(1);
}
}
#endregion
#region 班级下学生的课耗
List<RB_Teaching_BonusDetail_ViewModel> StudentHoursList = new List<RB_Teaching_BonusDetail_ViewModel>();
//根据学生签到表 查询
var stulist = class_CheckRepository.GetStudentConsumptionHoursDetialList(0, -1, classId, StartTime, EndTime, "", 0, "", userInfo.Group_Id);
if (stulist.Any())
{
foreach (var item in stulist)
{
decimal UnitPrice = Math.Round(item.UnitPrice, 6, MidpointRounding.AwayFromZero);
StudentHoursList.Add(new RB_Teaching_BonusDetail_ViewModel
{
Date = item.ClassDate,
TimeBucket = item.StartDate + "~" + item.EndDate,
TeacherId = item.OrderGuestId,
TeacherName = item.GuestName,
ClassId = item.ClassId,
ClassName = item.ClassName,
ClassNo = item.ClassNo,
CouseId = item.CouseId,
CourseName = item.CourseName,
KSNum = item.CurrentDeductionHours,
Hours = 0,
HourMoney = 0,
UnitPrice = UnitPrice,
Money = Math.Round(item.UnitPrice * item.CurrentDeductionHours, 6, MidpointRounding.AwayFromZero)
});
}
}
#endregion
List<object> RList = new List<object>();
if (TeacherHoursList.Any())
{
#region 进行月份汇总
string MaxTime = TeacherHoursList.Max(x => x.Date).ToString("yyyy-MM");
//初始化 基础课时
DateTime STime = Convert.ToDateTime(StartTime);
while (true)
{
DateTime ETime = STime.AddMonths(1).AddDays(-1);
var teacherlist = TeacherHoursList.Where(x => x.Date >= STime && x.Date <= ETime).ToList();
var teacherIdList = teacherlist.Select(x => x.TeacherId).Distinct();
List<object> tRList = new List<object>();
foreach (var qitem in teacherIdList) {
var tlist = teacherlist.Where(x => x.TeacherId == qitem).ToList();
tRList.Add(new
{
TeacherId = qitem,
TeacherName = tlist.FirstOrDefault()?.TeacherName ?? "",
HoursNum = tlist.Sum(x => x.KSNum),
BaseHoursNum = tlist.Sum(x=>x.DKNum),
HoursMoney = tlist.Sum(x => x.Money)
});
}
var studlist = StudentHoursList.Where(x => x.Date >= STime && x.Date <= ETime).ToList();
var studIdList = studlist.Select(x => x.TeacherId).Distinct();
int StuNum = studIdList.Count();
decimal StuSumHours = studlist.Sum(x => x.KSNum);
decimal StuSumMoney = studlist.Sum(x => x.Money);
List<object> sRList = new List<object>();
foreach (var qitem in studIdList) {
var slist = studlist.Where(x => x.TeacherId == qitem).ToList();
sRList.Add(new
{
StudentId = qitem,
StudentName = slist.FirstOrDefault()?.TeacherName ?? "",
HoursNum = slist.Sum(x => x.KSNum),
HoursMoney = slist.Sum(x => x.Money)
});
}
RList.Add(new
{
Month = STime.ToString("yyyy-MM"),
TeacherList = tRList,
StuNum,
StuSumHours,
StuSumMoney,
StudentList = sRList
});
if (STime.ToString("yyyy-MM") == MaxTime)
{
break;
}
STime = STime.AddMonths(1);
}
#endregion
}
return RList;
}
#endregion
}
}
......@@ -565,7 +565,7 @@ GROUP BY ClassId;";
}
string sql = $@"SELECT o.* FROM rb_order o
inner join rb_class c on o.ClassId = c.ClassId
WHERE o.Group_Id ={group_Id} and o.OrderState =1 and o.EffectStatus in(1,2) and o.CommissionRate >0 and c.OpenTime <= '{eDate} 23:59:59' {where} and o.PreferPrice <= (o.Income - o.Refund + o.DiscountMoney + o.PlatformTax) and (o.IsCommissionGiveOK =0 or (o.ExtraRewardMoney -o.ExtraDeductMoney)<> o.ExtraCommissionMoney);";
WHERE o.Group_Id ={group_Id} and o.OrderState =1 and o.EffectStatus in(1,2) and o.CommissionRate >0 and c.OpenTime <= '{eDate} 23:59:59' {where} and o.PreferPrice = (o.Income - o.Refund + o.DiscountMoney + o.PlatformTax) and (o.IsCommissionGiveOK =0 or (o.ExtraRewardMoney -o.ExtraDeductMoney)<> o.ExtraCommissionMoney);";
return Get<RB_Order_ViewModel>(sql).ToList();
}
......
......@@ -514,6 +514,53 @@ namespace Edu.WebApi.Controllers.Course
}
}
/// <summary>
/// 获取提成可发放人员列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetSellCommissionSendEmployeeList() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int PeriodId = parms.GetInt("PeriodId", 0);//期数id
if (PeriodId <= 0)
{
return ApiResult.ParamIsNull();
}
var list = sellCommissionModule.GetSellCommissionSendEmployeeList(PeriodId, userInfo);
return ApiResult.Success("", list);
}
/// <summary>
/// 设置提成发放人员
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetSellCommissionSendEmployee() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int PeriodId = parms.GetInt("PeriodId", 0);//期数id
string EmpIds = parms.GetStringValue("EmpIds");//人员列表
if (PeriodId <= 0)
{
return ApiResult.ParamIsNull();
}
if (string.IsNullOrEmpty(EmpIds))
{
return ApiResult.ParamIsNull("请传递用户id");
}
string msg = sellCommissionModule.SetSellCommissionSendEmployee(PeriodId, EmpIds, userInfo);
if (msg == "")
{
return ApiResult.Success("");
}
else {
return ApiResult.Failed(msg);
}
}
#endregion
......
......@@ -752,7 +752,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 },
......@@ -1959,5 +1959,22 @@ namespace Edu.WebApi.Controllers.Finance
}
#endregion
#region 班级相关统计
/// <summary>
/// 班级月度课耗统计
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetClassMonthStatistics() {
var userInfo = base.UserInfo;
int classId = base.ParmJObj.GetInt("ClassId", 0);
var list = financeModule.GetClassMonthStatistics(classId, userInfo);
return ApiResult.Success("", list);
}
#endregion
}
}
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