Commit 8aa2b332 by 李承祥

临床科室医护绩效测算表 -- 数据填充

parent 014152f8
......@@ -104,6 +104,7 @@ public AutoMapperConfigs()
.ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.NurseAdjustFactor));
CreateMap<PerDataAccountBaisc, im_accountbasic>();
CreateMap<im_accountbasic, PerDataAccountBaisc>();
CreateMap<PerDataSpecialUnit, im_specialunit>();
CreateMap<PerDataAccountDoctor, res_accountdoctor>();
CreateMap<res_accountdoctor, PerDataAccount>();
......
......@@ -32,6 +32,7 @@ public class ExtractService : IAutoInjection
private readonly PerforPersheetRepository perforPersheetRepository;
private readonly PerforImheaderRepository perforImheaderRepository;
private readonly PerforImemployeeRepository perforImemployeeRepository;
private readonly PerforImaccountbasicRepository perforImaccountbasicRepository;
private readonly PerforExtractRepository perforExtractRepository;
private readonly PerforPerfirstRepository perforPerfirstRepository;
private readonly PerforPerallotRepository perforPerallotRepository;
......@@ -45,6 +46,7 @@ public class ExtractService : IAutoInjection
PerforPersheetRepository perforPersheetRepository,
PerforImheaderRepository perforImheaderRepository,
PerforImemployeeRepository perforImemployeeRepository,
PerforImaccountbasicRepository perforImaccountbasicRepository,
PerforExtractRepository perforExtractRepository,
PerforPerfirstRepository perforPerfirstRepository,
PerforPerallotRepository perforPerallotRepository,
......@@ -58,6 +60,7 @@ public class ExtractService : IAutoInjection
this.perforPersheetRepository = perforPersheetRepository;
this.perforImheaderRepository = perforImheaderRepository;
this.perforImemployeeRepository = perforImemployeeRepository;
this.perforImaccountbasicRepository = perforImaccountbasicRepository;
this.perforExtractRepository = perforExtractRepository;
this.perforPerfirstRepository = perforPerfirstRepository;
this.perforPerallotRepository = perforPerallotRepository;
......@@ -257,6 +260,59 @@ private bool WriteExcel(string newpath, string originalPath, List<PerSheet> shee
}
}
}
//临床科室医护绩效测算表
else if (SheetType.AccountBasic == sheet.SheetType /*&& sheet.PerData != null && sheet.PerData.Any()*/)
{
LogHelper.Information($"填充临床科室医护绩效测算表,", "提取绩效数据");
var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataAccountBaisc>(t => (PerDataAccountBaisc)t));
var children = new List<PerHeader>();
foreach (var item in sheet.PerHeader)
{
var childItem = item.Children;
if (childItem != null)
{
childItem.ForEach(t => t.CellValue = item.CellValue + t.CellValue);
children = children.Union(childItem).ToList();
}
}
for (int i = 0; i < dataList.Count; i++)
{
var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1);
Dictionary<string, Func<PerDataAccountBaisc, object>> keyValues = new Dictionary<string, Func<PerDataAccountBaisc, object>>
{
{ "核算单元", (t) => t.AccountingUnit },
{ "科室", (t) => t.Department },
{ "医生组核算单元医生数量", (t) => t.DoctorNumber },
{ "医生组基础系数", (t) => t.DoctorBasicFactor },
{ "医生组倾斜系数", (t) => t.DoctorSlopeFactor },
{ "医生组其他绩效1", (t) => t.DoctorOtherPerfor1 },
{ "医生组考核得分率", (t) => t.DoctorScoringAverage },
{ "医生组医院奖罚", (t) => t.DoctorExtra },
{ "医生组其他绩效2", (t) => t.DoctorOtherPerfor2 },
{ "医生组调节系数", (t) => t.DoctorAdjustFactor },
{ "护理组核算单元护士数量", (t) => t.NurseNumber },
{ "护理组基础系数", (t) => t.NurseBasicFactor },
{ "护理组倾斜系数", (t) => t.NurseSlopeFactor },
{ "护理组其他绩效1", (t) => t.NurseOtherPerfor1 },
{ "护理组考核得分率", (t) => t.NurseScoringAverage },
{ "护理组医院奖罚", (t) => t.NurseExtra },
{ "护理组其他绩效2", (t) => t.NurseOtherPerfor2 },
{ "护理组调节系数", (t) => t.NurseAdjustFactor },
};
foreach (var item in keyValues.Keys)
{
var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == item)
?? children?.FirstOrDefault(t => t.CellValue == item);
if (headInfo != null)
{
var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString();
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(value));
}
}
}
}
//SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充
else if (scriptList.Any(t => sheet.SheetName.Contains(t.SheetName)))
{
......@@ -352,14 +408,15 @@ private List<PerSheet> GetRepositoryData(int allotId)
else if (SheetType.AccountBasic == (SheetType)sheet.SheetType)
{
perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType);
var basicList = perforImaccountbasicRepository.GetEntities(t => t.AllotID == sheet.AllotID);
var perBasicList = AutoMapper.Mapper.Map<List<PerDataAccountBaisc>>(basicList);
perSheet.PerData = perBasicList?.ConvertAll(new Converter<PerDataAccountBaisc, IPerData>(m => m));
}
sheetList.Add(perSheet);
}
return sheetList;
}
/// <summary>
/// 获取sheet及列头
/// </summary>
......@@ -399,6 +456,11 @@ private List<PerSheet> GetFileData(string path)
var headerReverse = perHeaderService.GetPerHeaderReverse(perHeader);
perSheet.PerData = sheetRead.ReadData(sheet, headerReverse);
}
if (SheetType.AccountBasic == sheetType)
{
var headerReverse = perHeaderService.GetPerHeaderReverse(perHeader);
perSheet.PerData = sheetRead.ReadData(sheet, headerReverse);
}
sheetList.Add(perSheet);
}
}
......@@ -417,6 +479,7 @@ private List<PerSheet> GetFileData(string path)
return sheetList;
}
#region 校验数据格式
/// <summary>
/// 校验数据格式,并转换
/// </summary>
......@@ -440,6 +503,7 @@ public dynamic Verify(string obj)
return obj;
}
}
#endregion
#region 获取列头
/// <summary>
......@@ -449,83 +513,80 @@ public dynamic Verify(string obj)
/// <returns></returns>
public List<PerHeader> GetHeader(SheetType sheetType)
{
Dictionary<string, List<int>> keyValues = new Dictionary<string, List<int>>();
List<PerHeader> header = new List<PerHeader>();
if (SheetType.Employee == sheetType)
{
keyValues = new Dictionary<string, List<int>>
{
{ "核算单元分类",new List<int> { 1, 1, 0, 1 } },
{ "核算单元", new List<int> { 1, 1, 1, 1 } },
{ "绩效基数核算参考对象", new List<int> { 1, 1, 2, 1 } },
{ "医生姓名", new List<int> { 1, 1, 3, 1 } },
{ "职称", new List<int> { 1, 1, 4, 1 } },
{ "岗位系数", new List<int> { 1, 1, 5, 1 } },
{ "参加工作时间", new List<int> { 1, 1, 6, 1 } },
{ "考核得分率", new List<int> { 1, 1, 7, 1 } },
{ "出勤率", new List<int> { 1, 1, 8, 1 } },
{ "核算单元医生数", new List<int> { 1, 1, 9, 1 } },
{ "工作量绩效", new List<int> { 1, 1, 10, 1 } },
{ "其他绩效", new List<int> { 1, 1, 11, 1 } },
{ "医院奖罚", new List<int> { 1, 1, 12, 1 } },
{ "调节系数", new List<int> { 1, 1, 13, 1 } },
{ "发放系数", new List<int> { 1, 1, 14, 1 } },
header = new List<PerHeader>
{
new PerHeader { CellValue = "核算单元分类", //列名
MergeCell = 1, //单元格占据的列数
MergeRow = 1, //单元格占据的行数
PointCell = 0, //单元格列
PointRow = 1 //单元格行
},
new PerHeader { CellValue = "核算单元", MergeCell = 1, MergeRow = 1, PointCell = 1, PointRow = 1 },
new PerHeader { CellValue = "绩效基数核算参考对象", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 1 },
new PerHeader { CellValue = "医生姓名", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 1 },
new PerHeader { CellValue = "职称", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 1 },
new PerHeader { CellValue = "岗位系数", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 1 },
new PerHeader { CellValue = "参加工作时间", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 1 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 1 },
new PerHeader { CellValue = "出勤率", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 1 },
new PerHeader { CellValue = "核算单元医生数", MergeCell = 1, MergeRow = 1, PointCell = 9, PointRow = 1 },
new PerHeader { CellValue = "工作量绩效", MergeCell = 1, MergeRow = 1, PointCell = 10, PointRow = 1 },
new PerHeader { CellValue = "其他绩效", MergeCell = 1, MergeRow = 1, PointCell = 11, PointRow = 1 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 12, PointRow = 1 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 13, PointRow = 1 },
new PerHeader { CellValue = "发放系数", MergeCell = 1, MergeRow = 1, PointCell = 14, PointRow = 1 },
};
}
else if (SheetType.AccountBasic == sheetType)
{
keyValues = new Dictionary<string, List<int>>
{
{ "核算单元",new List<int> { 1, 2, 0, 1 } },
{ "科室", new List<int> { 1, 2, 1, 1 } },
{ "医生组", new List<int> { 8, 1, 2, 1 } },
{ "护理组", new List<int> { 8, 1, 3, 1 } },
{ "核算单元医生数量", new List<int> { 1, 1, 2, 2 } },
{ "基础系数", new List<int> { 1, 1, 3, 2 } },
{ "倾斜系数", new List<int> { 1, 1, 4, 2 } },
{ "其他绩效1", new List<int> { 1, 1, 5, 2 } },
{ "考核得分率", new List<int> { 1, 1, 6, 2 } },
{ "医院奖罚", new List<int> { 1, 1, 7, 2 } },
{ "其他绩效2", new List<int> { 1, 1, 8, 2 } },
{ "调节系数", new List<int> { 1, 1, 9, 2 } },
{ "核算单元护士数量", new List<int> { 1, 1, 10, 2 } },
{ "基础系数?", new List<int> { 1, 1, 11, 2 } },
{ "倾斜系数?", new List<int> { 1, 1, 12, 2 } },
{ "其他绩效1?", new List<int> { 1, 1, 13, 2 } },
{ "考核得分率?", new List<int> { 1, 1, 14, 2 } },
{ "医院奖罚?", new List<int> { 1, 1, 15, 2 } },
{ "其他绩效2?", new List<int> { 1, 1, 16, 2 } },
{ "调节系数?", new List<int> { 1, 1, 17, 2 } },
header = new List<PerHeader>
{
new PerHeader { CellValue = "核算单元", MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 1 },
new PerHeader { CellValue = "科室", MergeCell = 1, MergeRow = 2, PointCell = 1, PointRow = 1 },
new PerHeader { CellValue = "医生组", MergeCell = 8, MergeRow = 1, PointCell = 2, PointRow = 1,
Children = new List<PerHeader>{
new PerHeader { CellValue = "核算单元医生数量", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 2 },
new PerHeader { CellValue = "基础系数", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 2 },
new PerHeader { CellValue = "倾斜系数", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 2 },
new PerHeader { CellValue = "其他绩效1", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 2 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 2 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 2 },
new PerHeader { CellValue = "其他绩效2", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 2 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 9, PointRow = 2 },
}
},
new PerHeader { CellValue = "护理组", MergeCell = 8, MergeRow = 1, PointCell = 3, PointRow = 1,
Children = new List<PerHeader>{
new PerHeader { CellValue = "核算单元护士数量", MergeCell = 1, MergeRow = 1, PointCell = 10, PointRow = 2 },
new PerHeader { CellValue = "基础系数", MergeCell = 1, MergeRow = 1, PointCell = 11, PointRow = 2 },
new PerHeader { CellValue = "倾斜系数", MergeCell = 1, MergeRow = 1, PointCell = 12, PointRow = 2 },
new PerHeader { CellValue = "其他绩效1", MergeCell = 1, MergeRow = 1, PointCell = 13, PointRow = 2 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 14, PointRow = 2 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 15, PointRow = 2 },
new PerHeader { CellValue = "其他绩效2", MergeCell = 1, MergeRow = 1, PointCell = 16, PointRow = 2 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 17, PointRow = 2 },
}
},
};
}
else if (SheetType.SpecialUnit == sheetType)
{
keyValues = new Dictionary<string, List<int>>
{
{ "科室",new List<int> { 1, 1, 0, 1 } },
{ "人数", new List<int> { 1, 1, 1, 1 } },
{ "量化指标", new List<int> { 1, 1, 2, 1 } },
{ "数量", new List<int> { 1, 1, 3, 1 } },
{ "量化指标绩效分值", new List<int> { 1, 1, 4, 1 } },
{ "考核得分率", new List<int> { 1, 1, 5, 1 } },
{ "医院奖罚", new List<int> { 1, 1, 6, 1 } },
{ "其他绩效", new List<int> { 1, 1, 7, 1 } },
{ "调节系数", new List<int> { 1, 1, 8, 1 } },
header = new List<PerHeader>
{
new PerHeader { CellValue = "科室", MergeCell = 1, MergeRow = 1, PointCell = 0, PointRow = 1 },
new PerHeader { CellValue = "人数", MergeCell = 1, MergeRow = 1, PointCell = 1, PointRow = 1 },
new PerHeader { CellValue = "量化指标", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 1 },
new PerHeader { CellValue = "数量", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 1 },
new PerHeader { CellValue = "量化指标绩效分值", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 1 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 1 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 1 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 1 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 1 },
};
}
List<PerHeader> header = new List<PerHeader>();
foreach (var item in keyValues.Keys)
{
header.Add(new PerHeader
{
CellValue = item.Replace("?", ""),
IsTotal = 0,
MergeCell = keyValues[item][0],
MergeRow = keyValues[item][1],
PointCell = keyValues[item][2],
PointRow = keyValues[item][3]
});
}
return header;
}
#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