Commit b7164ee4 by lcx

测算表中收入的费用系数来源改变

parent bebc5339
...@@ -14,21 +14,21 @@ public class ExcelHeader ...@@ -14,21 +14,21 @@ public class ExcelHeader
/// <summary> /// <summary>
/// 护理组系数 /// 护理组系数
/// </summary> /// </summary>
public decimal NurseFactor { get; set; } public decimal? NurseFactor { get; set; }
/// <summary> /// <summary>
/// 医生组系数 /// 医生组系数
/// </summary> /// </summary>
public decimal DoctorFactor { get; set; } public decimal? DoctorFactor { get; set; }
/// <summary> /// <summary>
/// 医技组系数 /// 医技组系数
/// </summary> /// </summary>
public decimal TechnicianFactor { get; set; } public decimal? TechnicianFactor { get; set; }
/// <summary> /// <summary>
/// 工作量系数 /// 工作量系数
/// </summary> /// </summary>
public decimal WorkloadFactor { get; set; } public decimal? WorkloadFactor { get; set; }
} }
} }
...@@ -32,27 +32,37 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType ...@@ -32,27 +32,37 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType
// 工作量系数 // 工作量系数
var workloadFactor = sheet.GetOrCreate(point.HeaderFirstRowNum.Value + 1); var workloadFactor = sheet.GetOrCreate(point.HeaderFirstRowNum.Value + 1);
var factorStyle = new SheetType[] { SheetType.Workload, SheetType.OtherWorkload }.Contains(sheetType)
? style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.系数, CellFormat.数字)
: style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.系数, CellFormat.百分比);
var columnStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.列头);
// 去除excel中已存在的列 // 去除excel中已存在的列
int headerFirstCellNum = point.DataFirstCellNum.Value; int headerFirstCellNum = point.DataFirstCellNum.Value;
if (columnHeader.LastCellNum > point.DataFirstCellNum.Value) if (columnHeader.LastCellNum > point.DataFirstCellNum.Value)
{ {
for (int index = point.DataFirstCellNum.Value; index < columnHeader.LastCellNum; index++) for (int index = point.DataFirstCellNum.Value; index < columnHeader.LastCellNum; index++)
{ {
var column = columnHeader.GetCell(index).GetDecodeEscapes(); var category = columnHeader.GetCell(index).GetDecodeEscapes();
if (string.IsNullOrEmpty(column)) continue; if (string.IsNullOrEmpty(category)) continue;
if (index > headerFirstCellNum) headerFirstCellNum = index; if (index > headerFirstCellNum) headerFirstCellNum = index;
columns.RemoveAll(t => t.ColumnName.NoBlank() == column); var column = columns.FirstOrDefault(t => t.ColumnName.NoBlank() == category);
if (sheetType == SheetType.Income)
{
WriteFactor(doctorFactor, index, column?.DoctorFactor, factorStyle);
WriteFactor(nurseFactor, index, column?.NurseFactor, factorStyle);
WriteFactor(technicianFactor, index, column?.TechnicianFactor, factorStyle);
}
columns.RemoveAll(t => t.ColumnName.NoBlank() == category);
} }
if (headerFirstCellNum > point.DataFirstCellNum.Value) if (headerFirstCellNum > point.DataFirstCellNum.Value)
headerFirstCellNum += 1; headerFirstCellNum += 1;
} }
if (columns == null || !columns.Any()) return; if (columns == null || !columns.Any()) return;
var factorStyle = new SheetType[] { SheetType.Workload, SheetType.OtherWorkload }.Contains(sheetType)
? style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.系数, CellFormat.数字)
: style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.系数, CellFormat.百分比);
var columnStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.列头);
// 补充excel中不存在的列 // 补充excel中不存在的列
foreach (var item in columns) foreach (var item in columns)
...@@ -69,23 +79,37 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType ...@@ -69,23 +79,37 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType
} }
else else
{ {
var doctorCell = doctorFactor.GetOrCreate(headerFirstCellNum); WriteFactor(doctorFactor, headerFirstCellNum, item?.DoctorFactor, factorStyle);
doctorCell.SetCellValue<decimal>(item.DoctorFactor);
doctorCell.CellStyle = factorStyle;
var nurseCell = nurseFactor.GetOrCreate(headerFirstCellNum); WriteFactor(nurseFactor, headerFirstCellNum, item?.NurseFactor, factorStyle);
nurseCell.SetCellValue<decimal>(item.NurseFactor);
nurseCell.CellStyle = factorStyle;
var technicianCell = technicianFactor.GetOrCreate(headerFirstCellNum); WriteFactor(technicianFactor, headerFirstCellNum, item?.TechnicianFactor, factorStyle);
technicianCell.SetCellValue<decimal>(item.TechnicianFactor);
technicianCell.CellStyle = factorStyle;
} }
headerFirstCellNum++; headerFirstCellNum++;
} }
} }
private static void WriteFactor(IRow row, int cellIndex, decimal? value, ICellStyle style)
{
var cell = row.GetCell(cellIndex);
if (cell != null)
{
row.RemoveCell(cell);
}
cell = row.CreateCell(cellIndex);
if (value.HasValue)
{
cell.SetCellValue<decimal>(value);
}
else
{
cell.SetCellValue<string>("#VALUE!");
}
cell.CellStyle = style;
}
#region ExtractData #region ExtractData
public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<string> headers, List<ExtractTransDto> data) public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<string> headers, List<ExtractTransDto> data)
......
...@@ -26,6 +26,7 @@ public class ExtractService : IAutoInjection ...@@ -26,6 +26,7 @@ public class ExtractService : IAutoInjection
private readonly PerforCollectdataRepository collectdataRepository; private readonly PerforCollectdataRepository collectdataRepository;
private readonly PerforPeremployeeRepository peremployeeRepository; private readonly PerforPeremployeeRepository peremployeeRepository;
private readonly PerforPerdeptdicRepository perdeptdicRepository; private readonly PerforPerdeptdicRepository perdeptdicRepository;
private readonly PerforCofdrugtypefactorRepository drugtypefactorRepository;
public ExtractService( public ExtractService(
ILogger<ExtractService> logger, ILogger<ExtractService> logger,
...@@ -39,7 +40,8 @@ public class ExtractService : IAutoInjection ...@@ -39,7 +40,8 @@ public class ExtractService : IAutoInjection
PerforPerallotRepository perallotRepository, PerforPerallotRepository perallotRepository,
PerforCollectdataRepository collectdataRepository, PerforCollectdataRepository collectdataRepository,
PerforPeremployeeRepository peremployeeRepository, PerforPeremployeeRepository peremployeeRepository,
PerforPerdeptdicRepository perdeptdicRepository PerforPerdeptdicRepository perdeptdicRepository,
PerforCofdrugtypefactorRepository drugtypefactorRepository
) )
{ {
this.logger = logger; this.logger = logger;
...@@ -54,6 +56,7 @@ PerforPerdeptdicRepository perdeptdicRepository ...@@ -54,6 +56,7 @@ PerforPerdeptdicRepository perdeptdicRepository
this.collectdataRepository = collectdataRepository; this.collectdataRepository = collectdataRepository;
this.peremployeeRepository = peremployeeRepository; this.peremployeeRepository = peremployeeRepository;
this.perdeptdicRepository = perdeptdicRepository; this.perdeptdicRepository = perdeptdicRepository;
this.drugtypefactorRepository = drugtypefactorRepository;
} }
/// <summary> /// <summary>
...@@ -146,6 +149,10 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD ...@@ -146,6 +149,10 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD
var employeeDict = peremployeeRepository.GetEntities(t => t.AllotId == allot.ID); var employeeDict = peremployeeRepository.GetEntities(t => t.AllotId == allot.ID);
var collectData = collectdataRepository.GetEntities(t => t.AllotID == allot.ID); var collectData = collectdataRepository.GetEntities(t => t.AllotID == allot.ID);
var drugfactorData = drugtypefactorRepository.GetEntities(t => t.AllotID == allot.ID) ?? new List<cof_drugtype_factor>();
if (!exdict.ContainsKey(ExDataDict.IncomeFactor))
exdict.Add(ExDataDict.IncomeFactor, drugfactorData);
logger.LogInformation($"allotId: {allot.ID}: 总金额 - {extractDto?.Sum(s => s.Value ?? 0)}"); logger.LogInformation($"allotId: {allot.ID}: 总金额 - {extractDto?.Sum(s => s.Value ?? 0)}");
WriteDataFactory factory = new WriteDataFactory(); WriteDataFactory factory = new WriteDataFactory();
......
...@@ -17,6 +17,7 @@ public enum ExDataDict ...@@ -17,6 +17,7 @@ public enum ExDataDict
ExItem = 2, ExItem = 2,
ExSpecial = 3, ExSpecial = 3,
AccountingBasic = 4, AccountingBasic = 4,
IncomeFactor = 5,
} }
public class QueryService : IAutoInjection public class QueryService : IAutoInjection
......
...@@ -44,14 +44,28 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -44,14 +44,28 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
if (data is List<ExtractTransDto> extractDto && extractDto.Any()) if (data is List<ExtractTransDto> extractDto && extractDto.Any())
{ {
var headers = extractDto.Select(t => t.Category?.Trim() ?? "").Distinct() var headers = new List<ExcelHeader>();
.Select(t => new ExcelHeader var categories = extractDto.Select(t => t.Category?.Trim() ?? "").Distinct();
if (exdict.ContainsKey(ExDataDict.IncomeFactor) && exdict[ExDataDict.IncomeFactor] is List<cof_drugtype_factor> factors && factors.Any(t => t.ExModuleId == module.Id))
{
factors = factors.Where(t => t.ExModuleId == module.Id).ToList();
categories = categories.Union(factors.Select(t => t.Charge)).Distinct();
headers = categories.GroupJoin(factors, inner => new { category = inner.NoBlank() }, outer => new { category = outer.Charge.NoBlank() }, (inner, outer) => new { inner, outer })
.Select(t => new ExcelHeader
{
ColumnName = t.inner,
DoctorFactor = t.outer?.FirstOrDefault()?.YSZ,
NurseFactor = t.outer?.FirstOrDefault()?.HLZ,
TechnicianFactor = t.outer?.FirstOrDefault()?.YJZ,
}).ToList();
}
else
{
headers = categories.Select(t => new ExcelHeader
{ {
ColumnName = t, ColumnName = t,
DoctorFactor = 0,
NurseFactor = 0,
TechnicianFactor = 0
}).ToList(); }).ToList();
}
WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, style, headers); WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, style, headers);
var columns = headers.Select(t => t.ColumnName).ToList(); var columns = headers.Select(t => t.ColumnName).ToList();
......
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