Commit 3a17417f by lcx

自定义抽取

parent 0fb6137d
......@@ -267,7 +267,7 @@ public IEnumerable<dynamic> QueryData(sys_hospitalconfig config, string execsql,
/// </summary>
/// <param name="allot"></param>
/// <returns></returns>
private Dictionary<string, string> GetParameters(per_allot allot)
public Dictionary<string, string> GetParameters(per_allot allot)
{
DateTime beginTime = new DateTime(allot.Year, allot.Month, 1);
......
using NPOI.SS.UserModel;
using Microsoft.Extensions.Logging;
using NPOI.SS.UserModel;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Repository;
......@@ -10,21 +11,48 @@ namespace Performance.Services.ExtractExcelService.SheetDataWrite
{
public class CustomDataWrite
{
private readonly ILogger<CustomDataWrite> logger;
private readonly PerforHospitalconfigRepository hospitalconfigRepository;
private readonly PerforExmoduleRepository exmoduleRepository;
private readonly PerforExscriptRepository exscriptRepository;
private readonly CustomExtractService customExtractService;
public CustomDataWrite(PerforHospitalconfigRepository hospitalconfigRepository)
public CustomDataWrite(
ILogger<CustomDataWrite> logger,
PerforHospitalconfigRepository hospitalconfigRepository,
PerforExmoduleRepository exmoduleRepository,
PerforExscriptRepository exscriptRepository,
CustomExtractService customExtractService
)
{
this.logger = logger;
this.hospitalconfigRepository = hospitalconfigRepository;
this.exmoduleRepository = exmoduleRepository;
this.exscriptRepository = exscriptRepository;
this.customExtractService = customExtractService;
}
public void WriteDataToCustom(IWorkbook workbook, per_allot allot)
public PerSheetPoint Point => new PerSheetPoint
{
var modules = new List<ex_module>();
DataFirstRowNum = 2,
DataFirstCellNum = 7,
};
public void WriteDataToCustom(IWorkbook workbook, per_allot allot, ExcelStyle style)
{
var modules = exmoduleRepository.GetEntities(t => t.SheetType == (int)SheetType.Custom)?.OrderBy(t => t.ModuleName);
if (modules == null || !modules.Any()) return;
var exscripts = exscriptRepository.GetEntities(t => modules.Select(s => s.TypeId).Contains(t.TypeId));
if (exscripts == null || !exscripts.Any()) return;
var configs = hospitalconfigRepository.GetEntities(t => t.HospitalId == allot.HospitalId);
if (configs == null || !configs.Any()) throw new Exception("医院未配置绩效抽取信息");
foreach (var module in modules.Where(t => t.SheetType == (int)SheetType.Custom)?.OrderBy(t => t.ModuleName))
var parameters = customExtractService.GetParameters(allot);
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
foreach (var module in modules)
{
var sheet = workbook.GetSheet(module.ModuleName) ?? workbook.GetSheet(module.ModuleName.NoBlank());
if (sheet == null)
......@@ -32,12 +60,44 @@ public void WriteDataToCustom(IWorkbook workbook, per_allot allot)
sheet = workbook.CreateSheet(module.ModuleName);
workbook.SetSheetOrder(sheet.SheetName, workbook.NumberOfSheets - 1);
}
}
IEnumerable<dynamic> data;
var exscript = exscripts.FirstOrDefault(t => t.TypeId == module.TypeId);
if (exscript == null) continue;
var conf = configs.FirstOrDefault(w => w.Id == module.ConfigId);
if (conf == null) continue;
var execsql = exscript.ExecScript;
var dynamics = customExtractService.QueryData(conf, execsql, parameters);
try
{
// 没数据跳过
if (dynamics == null || dynamics.Count() == 0)
continue;
var rowindex = Point.DataFirstRowNum.Value;
for (int r = 0; r < dynamics.Count(); r++)
{
var temp = (IDictionary<string, object>)dynamics.ElementAt(r); // 行数据
var row = sheet.GetOrCreate(rowindex);
var cellindex = Point.DataFirstCellNum.Value;
foreach (var item in temp)
{
var cell = row.GetOrCreate(cellindex);
cell.SetCellOValue(item.Value);
cell.CellStyle = cellStyle;
cellindex++;
}
rowindex++;
}
}
catch (Exception ex)
{
logger.LogError($"自定义模板 - {sheet.SheetName}抽取异常:" + ex);
}
}
}
}
}
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