using Edu.AOP.CustomerAttribute;
using Edu.Cache.User;
using Edu.Common;
using Edu.Common.API;
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.Entity.Sell;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Finance;
using Edu.Model.ViewModel.Grade;
using Edu.Model.ViewModel.Log;
using Edu.Model.ViewModel.Reserve;
using Edu.Model.ViewModel.Sell;
using Edu.Model.ViewModel.User;
using Edu.Repository.Course;
using Edu.Repository.Finance;
using Edu.Repository.Grade;
using Edu.Repository.Log;
using Edu.Repository.Sell;
using Edu.Repository.User;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using VT.FW.DB;
namespace Edu.Module.Course
{
///
/// 教务奖励处理类
///
public class TeachingRewardsModule
{
///
/// 奖励
///
private readonly RB_Teaching_RewardsRepository teaching_RewardsRepository = new RB_Teaching_RewardsRepository();
///
/// 概率范围
///
private readonly RB_Teaching_Rewards_RateRepository teaching_Rewards_RateRepository = new RB_Teaching_Rewards_RateRepository();
///
/// 基础
///
private readonly RB_Teaching_Rewards_BaseRepository teaching_Rewards_BaseRepository = new RB_Teaching_Rewards_BaseRepository();
///
/// 用户日志
///
private readonly RB_User_ChangeLogRepository changeLogRepository = new RB_User_ChangeLogRepository();
///
/// 教师奖励
///
private readonly RB_Teaching_BonusRepository teaching_BonusRepository = new RB_Teaching_BonusRepository();
///
/// 教师奖励明细
///
private readonly RB_Teaching_BonusDetailRepository teaching_BonusDetailRepository = new RB_Teaching_BonusDetailRepository();
///
/// 教师
///
private readonly RB_TeacherRepository teacherRepository = new RB_TeacherRepository();
///
/// 上课计划
///
private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository();
///
/// 上课时间
///
private readonly RB_Class_TimeRepository class_TimeRepository = new RB_Class_TimeRepository();
///
/// 班级基础配置
///
private readonly RB_Class_ConfigRepository class_ConfigRepository = new RB_Class_ConfigRepository();
///
/// 班级类型
///
private readonly RB_Class_TypeRepository class_TypeRepository = new RB_Class_TypeRepository();
///
/// 签到
///
private readonly RB_Class_CheckRepository class_CheckRepository = new RB_Class_CheckRepository();
///
/// 班级
///
private readonly RB_ClassRepository classRepository = new RB_ClassRepository();
///
/// 财务账户
///
private readonly RB_ClientBankAccountRepository clientBankAccountRepository = new RB_ClientBankAccountRepository();
///
/// 教师绩效
///
private readonly RB_Teaching_PerfRepository teaching_PerfRepository = new RB_Teaching_PerfRepository();
///
/// 教师绩效备注
///
private readonly RB_Teaching_PerfRemarkRepository teaching_PerfRemarkRepository = new RB_Teaching_PerfRemarkRepository();
///
/// 集团
///
private readonly RB_GroupRepository groupRepository = new RB_GroupRepository();
///
/// 校区
///
private readonly RB_SchoolRepository schoolRepository = new RB_SchoolRepository();
///
/// 账户
///
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
///
/// 部门
///
private readonly RB_DepartmentRepository departmentRepository = new RB_DepartmentRepository();
///
/// 财务配置
///
private readonly RB_Finance_ConfigRepository finance_ConfigRepository = new RB_Finance_ConfigRepository();
///
/// 财务单据
///
private readonly RB_FinanceRepository financeRepository = new RB_FinanceRepository();
///
/// 投稿提成规则
///
private readonly RB_TeaCon_Commission_RuleRepository teaCon_Commission_RuleRepository = new RB_TeaCon_Commission_RuleRepository();
///
/// 投稿提成期数
///
private readonly RB_TeaCon_Commission_PeriodsRepository teaCon_Commission_PeriodsRepository = new RB_TeaCon_Commission_PeriodsRepository();
///
/// 投稿提成明细
///
private readonly RB_TeaCon_Commission_DetailsRepository teaCon_Commission_DetailsRepository = new RB_TeaCon_Commission_DetailsRepository();
///
/// 投稿信息
///
private readonly Repository.WeChat.RB_Contribute_InfoRepository contribute_InfoRepository = new Repository.WeChat.RB_Contribute_InfoRepository();
///
/// 试听课程
///
private readonly RB_TrialLessonRepository trialLessonRepository = new RB_TrialLessonRepository();
///
/// 试听班级
///
private readonly Repository.Reserve.RB_Reserve_ClassRepository reserve_ClassRepository = new Repository.Reserve.RB_Reserve_ClassRepository();
#region 教务配置
///
/// 获取教务奖励列表
///
///
///
///
public List GetTeachimgRewardsList(RB_Teaching_Rewards_Rate_ViewModel demodel, UserInfo userInfo, out List fclist)
{
var rlist = teaching_Rewards_RateRepository.GetList(new RB_Teaching_Rewards_Rate_ViewModel() { Group_Id = userInfo.Group_Id, Type = demodel.Type });
var relist = rlist.Where(x => x.RateType == 2).OrderBy(x => x.StartValue).ToList();
fclist = rlist.Where(x => x.RateType == 1).OrderBy(x => x.StartValue).ToList();
var vlist = new List();
if (relist.Any())
{
string TackClassRateIds = string.Join(",", relist.Select(x => x.Id));
vlist = teaching_RewardsRepository.GetList(new RB_Teaching_Rewards_ViewModel() { TackClassRateIds = TackClassRateIds });
}
foreach (var item in relist)
{
var clist = new List();
foreach (var qitem in fclist)
{
var vmodel = vlist.Where(x => x.FullClassRateId == qitem.Id && x.TackClassRateId == item.Id).FirstOrDefault();
clist.Add(new RB_Teaching_Rewards_Rate_ViewModel()
{
Id = qitem.Id,
StartValue = qitem.StartValue,
EndValue = qitem.EndValue,
ClassMoney = vmodel?.Money ?? 0,
PeopelNum = vmodel?.PeopelNum ?? 0
});
}
item.FullClassList = clist;
}
return relist;
}
///
/// 保存教务奖励配置
///
///
///
///
///
[TransactionCallHandler]
public virtual bool SetTeachingRewardsInfo(int type, List deList, UserInfo userInfo)
{
var rlist = teaching_Rewards_RateRepository.GetList(new RB_Teaching_Rewards_Rate_ViewModel() { Group_Id = userInfo.Group_Id, Type = type });
try
{
if (rlist.Any())
{
//直接全删了 重新新增
var xblist = rlist.Where(x => x.RateType == 2).OrderBy(x => x.StartValue).ToList();
string TackClassRateIds = string.Join(",", xblist.Select(x => x.Id));
var vlist = teaching_RewardsRepository.GetList(new RB_Teaching_Rewards_ViewModel() { TackClassRateIds = TackClassRateIds });
teaching_RewardsRepository.DeleteBatch(vlist);
teaching_Rewards_RateRepository.DeleteBatch(rlist);
}
var FullClassList = deList.FirstOrDefault().FullClassList;
//先新增满班率
foreach (var item in FullClassList)
{
int Id = teaching_Rewards_RateRepository.Insert(new RB_Teaching_Rewards_Rate()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
EndValue = item.EndValue,
Group_Id = userInfo.Group_Id,
RateType = 1,
School_Id = userInfo.School_Id,
StartValue = item.StartValue,
Type = type
});
item.Id = Id;
}
foreach (var item in deList)
{
//新增续班率
int Id = teaching_Rewards_RateRepository.Insert(new RB_Teaching_Rewards_Rate()
{
Id = 0,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
EndValue = item.EndValue,
Group_Id = userInfo.Group_Id,
RateType = 2,
School_Id = userInfo.School_Id,
StartValue = item.StartValue,
Type = type
});
foreach (var qitem in item.FullClassList)
{
//获取 满班率id
int mId = FullClassList.Where(x => x.StartValue == qitem.StartValue && x.EndValue == qitem.EndValue).FirstOrDefault()?.Id ?? 0;
if (mId > 0)
{
teaching_RewardsRepository.Insert(new RB_Teaching_Rewards()
{
Id = 0,
FullClassRateId = mId,
TackClassRateId = Id,
Money = qitem.ClassMoney,
PeopelNum = qitem.PeopelNum
});
}
}
}
return true;
}
catch (Exception ex)
{
LogHelper.Write(ex, "SetTeachingRewardsInfo");
return false;
}
}
///
/// 保存教务奖励 基础
///
///
///
///
public bool SetTeachingRewardsBase(RB_Teaching_Rewards_Base_ViewModel demodel, UserInfo userInfo)
{
if (demodel.Id > 0)
{
Dictionary keyValues = new Dictionary() {
{ nameof(RB_Teaching_Rewards_Base_ViewModel.BasicMoney),demodel.BasicMoney},
{ nameof(RB_Teaching_Rewards_Base_ViewModel.BasicHour),demodel.BasicHour},
{ nameof(RB_Teaching_Rewards_Base_ViewModel.ClassTypeIds),demodel.ClassTypeIds},
{ nameof(RB_Teaching_Rewards_Base_ViewModel.UpdateBy),demodel.UpdateBy},
{ nameof(RB_Teaching_Rewards_Base_ViewModel.UpdateTime),demodel.UpdateTime}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_Teaching_Rewards_Base_ViewModel.Id),
FiledValue=demodel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
var flag = teaching_Rewards_BaseRepository.Update(keyValues, wheres);
if (flag)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "更新教务奖励-基础",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag;
}
else
{
var list = teaching_Rewards_BaseRepository.GetList(new RB_Teaching_Rewards_Base_ViewModel() { Group_Id = userInfo.Group_Id, Type = demodel.Type });
if (list.Any())
{
return false;
}
int Id = teaching_Rewards_BaseRepository.Insert(demodel);
if (Id > 0)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "新增教务奖励-基础",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return Id > 0;
}
}
///
/// 获取教务奖励基础
///
///
///
///
public object GetTeachingRewardsBaseInfo(int type, UserInfo userInfo)
{
var model = teaching_Rewards_BaseRepository.GetList(new RB_Teaching_Rewards_Base_ViewModel() { Group_Id = userInfo.Group_Id, Type = type }).FirstOrDefault();
return new
{
Id = model?.Id ?? 0,
BasicMoney = model?.BasicMoney ?? 0,
ClassTypeIds = model?.ClassTypeIds ?? "",
ClassTypeIdList = JsonHelper.DeserializeObject>("[" + (model?.ClassTypeIds ?? "") + "]"),
BasicHour = model?.BasicHour ?? 0
};
}
#endregion
#region 教师奖励
///
/// 获取讲师奖励分页列表
///
///
///
///
///
///
public List GetTeachingBonusPageList(int pageIndex, int pageSize, out long count, RB_Teaching_Bonus_ViewModel dmodel)
{
var list = teaching_BonusRepository.GetPageList(pageIndex, pageSize, out count, dmodel);
if (list.Any())
{
string bonusIds = string.Join(",", list.Select(x => x.Id));
//获取所有的明细
var dlist = teaching_BonusDetailRepository.GetList(new RB_Teaching_BonusDetail_ViewModel() { Group_Id = dmodel.Group_Id, BonusIds = bonusIds });
//获取所有的教师
string teacherIds = string.Join(",", list.Select(x => x.TeacherIds));
var tlist = teacherRepository.GetTeacherListRepository(new RB_Teacher_ViewModel() { Group_Id = dmodel.Group_Id, QTIds = teacherIds, IsQLeave = 1 });
//查询财务单据
var financeList = financeRepository.GetListSingle(new RB_Finance_Extend() { RB_Group_Id = dmodel.Group_Id, FinanceType = 2, OtherType = 26, ReFinanceIds = bonusIds, IsSelectNormal = 1 });
foreach (var item in list)
{
item.TeacherList = new List();
string[] teacherIdArr = item.TeacherIds.Split(",");
foreach (var qitem in teacherIdArr)
{
int teacherId = Convert.ToInt32(qitem);
string teacherName = tlist.Where(x => x.TId == teacherId).FirstOrDefault()?.TeacherName ?? "";
//教师累计奖励金额
decimal money = dlist.Where(x => x.BonusId == item.Id && x.TeacherId == teacherId).Sum(x => x.Money);
item.TeacherList.Add(new RB_Teaching_BonusDetail_ViewModel()
{
TeacherId = teacherId,
TeacherName = teacherName,
Money = money
});
//财务单据
var flist = financeList.Where(x => x.ReFinanceId == item.Id).Select(x => x.FrID);
if (flist.Any())
{
item.FinanceId = string.Join(",", flist);
}
}
}
}
return list;
}
///
/// 获取教师奖励明细列表
///
///
///
public List GetTeachingBonusDetailList(RB_Teaching_BonusDetail_ViewModel dmodel)
{
var list = teaching_BonusDetailRepository.GetTeachingBonusDetailList(dmodel);
return list;
}
///
/// 获取我的教师奖励
///
///
///
///
///
///
public List GetMyTeachingBonusDetailPageList(int pageIndex, int pageSize, out long count, RB_Teaching_BonusDetail_ViewModel dmodel)
{
var list = teaching_BonusDetailRepository.GetPageList(pageIndex, pageSize, out count, dmodel);
return list;
}
///
/// 获取累积金额
///
///
///
public decimal GetTeachingBonusDetailTotalMoney(RB_Teaching_BonusDetail_ViewModel dmodel)
{
return teaching_BonusDetailRepository.GetTeachingBonusDetailTotalMoney(dmodel);
}
///
/// 获取教师奖励统计
///
///
///
public List GetTeachingBonusStatistics(RB_Teaching_BonusDetail_ViewModel dmodel)
{
var list = teaching_BonusDetailRepository.GetTeachingBonusStatistics(dmodel);
return list;
}
///
/// 设置教师降临id
///
///
///
///
///
public bool SetTeachingBonusState(int bonusId, int type, UserInfo userInfo)
{
var model = teaching_BonusRepository.GetEntity(bonusId);
if (model == null) { return false; }
string LogContent = "";
Dictionary keyValues = new Dictionary() {
{ nameof(RB_Teaching_Bonus_ViewModel.UpdateBy),userInfo.Id},
{ nameof(RB_Teaching_Bonus_ViewModel.UpdateTime),DateTime.Now}
};
if (type == 1)
{
LogContent = "教务奖励确认";
if (model.State != BonusStateEnum.Wait)
{
return false;
}
keyValues.Add(nameof(RB_Teaching_Bonus_ViewModel.State), BonusStateEnum.Confirmed);
}
else if (type == 2)
{
LogContent = "教务奖励取消";
if (model.State != BonusStateEnum.Wait && model.State != BonusStateEnum.Confirmed)
{
return false;
}
keyValues.Add(nameof(RB_Teaching_Bonus_ViewModel.State), BonusStateEnum.Cancel);
}
else { return false; }
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_Teaching_Bonus_ViewModel.Id),
FiledValue=bonusId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = teaching_BonusRepository.Update(keyValues, wheres);
if (flag)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = LogContent,
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag;
}
///
/// 新增教师奖励
///
///
///
///
public string SetTeachingBonusAdd(RB_Teaching_Bonus_ViewModel dmodel, UserInfo userInfo)
{
//验证当月教师是否已存在奖励
var tlist = teaching_BonusRepository.GetList(new RB_Teaching_Bonus_ViewModel() { Group_Id = userInfo.Group_Id, Month = Convert.ToDateTime(dmodel.Month).ToString("yyyy-MM") }).Where(x => x.State != BonusStateEnum.Cancel).ToList();
if (tlist.Any())
{
string[] teacherArr = dmodel.TeacherIds.Split(',');
foreach (var item in tlist)
{
foreach (var qitem in teacherArr)
{
if (("," + item.TeacherIds + ",").Contains("," + qitem + ","))
{
return "教师 " + (teacherRepository.GetEntity(qitem)?.TeacherName ?? "") + "【" + qitem + "】" + "已存在当月奖励";
}
}
}
}
//基础配置
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 "未配置课时费基础设置"; }
#region 首先创建个主表数据
dmodel.State = BonusStateEnum.Create;
int bonusId = teaching_BonusRepository.Insert(dmodel);
#endregion
//查询当月 老师对应所有的课程
string StartTime = dmodel.Month + "-01";
string EndTime = Convert.ToDateTime(dmodel.Month + "-01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd");
var plist = class_PlanRepository.GetClassPlanList_V2(new RB_Class_Plan_ViewModel() { Group_Id = userInfo.Group_Id, Q_TeacherIds = dmodel.TeacherIds, StartTime = StartTime, EndTime = EndTime });
//查询所有课程的上课时间
List typeList = new List();
List checkList = new List();
List teacherList = new List();
List DateList = new List();
if (plist.Any())
{
string pids = string.Join(",", plist.Select(x => x.ClassPlanId));
string classTypeIds = string.Join(",", plist.Select(x => x.ClassType).Distinct());
typeList = class_TypeRepository.GetClassTypeListRepository(new RB_Class_Type_ViewModel() { Group_Id = userInfo.Group_Id, Q_CTypeIds = classTypeIds });
//查询签到数据
string classIds = string.Join(",", plist.Select(x => x.ClassId).Distinct());
checkList = class_CheckRepository.GetClassCheckStatistics(new RB_Class_Check_ViewModel() { Group_Id = userInfo.Group_Id, Q_ClassIds = classIds, StartDate = StartTime, EndDate = EndTime });
//查询教师列表
string teacherIds = string.Join(",", plist.Select(x => x.TeacherId).Distinct());
teacherList = teacherRepository.GetTeacherListRepository(new RB_Teacher_ViewModel() { QTIds = teacherIds, IsQLeave = 1 });
//根据学生签到表 查询
var list = class_CheckRepository.GetTeacherConsumptionHoursDetialList(teacherIds, -1, 0, StartTime, EndTime, userInfo.Group_Id);
if (list.Any())
{
foreach (var item in list)
{
//上课课时
decimal KSNum = item.CurrentDeductionHours;//使用签到表的课时
if (item.ClassId == 18) { KSNum = 0; }//18班级暂不算课时
var typeModel = typeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (item?.BaseHourFee ?? 0);
//课时费 需要每个班级 单独计算 因为 班级有附加费用
decimal KSMoney = KSNum * unitPrice;
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,
UnitPrice = unitPrice,
Money = KSMoney
});
}
}
}
#region 试听课
List stDateList = new List();
var stlist = reserve_ClassRepository.GetClassReserveList(new RB_Reserve_Class_Extend() { Group_Id = userInfo.Group_Id, TeacherIds = dmodel.TeacherIds, ClassTime = StartTime, EndTime = EndTime });
if (stlist.Any()) {
//每次试听课 算一个课时
foreach (var item in stlist) {
stDateList.Add(new RB_Teaching_BonusDetail_ViewModel()
{
BonusId = bonusId,
CheckInNum = item.CheckNum,
ClassId = item.ReserveClassId,
CourseHour = 1,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
Date = item.ClassDate,
Group_Id = dmodel.Group_Id,
Id = 0,
Money = item.ClassHourFee,
School_Id = item.School_Id,
Status = 0,
TeacherId = item.TeacherId,
Type = 1,
UnitPrice = item.ClassHourFee,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
CouseClassify = 2
});
}
}
#endregion
var trans = teaching_BonusDetailRepository.DbTransaction;
try
{
decimal TotalMoney = 0;
//基础课
foreach (var item in plist)
{
var dateqList = DateList.Where(x => x.TeacherId == item.TeacherId && x.ClassId == item.ClassId && x.Date == item.ClassDate).ToList();
//查询课时
decimal ksNum = dateqList.Sum(x => x.KSNum);
//查询课单价
var typeModel = typeList.Where(x => x.CTypeId == item.ClassType).FirstOrDefault();
var teacherModel = teacherList.Where(x => x.TId == item.TeacherId).FirstOrDefault();
decimal unitPrice = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (teacherModel?.BaseHourFee ?? 0);
//签到人数
var checkModel = checkList.Where(x => x.ClassId == item.ClassId && x.ClassDate == item.ClassDate).FirstOrDefault();
teaching_BonusDetailRepository.Insert(new RB_Teaching_BonusDetail()
{
BonusId = bonusId,
CheckInNum = checkModel?.CheckNum ?? 0,
ClassId = item.ClassId,
CourseHour = ksNum,
CreateBy = dmodel.CreateBy,
CreateTime = DateTime.Now,
Date = item.ClassDate,
Group_Id = dmodel.Group_Id,
Id = 0,
Money = ksNum * unitPrice,
School_Id = item.School_Id,
Status = 0,
TeacherId = item.TeacherId,
Type = item.TeacherId == item.Teacher_Id ? 1 : 2,
UnitPrice = unitPrice,
UpdateBy = dmodel.UpdateBy,
UpdateTime = DateTime.Now,
CouseClassify = 1
}, trans);
TotalMoney += ksNum * unitPrice;
}
//试听课
foreach (var item in stDateList) {
teaching_BonusDetailRepository.Insert(item, trans);
TotalMoney += item.Money;
}
#region 更新状态为待确认
Dictionary keyValues = new Dictionary() {
{ nameof(RB_Teaching_Bonus_ViewModel.State), BonusStateEnum.Wait},
{ nameof(RB_Teaching_Bonus_ViewModel.Money), TotalMoney}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_Teaching_Bonus_ViewModel.Id),
FiledValue=bonusId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = teaching_BonusRepository.Update(keyValues, wheres, trans);
#endregion
if (flag)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "生成教师奖励【" + dmodel.Month + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
teaching_BonusDetailRepository.DBSession.Commit();
#region 基础课时处理
decimal DeductionMoney = 0;
if (configModel.BasicHours > 0)
{
var blist = teaching_BonusDetailRepository.GetList(new RB_Teaching_BonusDetail_ViewModel() { Group_Id = userInfo.Group_Id, BonusId = bonusId });
//遍历所有老师
List TeacherIdList = blist.Select(x => x.TeacherId).Distinct().ToList();
foreach (var item in TeacherIdList)
{
var teacherModel = teacherList.Where(x => x.TId == item).FirstOrDefault();
if (teacherModel == null) {
continue;
}
if (!(teacherModel.BaseHoursEnabled == 1 && Convert.ToDateTime(dmodel.Month) >= Convert.ToDateTime(teacherModel.EnableTime))){
continue;
}
var qblist = blist.Where(x => x.TeacherId == item).OrderBy(x => x.Date).ThenBy(x => x.UnitPrice).ToList();
decimal BasicHours = configModel.BasicHours;
foreach (var qitem in qblist)
{
decimal CourseHour = 0, DeductionHour = 0;
if (BasicHours > qitem.CourseHour)
{
DeductionHour = qitem.CourseHour;
BasicHours -= qitem.CourseHour;
DeductionMoney += qitem.CourseHour * qitem.UnitPrice;
}
else
{
DeductionHour = BasicHours;
CourseHour = qitem.CourseHour - BasicHours;
DeductionMoney += BasicHours * qitem.UnitPrice;
BasicHours = 0;
}
Dictionary keyValues1 = new Dictionary() {
{ nameof(RB_Teaching_BonusDetail_ViewModel.CourseHour),CourseHour},
{ nameof(RB_Teaching_BonusDetail_ViewModel.DeductionHour),DeductionHour},
{ nameof(RB_Teaching_BonusDetail_ViewModel.Money),CourseHour * qitem.UnitPrice}
};
List wheres1 = new List() {
new WhereHelper(){
FiledName=nameof(RB_Teaching_BonusDetail_ViewModel.Id),
FiledValue=qitem.Id,
OperatorEnum=OperatorEnum.Equal
}
};
teaching_BonusDetailRepository.Update(keyValues1, wheres1);
if (BasicHours <= 0)
{
break;
}
}
}
#region 更新总金额
Dictionary keyValues2 = new Dictionary() {
{ nameof(RB_Teaching_Bonus_ViewModel.Money), TotalMoney - DeductionMoney}
};
List wheres2 = new List() {
new WhereHelper(){
FiledName=nameof(RB_Teaching_Bonus_ViewModel.Id),
FiledValue=bonusId,
OperatorEnum=OperatorEnum.Equal
}
};
teaching_BonusRepository.Update(keyValues2, wheres2);
#endregion
}
#endregion
return "";
}
catch (Exception ex)
{
LogHelper.Write(ex, "SetTeachingBonusAdd");
teaching_BonusDetailRepository.DBSession.Rollback();
#region 取消创建的奖励
Dictionary keyValues = new Dictionary() {
{ nameof(RB_Teaching_Bonus_ViewModel.State), BonusStateEnum.Cancel}
};
List wheres = new List() {
new WhereHelper(){
FiledName=nameof(RB_Teaching_Bonus_ViewModel.Id),
FiledValue=bonusId,
OperatorEnum=OperatorEnum.Equal
}
};
teaching_BonusRepository.Update(keyValues, wheres);
#endregion
return "出错了,请联系管理员";
}
}
///
/// 生成财务单据
///
///
///
///
public string SetTeachingBonusFinance(int bonusId, int IsPublic, int CurrencyId, UserInfo userInfo)
{
var tmodel = teaching_BonusRepository.GetEntity(bonusId);
if (tmodel == null) { return "教师奖励不存在"; }
if (tmodel.State != BonusStateEnum.Confirmed) { return "奖金状态不正确"; }
if (!string.IsNullOrEmpty(tmodel.FinanceId)) { return "已制单,无法再次生成单据"; }
var fcmodel = finance_ConfigRepository.GetList(new RB_Finance_Config_ViewModel() { Group_Id = userInfo.Group_Id, Type = FinanceConfigTypeEnum.ClassFees }).FirstOrDefault();
if (fcmodel == null) { return "未配置制单流程"; }
var list = teaching_BonusDetailRepository.GetTeachingBonusStatistics(new RB_Teaching_BonusDetail_ViewModel() { Group_Id = userInfo.Group_Id, BonusId = bonusId });
string msg = "";
//查询出所有需要发提成的人
List EmpList = list.Select(x => x.TeacherId).Distinct().ToList();
if (!EmpList.Any()) { return "暂无老师有可发放的提成金额"; }
//根据教师ids 查询 账号ids
var teachList = teacherRepository.GetTeacherList(string.Join(",", EmpList));
//查询所有的账户信息 不存在的需要提示
var banklist = clientBankAccountRepository.GetList(new RB_ClientBankAccount_Extend() { RB_Group_Id = userInfo.Group_Id, Type = Common.Enum.Finance.ClientTypeEnum.Employee, ObjIdStr = string.Join(",", teachList.Select(x => x.AccountId)) });
foreach (var item in teachList)
{
if (!banklist.Where(x => x.ObjID == item.AccountId).Any())
{
msg += (UserReidsCache.GetUserLoginInfo(item.AccountId)?.AccountName ?? "") + "未查询到员工银行账户信息;";
}
}
if (msg != "")
{
return msg + "请核实后再试!";
}
string Frids = "";
foreach (var item in EmpList)
{
var tlist = list.Where(x => x.TeacherId == item).ToList();
var teacherModel = teachList.Where(x => x.TId == item).FirstOrDefault();
#region 新增财务单据
//银行账户
var clientModel = banklist.Where(x => x.ObjID == teacherModel.AccountId).FirstOrDefault();
var detailList = new List