Commit c0e404db authored by 黄奎's avatar 黄奎

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents 99c27aef efd9bc57
......@@ -32,4 +32,27 @@ namespace Edu.Common.Enum.Course
[EnumField("生成中")]
Create = 4
}
/// <summary>
/// 绩效状态
/// </summary>
public enum PerfStateEnum
{
/// <summary>
/// 待确认
/// </summary>
[EnumField("待确认")]
Wait = 1,
/// <summary>
/// 已确认
/// </summary>
[EnumField("已确认")]
Confirmed = 2,
/// <summary>
/// 不发放绩效
/// </summary>
[EnumField("不发放绩效")]
Cancel = 3
}
}
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Course
{
/// <summary>
/// 教师绩效实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Teaching_Perf
{
/// <summary>
/// 主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 教师id
/// </summary>
public int TeacherId { get; set; }
/// <summary>
/// 班级Id
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 原带班人数
/// </summary>
public int BaseStuNum { get; set; }
/// <summary>
/// 原课时费
/// </summary>
public decimal BaseHourFee { get; set; }
/// <summary>
/// 增加带班人数
/// </summary>
public int AddStuNum { get; set; }
/// <summary>
/// 增加课时费
/// </summary>
public decimal AddHourFee { get; set; }
/// <summary>
/// 班级人数
/// </summary>
public int ClassPeopelNum { get; set; }
/// <summary>
/// 结课时间
/// </summary>
public DateTime EndDate { get; set; }
/// <summary>
/// 满班率
/// </summary>
public decimal FullClassRate { get; set; }
/// <summary>
/// 平均上课率
/// </summary>
public decimal AvgCheckRate { get; set; }
/// <summary>
/// 累计课时
/// </summary>
public int ClassHours { get; set; }
/// <summary>
/// 课时奖金
/// </summary>
public decimal UnitPrice { get; set; }
/// <summary>
/// 累计绩效金额
/// </summary>
public decimal Money { get; set; }
/// <summary>
/// 财务单据id
/// </summary>
public int FinanceId { get; set; }
/// <summary>
/// 枚举 绩效状态 1待确认 2已确认 3不发放绩效
/// </summary>
public PerfStateEnum PerfState { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 校区id
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 奖金对照
/// </summary>
public string BonusJson { get; set; }
/// <summary>
/// 课时费对照
/// </summary>
public string ClassFeeJson { get; set; }
/// <summary>
/// 确认时间
/// </summary>
public DateTime? ConfirmDate { get; set; }
}
}
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Course
{
/// <summary>
/// 绩效备注实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Teaching_PerfRemark
{
/// <summary>
/// id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 绩效编号
/// </summary>
public int PerfId { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Content { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
}
}
......@@ -22,6 +22,11 @@ namespace Edu.Model.Entity.Course
/// </summary>
public int Type { get; set; }
/// <summary>
/// 班级类型ids
/// </summary>
public string ClassTypeIds { get; set; }
/// <summary>
/// 基础课时费用
/// </summary>
......
using System;
using System.Collections.Generic;
namespace Edu.Model.ViewModel.Course
{
/// <summary>
/// 教师备注实体类
/// </summary>
[Serializable]
public class RB_Teaching_PerfRemark_ViewModel : Entity.Course.RB_Teaching_PerfRemark
{
/// <summary>
/// ids
/// </summary>
public string PerfIds { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
namespace Edu.Model.ViewModel.Course
{
/// <summary>
/// 教师绩效实体类
/// </summary>
[Serializable]
public class RB_Teaching_Perf_ViewModel : Entity.Course.RB_Teaching_Perf
{
/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 教师名称
/// </summary>
public string TeacherName { get; set; }
/// <summary>
/// 教师头像
/// </summary>
public string TeacherIcon { get; set; }
/// <summary>
/// 结课开始时间
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 结课结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 操作开始时间
/// </summary>
public string OPStartTime { get; set; }
/// <summary>
/// 操作结束时间
/// </summary>
public string OPEndTime { get; set; }
/// <summary>
/// 是否已确认 1是 2否
/// </summary>
public int Q_IsComfirm { get; set; }
/// <summary>
/// 是否已制单 1是 2否
/// </summary>
public int Q_IsCreateFinance { get; set; }
/// <summary>
/// 备注列表
/// </summary>
public List<RB_Teaching_PerfRemark_ViewModel> RemarkList { get; set; }
/// <summary>
/// 奖金对照
/// </summary>
public List<RB_Teaching_Rewards_Rate_ViewModel> JJList { get; set; }
/// <summary>
/// 课时费对照
/// </summary>
public List<RB_Teaching_Rewards_Rate_ViewModel> KSList { get; set; }
}
}
\ No newline at end of file
......@@ -82,6 +82,14 @@ namespace Edu.Module.Course
/// 财务账户
/// </summary>
private readonly RB_ClientBankAccountRepository clientBankAccountRepository = new RB_ClientBankAccountRepository();
/// <summary>
/// 教师绩效
/// </summary>
private readonly RB_Teaching_PerfRepository teaching_PerfRepository = new RB_Teaching_PerfRepository();
/// <summary>
/// 教师绩效备注
/// </summary>
private readonly RB_Teaching_PerfRemarkRepository teaching_PerfRemarkRepository = new RB_Teaching_PerfRemarkRepository();
#region 教务配置
......@@ -105,20 +113,13 @@ namespace Edu.Module.Course
var clist = new List<RB_Teaching_Rewards_Rate_ViewModel>();
foreach (var qitem in fclist) {
var vmodel = vlist.Where(x => x.FullClassRateId == qitem.Id && x.TackClassRateId == item.Id).FirstOrDefault();
decimal Money = 0;
int PeopelNum = 0;
if (vmodel != null)
{
Money = vmodel.Money;
PeopelNum = vmodel.PeopelNum;
}
clist.Add(new RB_Teaching_Rewards_Rate_ViewModel()
{
Id = qitem.Id,
StartValue = qitem.StartValue,
EndValue = qitem.EndValue,
ClassMoney = Money,
PeopelNum = PeopelNum
ClassMoney = vmodel?.Money ?? 0,
PeopelNum = vmodel?.PeopelNum ?? 0
});
}
item.FullClassList = clist;
......@@ -225,6 +226,7 @@ namespace Edu.Module.Course
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ 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}
};
......@@ -290,6 +292,8 @@ namespace Edu.Module.Course
{
Id = model?.Id ?? 0,
BasicMoney = model?.BasicMoney ?? 0,
ClassTypeIds = model?.ClassTypeIds ?? "",
ClassTypeIdList = JsonHelper.DeserializeObject<List<int>>("[" + (model?.ClassTypeIds ?? "") + "]"),
BasicHour = model?.BasicHour ?? 0
};
}
......@@ -689,5 +693,438 @@ namespace Edu.Module.Course
}
#endregion
#region 教师绩效
/// <summary>
/// 获取教师绩效分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_Teaching_Perf_ViewModel> GetTeachingPerfPageList(int pageIndex, int pageSize, out long count, RB_Teaching_Perf_ViewModel dmodel)
{
var list = teaching_PerfRepository.GetPageList(pageIndex, pageSize, out count, demodel: dmodel);
if (list.Any()) {
string perfIds = string.Join(",", list.Select(x => x.Id));
var rlist = teaching_PerfRemarkRepository.GetList(new RB_Teaching_PerfRemark_ViewModel() { PerfIds = perfIds });
foreach (var item in list) {
item.RemarkList = rlist.Where(x => x.PerfId == item.Id).ToList();
item.JJList = new List<RB_Teaching_Rewards_Rate_ViewModel>();
if (!string.IsNullOrEmpty(item.BonusJson))
{
item.JJList = JsonHelper.DeserializeObject<List<RB_Teaching_Rewards_Rate_ViewModel>>(item.BonusJson);
}
item.KSList = new List<RB_Teaching_Rewards_Rate_ViewModel>();
if (!string.IsNullOrEmpty(item.ClassFeeJson))
{
item.KSList = JsonHelper.DeserializeObject<List<RB_Teaching_Rewards_Rate_ViewModel>>(item.ClassFeeJson);
}
}
}
return list;
}
/// <summary>
/// 设置教师绩效备注
/// </summary>
/// <param name="perfId"></param>
/// <param name="remark"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public bool SetTeachingPerfRemark(int perfId, string remark, UserInfo userInfo)
{
//查询最后一次的备注
var model = teaching_PerfRemarkRepository.GetLastRemark(perfId);
if (model == null || model.Content != remark)
{
bool flag = teaching_PerfRemarkRepository.Insert(new Model.Entity.Course.RB_Teaching_PerfRemark()
{
Id = 0,
Content = remark,
PerfId = perfId,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now
}) > 0;
return flag;
}
else {
return true;
}
}
/// <summary>
/// 修改绩效状态
/// </summary>
/// <param name="perfId"></param>
/// <param name="type">类型 1确认绩效 2不发放绩效 3恢复绩效 4撤销绩效</param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetTeachingPerfState(int perfId, int type, UserInfo userInfo)
{
var perfModel = teaching_PerfRepository.GetEntity(perfId);
if (perfModel == null || perfModel.Status !=0) { return "绩效不存在"; }
if (type == 1)
{
if (perfModel.PerfState != PerfStateEnum.Wait) {
return "状态不正确";
}
var teacherModel = teacherRepository.GetEntity(perfModel.TeacherId);
if (teacherModel == null) { return "教师不存在"; }
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Teaching_Perf_ViewModel.PerfState),PerfStateEnum.Confirmed},
{ nameof(RB_Teaching_Perf_ViewModel.ConfirmDate),DateTime.Now},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateBy),userInfo.Id},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateTime),DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper (){
FiledName=nameof(RB_Teaching_Perf_ViewModel.Id),
FiledValue=perfId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = teaching_PerfRepository.Update(keyValues, wheres);
if (flag) {
//更新教师课时费 更新带班人数
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Teacher_ViewModel.BaseHourFee),teacherModel.BaseHourFee + perfModel.AddHourFee},
{ nameof(RB_Teacher_ViewModel.BaseStuNum),teacherModel.BaseStuNum + perfModel.AddStuNum}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Teacher_ViewModel.TId),
FiledValue=teacherModel.TId,
OperatorEnum=OperatorEnum.Equal
}
};
teacherRepository.Update(keyValues1, wheres1);
//记录日志
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 = "设置教师绩效 =>发放绩效【" + perfId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错了,请联系管理员";
}
else if (type == 2)
{
if (perfModel.PerfState != PerfStateEnum.Wait)
{
return "状态不正确";
}
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Teaching_Perf_ViewModel.PerfState),PerfStateEnum.Cancel},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateBy),userInfo.Id},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateTime),DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper (){
FiledName=nameof(RB_Teaching_Perf_ViewModel.Id),
FiledValue=perfId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = teaching_PerfRepository.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 = "设置教师绩效 =>不发放绩效【" + perfId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错了,请联系管理员";
}
else if (type == 3)
{
if (perfModel.PerfState != PerfStateEnum.Cancel)
{
return "状态不正确";
}
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Teaching_Perf_ViewModel.PerfState),PerfStateEnum.Wait},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateBy),userInfo.Id},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateTime),DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper (){
FiledName=nameof(RB_Teaching_Perf_ViewModel.Id),
FiledValue=perfId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = teaching_PerfRepository.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 = "设置教师绩效 =>恢复绩效【" + perfId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错了,请联系管理员";
}
else if (type == 4)
{
if (perfModel.PerfState != PerfStateEnum.Confirmed)
{
return "状态不正确";
}
if (perfModel.FinanceId > 0)
{
return "已存在财务单据,无法撤回";
}
var teacherModel = teacherRepository.GetEntity(perfModel.TeacherId);
if (teacherModel == null) { return "教师不存在"; }
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_Teaching_Perf_ViewModel.PerfState),PerfStateEnum.Wait},
{ nameof(RB_Teaching_Perf_ViewModel.ConfirmDate),null},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateBy),userInfo.Id},
{ nameof(RB_Teaching_Perf_ViewModel.UpdateTime),DateTime.Now},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper (){
FiledName=nameof(RB_Teaching_Perf_ViewModel.Id),
FiledValue=perfId,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = teaching_PerfRepository.Update(keyValues, wheres);
if (flag)
{
//更新教师课时费 更新带班人数
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
{ nameof(RB_Teacher_ViewModel.BaseHourFee),teacherModel.BaseHourFee - perfModel.AddHourFee},
{ nameof(RB_Teacher_ViewModel.BaseStuNum),teacherModel.BaseStuNum - perfModel.AddStuNum}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_Teacher_ViewModel.TId),
FiledValue=teacherModel.TId,
OperatorEnum=OperatorEnum.Equal
}
};
teacherRepository.Update(keyValues1, wheres1);
//记录日志
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 = "设置教师绩效 =>撤销绩效【" + perfId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
return flag ? "" : "出错了,请联系管理员";
}
else
{
return "";
}
}
/// <summary>
/// 生成绩效
/// </summary>
/// <param name="classId"></param>
/// <returns></returns>
public string SetTeachingPerfCreate(int classId)
{
var classModel = classRepository.GetEntity(classId);
if (classModel.Status == DateStateEnum.Delete) { return "班级不存在"; }
if (classModel.ClassStatus != ClassStatusEnum.EndClass) { return "班级状态不正确"; }
//基础配置
var configModel = class_ConfigRepository.GetClassConfigRepository(new RB_Class_Config_ViewModel() { Group_Id = classModel.Group_Id });
if (configModel == null || configModel.BasicHourFee <= 0 || configModel.BasicMinutes <= 0) { return "未配置课时费基础设置"; }
//获取班级类型
var list = teaching_Rewards_BaseRepository.GetList(new RB_Teaching_Rewards_Base_ViewModel() { Group_Id = classModel.Group_Id });
var baseModel = list.Where(x => ("," + x.ClassTypeIds + ",").Contains("," + classModel.ClassType + ",")).FirstOrDefault();
if (baseModel == null) { return "班级类型为匹配到"; }
var typeModel = class_TypeRepository.GetEntity(classModel.ClassType);
//获取奖金 课时费 比例
var JJRate = teaching_Rewards_RateRepository.GetList(new RB_Teaching_Rewards_Rate_ViewModel() { Group_Id = classModel.Group_Id, Type = baseModel.Type == 1 ? 1 : 3 });
var KSRate = teaching_Rewards_RateRepository.GetList(new RB_Teaching_Rewards_Rate_ViewModel() { Group_Id = classModel.Group_Id, Type = baseModel.Type == 1 ? 2 : 4 });
if (!JJRate.Any()) { return "奖金未配置"; }
if (!KSRate.Any()) { return "课时费未配置"; }
//获取比例值
var JJrelist = JJRate.Where(x => x.RateType == 2).ToList();
var JJfclist = JJRate.Where(x => x.RateType == 1).ToList();
var KSrelist = KSRate.Where(x => x.RateType == 2).ToList();
var KSfclist = KSRate.Where(x => x.RateType == 1).ToList();
string TackClassRateIds = string.Join(",", JJrelist.Select(x => x.Id));
string TackClassRateIds1 = string.Join(",", KSrelist.Select(x => x.Id));
var ValueList = teaching_RewardsRepository.GetList(new RB_Teaching_Rewards_ViewModel() { TackClassRateIds = (TackClassRateIds + "," + TackClassRateIds1) });
foreach (var item in JJrelist)
{
var clist = new List<RB_Teaching_Rewards_Rate_ViewModel>();
foreach (var qitem in JJfclist)
{
var vmodel = ValueList.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;
}
foreach (var item in KSrelist)
{
var clist = new List<RB_Teaching_Rewards_Rate_ViewModel>();
foreach (var qitem in KSfclist)
{
var vmodel = ValueList.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;
}
//教师信息
var teachModel = teacherRepository.GetEntity(classModel.Teacher_Id);
//班级总人数
int TotalPeopleNum = class_CheckRepository.GetClassToalPeopleNum(classId, classModel.Group_Id);
//班级课时总分钟数
int TotalClassMin = class_PlanRepository.GetClassTotalMinute(classId, classModel.Group_Id);
//总课时
int ksNum = TotalClassMin / configModel.BasicMinutes; // 未达到一课时时间 不算一课时
//满班率
decimal FullClassRate = 0;
if (teachModel.BaseStuNum > 0)
{
FullClassRate = Math.Round(Convert.ToDecimal(TotalPeopleNum) / teachModel.BaseStuNum, 2, MidpointRounding.AwayFromZero);
}
//班级平均上课率
decimal AvgTakeClassRate = class_CheckRepository.GetClassAvgTakeClassRate(classId, classModel.Group_Id);
//查询奖金金额
decimal UnitPrice = 0;
var jjModel = JJrelist.Where(x => x.StartValue <= AvgTakeClassRate && AvgTakeClassRate <= x.EndValue).FirstOrDefault();
if (jjModel != null) {
UnitPrice = jjModel.FullClassList.Where(x => x.StartValue <= FullClassRate && FullClassRate <= x.EndValue).FirstOrDefault()?.ClassMoney ?? 0;
}
//查询 增加课时费 带班人数
decimal ClassMoney = 0;
int StuNum = 0;
var ksModel = KSrelist .Where(x => x.StartValue <= AvgTakeClassRate && AvgTakeClassRate <= x.EndValue).FirstOrDefault();
if (ksModel != null) {
var ks2Model = ksModel.FullClassList.Where(x => x.StartValue <= FullClassRate && FullClassRate <= x.EndValue).FirstOrDefault();
ClassMoney = ks2Model?.ClassMoney ?? 0;
StuNum = ks2Model?.PeopelNum ?? 0;
}
int perfId = teaching_PerfRepository.Insert(new Model.Entity.Course.RB_Teaching_Perf()
{
Id = 0,
AddHourFee = ClassMoney,
AddStuNum = StuNum,
AvgCheckRate = AvgTakeClassRate,
BaseHourFee = configModel.BasicHourFee + (typeModel?.AddHourFee ?? 0) + (teachModel?.BaseHourFee ?? 0),
BaseStuNum = teachModel?.BaseStuNum ?? 0,
ClassHours = ksNum,
ClassId = classModel.ClassId,
ClassPeopelNum = TotalPeopleNum,
ConfirmDate = null,
CreateBy = 0,
CreateTime = DateTime.Now,
EndDate = classModel.EndClassDate,
FinanceId = 0,
FullClassRate = FullClassRate,
Group_Id = classModel.Group_Id,
Money = UnitPrice * ksNum,
PerfState = PerfStateEnum.Wait,
School_Id = classModel.School_Id,
Status = 0,
TeacherId = classModel.Teacher_Id,
UnitPrice = UnitPrice,
UpdateBy = 0,
UpdateTime = DateTime.Now,
BonusJson = JsonHelper.Serialize(JJrelist.Select(x=>new {
x.Id,
x.StartValue,
x.EndValue,
FullClassList = x.FullClassList.Select(z=>new {
z.Id,
z.StartValue,
z.EndValue,
z.ClassMoney,
z.PeopelNum
})
})),
ClassFeeJson = JsonHelper.Serialize(KSrelist.Select(x => new {
x.Id,
x.StartValue,
x.EndValue,
FullClassList = x.FullClassList.Select(z => new {
z.Id,
z.StartValue,
z.EndValue,
z.ClassMoney,
z.PeopelNum
})
}))
});
return "";
}
/// <summary>
/// 绩效制单
/// </summary>
/// <param name="perfId"></param>
/// <param name="isPublic"></param>
/// <param name="currencyId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public string SetTeachingPerfFinance(int perfId, int isPublic, int currencyId, UserInfo userInfo)
{
throw new NotImplementedException();
}
#endregion
}
}
......@@ -91,5 +91,41 @@ namespace Edu.Repository.Course
return Get<RB_Class_Check_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 班级总人数
/// </summary>
/// <param name="classId"></param>
/// <returns></returns>
public int GetClassToalPeopleNum(int classId,int groupId)
{
string sql = $@"SELECT count(*) AS Num FROM(SELECT OrderGuestId FROM rb_class_check WHERE `Status`=0 AND Group_Id={groupId} AND ClassId ={classId} GROUP BY OrderGuestId)t";
var obj = ExecuteScalar(sql);
if (obj != null)
{
return Convert.ToInt32(obj);
}
else {
return 0;
}
}
/// <summary>
/// 获取平均上课率
/// </summary>
/// <param name="classId"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public decimal GetClassAvgTakeClassRate(int classId, int group_Id)
{
string sql1 = $@"SELECT COUNT(0) AS TotalNum FROM rb_class_check WHERE `Status`=0 AND Group_Id={group_Id} AND ClassId = {classId};";
string sql2 = $@"SELECT COUNT(0) AS TotalNum FROM rb_class_check WHERE `Status`=0 AND Group_Id={group_Id} AND CheckStatus =0 AND ClassId = {classId};";
var obj1 = ExecuteScalar(sql1);
var obj2 = ExecuteScalar(sql2);
int Num1 = Convert.ToInt32(obj1 ?? "0"), Num2 = Convert.ToInt32(obj2 ?? "0");
if (Num1 == 0) { return 0; }
decimal avgClassRate = Math.Round(Convert.ToDecimal(Num2) / Num1, 2, MidpointRounding.AwayFromZero);
return avgClassRate;
}
}
}
......@@ -251,5 +251,29 @@ LEFT JOIN rb_teacher as c on c.TId=a.TeacherId
builder.AppendFormat(@" order by ClassDate desc ");
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级累计上课时间(分钟)
/// </summary>
/// <param name="classId"></param>
/// <param name="group_Id"></param>
/// <returns></returns>
public int GetClassTotalMinute(int classId, int group_Id)
{
string sql = $@"SELECT SUM(t.minNum) AS minNum FROM(
SELECT TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',t.StartTime), CONCAT('2020-12-16',' ',t.EndTime)) AS minNum FROM rb_class_plan p
INNER JOIN rb_class_time t on p.ClassPlanId = t.ClassPlanId
WHERE p.`Status`=0 AND p.Group_Id={group_Id} AND p.ClassId ={classId}
)t;
";
var obj = ExecuteScalar(sql);
if (obj != null)
{
return Convert.ToInt32(obj);
}
else {
return 0;
}
}
}
}
using Edu.Common.Enum;
using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Course;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;
namespace Edu.Repository.Course
{
/// <summary>
/// 绩效备注仓储层
/// </summary>
public class RB_Teaching_PerfRemarkRepository : BaseRepository<RB_Teaching_PerfRemark>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_Teaching_PerfRemark_ViewModel> GetList(RB_Teaching_PerfRemark_ViewModel demodel)
{
string where = $@" 1=1";
if (demodel.PerfId > 0)
{
where += $@" and {nameof(RB_Teaching_PerfRemark.PerfId)} ={demodel.PerfId}";
}
if (!string.IsNullOrEmpty(demodel.PerfIds))
{
where += $@" and {nameof(RB_Teaching_PerfRemark.PerfId)} in({demodel.PerfIds})";
}
string sql = $@" select * from RB_Teaching_PerfRemark where {where} order by Id desc";
return Get<RB_Teaching_PerfRemark_ViewModel>(sql).ToList();
}
/// <summary>
/// 获取最后一条记录
/// </summary>
/// <param name="perfId"></param>
/// <returns></returns>
public RB_Teaching_PerfRemark_ViewModel GetLastRemark(int perfId)
{
string where = $@" 1=1";
where += $@" and {nameof(RB_Teaching_PerfRemark.PerfId)} ={perfId}";
string sql = $@" select * from RB_Teaching_PerfRemark where {where} order by Id desc limit 1";
return Get<RB_Teaching_PerfRemark_ViewModel>(sql).FirstOrDefault();
}
}
}
using Edu.Common.Enum;
using Edu.Model.Entity.Course;
using Edu.Model.Entity.User;
using Edu.Model.ViewModel.Course;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;
namespace Edu.Repository.Course
{
/// <summary>
/// 教师绩效仓储层
/// </summary>
public class RB_Teaching_PerfRepository : BaseRepository<RB_Teaching_Perf>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_Teaching_Perf_ViewModel> GetList(RB_Teaching_Perf_ViewModel demodel)
{
string where = $@" 1=1 and p.Status =0";
if (demodel.Group_Id > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.Group_Id)} ={demodel.Group_Id}";
}
if (demodel.School_Id > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.School_Id)} ={demodel.School_Id}";
}
if (demodel.ClassId > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.ClassId)} ={demodel.ClassId}";
}
if (!string.IsNullOrEmpty(demodel.ClassName))
{
where += $@" and c.{nameof(RB_Class.ClassName)} like '%{demodel.ClassName}%'";
}
if (demodel.TeacherId > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.TeacherId)} ={demodel.TeacherId}";
}
if (!string.IsNullOrEmpty(demodel.TeacherName))
{
where += $@" and t.{nameof(RB_Teacher.TeacherName)} like '%{demodel.TeacherName}%'";
}
if (demodel.Q_IsCreateFinance == 1)
{
where += $@" and p.{nameof(RB_Teaching_Perf.FinanceId)} >0";
}
else if (demodel.Q_IsCreateFinance == 2)
{
where += $@" and p.{nameof(RB_Teaching_Perf.FinanceId)} =0";
}
if (demodel.Q_IsComfirm == 1)
{
where += $@" and p.{nameof(RB_Teaching_Perf.PerfState)} =2";
}
else if (demodel.Q_IsComfirm == 2)
{
where += $@" and p.{nameof(RB_Teaching_Perf.PerfState)} in(1,3)";
}
if (!string.IsNullOrEmpty(demodel.StartTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.EndDate)} >='{demodel.StartTime}'";
}
if (!string.IsNullOrEmpty(demodel.EndTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.EndDate)} <='{demodel.EndTime} 23:59:59'";
}
if (!string.IsNullOrEmpty(demodel.OPStartTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.ConfirmDate)} >='{demodel.OPStartTime}'";
}
if (!string.IsNullOrEmpty(demodel.OPEndTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.ConfirmDate)} <='{demodel.OPEndTime} 23:59:59'";
}
string sql = $@" select p.*,t.TeacherName,t.TeacherIcon,c.ClassName from RB_Teaching_Perf p
left join rb_teacher t on p.TeacherId = t.TId
left join rb_class c on p.ClassId = c.ClassId
where {where} order by p.Id desc";
return Get<RB_Teaching_Perf_ViewModel>(sql).ToList();
}
/// <summary>
/// 获取分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="count"></param>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_Teaching_Perf_ViewModel> GetPageList(int pageIndex,int pageSize,out long count, RB_Teaching_Perf_ViewModel demodel)
{
string where = $@" 1=1 and p.Status =0";
if (demodel.Group_Id > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.Group_Id)} ={demodel.Group_Id}";
}
if (demodel.School_Id > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.School_Id)} ={demodel.School_Id}";
}
if (demodel.ClassId > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.ClassId)} ={demodel.ClassId}";
}
if (!string.IsNullOrEmpty(demodel.ClassName))
{
where += $@" and c.{nameof(RB_Class.ClassName)} like '%{demodel.ClassName}%'";
}
if (demodel.TeacherId > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.TeacherId)} ={demodel.TeacherId}";
}
if (!string.IsNullOrEmpty(demodel.TeacherName))
{
where += $@" and t.{nameof(RB_Teacher.TeacherName)} like '%{demodel.TeacherName}%'";
}
if (demodel.PerfState > 0)
{
where += $@" and p.{nameof(RB_Teaching_Perf.PerfState)} ={(int)demodel.PerfState}";
}
if (demodel.Q_IsCreateFinance == 1)
{
where += $@" and p.{nameof(RB_Teaching_Perf.FinanceId)} >0";
}
else if (demodel.Q_IsCreateFinance == 2)
{
where += $@" and p.{nameof(RB_Teaching_Perf.FinanceId)} =0";
}
if (demodel.Q_IsComfirm == 1)
{
where += $@" and p.{nameof(RB_Teaching_Perf.PerfState)} =2";
}
else if (demodel.Q_IsComfirm == 2)
{
where += $@" and p.{nameof(RB_Teaching_Perf.PerfState)} in(1,3)";
}
if (!string.IsNullOrEmpty(demodel.StartTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.EndDate)} >='{demodel.StartTime}'";
}
if (!string.IsNullOrEmpty(demodel.EndTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.EndDate)} <='{demodel.EndTime} 23:59:59'";
}
if (!string.IsNullOrEmpty(demodel.OPStartTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.ConfirmDate)} >='{demodel.OPStartTime}'";
}
if (!string.IsNullOrEmpty(demodel.OPEndTime))
{
where += $@" and p.{nameof(RB_Teaching_Perf.ConfirmDate)} <='{demodel.OPEndTime} 23:59:59'";
}
string sql = $@" select p.*,t.TeacherName,t.TeacherIcon,c.ClassName from RB_Teaching_Perf p
left join rb_teacher t on p.TeacherId = t.TId
left join rb_class c on p.ClassId = c.ClassId
where {where} order by p.Id desc";
return GetPage<RB_Teaching_Perf_ViewModel>(pageIndex, pageSize, out count, sql).ToList();
}
}
}
......@@ -504,5 +504,212 @@ namespace Edu.WebApi.Controllers.Course
}));
}
#endregion
#region 教师绩效
/// <summary>
/// 教师绩效分页列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetTeachingPerfPageList()
{
var userInfo = base.UserInfo;
var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
var dmodel = JsonHelper.DeserializeObject<RB_Teaching_Perf_ViewModel>(RequestParm.Msg.ToString());
dmodel.Group_Id = userInfo.Group_Id;
var list = teachingRewardsModule.GetTeachingPerfPageList(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = list.Select(x => new
{
x.Id,
x.TeacherId,
x.TeacherIcon,
x.TeacherName,
x.BaseHourFee,
x.AddHourFee,
x.BaseStuNum,
x.AddStuNum,
x.ClassName,
x.ClassPeopelNum,
x.EndDate,
x.ConfirmDate,
x.FullClassRate,
x.AvgCheckRate,
x.ClassHours,
x.UnitPrice,
x.Money,
x.FinanceId,
x.PerfState,
PerfStateName = x.PerfState.ToName(),
RemarkList = x.RemarkList.Select(z => new
{
z.Id,
z.Content,
CreateBy = UserReidsCache.GetUserLoginInfo(z.CreateBy)?.AccountName ?? "",
CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
}),
x.UpdateBy,
UpdateByName = UserReidsCache.GetUserLoginInfo(x.UpdateBy)?.AccountName ?? "",
UpdateTime = x.UpdateTime.ToString("yyyy-MM-dd HH:mm:ss"),
JJList = x.JJList.Select(z=>new {
z.Id,
z.StartValue,
z.EndValue,
FullClassList = z.FullClassList.Select(y=>new {
y.Id,
y.StartValue,
y.EndValue,
y.ClassMoney,
y.PeopelNum
})
}),
JJFullRate = GetFullRateList(x.JJList).Select(y=>new {
y.Id,
y.StartValue,
y.EndValue
}),
KSList = x.KSList.Select(z => new {
z.Id,
z.StartValue,
z.EndValue,
FullClassList = z.FullClassList.Select(y => new {
y.Id,
y.StartValue,
y.EndValue,
y.ClassMoney,
y.PeopelNum
})
}),
KSFullRate = GetFullRateList(x.KSList).Select(y => new {
y.Id,
y.StartValue,
y.EndValue
}),
});
return ApiResult.Success("", pageModel);
}
/// <summary>
/// 获取满班率
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public List<RB_Teaching_Rewards_Rate_ViewModel> GetFullRateList(List<RB_Teaching_Rewards_Rate_ViewModel> list)
{
if (list.Any())
{
return list.FirstOrDefault().FullClassList;
}
return new List<RB_Teaching_Rewards_Rate_ViewModel>();
}
/// <summary>
/// 修改备注
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetTeachingPerfRemark() {
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int PerfId = parms.GetInt("PerfId", 0);
string Remark = parms.GetStringValue("Remark");
if (PerfId <= 0) {
return ApiResult.ParamIsNull();
}
bool flag = teachingRewardsModule.SetTeachingPerfRemark(PerfId, Remark, userInfo);
if (flag)
{
return ApiResult.Success();
}
else {
return ApiResult.Failed();
}
}
/// <summary>
/// 设置教师绩效状态
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetTeachingPerfState()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int PerfId = parms.GetInt("PerfId", 0);
int Type = parms.GetInt("Type", 0);// 类型 1确认绩效 2不发放绩效 3恢复绩效 4撤销绩效
if (PerfId <= 0)
{
return ApiResult.ParamIsNull();
}
string msg = teachingRewardsModule.SetTeachingPerfState(PerfId, Type, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 生成绩效
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetTeachingPerfCreate()
{
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int ClassId = parms.GetInt("ClassId", 0);
if (ClassId <= 0)
{
return ApiResult.ParamIsNull();
}
string msg = teachingRewardsModule.SetTeachingPerfCreate(ClassId);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
/// <summary>
/// 绩效一键制单
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetTeachingPerfFinance()
{
var userInfo = base.UserInfo;
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
int PerfId = parms.GetInt("PerfId", 0);
int IsPublic = parms.GetInt("IsPublic", 0);
int CurrencyId = parms.GetInt("CurrencyId", 0);
if (PerfId <= 0)
{
return ApiResult.ParamIsNull();
}
string msg = teachingRewardsModule.SetTeachingPerfFinance(PerfId, IsPublic, CurrencyId, userInfo);
if (msg == "")
{
return ApiResult.Success();
}
else
{
return ApiResult.Failed(msg);
}
}
#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