改了一半

parent c87e8db5
......@@ -653,11 +653,6 @@
工号
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.ManagerNumber">
<summary>
科主任/护士长人数
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.MedicalNumber">
<summary>
核算单元人员数量
......@@ -751,6 +746,21 @@
<member name="F:Performance.DtoModels.SheetType.OtherWorkload">
<summary> 其他工作量(不参与核算) </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.BudgetRatio">
<summary> 预算比例 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.AssessBeforeOtherFee">
<summary> 科室考核前其他绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonOtherManagePerforFee">
<summary> 其他管理绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonAdjustLaterOtherManagePerforFee">
<summary> 调节后其他管理绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonPostCoefficient">
<summary> 个人岗位系数 </summary>
</member>
<member name="T:Performance.DtoModels.AccountUnitType">
<summary>
核算单元类型
......@@ -879,11 +889,6 @@
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.ManagerNumber">
<summary>
科主任/护士长数量
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Number">
<summary>
核算单元医生数量
......
......@@ -1912,11 +1912,6 @@
定科人数
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.DoctorDirectorNumber">
<summary>
科主任数量
</summary>
</member>
<member name="P:Performance.EntityModels.im_accountbasic.DoctorNumber">
<summary>
核算单元医生数量
......@@ -4167,11 +4162,6 @@
是否带入平均计算 是 否
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.ManagerNumber">
<summary>
科主任/护士长数量
</summary>
</member>
<member name="P:Performance.EntityModels.res_account.Number">
<summary>
核算单元医生数量
......
......@@ -111,7 +111,7 @@ public AutoMapperConfigs()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => EnumHelper.GetItems<UnitType>().First(t => t.Name == src.UnitType.Replace("行政工勤", "行政后勤")).Value))
.ForMember(dest => dest.DoctorAccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
//.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.DoctorDirectorNumber, opt => opt.MapFrom(src => src.ManagerNumber))
//.ForMember(dest => dest.DoctorDirectorNumber, opt => opt.MapFrom(src => src.ManagerNumber))
.ForMember(dest => dest.DoctorNumber, opt => opt.MapFrom(src => src.Number))
.ForMember(dest => dest.DoctorBasicFactor, opt => opt.MapFrom(src => src.BasicFactor))
//.ForMember(dest => dest.DoctorSlopeFactor, opt => opt.MapFrom(src => src.SlopeFactor))
......
......@@ -174,10 +174,10 @@ public class ComputeResult
///// </summary>
//public decimal? Workload { get; set; }
/// <summary>
/// 科主任/护士长人数
/// </summary>
public Nullable<decimal> ManagerNumber { get; set; }
///// <summary>
///// 科主任/护士长人数
///// </summary>
//public Nullable<decimal> ManagerNumber { get; set; }
/// <summary>
/// 核算单元人员数量
......
......@@ -131,6 +131,23 @@ public enum SheetType
/// <summary> 其他工作量(不参与核算) </summary>
[Description("其他工作量")]
OtherWorkload = 28,
/// <summary> 预算比例 </summary>
[Description("预算比例")]
BudgetRatio = 30,
/// <summary> 科室考核前其他绩效 </summary>
[Description("科室考核前其他绩效")]
AssessBeforeOtherFee = 31,
/// <summary> 其他管理绩效 </summary>
[Description("其他管理绩效")]
PersonOtherManagePerforFee = 32,
/// <summary> 调节后其他管理绩效 </summary>
[Description("调节后其他管理绩效")]
PersonAdjustLaterOtherManagePerforFee = 33,
/// <summary> 个人岗位系数 </summary>
[Description("个人岗位系数")]
PersonPostCoefficient = 34,
}
/// <summary>
......
......@@ -38,10 +38,10 @@ public class PerDataAccountBaisc : IPerData
///// </summary>
//public decimal PermanentStaff { get; set; }
/// <summary>
/// 科主任/护士长数量
/// </summary>
public decimal ManagerNumber { get; set; }
///// <summary>
///// 科主任/护士长数量
///// </summary>
//public decimal ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
......
......@@ -61,10 +61,10 @@ public class im_accountbasic
/// </summary>
public Nullable<decimal> PermanentStaff { get; set; }
/// <summary>
/// 科主任数量
/// </summary>
public Nullable<decimal> DoctorDirectorNumber { get; set; }
///// <summary>
///// 科主任数量
///// </summary>
//public Nullable<decimal> DoctorDirectorNumber { get; set; }
/// <summary>
/// 核算单元医生数量
......
......@@ -56,10 +56,10 @@ public class res_account
///// </summary>
//public Nullable<decimal> PermanentStaff { get; set; }
/// <summary>
/// 科主任/护士长数量
/// </summary>
public Nullable<decimal> ManagerNumber { get; set; }
///// <summary>
///// 科主任/护士长数量
///// </summary>
//public Nullable<decimal> ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
......
......@@ -19,7 +19,7 @@ public class BaiscNormService : IAutoInjection
/// </summary>
/// <param name="computes"></param>
/// <returns></returns>
public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList, List<ComputeResult> computes)
public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<ComputeEmployee> computeEmployees, List<ComputeResult> computes)
{
var keyList = new[]
{
......@@ -30,7 +30,7 @@ public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<im
};
foreach (var item in keyList)
{
var count = accountbasicList.Where(t => t.UnitType == (int)item.UnitType).Sum(t => t.DoctorDirectorNumber);
var count = computeEmployees.Where(t => t.UnitType == item.UnitType.ToString()).Sum(t => t.Basics);
var dataList = computes.Where(t => t.UnitType == item.UnitType.ToString());
var baiscnorm = new res_baiscnorm
{
......@@ -163,7 +163,7 @@ public List<res_baiscnorm> DocterNurseBaiscnorm(List<res_baiscnorm> baiscnormLis
//剔除不同科室相同核算单元
var groupData = perData.Where(t => t.UnitType == info.UnitType.ToString())
.GroupBy(t => t.AccountingUnit)
.Select(t => new { AccountingUnit = t.Key, Number = t.Sum(p => p.ManagerNumber + p.Number), PerforTotal = t.Sum(p => p.PerforTotal) });
.Select(t => new { AccountingUnit = t.Key, Number = t.Sum(p => p.Number), PerforTotal = t.Sum(p => p.PerforTotal) });
var baiscnorm = new res_baiscnorm
{
......
......@@ -260,7 +260,7 @@ public void Save(List<PerSheet> perSheets, int allotId)
/// <param name="perSheet"></param>
/// <returns></returns>
public List<PerSheet> Compute(PerExcel excel, List<PerSheet> perSheet, IEnumerable<AccountUnitTotal> extras,
IEnumerable<AccountUnitTotal> drugExtras, IEnumerable<AccountUnitTotal> materialsExtras, IEnumerable<AccountUnitTotal> accountScoreAverages)
IEnumerable<AccountUnitTotal> drugExtras, IEnumerable<AccountUnitTotal> materialsExtras)
{
var accountList = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.AccountBasic)?.PerData?.Select(t => (PerDataAccountBaisc)t);
var economicData = perSheet.FirstOrDefault(t => t.SheetType == SheetType.ComputeEconomic)?.PerData?.Select(t => (PerData)t);
......@@ -287,7 +287,7 @@ public void Save(List<PerSheet> perSheets, int allotId)
var extra = extras?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var drugExtra = drugExtras?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var materialsExtra = materialsExtras?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
//var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == unitType.ToString() && w.AccountingUnit == dept.AccountingUnit)?.TotelValue;
var econDoctor = economicData.FirstOrDefault(t => t.UnitType == unitType.ToString() && t.AccountingUnit == dept.AccountingUnit);
var workDoctor = info.Data.FirstOrDefault(t => t.UnitType == unitType.ToString() && t.AccountingUnit == dept.AccountingUnit);
......@@ -315,7 +315,8 @@ public void Save(List<PerSheet> perSheets, int allotId)
dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.OtherPerfor1 + dept.AssessBeforeOtherFee) ?? 0);
dept.AssessLaterPerforTotal = Math.Round((dept.PerforTotal * dept.ScoringAverage + dept.MedicineExtra + dept.MaterialsExtra + dept.Extra + dept.AssessLaterOtherFee) ?? 0);
dept.RealGiveFee = Math.Round((dept.AssessLaterPerforTotal * dept.AdjustFactor + dept.AdjustLaterOtherFee) ?? 0);
dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
//dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
dept.Avg = dept.Number == 0 ? 0 : dept.PerforTotal / dept.Number;
}
sheet.PerData.AddRange(atDataList);
......
......@@ -86,7 +86,7 @@ public class ResultComputeService : IAutoInjection
var computResult = computeDirector.Compute(computeEmployees, accountSheet, allot, employeeExtra);
//计算 绩效标准 基数(科主任、副主任、护士长 =>> 平均值)
List<res_baiscnorm> baiscnormList = new List<res_baiscnorm>();
baiscNormService.ComputeAvg(baiscnormList, accountbasicList, computResult);
baiscNormService.ComputeAvg(baiscnormList, computeEmployees, computResult);
baiscNormService.DocterNurseBaiscnorm(baiscnormList, accountbasicList, accountSheet);
var empolyeeList2 = perforImEmployeeRepository.GetEntities(t => t.AllotID == allot.ID);
......@@ -122,9 +122,9 @@ public class ResultComputeService : IAutoInjection
/// </summary>
/// <param name="excel"></param>
/// <param name="allot"></param>
public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<PerSheet> sheetLast, List<res_baiscnorm> baiscnormList,
public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<res_baiscnorm> baiscnormList,
IEnumerable<AccountUnitTotal> accountExtras, IEnumerable<AccountUnitTotal> drugExtras, IEnumerable<AccountUnitTotal> materialsExtras,
IEnumerable<EmpolyeeTotal> employeeExtra, IEnumerable<AccountUnitTotal> accountScoreAverages)
IEnumerable<EmpolyeeTotal> employeeExtra)
{
var isBudget = budgetService.GetAdjustAndGrant(allot, out decimal adjust, out decimal grant);
var typeList = EnumHelper.GetItems<PerforType>();
......@@ -173,7 +173,7 @@ public class ResultComputeService : IAutoInjection
var extra = accountExtras?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
var drugExtra = drugExtras?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
var materialsExtra = materialsExtras?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
//var scoreAverage = accountScoreAverages?.FirstOrDefault(w => w.UnitType == UnitType.特殊核算组.ToString() && w.AccountingUnit == dept?.AccountingUnit)?.TotelValue;
decimal? headcount = null;
if (typeList.Any(o => o.Description == item.QuantitativeIndicators))
......
......@@ -373,7 +373,7 @@ public void Generate(per_allot allot, string mail)
//重新计算科室业绩(含所有提供保底金额)
logManageService.WriteMsg("正在生成绩效", "计算科室业绩分", 1, allot.ID, "ReceiveMessage", true);
var sheetLast = processComputService.Compute(excel, mergeSheets, accountExtras, drugExtras, materialsExtras, accountScoreAverages);
var sheetLast = processComputService.Compute(excel, mergeSheets, accountExtras, drugExtras, materialsExtras);
//保存计算过程数据
logManageService.WriteMsg("正在生成绩效", "保存科室业绩结果及计算过程中产生的数据", 1, allot.ID, "ReceiveMessage", true);
......@@ -392,7 +392,7 @@ public void Generate(per_allot allot, string mail)
// 计算特殊科室
logManageService.WriteMsg("正在生成绩效", "计算最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true);
resultComputeService.SpecialUnitCompute(excel, allot, sheetLast, baiscnormList, accountExtras, drugExtras, materialsExtras, employeeExtra, accountScoreAverages);
resultComputeService.SpecialUnitCompute(excel, allot, baiscnormList, accountExtras, drugExtras, materialsExtras, employeeExtra);
logManageService.WriteMsg("正在生成绩效", "保存最终特殊科室绩效数据", 1, allot.ID, "ReceiveMessage", true);
//保存 绩效人均参考标准
......
......@@ -179,7 +179,7 @@ private bool EditAccountBasic(int userId, OriginalRequest request)
{ "核算单元", nameof(im_accountbasic.DoctorAccountingUnit) },
//{ "科室名称", nameof(im_accountbasic.Department) },
{ "效率绩效人数", nameof(im_accountbasic.PermanentStaff) },
{ "科主任/护士长人数", nameof(im_accountbasic.DoctorDirectorNumber) },
//{ "科主任/护士长人数", nameof(im_accountbasic.DoctorDirectorNumber) },
{ "核算单元人员数量", nameof(im_accountbasic.DoctorNumber) },
{ "预算比例", nameof(im_accountbasic.DoctorBasicFactor) },
//{ "倾斜系数", nameof(im_accountbasic.DoctorSlopeFactor) },
......
......@@ -361,7 +361,7 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<PerS
// 优先取 实际人均绩效
var avg = (empolyee.FitPeopleValue.HasValue && empolyee.FitPeopleValue > 0)
? empolyee.FitPeopleValue
: (resAccount.ManagerNumber + resAccount.Number) == 0 ? 0 : resAccount.PerforTotal / (resAccount.ManagerNumber + resAccount.Number);
: resAccount.Number == 0 ? 0 : resAccount.PerforTotal / resAccount.Number;
var effAvg = empolyee.PermanentStaff == 0 ? 0 : resAccount.PerforTotal / empolyee.PermanentStaff;
//var efficiency = avg * (empolyee.Efficiency ?? 1);
......@@ -385,15 +385,15 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<PerS
AdjustLaterOtherFee = empolyee.AdjustLaterOtherFee ?? 0,
OtherPerfor = empolyee.OtherPerfor ?? 0,
OtherManagePerfor = empolyee.OtherManagePerfor ?? 0,
Number = resAccount.ManagerNumber + resAccount.Number,
Number = resAccount.Number,
PerforTotal = resAccount.PerforTotal,
Avg = avg,
Efficiency = effAvg * (empolyee.Efficiency ?? 0),
Scale = resAccount.PerforTotal * (empolyee.Scale ?? 0),
Adjust = (isBudget ? adjust : empolyee.Adjust) ?? 1m,
Remark = empolyees.Count() > 1 ? "特殊科室主任,共用核算单元" : "",
Remark = empolyees.Count() > 1 ? "核算单元共用科主任/护士长" : "",
Grant = (isBudget ? grant : empolyee.Management) ?? 0,
ManagerNumber = resAccount.ManagerNumber,
//ManagerNumber = resAccount.ManagerNumber,
MedicalNumber = resAccount.Number,
PermanentStaff = empolyee.PermanentStaff,
Attendance = empolyee.Attendance ?? 0,
......
......@@ -75,7 +75,7 @@ public class ExcelReadConfig
{
new ColumnInfo(nameof(PerDataAccountBaisc.UnitType), "核算单元类型"),
new ColumnInfo(nameof(PerDataAccountBaisc.AccountingUnit), "核算单元"),
new ColumnInfo(nameof(PerDataAccountBaisc.ManagerNumber), "科主任/护士长人数", true),
//new ColumnInfo(nameof(PerDataAccountBaisc.ManagerNumber), "科主任/护士长人数", true),
new ColumnInfo(nameof(PerDataAccountBaisc.Number), "核算单元人员数量", true),
new ColumnInfo(nameof(PerDataAccountBaisc.BasicFactor), "预算比例", true),
new ColumnInfo(nameof(PerDataAccountBaisc.OtherPerfor1), "其他绩效1", true),
......
......@@ -75,13 +75,32 @@ public static IPerSheetDataRead GetDataRead(SheetType sheetType, bool isnew = fa
case SheetType.AccountScoreAverage:
dataread = new PerSheetDataReadAccountExtra();
break;
case SheetType.AccountAdjustLaterOtherFee:
//dataread = new PerSheetDataReadPersonExtra(); // 科室调节后其他绩效
dataread = new PerSheetDataReadAccountExtra();
break;
//case SheetType.AccountAdjustLaterOtherFee:
// //dataread = new PerSheetDataReadPersonExtra(); // 科室调节后其他绩效
// dataread = new PerSheetDataReadAccountExtra();
// break;
case SheetType.PersonAdjustLaterOtherFee:
dataread = new PerSheetDataReadPersonExtra(); // 业务中层行政中高层调节后其他绩效
break;
case SheetType.BudgetRatio:
dataread = new PerSheetDataReadAccountExtra(); // 预算比例
break;
case SheetType.AssessBeforeOtherFee:
dataread = new PerSheetDataReadAccountExtra(); // 科室考核前其他绩效
break;
case SheetType.AccountAdjustLaterOtherFee:
dataread = new PerSheetDataReadAccountExtra(); // 科室调节后其他绩效
break;
case SheetType.PersonOtherManagePerforFee:
dataread = new PerSheetDataReadPersonExtra(); // 其他管理绩效
break;
case SheetType.PersonAdjustLaterOtherManagePerforFee:
dataread = new PerSheetDataReadPersonExtra(); // 调节后其他管理绩效
break;
case SheetType.PersonPostCoefficient:
dataread = new PerSheetDataReadPersonExtra(); // 个人岗位系数
break;
}
return dataread;
}
......
......@@ -107,9 +107,23 @@ public SheetType GetSheetType(string sheetName)
else if (sheetName.StartsWith("6.1"))
return SheetType.AccountScoreAverage;
else if (sheetName.StartsWith("6.2"))
return SheetType.AccountAdjustLaterOtherFee;
return SheetType.AccountAdjustLaterOtherFee; // 与6.8相同
else if (sheetName.StartsWith("6.3"))
return SheetType.PersonAdjustLaterOtherFee;
else if (sheetName.StartsWith("6.6")) // 预算比例
return SheetType.BudgetRatio;
else if (sheetName.StartsWith("6.7")) // 科室考核前其他绩效
return SheetType.AssessBeforeOtherFee;
else if (sheetName.StartsWith("6.8")) // 科室调节后其他绩效
return SheetType.AccountAdjustLaterOtherFee;
else if (sheetName.StartsWith("6.9")) // 其他管理绩效
return SheetType.PersonOtherManagePerforFee;
else if (sheetName.StartsWith("6.10")) // 调节后其他管理绩效
return SheetType.PersonAdjustLaterOtherManagePerforFee;
else if (sheetName.StartsWith("6.11")) // 个人岗位系数
return SheetType.PersonPostCoefficient;
return SheetType.Unidentifiable;
}
}
......
......@@ -313,7 +313,7 @@ private void AccountNurseExport(int sheetID, SheetExportResponse response)
new List<(string, Func<res_account, object>, int, int, bool, bool)>
{
("核算单元", (t) => t.AccountingUnit, 1, 1, false, false),
("护士长人数", (t) => t.ManagerNumber, 1, 1, false, false),
//("护士长人数", (t) => t.ManagerNumber, 1, 1, false, false),
("核算单元护士数量", (t) => t.Number, 1, 1, false, false),
("医生基础系数", (t) => t.BasicFactor, 1, 1, false, false),
("倾斜系数", (t) => t.SlopeFactor, 1, 1, false, true),
......@@ -366,7 +366,7 @@ private void AccountDoctorExport(int sheetID, SheetExportResponse response)
new List<(string, Func<res_account, object>, int, int, bool, bool)>
{
("核算单元", (t) => t.AccountingUnit, 1, 1, false, false),
("科主任人数", (t) => t.ManagerNumber, 1, 1, false, false),
//("科主任人数", (t) => t.ManagerNumber, 1, 1, false, false),
("核算单元医生数量", (t) => t.Number, 1, 1, false, false),
("医生基础系数", (t) => t.BasicFactor, 1, 1, false, false),
("倾斜系数", (t) => t.SlopeFactor, 1, 1, false, true),
......
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