Commit 8e449b8b by lcx

人员其他收入抽取

parent c7bd4929
......@@ -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;
......@@ -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);
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;
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,
List<string> headers, List<ExtractTransDto> data, ref int headerFirstRowNum)
private static void WriteSheetDataExistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType,
List<string> headers, List<ExtractTransDto> data, ref int dataFirstRowNum)
{
if (sheet.LastRowNum > headerFirstRowNum)
if (sheet.LastRowNum > dataFirstRowNum)
{
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);
if (row == null) continue;
......@@ -128,13 +128,13 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
}
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,
List<string> headers, List<ExtractTransDto> data, int headerFirstRowNum)
private static void WriteSheetDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType,
List<string> headers, List<ExtractTransDto> data, int dataFirstRowNum)
{
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
var deptData = data.Where(t => t.Department == department);
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++)
{
var column = row.GetCell(cellIndex).GetDecodeEscapes();
......@@ -165,10 +165,17 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
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>
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
{ "科室名称", (dto) => dto.Department },
{ "核算单元", (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
{
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;
var columns = sheet.CreateRow(point.HeaderFirstRowNum.Value).GetCellValues();
ClearHistoryData(sheet, employees, columns, ref dataFirstRowNum);
foreach (var employee in employees)
{
var row = sheet.GetOrCreate(dataFirstRowNum);
......@@ -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);
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.Linq;
using System.Text;
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)
factory = new ClinicEmployeeDataWrite();
break;
case SheetType.OtherIncome:
case SheetType.Expend:
factory = new OtherIncomeDataWrite();
break;
case SheetType.Income:
factory = new IncomeDataWrite();
break;
case SheetType.Expend:
factory = new ExpendDataWrite();
break;
case SheetType.Workload:
factory = new WorkloadDataWrite();
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