历史

parent 87fe4451
...@@ -66,24 +66,12 @@ public enum PerformanceType ...@@ -66,24 +66,12 @@ public enum PerformanceType
/// <summary> </summary> /// <summary> </summary>
[Description("")] [Description("")]
Null = 0, Null = 0,
/// <summary> 绩效基数临床科室主任(专门用来计算科主任绩效,由此产生=>>临床科室主任人均绩效)</summary>
[Description("绩效基数临床科室主任")]
StandardDirector = 1,
/// <summary> 绩效基数临床科室副主任(专门用来计算科主任绩效,由此产生=>>临床科室副主任人均绩效) </summary>
[Description("绩效基数临床科室副主任")]
StandardDeputyDirector = 2,
/// <summary> 绩效基数临床科室护士长(专门用来计算科主任绩效,由此产生=>>临床科室护士长人均绩效) </summary>
[Description("绩效基数临床科室护士长")]
StandardNurse = 3,
/// <summary> 临床科室主任人均绩效 (绩效标准取 科室主任人均绩效) </summary> /// <summary> 临床科室主任人均绩效 (绩效标准取 科室主任人均绩效) </summary>
[Description("临床科室主任人均绩效")] [Description("临床科室主任人均绩效")]
ReferenceDirector = 4, ReferenceDirector = 4,
/// <summary> 临床科室中层人均绩效 (绩效标准取 科室主任/护士长/科室副主任/医技主任 平均值) </summary> /// <summary> 临床科室中层人均绩效 (绩效标准取 科室主任/护士长/科室副主任/医技主任 平均值) </summary>
[Description("临床科室中层人均绩效")] [Description("临床科室中层人均绩效")]
ReferenceDirectorAvg = 5, ReferenceDirectorAvg = 5,
/// <summary> 临床科室护士长人均绩效 (绩效标准取 护士长 平均值)</summary> /// <summary> 临床科室护士长人均绩效 (绩效标准取 护士长 平均值)</summary>
[Description("临床科室护士长人均绩效")] [Description("临床科室护士长人均绩效")]
ReferenceHeadNurse = 7, ReferenceHeadNurse = 7,
...@@ -99,5 +87,53 @@ public enum PerformanceType ...@@ -99,5 +87,53 @@ public enum PerformanceType
/// <summary> 行政工勤人均绩效 </summary> /// <summary> 行政工勤人均绩效 </summary>
[Description("行政工勤人均绩效")] [Description("行政工勤人均绩效")]
LogisticsWorker = 11, LogisticsWorker = 11,
/// <summary> 行政中层人均绩效 </summary>
[Description("行政中层人均绩效")]
MiddleManager = 12,
/// <summary> 行政高层人均绩效 </summary>
[Description("行政高层人均绩效")]
TopManager = 13,
/// <summary> 绩效基数临床科室主任(专门用来计算科主任绩效,由此产生=>>临床科室主任人均绩效)</summary>
[Description("绩效基数临床科室主任")]
临床科主任 = 14,
/// <summary> 绩效基数临床科室副主任(专门用来计算科主任绩效,由此产生=>>临床科室副主任人均绩效) </summary>
[Description("绩效基数临床科室副主任")]
临床科副主任 = 15,
/// <summary> 绩效基数临床科室护士长(专门用来计算科主任绩效,由此产生=>>临床科室护士长人均绩效) </summary>
[Description("绩效基数临床科室护士长")]
临床护士长 = 16,
/// <summary> 绩效基数医技科室主任(专门用来计算科主任绩效,由此产生=>>临床科室副主任人均绩效) </summary>
[Description("绩效基数医技科室主任")]
医技主任 = 17,
/// <summary> 绩效基数医技科室副主任(专门用来计算科主任绩效,由此产生=>>临床科室副主任人均绩效) </summary>
[Description("绩效基数医技科室副主任")]
医技副主任 = 18,
}
/// <summary>
/// 核算单元类型
/// </summary>
public enum AccountUnitType
{
/// <summary> </summary>
[Description("")]
Null = 1,
/// <summary> 临床科室 </summary>
[Description("临床科室")]
临床科室 = 2,
/// <summary> 临床科室 </summary>
[Description("医技科室")]
医技科室 = 3,
/// <summary> 行政高层 </summary>
[Description("行政高层")]
行政高层 = 4,
/// <summary> 临床科室 </summary>
[Description("行政中层")]
行政中层 = 5,
/// <summary> 临床科室 </summary>
[Description("行政工勤")]
行政工勤 = 6,
} }
} }
...@@ -32,6 +32,11 @@ public class res_compute ...@@ -32,6 +32,11 @@ public class res_compute
public Nullable<int> SheetID { get; set; } public Nullable<int> SheetID { get; set; }
/// <summary> /// <summary>
/// 核算单元类型(医技科室、临床科室等)
/// </summary>
public string AccountType { get; set; }
/// <summary>
/// 核算单元 /// 核算单元
/// </summary> /// </summary>
public string AccountingUnit { get; set; } public string AccountingUnit { get; set; }
......
...@@ -21,10 +21,18 @@ public class BaiscNormService : IAutoInjection ...@@ -21,10 +21,18 @@ public class BaiscNormService : IAutoInjection
public decimal? GetBaiscNorm(List<res_baiscnorm> baiscnorms, PerformanceType type) public decimal? GetBaiscNorm(List<res_baiscnorm> baiscnorms, PerformanceType type)
{ {
decimal? result = null; decimal? result = null;
if (type == PerformanceType.ReferenceDirector || type == PerformanceType.Null) if (type == PerformanceType.ReferenceDirector)
{ {
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床科主任")?.AvgValue; result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床科主任")?.AvgValue;
} }
else if (type == PerformanceType.ReferenceDeputyDirector)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床科副主任")?.AvgValue;
}
else if (type == PerformanceType.ReferenceHeadNurse || type == PerformanceType.StandardNurse)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床科护长")?.AvgValue;
}
else if (type == PerformanceType.ReferenceDirectorAvg) else if (type == PerformanceType.ReferenceDirectorAvg)
{ {
List<string> avgObjectList = new List<string> { "临床科主任", "临床科副主任", "医技科主任", "临床科护长" }; List<string> avgObjectList = new List<string> { "临床科主任", "临床科副主任", "医技科主任", "临床科护长" };
...@@ -32,10 +40,6 @@ public class BaiscNormService : IAutoInjection ...@@ -32,10 +40,6 @@ public class BaiscNormService : IAutoInjection
result = baisc.Sum(s => s.TotelValue) / baisc.Sum(s => s.TotelNumber); result = baisc.Sum(s => s.TotelValue) / baisc.Sum(s => s.TotelNumber);
} }
else if (type == PerformanceType.ReferenceHeadNurse)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床科护长")?.AvgValue;
}
else if (type == PerformanceType.ReferenceNurse) else if (type == PerformanceType.ReferenceNurse)
{ {
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床护士")?.AvgValue; result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床护士")?.AvgValue;
...@@ -44,9 +48,17 @@ public class BaiscNormService : IAutoInjection ...@@ -44,9 +48,17 @@ public class BaiscNormService : IAutoInjection
{ {
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床医生")?.AvgValue; result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床医生")?.AvgValue;
} }
else if (type == PerformanceType.TopManager)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "行政高层人均绩效")?.AvgValue;
}
else if (type == PerformanceType.MiddleManager)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "行政中层人均绩效")?.AvgValue;
}
else if (type == PerformanceType.LogisticsWorker) else if (type == PerformanceType.LogisticsWorker)
{ {
result = baiscnorms.FirstOrDefault(t => t.PositionName == "行政工勤")?.AvgValue; result = baiscnorms.FirstOrDefault(t => t.PositionName == "行政工勤人均绩效")?.AvgValue;
} }
if (result.HasValue) if (result.HasValue)
result = Math.Round(result.Value, 4); result = Math.Round(result.Value, 4);
......
...@@ -76,7 +76,7 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, res_baiscnor ...@@ -76,7 +76,7 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, res_baiscnor
var computResult2 = computeDirector.Compute(computeEmployees, baiscnormList, workyearList); var computResult2 = computeDirector.Compute(computeEmployees, baiscnormList, workyearList);
//计算 行政人员 平均值 //计算 行政人员 平均值
var baiscnormList2 = computeDirector.ComputeOtherAvg(computResult2); var baiscnormList2 = computeDirector.ComputeAvg(computResult2);
baiscnormList.AddRange(baiscnormList2); baiscnormList.AddRange(baiscnormList2);
var computes = Mapper.Map<List<res_compute>>(computResult); var computes = Mapper.Map<List<res_compute>>(computResult);
......
...@@ -29,22 +29,25 @@ public ComputeDirector(BaiscNormService baiscNormService) ...@@ -29,22 +29,25 @@ public ComputeDirector(BaiscNormService baiscNormService)
/// <returns></returns> /// <returns></returns>
public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<ComputeSource> nurseList, List<cof_director> directorList) public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<ComputeSource> nurseList, List<cof_director> directorList)
{ {
Dictionary<PerformanceType, string> keyValues = new Dictionary<PerformanceType, string> var typeArray = new[]
{ {
{ PerformanceType.StandardDirector, "临床科室主任"}, new { basic = EnumHelper.GetDescription(PerformanceType.临床科主任), key = "临床科室主任", deptment = AccountUnitType.临床科室.ToString()},
{ PerformanceType.StandardDeputyDirector, "临床科室副主任"}, new { basic = EnumHelper.GetDescription(PerformanceType.临床科副主任), key = "临床科室副主任", deptment = AccountUnitType.临床科室.ToString()},
{ PerformanceType.StandardNurse, "临床科室护士长"}, new { basic = EnumHelper.GetDescription(PerformanceType.医技主任), key = "医技主任", deptment = AccountUnitType.医技科室.ToString()},
new { basic = EnumHelper.GetDescription(PerformanceType.医技副主任), key = "医技副主任", deptment = AccountUnitType.医技科室.ToString()},
new { basic = EnumHelper.GetDescription(PerformanceType.临床护士长), key = "临床科室护士长", deptment = AccountUnitType.临床科室.ToString()},
new { basic = EnumHelper.GetDescription(PerformanceType.临床护士长), key = "临床科室护士长", deptment = AccountUnitType.医技科室.ToString()},
}; };
List<ComputeResult> computeList = new List<ComputeResult>(); List<ComputeResult> computeList = new List<ComputeResult>();
foreach (var key in keyValues.Keys) foreach (var type in typeArray)
{ {
var needCompute = empolyeeList.Where(t => t.FitPeople == EnumHelper.GetDescription(key)); var needCompute = empolyeeList.Where(t => t.FitPeople == type.basic && t.AccountType == type.deptment);
foreach (var item in needCompute) foreach (var item in needCompute)
{ {
var resAccount = nurseList.FirstOrDefault(t => t.AccountingUnit == item.AccountingUnit); var resAccount = nurseList.FirstOrDefault(t => t.AccountingUnit == item.AccountingUnit);
var efficiency = directorList.FirstOrDefault(t => t.TypeName == "效率绩效" && t.JobTitle == keyValues[key]); var efficiency = directorList.FirstOrDefault(t => t.TypeName == "效率绩效" && t.JobTitle == type.key);
var scale = directorList.FirstOrDefault(t => t.TypeName == "规模绩效" && t.JobTitle == keyValues[key]); var scale = directorList.FirstOrDefault(t => t.TypeName == "规模绩效" && t.JobTitle == type.key);
var compute = new ComputeResult var compute = new ComputeResult
{ {
AccountType = item.AccountType, AccountType = item.AccountType,
...@@ -94,18 +97,19 @@ public List<res_baiscnorm> ComputeAvg(List<ComputeResult> computes) ...@@ -94,18 +97,19 @@ public List<res_baiscnorm> ComputeAvg(List<ComputeResult> computes)
var keyList = new[] var keyList = new[]
{ {
//绩效基数平均值项目 //绩效基数平均值项目
new { type = "临床科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDirector), groupname = "临床科主任" }, new { type = "临床科室", reference = PerformanceType.临床科主任 },
new { type = "临床科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDeputyDirector), groupname = "临床科副主任" }, new { type = "临床科室", reference = PerformanceType.临床科副主任 },
new { type = "医技科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDirector), groupname = "医技科主任" }, new { type = "医技科室", reference = PerformanceType.医技主任 },
new { type = "医技科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDeputyDirector), groupname = "医技科副主任" }, new { type = "医技科室", reference = PerformanceType.医技副主任 },
new { type = "临床科室", reference = EnumHelper.GetDescription(PerformanceType.StandardNurse), groupname = "临床科护长" }, new { type = "临床科室", reference = PerformanceType.临床护士长 },
}; };
var groupList = from cp in computes var groupList = from cp in computes
join gp in keyList on new { type = cp.AccountType, reference = cp.FitPeople } equals new { gp.type, gp.reference } join gp in keyList on new { type = cp.AccountType, reference = cp.FitPeople }
select new { gp.groupname, cp }; equals new { gp.type, reference = EnumHelper.GetDescription(gp.reference) }
select new { reference = gp.reference.ToString(), cp };
var result = groupList.GroupBy(t => t.groupname) var result = groupList.GroupBy(t => t.reference)
.Select(s => new res_baiscnorm .Select(s => new res_baiscnorm
{ {
PositionName = s.Key, PositionName = s.Key,
...@@ -117,7 +121,7 @@ public List<res_baiscnorm> ComputeAvg(List<ComputeResult> computes) ...@@ -117,7 +121,7 @@ public List<res_baiscnorm> ComputeAvg(List<ComputeResult> computes)
} }
/// <summary> /// <summary>
/// 绩效标准计算 /// 院领导、行政中层、行政工勤 平均值
/// </summary> /// </summary>
/// <param name="computes"></param> /// <param name="computes"></param>
/// <returns></returns> /// <returns></returns>
...@@ -126,10 +130,9 @@ public List<res_baiscnorm> ComputeOtherAvg(List<ComputeResult> computes) ...@@ -126,10 +130,9 @@ public List<res_baiscnorm> ComputeOtherAvg(List<ComputeResult> computes)
var keyList = new[] var keyList = new[]
{ {
//行政绩效平均值项目 //行政绩效平均值项目
new { type = "行政中高层", groupname = "行政中高层" }, new { type = "行政高层", groupname = EnumHelper.GetDescription(PerformanceType.TopManager) },
new { type = "行政高层", groupname = "行政高层" }, new { type = "行政中层", groupname = EnumHelper.GetDescription(PerformanceType.MiddleManager) },
new { type = "行政中层", groupname = "行政中层" }, new { type = "行政工勤", groupname = EnumHelper.GetDescription(PerformanceType.LogisticsWorker) },
new { type = "行政工勤", groupname = "行政工勤" },
}; };
var groupList = from cp in computes var groupList = from cp in computes
...@@ -155,28 +158,12 @@ public List<res_baiscnorm> ComputeOtherAvg(List<ComputeResult> computes) ...@@ -155,28 +158,12 @@ public List<res_baiscnorm> ComputeOtherAvg(List<ComputeResult> computes)
/// <returns></returns> /// <returns></returns>
public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<res_baiscnorm> baiscnormList, List<cof_workyear> workyearList) public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<res_baiscnorm> baiscnormList, List<cof_workyear> workyearList)
{ {
PerformanceType[] types = new PerformanceType[]
{
PerformanceType.ReferenceDirector,
PerformanceType.ReferenceDirectorAvg,
PerformanceType.ReferenceNurse,
PerformanceType.ReferenceHeadNurse,
PerformanceType.Null,
};
PerformanceType[] yearTypes = new PerformanceType[]
{
PerformanceType.ReferenceNurse,
PerformanceType.ReferenceHeadNurse,
PerformanceType.Null,
};
List<ComputeResult> computeList = new List<ComputeResult>(); List<ComputeResult> computeList = new List<ComputeResult>();
var perforTypeArray = EnumHelper.GetItems<PerformanceType>();
foreach (var type in types) foreach (var type in EnumHelper.GetItems<AccountUnitType>())
{ {
var needCompute = empolyeeList.Where(t => t.FitPeople == EnumHelper.GetDescription(type)); var needCompute = empolyeeList.Where(t => t.AccountType == type.Description);
if (!needCompute.Any()) if (!needCompute.Any()) continue;
continue;
var baiscnorm = baiscNormService.GetBaiscNorm(baiscnormList, type);
foreach (var item in needCompute) foreach (var item in needCompute)
{ {
...@@ -188,7 +175,6 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<res_ ...@@ -188,7 +175,6 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<res_
FitPeople = item.FitPeople, FitPeople = item.FitPeople,
Grant = item.Grant ?? 1, Grant = item.Grant ?? 1,
WorkTime = item.WorkTime, WorkTime = item.WorkTime,
BaiscNormValue = baiscnorm * (item.FitPeopleRatio ?? 1), //添加参数计算
PostCoefficient = item.PostCoefficient, PostCoefficient = item.PostCoefficient,
Attendance = item.Attendance, Attendance = item.Attendance,
ScoreAverageRate = item.ScoreAverageRate, ScoreAverageRate = item.ScoreAverageRate,
...@@ -199,13 +185,22 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<res_ ...@@ -199,13 +185,22 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<res_
Workload = item.Workload Workload = item.Workload
}; };
decimal? baiscnorm = 1;
var perforTypeItem = perforTypeArray.FirstOrDefault(t => t.Description == item.FitPeople);
if (perforTypeItem != null)
{
var perforType = (PerformanceType)perforTypeItem.Value;
baiscnorm = baiscNormService.GetBaiscNorm(baiscnormList, perforType);
}
//年资系数 //年资系数
if (yearTypes.Contains(type) && item.WorkTime.HasValue && item.WorkTime.Value > new DateTime(1970, 1, 1)) if (type.Value == (int)AccountUnitType.行政工勤 && item.WorkTime.HasValue && item.WorkTime.Value > new DateTime(1970, 1, 1))
{ {
var years = ((DateTime.Now.Year - item.WorkTime.Value.Year) * 12 + (DateTime.Now.Month - item.WorkTime.Value.Month)) / 12.0m; var years = ((DateTime.Now.Year - item.WorkTime.Value.Year) * 12 + (DateTime.Now.Month - item.WorkTime.Value.Month)) / 12.0m;
var value = workyearList.FirstOrDefault(t => t.MinRange < years && years <= t.MaxRange)?.Value; var value = workyearList.FirstOrDefault(t => t.MinRange < years && years <= t.MaxRange)?.Value;
compute.WorkYear = value; compute.WorkYear = value;
} }
//添加参数计算
compute.BaiscNormValue = baiscnorm * (item.FitPeopleRatio ?? 1);
//应发绩效 //应发绩效
compute.GiveFee = baiscnorm * compute.PostCoefficient * compute.Attendance * compute.ScoreAverageRate * (compute.WorkYear ?? 1) + (compute.OtherPerfor ?? 0) + (item.Workload ?? 0) + (compute.Punishment ?? 0); compute.GiveFee = baiscnorm * compute.PostCoefficient * compute.Attendance * compute.ScoreAverageRate * (compute.WorkYear ?? 1) + (compute.OtherPerfor ?? 0) + (item.Workload ?? 0) + (compute.Punishment ?? 0);
//实发绩效 //实发绩效
......
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