绩效新都四月

parent 0515adfa
......@@ -156,8 +156,8 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody]Al
if (null == allot || string.IsNullOrEmpty(allot.Path))
throw new PerformanceException("当前绩效记录不存在或没有上传数据文件");
var user = _claim.At(request);
//_allotService.Generate(allot, user.Mail);
BackgroundJob.Enqueue(() => _allotService.Generate(allot, user.Mail));
_allotService.Generate(allot, user.Mail);
//BackgroundJob.Enqueue(() => _allotService.Generate(allot, user.Mail));
return new ApiResponse(ResponseType.OK);
}
......
......@@ -67,15 +67,15 @@ public enum PerformanceType
[Description("")]
Null = 0,
/// <summary> 科室主任人均绩效 </summary>
//[Description("科室主任人均绩效")]
//Director = 1,
/// <summary> 科室副主任人均绩效 </summary>
[Description("科室副主任人均绩效")]
DeputyDirector = 2,
/// <summary> 科室护士长人均绩效 </summary>
//[Description("科室护士长人均绩效")]
//Nurse = 3,
/// <summary> 绩效基数临床科室主任(专门用来计算科主任绩效,由此产生=>>临床科室主任人均绩效)</summary>
[Description("绩效基数临床科室主任")]
StandardDirector = 1,
/// <summary> 绩效基数临床科室副主任(专门用来计算科主任绩效,由此产生=>>临床科室副主任人均绩效) </summary>
[Description("绩效基数临床科室副主任")]
StandardDeputyDirector = 2,
/// <summary> 绩效基数临床科室护士长(专门用来计算科主任绩效,由此产生=>>临床科室护士长人均绩效) </summary>
[Description("绩效基数临床科室护士长")]
StandardNurse = 3,
/// <summary> 临床科室主任人均绩效 (绩效标准取 科室主任人均绩效) </summary>
[Description("临床科室主任人均绩效")]
......@@ -83,9 +83,7 @@ public enum PerformanceType
/// <summary> 临床科室中层人均绩效 (绩效标准取 科室主任/护士长/科室副主任/医技主任 平均值) </summary>
[Description("临床科室中层人均绩效")]
ReferenceDirectorAvg = 5,
/// <summary> 临床科室护士人均绩效的95% (绩效标准取 护理组临床科室单元核算表 平均值) </summary>
//[Description("临床科室护士人均绩效的95%")]
//ReferenceNurseAvg95 = 6,
/// <summary> 临床科室护士长人均绩效 (绩效标准取 护士长 平均值)</summary>
[Description("临床科室护士长人均绩效")]
ReferenceHeadNurse = 7,
......
......@@ -36,18 +36,18 @@ public class BaiscNormService : IAutoInjection
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床科护长")?.AvgValue;
}
//else if (type == PerformanceType.ReferenceNurse)
//{
// result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床护士")?.AvgValue;
//}
else if (type == PerformanceType.ReferenceNurse)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床护士")?.AvgValue;
}
else if (type == PerformanceType.ReferenceDoctor)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "临床医生")?.AvgValue;
}
//else if (type == PerformanceType.LogisticsWorker)
//{
// result = baiscnorms.FirstOrDefault(t => t.PositionName == "行政工勤")?.AvgValue;
//}
else if (type == PerformanceType.LogisticsWorker)
{
result = baiscnorms.FirstOrDefault(t => t.PositionName == "行政工勤")?.AvgValue;
}
if (result.HasValue)
result = Math.Round(result.Value, 4);
return result;
......
......@@ -70,11 +70,14 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, res_baiscnor
computeSources.AddRange(Mapper.Map<List<ComputeSource>>(nurseList));
var computResult = computeDirector.Compute(computeEmployees, computeSources, directorList);
//计算 绩效标准 基数(科主任、副主任、护士长 =>> 平均值)
var baiscnormList = computeDirector.ComputeAvg(computResult);
baiscnormList.Add(baiscnorm);
var computResult2 = computeDirector.Compute(computeEmployees, baiscnormList, workyearList);
//计算 行政人员 平均值
var baiscnormList2 = computeDirector.ComputeOtherAvg(computResult2);
baiscnormList.AddRange(baiscnormList2);
var computes = Mapper.Map<List<res_compute>>(computResult);
computes.AddRange(Mapper.Map<List<res_compute>>(computResult2));
......
......@@ -56,7 +56,7 @@ public List<ResComputeResponse> GetCompute(int allotId, int type)
{ 1,new List<PerformanceType>{ PerformanceType.ReferenceDirector } },
{ 2,new List<PerformanceType>{ PerformanceType.ReferenceDirectorAvg } },
{ 3,new List<PerformanceType>{ PerformanceType.LogisticsWorker, PerformanceType.ReferenceHeadNurse, PerformanceType.ReferenceNurse, PerformanceType.Null } },
{ 4,new List<PerformanceType>{ PerformanceType.ReferenceDoctor, PerformanceType.DeputyDirector } },
{ 4,new List<PerformanceType>{ PerformanceType.ReferenceDoctor, PerformanceType.StandardDeputyDirector } },
{ 5,new List<PerformanceType>{ PerformanceType.ReferenceNurse } }
};
......
......@@ -31,11 +31,11 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<Comp
{
Dictionary<PerformanceType, string> keyValues = new Dictionary<PerformanceType, string>
{
{ PerformanceType.ReferenceDirector, "临床科室主任"},
{ PerformanceType.ReferenceDeputyDirector, "临床科室副主任"},
{ PerformanceType.ReferenceHeadNurse, "临床科室护士长"},
{ PerformanceType.Null, "临床科室主任"},
{ PerformanceType.StandardDirector, "临床科室主任"},
{ PerformanceType.StandardDeputyDirector, "临床科室副主任"},
{ PerformanceType.StandardNurse, "临床科室护士长"},
};
List<ComputeResult> computeList = new List<ComputeResult>();
foreach (var key in keyValues.Keys)
{
......@@ -76,8 +76,7 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<Comp
//应发绩效
compute.GiveFee = compute.Avg * (item.Grant ?? 1) + (compute.Efficiency + compute.Scale) * (item.Grant ?? 1) * compute.ScoreAverageRate + (item.Punishment ?? 0) + (item.OtherPerfor ?? 0);
//实发绩效
var adjust = item.Adjust ?? 1m;
compute.RealGiveFee = compute.GiveFee * adjust - compute.ShouldGiveFee * item.ScoreAverageRate * (item.Grant ?? 1) * 0.1m;
compute.RealGiveFee = compute.GiveFee * (item.Adjust ?? 1m) - compute.ShouldGiveFee * item.ScoreAverageRate * (item.Grant ?? 1) * 0.1m;
computeList.Add(compute);
}
......@@ -94,27 +93,47 @@ public List<res_baiscnorm> ComputeAvg(List<ComputeResult> computes)
{
var keyList = new[]
{
//new { type = "临床科室", reference = "科室主任人均绩效", groupname = "临床科主任" },
//new { type = "临床科室", reference = "科室副主任人均绩效", groupname = "临床科副主任" },
//new { type = "医技科室", reference = "科室主任人均绩效", groupname = "医技科主任" },
//new { type = "临床科室", reference = "科室护士长人均绩效", groupname = "临床科护长" },
//绩效基数平均值项目
new { type = "临床科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDirector), groupname = "临床科主任" },
new { type = "临床科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDeputyDirector), groupname = "临床科副主任" },
new { type = "医技科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDirector), groupname = "医技科主任" },
new { type = "医技科室", reference = EnumHelper.GetDescription(PerformanceType.StandardDeputyDirector), groupname = "医技科副主任" },
new { type = "临床科室", reference = EnumHelper.GetDescription(PerformanceType.StandardNurse), groupname = "临床科护长" },
};
new { type = "行政中高层", reference = "临床科室主任人均绩效", groupname = "临床科主任" },
new { type = "行政中高层", reference = "临床科室护士长人均绩效", groupname = "临床科护长" },
var groupList = from cp in computes
join gp in keyList on new { type = cp.AccountType, reference = cp.FitPeople } equals new { gp.type, gp.reference }
select new { gp.groupname, cp };
new { type = "临床科室", reference = "临床科室主任人均绩效", groupname = "临床科主任" },
new { type = "临床科室", reference = "临床科室副主任人均绩效", groupname = "临床科副主任" },
new { type = "临床科室", reference = "临床科室护士长人均绩效", groupname = "临床科护长" },
new { type = "临床科室", reference = "", groupname = "临床科主任" },
var result = groupList.GroupBy(t => t.groupname)
.Select(s => new res_baiscnorm
{
PositionName = s.Key,
TotelNumber = s.Count(),
TotelValue = s.Sum(t => t.cp.GiveFee),
AvgValue = s.Sum(t => t.cp.GiveFee) / s.Count()
});
return result.ToList();
}
new { type = "医技科室", reference = "临床科室主任人均绩效", groupname = "医技科主任" },
new { type = "医技科室", reference = "临床科室副主任人均绩效", groupname = "医技副主任" },
new { type = "医技科室", reference = "临床科室护士长人均绩效", groupname = "医技护士长" },
new { type = "医技科室", reference = "", groupname = "医技科主任" },
/// <summary>
/// 绩效标准计算
/// </summary>
/// <param name="computes"></param>
/// <returns></returns>
public List<res_baiscnorm> ComputeOtherAvg(List<ComputeResult> computes)
{
var keyList = new[]
{
//行政绩效平均值项目
new { type = "行政中高层", groupname = "行政中高层" },
new { type = "行政高层", groupname = "行政高层" },
new { type = "行政中层", groupname = "行政中层" },
new { type = "行政工勤", groupname = "行政工勤" },
};
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 cp.AccountType equals gp.type
select new { gp.groupname, cp };
var result = groupList.GroupBy(t => t.groupname)
......
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