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
This diff is collapsed.
......@@ -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