Commit d36f3b19 by lcx

大屏文件上传,数据导入

parent b5bf090f
......@@ -70,5 +70,10 @@ public class report_performance_person_tags
/// 重点群体对比5
/// </summary>
public string Tag5 { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public Nullable<DateTime> CreateTime { get; set; }
}
}
......@@ -60,5 +60,10 @@ public class report_performance_tags
/// 重点群体对比5
/// </summary>
public string Tag5 { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public Nullable<DateTime> CreateTime { get; set; }
}
}
......@@ -19,18 +19,36 @@ public class ReportGlobalService : IAutoInjection
private readonly PerforPerallotRepository perallotRepository;
private readonly PerforReportglobalRepository reportglobalRepository;
private readonly PerforHisimportdataRepository hisimportdataRepository;
private readonly PerforHisimportsummaryRepository hisimportsummaryRepository;
private readonly PerforHisimportaccountRepository hisimportaccountRepository;
private readonly PerforHisimportclinicRepository hisimportclinicRepository;
private readonly PerforHisimportbaiscnormRepository hisimportbaiscnormRepository;
private readonly PerforReportperformancetagsRepository reportperformancetagsRepository;
private readonly PerforReportperformancepersontagsRepository reportperformancepersontagsRepository;
public ReportGlobalService(
ILogger<ReportGlobalService> logger,
PerforPerallotRepository perallotRepository,
PerforReportglobalRepository reportglobalRepository,
PerforHisimportdataRepository hisimportdataRepository
PerforHisimportdataRepository hisimportdataRepository,
PerforHisimportsummaryRepository hisimportsummaryRepository,
PerforHisimportaccountRepository hisimportaccountRepository,
PerforHisimportclinicRepository hisimportclinicRepository,
PerforHisimportbaiscnormRepository hisimportbaiscnormRepository,
PerforReportperformancetagsRepository reportperformancetagsRepository,
PerforReportperformancepersontagsRepository reportperformancepersontagsRepository
)
{
this.logger = logger;
this.perallotRepository = perallotRepository;
this.reportglobalRepository = reportglobalRepository;
this.hisimportdataRepository = hisimportdataRepository;
this.hisimportsummaryRepository = hisimportsummaryRepository;
this.hisimportaccountRepository = hisimportaccountRepository;
this.hisimportclinicRepository = hisimportclinicRepository;
this.hisimportbaiscnormRepository = hisimportbaiscnormRepository;
this.reportperformancetagsRepository = reportperformancetagsRepository;
this.reportperformancepersontagsRepository = reportperformancepersontagsRepository;
}
#region Report_Global
......@@ -170,10 +188,52 @@ public void ImportAllotData(int hospitalId, string filePath)
if (sheet == null) continue;
string sheetName = sheet.SheetName.NoBlank();
logger.LogInformation($"正在读取{sheetName}的数据");
var columns = GetColumns(sheet, sheetName, out string sourceType);
if (columns == null || !columns.Any(t => !string.IsNullOrEmpty(t.NoBlank()))) continue;
switch (sheetName)
{
case "科室总绩效":
ImporSummaryData(sheet, columns, hospitalId, allots);
break;
case "临床科室绩效":
ImporAccountData(sheet, columns, hospitalId, allots);
break;
case "科室标签":
ImporAccountTag(sheet, columns, hospitalId);
break;
case "科主任护士长绩效":
ImporClinicData(sheet, columns, hospitalId, allots);
break;
case "科主任护士长标签":
ImporClinicTag(sheet, columns, hospitalId);
break;
case "人均绩效":
ImporBasicnormData(sheet, columns, hospitalId, allots);
break;
default:
ImportBasicData(sheet, columns, hospitalId, allots, sheetName, sourceType);
break;
}
logger.LogInformation($"{sheetName}读取已结束");
}
}
catch (Exception ex)
{
logger.LogError(ex.ToString());
}
}
private void ImportBasicData(ISheet sheet, List<string> columns, int hospitalId, List<per_allot> allots, string sheetName, string sourceType)
{
var data = new List<his_importdata>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
......@@ -182,38 +242,248 @@ public void ImportAllotData(int hospitalId, string filePath)
his_importdata importdata = new his_importdata
{
Year = GetCellValue<int>(row, columns, nameof(his_importdata.Year)),
Month = GetCellValue<int>(row, columns, nameof(his_importdata.Month)),
AccountingUnit = GetCellValue<string>(row, columns, nameof(his_importdata.AccountingUnit)),
Department = GetCellValue<string>(row, columns, nameof(his_importdata.Department)),
PersonnelNumber = GetCellValue<string>(row, columns, nameof(his_importdata.PersonnelNumber)),
PersonnelName = GetCellValue<string>(row, columns, nameof(his_importdata.PersonnelName)),
Original = GetCellValue<string>(row, columns, nameof(his_importdata.Original)),
Value = GetCellValue<decimal>(row, columns, nameof(his_importdata.Value)),
Year = GetCellValue<int>(row, columns, "年份"),
Month = GetCellValue<int>(row, columns, "月份"),
AccountingUnit = GetCellValue<string>(row, columns, "核算单元"),
Department = GetCellValue<string>(row, columns, "科室"),
PersonnelNumber = GetCellValue<string>(row, columns, "工号"),
PersonnelName = GetCellValue<string>(row, columns, "医生姓名"),
Original = GetCellValue<string>(row, columns, "类别"),
Value = GetCellValue<decimal>(row, columns, "值"),
};
data.Add(importdata);
}
if (data == null || !data.Any(t => t.Year != 0 && t.Month != 0)) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
t.HospitalId = hospitalId;
t.AllotId = allots?.FirstOrDefault(w => w.Year == t.Year && t.Month == w.Month)?.ID;
t.SourceType = sourceType;
t.Category = sheetName;
t.CreateTime = dateTime;
});
var years = data.Select(t => t.Year).Distinct();
var months = data.Select(t => t.Month).Distinct();
var yearMonths = data.Select(t => $"{t.Year}-{t.Month}").Distinct();
hisimportdataRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && years.Contains(t.Year) && months.Contains(t.Month) && t.Category == sheetName);
hisimportdataRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && yearMonths.Contains($"{t.Year}-{t.Month}") && t.Category == sheetName);
hisimportdataRepository.BulkInsert(data.Where(t => t.Year != 0 && t.Month != 0));
}
private void ImporSummaryData(ISheet sheet, List<string> columns, int hospitalId, List<per_allot> allots)
{
var data = new List<his_import_summary>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
his_import_summary importdata = new his_import_summary
{
Year = GetCellValue<int>(row, columns, "年份"),
Month = GetCellValue<int>(row, columns, "月份"),
AccountingUnit = GetCellValue<string>(row, columns, "核算单元"),
RealGiveFee = GetCellValue<decimal>(row, columns, "实发绩效"),
};
data.Add(importdata);
}
catch (Exception ex)
logger.LogInformation($"{sheet.SheetName}共有{sheet.LastRowNum}行数据,读取到{data.Count}条记录");
if (data == null || !data.Any(t => t.Year != 0 && t.Month != 0)) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
logger.LogError(ex.ToString());
t.HospitalId = hospitalId;
t.AllotId = allots?.FirstOrDefault(w => w.Year == t.Year && t.Month == w.Month)?.ID ?? 0;
t.CreateTime = dateTime;
});
var yearMonths = data.Select(t => $"{t.Year}-{t.Month}").Distinct();
hisimportsummaryRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && yearMonths.Contains($"{t.Year}-{t.Month}"));
hisimportsummaryRepository.BulkInsert(data.Where(t => t.Year != 0 && t.Month != 0));
}
private void ImporAccountData(ISheet sheet, List<string> columns, int hospitalId, List<per_allot> allots)
{
var data = new List<his_import_account>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
his_import_account importdata = new his_import_account
{
Year = GetCellValue<int>(row, columns, "年份"),
Month = GetCellValue<int>(row, columns, "月份"),
UnitType = GetCellValue<string>(row, columns, "核算单元类型"),
AccountingUnit = GetCellValue<string>(row, columns, "核算单元"),
Number = GetCellValue<decimal>(row, columns, "核算单元人员数量"),
RealGiveFee = GetCellValue<decimal>(row, columns, "实发绩效"),
};
data.Add(importdata);
}
logger.LogInformation($"{sheet.SheetName}共有{sheet.LastRowNum}行数据,读取到{data.Count}条记录");
if (data == null || !data.Any(t => t.Year != 0 && t.Month != 0)) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
t.HospitalId = hospitalId;
t.AllotId = allots?.FirstOrDefault(w => w.Year == t.Year && t.Month == w.Month)?.ID ?? 0;
t.CreateTime = dateTime;
});
var yearMonths = data.Select(t => $"{t.Year}-{t.Month}").Distinct();
hisimportaccountRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && yearMonths.Contains($"{t.Year}-{t.Month}"));
hisimportaccountRepository.BulkInsert(data.Where(t => t.Year != 0 && t.Month != 0));
}
private void ImporAccountTag(ISheet sheet, List<string> columns, int hospitalId)
{
var data = new List<report_performance_tags>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
report_performance_tags importdata = new report_performance_tags
{
UnitType = GetCellValue<string>(row, columns, "核算单元类型"),
AccountingUnit = GetCellValue<string>(row, columns, "核算单元"),
Tag1 = GetCellValue<string>(row, columns, "Tag1"),
Tag2 = GetCellValue<string>(row, columns, "Tag2"),
Tag3 = GetCellValue<string>(row, columns, "Tag3"),
Tag4 = GetCellValue<string>(row, columns, "Tag4"),
Tag5 = GetCellValue<string>(row, columns, "Tag5"),
};
data.Add(importdata);
}
logger.LogInformation($"{sheet.SheetName}共有{sheet.LastRowNum}行数据,读取到{data.Count}条记录");
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.UnitType) && !string.IsNullOrEmpty(t.AccountingUnit))) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
t.HospitalId = hospitalId;
t.CreateTime = dateTime;
});
reportperformancetagsRepository.DeleteFromQuery(t => t.HospitalId == hospitalId);
reportperformancetagsRepository.BulkInsert(data.Where(t => !string.IsNullOrEmpty(t.UnitType) && !string.IsNullOrEmpty(t.AccountingUnit)));
}
private void ImporClinicData(ISheet sheet, List<string> columns, int hospitalId, List<per_allot> allots)
{
var data = new List<his_import_clinic>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
his_import_clinic importdata = new his_import_clinic
{
Year = GetCellValue<int>(row, columns, "年份"),
Month = GetCellValue<int>(row, columns, "月份"),
UnitType = GetCellValue<string>(row, columns, "核算单元类型"),
AccountingUnit = GetCellValue<string>(row, columns, "核算单元"),
AccountType = GetCellValue<string>(row, columns, "职称"),
JobNumber = GetCellValue<string>(row, columns, "工号"),
EmployeeName = GetCellValue<string>(row, columns, "姓名"),
Basics = GetCellValue<decimal>(row, columns, "基础绩效系数"),
RealGiveFee = GetCellValue<decimal>(row, columns, "实发绩效"),
};
data.Add(importdata);
}
logger.LogInformation($"{sheet.SheetName}共有{sheet.LastRowNum}行数据,读取到{data.Count}条记录");
if (data == null || !data.Any(t => t.Year != 0 && t.Month != 0)) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
t.HospitalId = hospitalId;
t.AllotId = allots?.FirstOrDefault(w => w.Year == t.Year && t.Month == w.Month)?.ID ?? 0;
t.CreateTime = dateTime;
});
var yearMonths = data.Select(t => $"{t.Year}-{t.Month}").Distinct();
hisimportclinicRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && yearMonths.Contains($"{t.Year}-{t.Month}"));
hisimportclinicRepository.BulkInsert(data.Where(t => t.Year != 0 && t.Month != 0));
}
private void ImporClinicTag(ISheet sheet, List<string> columns, int hospitalId)
{
var data = new List<report_performance_person_tags>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
report_performance_person_tags importdata = new report_performance_person_tags
{
UnitType = GetCellValue<string>(row, columns, "核算单元类型"),
AccountingUnit = GetCellValue<string>(row, columns, "核算单元"),
PersonnelName = GetCellValue<string>(row, columns, "工号"),
PersonnelNumber = GetCellValue<string>(row, columns, "姓名"),
Tag1 = GetCellValue<string>(row, columns, "Tag1"),
Tag2 = GetCellValue<string>(row, columns, "Tag2"),
Tag3 = GetCellValue<string>(row, columns, "Tag3"),
Tag4 = GetCellValue<string>(row, columns, "Tag4"),
Tag5 = GetCellValue<string>(row, columns, "Tag5"),
};
data.Add(importdata);
}
logger.LogInformation($"{sheet.SheetName}共有{sheet.LastRowNum}行数据,读取到{data.Count}条记录");
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.UnitType) && !string.IsNullOrEmpty(t.AccountingUnit))) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
t.HospitalId = hospitalId;
t.CreateTime = dateTime;
});
reportperformancepersontagsRepository.DeleteFromQuery(t => t.HospitalId == hospitalId);
reportperformancepersontagsRepository.BulkInsert(data.Where(t => !string.IsNullOrEmpty(t.PersonnelName) && !string.IsNullOrEmpty(t.PersonnelNumber)));
}
private void ImporBasicnormData(ISheet sheet, List<string> columns, int hospitalId, List<per_allot> allots)
{
var data = new List<his_import_baiscnorm>();
for (int rowIndex = 1; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{
var row = sheet.GetRow(rowIndex);
if (row == null) continue;
his_import_baiscnorm importdata = new his_import_baiscnorm
{
Year = GetCellValue<int>(row, columns, "年份"),
Month = GetCellValue<int>(row, columns, "月份"),
PositionName = GetCellValue<string>(row, columns, "绩效核算人群"),
TotelValue = GetCellValue<decimal>(row, columns, "总绩效"),
AvgValue = GetCellValue<decimal>(row, columns, "总人数"),
TotelNumber = GetCellValue<decimal>(row, columns, "人均绩效"),
};
data.Add(importdata);
}
logger.LogInformation($"{sheet.SheetName}共有{sheet.LastRowNum}行数据,读取到{data.Count}条记录");
if (data == null || !data.Any(t => t.Year != 0 && t.Month != 0)) return;
var dateTime = DateTime.Now;
data.ForEach(t =>
{
t.HospitalId = hospitalId;
t.AllotId = allots?.FirstOrDefault(w => w.Year == t.Year && t.Month == w.Month)?.ID ?? 0;
t.CreateTime = dateTime;
});
var yearMonths = data.Select(t => $"{t.Year}-{t.Month}").Distinct();
hisimportbaiscnormRepository.DeleteFromQuery(t => t.HospitalId == hospitalId && yearMonths.Contains($"{t.Year}-{t.Month}"));
hisimportbaiscnormRepository.BulkInsert(data.Where(t => t.Year != 0 && t.Month != 0));
}
private List<string> GetColumns(ISheet sheet, string sheetName, out string sourceType)
......@@ -236,9 +506,8 @@ private List<string> GetColumns(ISheet sheet, string sheetName, out string sourc
private T GetCellValue<T>(IRow row, List<string> columns, string key)
{
var value = hisImportdataDict[key];
if (columns.Contains(value) && row.GetCell(columns.IndexOf(value)) != null)
return row.GetCell(columns.IndexOf(value)).GetCellValue<T>();
if (columns.Contains(key) && row.GetCell(columns.IndexOf(key)) != null)
return row.GetCell(columns.IndexOf(key)).GetCellValue<T>();
return default;
}
......@@ -248,18 +517,7 @@ private T GetCellValue<T>(IRow row, List<string> columns, string key)
{ "收入", new string[] { "门诊收入", "住院收入" } },
{ "医生工作量", new string[] { "门诊人次", "出院人次", "手术概况", "住院天数", "实际开放总床日数" } },
{ "医技工作量", new string[] { "医技工作量" } },
};
private readonly Dictionary<string, string> hisImportdataDict = new Dictionary<string, string>
{
{ nameof(his_importdata.Year), "年份" },
{ nameof(his_importdata.Month), "月份" },
{ nameof(his_importdata.AccountingUnit), "核算单元" },
{ nameof(his_importdata.Department), "科室" },
{ nameof(his_importdata.PersonnelNumber), "工号" },
{ nameof(his_importdata.PersonnelName), "医生姓名" },
{ nameof(his_importdata.Original), "类别" },
{ nameof(his_importdata.Value), "值" },
{ "支出", new string[] { "支出" } },
};
#endregion ImportFile && SaveData
......
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