Commit 8e449b8b by lcx

人员其他收入抽取

parent c7bd4929
...@@ -16,7 +16,7 @@ public enum UnitType ...@@ -16,7 +16,7 @@ public enum UnitType
医技组 医技组
} }
public void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType sheetType, List<ExcelHeader> headers) public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType sheetType, List<ExcelHeader> headers)
{ {
if (headers == null || !headers.Any()) return; if (headers == null || !headers.Any()) return;
...@@ -75,26 +75,26 @@ public void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType sheetT ...@@ -75,26 +75,26 @@ public void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType sheetT
} }
} }
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, List<string> headers, List<ExtractTransDto> data) public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, List<string> headers, List<ExtractTransDto> data)
{ {
var columnHeader = sheet.GetOrCreate(point.HeaderFirstRowNum.Value); var columnHeader = sheet.GetOrCreate(point.HeaderFirstRowNum.Value);
int headerFirstRowNum = point.HeaderFirstRowNum.Value + 1; int dataFirstRowNum = point.DataFirstRowNum.Value;
WriteSheetDataExistent(sheet, columnHeader, point, sheetType, headers, data, ref headerFirstRowNum); WriteSheetDataExistent(sheet, columnHeader, point, sheetType, headers, data, ref dataFirstRowNum);
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return; if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return;
WriteSheetDataNonexistent(sheet, columnHeader, point, sheetType, headers, data, headerFirstRowNum); WriteSheetDataNonexistent(sheet, columnHeader, point, sheetType, headers, data, dataFirstRowNum);
} }
private void WriteSheetDataExistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, private static void WriteSheetDataExistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType,
List<string> headers, List<ExtractTransDto> data, ref int headerFirstRowNum) List<string> headers, List<ExtractTransDto> data, ref int dataFirstRowNum)
{ {
if (sheet.LastRowNum > headerFirstRowNum) if (sheet.LastRowNum > dataFirstRowNum)
{ {
int dataFirstCellNum = point.DataFirstCellNum.Value; int dataFirstCellNum = point.DataFirstCellNum.Value;
for (int rowIndex = headerFirstRowNum; rowIndex < sheet.LastRowNum + 1; rowIndex++) for (int rowIndex = dataFirstRowNum; rowIndex < sheet.LastRowNum + 1; rowIndex++)
{ {
var row = sheet.GetRow(rowIndex); var row = sheet.GetRow(rowIndex);
if (row == null) continue; if (row == null) continue;
...@@ -128,13 +128,13 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -128,13 +128,13 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
} }
data.RemoveAll(t => t.Department == department); data.RemoveAll(t => t.Department == department);
if (rowIndex > headerFirstRowNum) headerFirstRowNum = rowIndex + 1; if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex + 1;
} }
} }
} }
private void WriteSheetDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, private static void WriteSheetDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType,
List<string> headers, List<ExtractTransDto> data, int headerFirstRowNum) List<string> headers, List<ExtractTransDto> data, int dataFirstRowNum)
{ {
var departments = data.Select(s => s.Department).Where(w => !string.IsNullOrEmpty(w)).Distinct().ToList(); var departments = data.Select(s => s.Department).Where(w => !string.IsNullOrEmpty(w)).Distinct().ToList();
...@@ -149,7 +149,7 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -149,7 +149,7 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
var deptData = data.Where(t => t.Department == department); var deptData = data.Where(t => t.Department == department);
if (deptData == null || !deptData.Any()) continue; if (deptData == null || !deptData.Any()) continue;
var row = sheet.GetOrCreate(headerFirstRowNum); var row = sheet.GetOrCreate(dataFirstRowNum);
for (int cellIndex = point.HeaderFirstCellNum.Value; cellIndex < columnHeader.LastCellNum; cellIndex++) for (int cellIndex = point.HeaderFirstCellNum.Value; cellIndex < columnHeader.LastCellNum; cellIndex++)
{ {
var column = row.GetCell(cellIndex).GetDecodeEscapes(); var column = row.GetCell(cellIndex).GetDecodeEscapes();
...@@ -165,10 +165,17 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -165,10 +165,17 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
cell.SetCellOValue(value); cell.SetCellOValue(value);
} }
} }
headerFirstRowNum++; dataFirstRowNum++;
} }
} }
public static string HasValue(params string[] list)
{
if (list == null || !list.Any()) return null;
return list.FirstOrDefault(t => !string.IsNullOrEmpty(t));
}
/// <summary> 住院核算单元 </summary> /// <summary> 住院核算单元 </summary>
private readonly Dictionary<string, Func<ExtractTransDto, string>> fieldInpat = new Dictionary<string, Func<ExtractTransDto, string>> private readonly Dictionary<string, Func<ExtractTransDto, string>> fieldInpat = new Dictionary<string, Func<ExtractTransDto, string>>
{ {
...@@ -206,17 +213,5 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -206,17 +213,5 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
{ "科室名称", (dto) => dto.Department }, { "科室名称", (dto) => dto.Department },
{ "核算单元", (dto) => new string []{ dto.OutNurseAccounting, dto.InpatNurseAccounting }.FirstOrDefault(t => !string.IsNullOrEmpty(t)) }, { "核算单元", (dto) => new string []{ dto.OutNurseAccounting, dto.InpatNurseAccounting }.FirstOrDefault(t => !string.IsNullOrEmpty(t)) },
}; };
/// <summary>
///
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static string HasValue(params string[] list)
{
if (list == null || !list.Any()) return null;
return list.FirstOrDefault(t => !string.IsNullOrEmpty(t));
}
} }
} }
...@@ -12,12 +12,14 @@ public class EmployeeDataWrite : ISheetDataWrite ...@@ -12,12 +12,14 @@ public class EmployeeDataWrite : ISheetDataWrite
{ {
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, object data) public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, object data)
{ {
if (data is IEnumerable<per_employee> employees && employees.Any(t => accountingUnits.Contains(t.UnitType))) if (data is List<per_employee> employees && employees.Any(t => accountingUnits.Contains(t.UnitType)))
{ {
int dataFirstRowNum = point.DataFirstRowNum.Value; int dataFirstRowNum = point.DataFirstRowNum.Value;
var columns = sheet.CreateRow(point.HeaderFirstRowNum.Value).GetCellValues(); var columns = sheet.CreateRow(point.HeaderFirstRowNum.Value).GetCellValues();
ClearHistoryData(sheet, employees, columns, ref dataFirstRowNum);
foreach (var employee in employees) foreach (var employee in employees)
{ {
var row = sheet.GetOrCreate(dataFirstRowNum); var row = sheet.GetOrCreate(dataFirstRowNum);
...@@ -34,12 +36,46 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -34,12 +36,46 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
} }
} }
private void ClearHistoryData(ISheet sheet, PerSheetPoint point, List<per_employee> employees, List<string> columns, ref int dataFirstRowNum) private void ClearHistoryData(ISheet sheet, List<per_employee> employees, List<string> columns, ref int dataFirstRowNum)
{ {
foreach (var employee in employees) var pairs = new Dictionary<string, int>();
foreach (var key in new string[] { "核算单元", "人员工号", "医生姓名" })
{
if (!pairs.ContainsKey(key) && columns.Contains(key))
pairs.Add(key, columns.IndexOf(key));
}
var clearDict = new Dictionary<string, int>();
foreach (var key in new string[] { "出勤率" })
{
if (!clearDict.ContainsKey(key) && columns.Contains(key))
clearDict.Add(key, columns.IndexOf(key));
}
for (int rowIndex = dataFirstRowNum; rowIndex < sheet.LastRowNum; rowIndex++)
{ {
var row = sheet.GetRow(dataFirstRowNum); var row = sheet.GetRow(dataFirstRowNum);
string accountingUnit = row.GetOrCreate(pairs["核算单元"]).GetDecodeEscapes();
string personnel = row.GetOrCreate(pairs["人员工号"]).GetDecodeEscapes();
string doctorName = row.GetOrCreate(pairs["医生姓名"]).GetDecodeEscapes();
var employee = employees.FirstOrDefault(t => t.AccountingUnit == accountingUnit && t.PersonnelNumber == personnel && t.DoctorName == doctorName);
if (employee == null)
{
}
else
{
foreach (var clear in clearDict)
{
if (clear.Value < 0) return;
var cell = row.GetOrCreate(clear.Value);
if (cell.CellType != CellType.Formula) cell.SetCellValue("");
}
employees.Remove(employee);
}
if (rowIndex > dataFirstRowNum) dataFirstRowNum = rowIndex + 1;
} }
} }
......
using System; using NPOI.SS.UserModel;
using Performance.DtoModels;
using Performance.EntityModels;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
namespace Performance.Services.ExtractExcelService.SheetDataWrite namespace Performance.Services.ExtractExcelService.SheetDataWrite
{ {
class OtherIncomeDataWrite : ISheetDataWrite public class OtherIncomeDataWrite : ISheetDataWrite
{ {
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, object data, List<ex_module> modules, List<ex_item> items)
{
var module = modules.FirstOrDefault(t => t.SheetType == (int)sheetType);
if (module == null) return;
var modelItems = items.Where(t => t.ModuleId == module.Id);
if (modelItems == null || !modelItems.Any()) return;
var headers = modelItems.Select(t => new ExcelHeader
{
ColumnName = t.ItemName,
DoctorFactor = t.FactorValue1 ?? 0,
NurseFactor = t.FactorValue2 ?? 0,
TechnicianFactor = t.FactorValue3 ?? 0
}).ToList();
WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, headers);
if (data is List<ExtractTransDto> extractDto && extractDto.Any())
{
var columns = headers.Select(t => t.ColumnName).ToList();
WriteDataHelper.WriteSheetData(sheet, point, sheetType, columns, extractDto);
}
}
} }
} }
...@@ -21,14 +21,12 @@ public ISheetDataWrite GetWriteData(SheetType sheetType) ...@@ -21,14 +21,12 @@ public ISheetDataWrite GetWriteData(SheetType sheetType)
factory = new ClinicEmployeeDataWrite(); factory = new ClinicEmployeeDataWrite();
break; break;
case SheetType.OtherIncome: case SheetType.OtherIncome:
case SheetType.Expend:
factory = new OtherIncomeDataWrite(); factory = new OtherIncomeDataWrite();
break; break;
case SheetType.Income: case SheetType.Income:
factory = new IncomeDataWrite(); factory = new IncomeDataWrite();
break; break;
case SheetType.Expend:
factory = new ExpendDataWrite();
break;
case SheetType.Workload: case SheetType.Workload:
factory = new WorkloadDataWrite(); factory = new WorkloadDataWrite();
break; break;
......
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