Commit fab64441 by 李承祥

特殊科室读取数据、核算

parent fcd71ca0
...@@ -115,11 +115,11 @@ public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<res_baiscno ...@@ -115,11 +115,11 @@ public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<res_baiscno
var groupSpeList = dataList.GroupBy(t => t.AccountingUnit).Select(t => new var groupSpeList = dataList.GroupBy(t => t.AccountingUnit).Select(t => new
{ {
AccountingUnit = t.Key, AccountingUnit = t.Key,
Number = t.Sum(p => p.Number), Number = t.Max(p => p.Number),
ScoringAverage = t.Sum(p => p.ScoringAverage), ScoringAverage = t.Max(p => p.ScoringAverage),
OtherPerfor = t.Sum(p => p.OtherPerfor), OtherPerfor = t.Max(p => p.OtherPerfor),
Punishment = t.Sum(p => p.Punishment), Punishment = t.Max(p => p.Punishment),
Adjust = t.Sum(p => p.Adjust), Adjust = t.Max(p => p.Adjust),
}); });
foreach (var group in groupSpeList) foreach (var group in groupSpeList)
......
using NPOI.SS.UserModel; using NPOI.SS.UserModel;
using NPOI.SS.Util;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.Infrastructure; using Performance.Infrastructure;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -28,27 +30,37 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader) ...@@ -28,27 +30,37 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
var row = sheet.GetRow(r); var row = sheet.GetRow(r);
if (row == null) continue; if (row == null) continue;
var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell)?.ToString();
if (string.IsNullOrEmpty(accountingUnit))
accountingUnit = lastAccount;
PerDataSpecialUnit specialUnit = new PerDataSpecialUnit PerDataSpecialUnit specialUnit = new PerDataSpecialUnit
{ {
RowNumber = r, RowNumber = r,
AccountingUnit = accountingUnit, //AccountingUnit = accountingUnit,
Department = accountingUnit, //Department = accountingUnit,
QuantitativeIndicators = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "量化指标").PointCell)?.ToString(), QuantitativeIndicators = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "量化指标").PointCell)?.ToString(),
Quantity = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "数量").PointCell)?.ToString()), Quantity = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "数量").PointCell)?.ToString()),
QuantitativeIndicatorsValue = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "量化指标绩效分值").PointCell)?.ToString()), QuantitativeIndicatorsValue = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "量化指标绩效分值").PointCell)?.ToString()),
}; };
//相同科室只取以下项目第一次出现的值 var cell = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell);//?.ToString();
if (accountingUnit != lastAccount) var accountingUnit = cell?.ToString();
if (cell != null && IsMergeCell(cell, out Point start, out Point end) && r != start.X)
{ {
row = sheet.GetRow(start.X);
cell = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell);
accountingUnit = cell.ToString();
}
if (string.IsNullOrEmpty(accountingUnit))
accountingUnit = lastAccount;
//相同科室只取以下项目第一次出现的值
//if (accountingUnit != lastAccount)
//{
specialUnit.AccountingUnit = accountingUnit;
specialUnit.Department = accountingUnit;
specialUnit.Number = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人数").PointCell)?.ToString()); specialUnit.Number = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人数").PointCell)?.ToString());
specialUnit.ScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率").PointCell)?.ToString()); specialUnit.ScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率").PointCell)?.ToString());
specialUnit.OtherPerfor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效").PointCell)?.ToString()); specialUnit.OtherPerfor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效").PointCell)?.ToString());
specialUnit.Punishment = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚").PointCell)?.ToString()); specialUnit.Punishment = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚").PointCell)?.ToString());
specialUnit.Adjust = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数").PointCell)?.ToString()); specialUnit.Adjust = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数").PointCell)?.ToString());
} //}
if (!string.IsNullOrEmpty(specialUnit.QuantitativeIndicators) && specialUnit.QuantitativeIndicatorsValue != null) if (!string.IsNullOrEmpty(specialUnit.QuantitativeIndicators) && specialUnit.QuantitativeIndicatorsValue != null)
dataList.Add(specialUnit); dataList.Add(specialUnit);
//合并单元格科室名称补全 //合并单元格科室名称补全
...@@ -57,5 +69,42 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader) ...@@ -57,5 +69,42 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
return dataList; return dataList;
} }
public static bool IsMergeCell(ICell cell, out Point start, out Point end)
{
return IsMergeCell(cell.Sheet, cell.RowIndex, cell.ColumnIndex, out start, out end);
}
/// <summary>
/// 获取当前单元格所在的合并单元格的位置
/// </summary>
/// <param name="sheet">sheet表单</param>
/// <param name="rowIndex">行索引 0开始</param>
/// <param name="colIndex">列索引 0开始</param>
/// <param name="start">合并单元格左上角坐标</param>
/// <param name="end">合并单元格右下角坐标</param>
/// <returns>返回false表示非合并单元格</returns>
private static bool IsMergeCell(ISheet sheet, int rowIndex, int colIndex, out Point start, out Point end)
{
bool result = false;
start = new Point(0, 0);
end = new Point(0, 0);
if ((rowIndex < 0) || (colIndex < 0)) return result;
int regionsCount = sheet.NumMergedRegions;
for (int i = 0; i < regionsCount; i++)
{
CellRangeAddress range = sheet.GetMergedRegion(i);
//sheet.IsMergedRegion(range);
if (rowIndex >= range.FirstRow && rowIndex <= range.LastRow && colIndex >= range.FirstColumn && colIndex <= range.LastColumn)
{
start = new Point(range.FirstRow, range.FirstColumn);
end = new Point(range.LastRow, range.LastColumn);
result = true;
break;
}
}
return result;
}
} }
} }
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