Commit edd8bc96 by lcx

注释代码

parent e455320b
...@@ -18,7 +18,7 @@ namespace Performance.Services ...@@ -18,7 +18,7 @@ namespace Performance.Services
public class DFExtractService : IAutoInjection public class DFExtractService : IAutoInjection
{ {
#region #region
private readonly ILogger<ExtractService> logger; private readonly ILogger<DFExtractService> logger;
private readonly IEmailService emailService; private readonly IEmailService emailService;
private readonly PerSheetService perSheetService; private readonly PerSheetService perSheetService;
private readonly PerforHospitalRepository perforHospitalRepository; private readonly PerforHospitalRepository perforHospitalRepository;
...@@ -39,7 +39,7 @@ public class DFExtractService : IAutoInjection ...@@ -39,7 +39,7 @@ public class DFExtractService : IAutoInjection
private ICellStyle style; private ICellStyle style;
private per_allot Allot; private per_allot Allot;
public DFExtractService(ILogger<ExtractService> logger, public DFExtractService(ILogger<DFExtractService> logger,
IEmailService emailService, IEmailService emailService,
PerSheetService perSheetService, PerSheetService perSheetService,
PerforHospitalRepository perforHospitalRepository, PerforHospitalRepository perforHospitalRepository,
......
using Dapper; //using Dapper;
using Microsoft.AspNetCore.Hosting; //using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging; //using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; //using Microsoft.Extensions.Options;
using NPOI.HSSF.UserModel; //using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel; //using NPOI.SS.UserModel;
using NPOI.SS.Util; //using NPOI.SS.Util;
using NPOI.XSSF.UserModel; //using NPOI.XSSF.UserModel;
using Performance.DtoModels; //using Performance.DtoModels;
using Performance.DtoModels.AppSettings; //using Performance.DtoModels.AppSettings;
using Performance.EntityModels; //using Performance.EntityModels;
using Performance.Infrastructure; //using Performance.Infrastructure;
using Performance.Repository; //using Performance.Repository;
using System; //using System;
using System.Collections.Generic; //using System.Collections.Generic;
using System.Data; //using System.Data;
using System.IO; //using System.IO;
using System.Linq; //using System.Linq;
using System.Text; //using System.Text;
using System.Text.RegularExpressions; //using System.Text.RegularExpressions;
namespace Performance.Services //namespace Performance.Services
{ //{
/// <summary> // /// <summary>
/// 数据抽取服务 // /// 数据抽取服务
/// </summary> // /// </summary>
public class ExtractService : IAutoInjection // public class ExtractService : IAutoInjection
{ // {
private readonly ILogger<ExtractService> logger; // private readonly ILogger<ExtractService> logger;
private readonly IHostingEnvironment environment; // private readonly IHostingEnvironment environment;
private readonly IEmailService emailService; // private readonly IEmailService emailService;
private readonly PerSheetService perSheetService; // private readonly PerSheetService perSheetService;
private readonly PerHeaderService perHeaderService; // private readonly PerHeaderService perHeaderService;
private readonly PerforPersheetRepository perforPersheetRepository; // private readonly PerforPersheetRepository perforPersheetRepository;
private readonly PerforImheaderRepository perforImheaderRepository; // private readonly PerforImheaderRepository perforImheaderRepository;
private readonly PerforImemployeeRepository perforImemployeeRepository; // private readonly PerforImemployeeRepository perforImemployeeRepository;
private readonly PerforImdataRepository perforImdataRepository; // private readonly PerforImdataRepository perforImdataRepository;
private readonly PerforImaccountbasicRepository perforImaccountbasicRepository; // private readonly PerforImaccountbasicRepository perforImaccountbasicRepository;
private readonly PerforExtractRepository perforExtractRepository; // private readonly PerforExtractRepository perforExtractRepository;
private readonly PerforPerfirstRepository perforPerfirstRepository; // private readonly PerforPerfirstRepository perforPerfirstRepository;
private readonly PerforPerallotRepository perforPerallotRepository; // private readonly PerforPerallotRepository perforPerallotRepository;
private readonly PerforRepimportconfigRepository repimportconfigRepository; // private readonly PerforRepimportconfigRepository repimportconfigRepository;
private readonly PerforHospitalconfigRepository perforHospitalconfigRepository; // private readonly PerforHospitalconfigRepository perforHospitalconfigRepository;
public ExtractService(ILogger<ExtractService> logger, // public ExtractService(ILogger<ExtractService> logger,
IHostingEnvironment environment, // IHostingEnvironment environment,
IEmailService emailService, // IEmailService emailService,
PerSheetService perSheetService, // PerSheetService perSheetService,
PerHeaderService perHeaderService, // PerHeaderService perHeaderService,
PerforPersheetRepository perforPersheetRepository, // PerforPersheetRepository perforPersheetRepository,
PerforImheaderRepository perforImheaderRepository, // PerforImheaderRepository perforImheaderRepository,
PerforImemployeeRepository perforImemployeeRepository, // PerforImemployeeRepository perforImemployeeRepository,
PerforImdataRepository perforImdataRepository, // PerforImdataRepository perforImdataRepository,
PerforImaccountbasicRepository perforImaccountbasicRepository, // PerforImaccountbasicRepository perforImaccountbasicRepository,
PerforExtractRepository perforExtractRepository, // PerforExtractRepository perforExtractRepository,
PerforPerfirstRepository perforPerfirstRepository, // PerforPerfirstRepository perforPerfirstRepository,
PerforPerallotRepository perforPerallotRepository, // PerforPerallotRepository perforPerallotRepository,
PerforRepimportconfigRepository repimportconfigRepository, // PerforRepimportconfigRepository repimportconfigRepository,
PerforHospitalconfigRepository perforHospitalconfigRepository) // PerforHospitalconfigRepository perforHospitalconfigRepository)
{ // {
this.logger = logger; // this.logger = logger;
this.environment = environment; // this.environment = environment;
this.emailService = emailService; // this.emailService = emailService;
this.perSheetService = perSheetService; // this.perSheetService = perSheetService;
this.perHeaderService = perHeaderService; // this.perHeaderService = perHeaderService;
this.perforPersheetRepository = perforPersheetRepository; // this.perforPersheetRepository = perforPersheetRepository;
this.perforImheaderRepository = perforImheaderRepository; // this.perforImheaderRepository = perforImheaderRepository;
this.perforImemployeeRepository = perforImemployeeRepository; // this.perforImemployeeRepository = perforImemployeeRepository;
this.perforImdataRepository = perforImdataRepository; // this.perforImdataRepository = perforImdataRepository;
this.perforImaccountbasicRepository = perforImaccountbasicRepository; // this.perforImaccountbasicRepository = perforImaccountbasicRepository;
this.perforExtractRepository = perforExtractRepository; // this.perforExtractRepository = perforExtractRepository;
this.perforPerfirstRepository = perforPerfirstRepository; // this.perforPerfirstRepository = perforPerfirstRepository;
this.perforPerallotRepository = perforPerallotRepository; // this.perforPerallotRepository = perforPerallotRepository;
this.repimportconfigRepository = repimportconfigRepository; // this.repimportconfigRepository = repimportconfigRepository;
this.perforHospitalconfigRepository = perforHospitalconfigRepository; // this.perforHospitalconfigRepository = perforHospitalconfigRepository;
} // }
/// <summary> // /// <summary>
/// 获得首次模板路径 // /// 获得首次模板路径
/// </summary> // /// </summary>
/// <param name="hospitalId"></param> // /// <param name="hospitalId"></param>
/// <param name="type">1、历史绩效文件 2、首次模板文件</param> // /// <param name="type">1、历史绩效文件 2、首次模板文件</param>
/// <returns></returns> // /// <returns></returns>
public string GetFilepath(int hospitalId, out int type) // public string GetFilepath(int hospitalId, out int type)
{ // {
try // try
{ // {
var firstList = perforPerfirstRepository.GetEntities(t => t.HospitalId == hospitalId); // var firstList = perforPerfirstRepository.GetEntities(t => t.HospitalId == hospitalId);
var allotList = perforPerallotRepository.GetEntities(t => t.HospitalId == hospitalId); // var allotList = perforPerallotRepository.GetEntities(t => t.HospitalId == hospitalId);
type = 2; // type = 2;
if ((allotList == null || !allotList.Any(t => t.States > 0)) && (firstList != null || !firstList.Any())) // if ((allotList == null || !allotList.Any(t => t.States > 0)) && (firstList != null || !firstList.Any()))
return firstList.OrderByDescending(t => t.CreateDate).FirstOrDefault().Path; // return firstList.OrderByDescending(t => t.CreateDate).FirstOrDefault().Path;
else // else
{ // {
type = 1; // type = 1;
var allot = allotList.Where(t => t.Path != null && t.Path != "").OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).First(); // var allot = allotList.Where(t => t.Path != null && t.Path != "").OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).First();
return allot.Path; // return allot.Path;
} // }
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError("获取提取模板文件路径" + ex.ToString()); // logger.LogError("获取提取模板文件路径" + ex.ToString());
type = 0; // type = 0;
return ""; // return "";
} // }
} // }
public string ExtractData(int allotId, string mail, sys_hospital hospital, string firstPath) // public string ExtractData(int allotId, string mail, sys_hospital hospital, string firstPath)
{ // {
logger.LogInformation($"提取绩效数据开始执行绩效数据提取任务{new { allotId, mail, hospital }}"); // logger.LogInformation($"提取绩效数据开始执行绩效数据提取任务{new { allotId, mail, hospital }}");
List<PerSheet> sheetList = new List<PerSheet>(); // List<PerSheet> sheetList = new List<PerSheet>();
string filepath = ""; // string filepath = "";
try // try
{ // {
var allotList = perforPerallotRepository.GetEntities(t => t.HospitalId == hospital.ID); // var allotList = perforPerallotRepository.GetEntities(t => t.HospitalId == hospital.ID);
var configList = perforHospitalconfigRepository.GetEntities(t => t.HospitalId == hospital.ID); // var configList = perforHospitalconfigRepository.GetEntities(t => t.HospitalId == hospital.ID);
var firstList = perforPerfirstRepository.GetEntities(t => t.HospitalId == hospital.ID); // var firstList = perforPerfirstRepository.GetEntities(t => t.HospitalId == hospital.ID);
var scriptList = perforExtractRepository.GetEntities(t => t.HospitalId == hospital.ID); // var scriptList = perforExtractRepository.GetEntities(t => t.HospitalId == hospital.ID);
if (configList == null || !configList.Any()) // if (configList == null || !configList.Any())
{ // {
logger.LogError("提取绩效数据 暂不支持自动提取绩效数据", ""); // logger.LogError("提取绩效数据 暂不支持自动提取绩效数据", "");
throw new PerformanceException($"暂不支持自动提取绩效数据"); // throw new PerformanceException($"暂不支持自动提取绩效数据");
} // }
if (scriptList == null || !scriptList.Any()) // if (scriptList == null || !scriptList.Any())
{ // {
logger.LogError($"提取绩效数据 暂无该医院的配置信息和执行sql,无法进行数据提取", ""); // logger.LogError($"提取绩效数据 暂无该医院的配置信息和执行sql,无法进行数据提取", "");
throw new PerformanceException($"暂无该医院的配置信息和执行sql,无法进行数据提取"); // throw new PerformanceException($"暂无该医院的配置信息和执行sql,无法进行数据提取");
} // }
var hospitalConfig = configList.First(); // var hospitalConfig = configList.First();
string originalPath = ""; // string originalPath = "";
//判断是否是首次 // //判断是否是首次
if ((allotList == null || !allotList.Any(t => t.States > 0)) && (firstList != null || !firstList.Any())) // if ((allotList == null || !allotList.Any(t => t.States > 0)) && (firstList != null || !firstList.Any()))
{ // {
logger.LogInformation($"提取绩效数据 当前绩效为首次提取,从EXCEL中获取信息", ""); // logger.LogInformation($"提取绩效数据 当前绩效为首次提取,从EXCEL中获取信息", "");
//var first = firstList.OrderByDescending(t => t.CreateDate).FirstOrDefault(); // //var first = firstList.OrderByDescending(t => t.CreateDate).FirstOrDefault();
//首次 从excel中获取人员信息,SHEET页信息,列头信息 // //首次 从excel中获取人员信息,SHEET页信息,列头信息
sheetList = GetFileData(firstPath); // sheetList = GetFileData(firstPath);
originalPath = firstPath; // originalPath = firstPath;
} // }
else // else
{ // {
logger.LogInformation($"提取绩效数据 当前绩效为非首次提取,从数据库中获取信息", ""); // logger.LogInformation($"提取绩效数据 当前绩效为非首次提取,从数据库中获取信息", "");
//非首次 从数据库中获取人员信息,SHEET页信息,列头信息 // //非首次 从数据库中获取人员信息,SHEET页信息,列头信息
if (allotList.Any(t => t.Path != null && t.Path != "")) // if (allotList.Any(t => t.Path != null && t.Path != ""))
{ // {
var allot = allotList.Where(t => t.Path != null && t.Path != "").OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).First(); // var allot = allotList.Where(t => t.Path != null && t.Path != "").OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).First();
sheetList = GetRepositoryData(allot.ID); // sheetList = GetRepositoryData(allot.ID);
originalPath = firstPath; // originalPath = firstPath;
} // }
else // else
{ // {
logger.LogError($"提取绩效数据 历史绩效未上传文件", ""); // logger.LogError($"提取绩效数据 历史绩效未上传文件", "");
throw new PerformanceException($"历史绩效未上传文件"); // throw new PerformanceException($"历史绩效未上传文件");
} // }
} // }
logger.LogInformation($"提取绩效数据 基础数据提取完成,", ""); // logger.LogInformation($"提取绩效数据 基础数据提取完成,", "");
var dpath = Path.Combine(environment.ContentRootPath, "Files", $"{hospital.ID}", "autoextract"); // var dpath = Path.Combine(environment.ContentRootPath, "Files", $"{hospital.ID}", "autoextract");
FileHelper.CreateDirectory(dpath); // FileHelper.CreateDirectory(dpath);
string path = Path.Combine(dpath, $"绩效数据{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx"); // string path = Path.Combine(dpath, $"绩效数据{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx");
//根据SHEET页信息,列头信息,创建EXCEL文件 // //根据SHEET页信息,列头信息,创建EXCEL文件
if (WriteExcel(path, originalPath, sheetList, hospitalConfig, hospital.ID, allotList.First(t => t.ID == allotId), out filepath)) // if (WriteExcel(path, originalPath, sheetList, hospitalConfig, hospital.ID, allotList.First(t => t.ID == allotId), out filepath))
{ // {
logger.LogInformation($"提取绩效数据 基础数据提取完成,文件保存成功{filepath}", ""); // logger.LogInformation($"提取绩效数据 基础数据提取完成,文件保存成功{filepath}", "");
var allot = allotList.First(t => t.ID == allotId); // var allot = allotList.First(t => t.ID == allotId);
//allot.ExtractPath = filepath; // //allot.ExtractPath = filepath;
//if (!string.IsNullOrEmpty(filepath)) // //if (!string.IsNullOrEmpty(filepath))
// perforPerallotRepository.Update(allot); // // perforPerallotRepository.Update(allot);
ImportData(allot, configList); // ImportData(allot, configList);
SendEmail(mail, filepath, $"{hospital.HosName}HIS数据提取成功", $"{hospital.HosName}{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}成功提取。"); // SendEmail(mail, filepath, $"{hospital.HosName}HIS数据提取成功", $"{hospital.HosName}在{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}成功提取。");
} // }
} // }
catch (PerformanceException ex) // catch (PerformanceException ex)
{ // {
logger.LogError("提取绩效数据" + ex.ToString()); // logger.LogError("提取绩效数据" + ex.ToString());
SendEmail(mail, "", $"{hospital.HosName}HIS数据提取失败", $"{hospital.HosName}提取数据失败,{ex.Message}!"); // SendEmail(mail, "", $"{hospital.HosName}HIS数据提取失败", $"{hospital.HosName}提取数据失败,{ex.Message}!");
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError("提取绩效数据" + ex.ToString()); // logger.LogError("提取绩效数据" + ex.ToString());
SendEmail(mail, "", $"{hospital.HosName}HIS数据提取失败", $"{hospital.HosName}提取数据过程中出现异常情况,我们将尽快解决问题。给您带来的不便我们深感歉意!"); // SendEmail(mail, "", $"{hospital.HosName}HIS数据提取失败", $"{hospital.HosName}提取数据过程中出现异常情况,我们将尽快解决问题。给您带来的不便我们深感歉意!");
} // }
finally // finally
{ // {
var allot = perforPerallotRepository.GetEntity(t => t.ID == allotId); // var allot = perforPerallotRepository.GetEntity(t => t.ID == allotId);
if (allot != null) // if (allot != null)
{ // {
allot.IsExtracting = null; // allot.IsExtracting = null;
perforPerallotRepository.Update(allot); // perforPerallotRepository.Update(allot);
} // }
} // }
return filepath; // return filepath;
} // }
/// <summary> // /// <summary>
/// 从HIS抽取报表数据 // /// 从HIS抽取报表数据
/// </summary> // /// </summary>
/// <param name="allot"></param> // /// <param name="allot"></param>
/// <param name="configs"></param> // /// <param name="configs"></param>
public void ImportData(per_allot allot, List<sys_hospitalconfig> configs) // public void ImportData(per_allot allot, List<sys_hospitalconfig> configs)
{ // {
Dictionary<string, object> pairs = new Dictionary<string, object> // Dictionary<string, object> pairs = new Dictionary<string, object>
{ // {
{ "@allotid", allot.ID }, // { "@allotid", allot.ID },
{ "@hospitalid", allot.HospitalId }, // { "@hospitalid", allot.HospitalId },
}; // };
var imports = repimportconfigRepository.GetEntities(w => w.ScriptType == 1); // var imports = repimportconfigRepository.GetEntities(w => w.ScriptType == 1);
foreach (var import in imports) // foreach (var import in imports)
{ // {
var conf = configs.FirstOrDefault(w => w.HospitalId == allot.HospitalId && w.Id == import.ConfigId); // var conf = configs.FirstOrDefault(w => w.HospitalId == allot.HospitalId && w.Id == import.ConfigId);
if (conf != null) // if (conf != null)
{ // {
if (import.TimeRange == "1") // if (import.TimeRange == "1")
{ // {
pairs.Add("@year", allot.Year); // pairs.Add("@year", allot.Year);
pairs.Add("@month", allot.Month); // pairs.Add("@month", allot.Month);
} // }
else if (import.TimeRange == "2") // else if (import.TimeRange == "2")
{ // {
pairs.Add("@year", allot.Year - 1); // pairs.Add("@year", allot.Year - 1);
pairs.Add("@month", allot.Month); // pairs.Add("@month", allot.Month);
} // }
else if (import.TimeRange == "3") // else if (import.TimeRange == "3")
{ // {
pairs.Add("@year", allot.Year); // pairs.Add("@year", allot.Year);
pairs.Add("@month", allot.Month - 1); // pairs.Add("@month", allot.Month - 1);
} // }
try // try
{ // {
DatabaseType type = (DatabaseType)conf.DataBaseType; // DatabaseType type = (DatabaseType)conf.DataBaseType;
var connection = ConnectionBuilder.Create(type, conf.DbSource, conf.DbName, conf.DbUser, conf.DbPassword); // var connection = ConnectionBuilder.Create(type, conf.DbSource, conf.DbName, conf.DbUser, conf.DbPassword);
var data = connection.Query(import.ImportScript, new DynamicParameters(pairs), commandTimeout: 60 * 60); // var data = connection.Query(import.ImportScript, new DynamicParameters(pairs), commandTimeout: 60 * 60);
perforPerallotRepository.ImportData(import, pairs, data); // perforPerallotRepository.ImportData(import, pairs, data);
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError(ex.ToString()); // logger.LogError(ex.ToString());
} // }
} // }
} // }
} // }
/// <summary> // /// <summary>
/// 发送邮件 // /// 发送邮件
/// </summary> // /// </summary>
/// <param name="path"></param> // /// <param name="path"></param>
/// <param name="subject"></param> // /// <param name="subject"></param>
/// <param name="body"></param> // /// <param name="body"></param>
private void SendEmail(string mail, string path, string subject, string body) // private void SendEmail(string mail, string path, string subject, string body)
{ // {
var message = new EmailMessage // var message = new EmailMessage
{ // {
To = new List<string> { mail }, // To = new List<string> { mail },
DisplayName = "溯直健康", // DisplayName = "溯直健康",
Subject = subject, // Subject = subject,
Body = body // Body = body
}; // };
if (!string.IsNullOrEmpty(path)) // if (!string.IsNullOrEmpty(path))
message.Attachments = new List<string> { path }; // message.Attachments = new List<string> { path };
emailService.Send(message); // emailService.Send(message);
} // }
/// <summary> // /// <summary>
/// 向EXCEL中写入数据 // /// 向EXCEL中写入数据
/// 人员信息由EXCEL中提供,或从上次绩效中提供 // /// 人员信息由EXCEL中提供,或从上次绩效中提供
/// SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充 // /// SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充
/// 向EXCEL中填充数据,填充时值与列头必须匹配 // /// 向EXCEL中填充数据,填充时值与列头必须匹配
/// </summary> // /// </summary>
/// <param name="newpath"></param> // /// <param name="newpath"></param>
/// <param name="originalPath"></param> // /// <param name="originalPath"></param>
/// <param name="sheetList"></param> // /// <param name="sheetList"></param>
/// <param name="hospitalConfig"></param> // /// <param name="hospitalConfig"></param>
/// <param name="hospitalId"></param> // /// <param name="hospitalId"></param>
private bool WriteExcel(string newpath, string originalPath, List<PerSheet> sheetList, sys_hospitalconfig hospitalConfig, int hospitalId, per_allot allot, out string filepath) // private bool WriteExcel(string newpath, string originalPath, List<PerSheet> sheetList, sys_hospitalconfig hospitalConfig, int hospitalId, per_allot allot, out string filepath)
{ // {
logger.LogInformation($"提取绩效数据 开始向EXCEL中写入数据,", ""); // logger.LogInformation($"提取绩效数据 开始向EXCEL中写入数据,", "");
if (string.IsNullOrEmpty(originalPath)) // if (string.IsNullOrEmpty(originalPath))
{ // {
logger.LogError($"提取绩效数据{originalPath}文件路径无效", ""); // logger.LogError($"提取绩效数据{originalPath}文件路径无效", "");
throw new PerformanceException($"{originalPath}文件路径无效"); // throw new PerformanceException($"{originalPath}文件路径无效");
} // }
var scriptList = perforExtractRepository.GetEntities(t => t.HospitalId == hospitalId && t.IsEnable == 1); // var scriptList = perforExtractRepository.GetEntities(t => t.HospitalId == hospitalId && t.IsEnable == 1);
//根据SHEET页信息,列头信息,创建EXCEL文件 // //根据SHEET页信息,列头信息,创建EXCEL文件
IWorkbook workbook = null; // IWorkbook workbook = null;
FileStream file = null; // FileStream file = null;
try // try
{ // {
workbook = new XSSFWorkbook(originalPath); // workbook = new XSSFWorkbook(originalPath);
foreach (var sheet in sheetList) // foreach (var sheet in sheetList)
{ // {
var importSheet = workbook.GetSheet(sheet.SheetName); // var importSheet = workbook.GetSheet(sheet.SheetName);
if (importSheet == null) continue; // if (importSheet == null) continue;
if (sheet.PerHeader == null) continue; // if (sheet.PerHeader == null) continue;
logger.LogInformation($"提取绩效数据列头信息写入,", ""); // logger.LogInformation($"提取绩效数据列头信息写入,", "");
var maxHeaderRowNumber = sheet.PerHeader.Max(t => t.PointRow); // var maxHeaderRowNumber = sheet.PerHeader.Max(t => t.PointRow);
sheet.PerHeader?.ForEach(t => // sheet.PerHeader?.ForEach(t =>
{ // {
if (t.IsHasChildren) // if (t.IsHasChildren)
{ // {
var maxnum = t.Children.Max(c => c.PointRow); // var maxnum = t.Children.Max(c => c.PointRow);
maxHeaderRowNumber = maxHeaderRowNumber > maxnum ? maxHeaderRowNumber : maxnum; // maxHeaderRowNumber = maxHeaderRowNumber > maxnum ? maxHeaderRowNumber : maxnum;
} // }
}); // });
if (sheet.SheetType == SheetType.Workload) // if (sheet.SheetType == SheetType.Workload)
maxHeaderRowNumber += 1; // maxHeaderRowNumber += 1;
//清空数据行 // //清空数据行
for (int i = maxHeaderRowNumber + 1; i < importSheet.LastRowNum + 1; i++) // for (int i = maxHeaderRowNumber + 1; i < importSheet.LastRowNum + 1; i++)
{ // {
var importRow = importSheet.GetRow(i); // var importRow = importSheet.GetRow(i);
if (importRow != null) // if (importRow != null)
importSheet.RemoveRow(importRow); // importSheet.RemoveRow(importRow);
} // }
//取消合并单元格 // //取消合并单元格
int mergedCount = importSheet.NumMergedRegions; // int mergedCount = importSheet.NumMergedRegions;
for (int i = mergedCount - 1; i >= 0; i--) // for (int i = mergedCount - 1; i >= 0; i--)
{ // {
var temp = importSheet.GetMergedRegion(i); // var temp = importSheet.GetMergedRegion(i);
if (temp.FirstRow > maxHeaderRowNumber) // if (temp.FirstRow > maxHeaderRowNumber)
importSheet.RemoveMergedRegion(i); // importSheet.RemoveMergedRegion(i);
} // }
//填充人员信息 // //填充人员信息
if (SheetType.Employee == sheet.SheetType && sheet.PerData != null && sheet.PerData.Any()) // if (SheetType.Employee == sheet.SheetType && sheet.PerData != null && sheet.PerData.Any())
{ // {
logger.LogInformation($"提取绩效数据填充人员信息,", ""); // logger.LogInformation($"提取绩效数据填充人员信息,", "");
var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataEmployee>(t => (PerDataEmployee)t)); // var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataEmployee>(t => (PerDataEmployee)t));
for (int i = 0; i < dataList.Count; i++) // for (int i = 0; i < dataList.Count; i++)
{ // {
var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1); // var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1);
Dictionary<string, Func<PerDataEmployee, object>> keyValues = new Dictionary<string, Func<PerDataEmployee, object>> // Dictionary<string, Func<PerDataEmployee, object>> keyValues = new Dictionary<string, Func<PerDataEmployee, object>>
{ // {
{ "核算单元", (t) => t.AccountingUnit }, // { "核算单元", (t) => t.AccountingUnit },
{ "医生姓名", (t) => t.DoctorName }, // { "医生姓名", (t) => t.DoctorName },
{ "职称", (t) => t.JobTitle }, // { "职称", (t) => t.JobTitle },
{ "绩效基数核算参考对象", (t) => t.FitPeople }, // { "绩效基数核算参考对象", (t) => t.FitPeople },
{ "绩效基数核算系数", (t) => t.FitPeopleRatio }, // { "绩效基数核算系数", (t) => t.FitPeopleRatio },
{ "核算单元分类", (t) => t.AccountType }, // { "核算单元分类", (t) => t.AccountType },
{ "岗位系数", (t) => t.PostCoefficient }, // { "岗位系数", (t) => t.PostCoefficient },
{ "参加工作时间", (t) => t.WorkTime }, // { "参加工作时间", (t) => t.WorkTime },
{ "考核得分率", (t) => t.ScoreAverageRate }, // { "考核得分率", (t) => t.ScoreAverageRate },
{ "出勤率", (t) => t.Attendance }, // { "出勤率", (t) => t.Attendance },
//{ "核算单元医生数", (t) => t.PeopleNumber }, // //{ "核算单元医生数", (t) => t.PeopleNumber },
//{ "工作量绩效", (t) => t.Workload }, // //{ "工作量绩效", (t) => t.Workload },
{ "其他绩效", (t) => t.OthePerfor }, // { "其他绩效", (t) => t.OthePerfor },
{ "医院奖罚", (t) => t.Punishment }, // { "医院奖罚", (t) => t.Punishment },
{ "调节系数", (t) => t.Adjust }, // { "调节系数", (t) => t.Adjust },
//{ "发放系数", (t) => t.Grant }, // //{ "发放系数", (t) => t.Grant },
}; // };
foreach (var item in keyValues.Keys) // foreach (var item in keyValues.Keys)
{ // {
var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == item); // var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == item);
if (headInfo != null) // if (headInfo != null)
{ // {
var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString(); // var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString();
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(value)); // importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(value));
} // }
} // }
} // }
} // }
//临床科室医护绩效测算表 // //临床科室医护绩效测算表
else if (SheetType.AccountBasic == sheet.SheetType && sheet.PerData != null && sheet.PerData.Any()) // else if (SheetType.AccountBasic == sheet.SheetType && sheet.PerData != null && sheet.PerData.Any())
{ // {
logger.LogInformation($"提取绩效数据 填充临床科室医护绩效测算表,", ""); // logger.LogInformation($"提取绩效数据 填充临床科室医护绩效测算表,", "");
var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataAccountBaisc>(t => (PerDataAccountBaisc)t)); // var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataAccountBaisc>(t => (PerDataAccountBaisc)t));
var children = new List<PerHeader>(); // var children = new List<PerHeader>();
foreach (var item in sheet.PerHeader) // foreach (var item in sheet.PerHeader)
{ // {
var childItem = item.Children; // var childItem = item.Children;
if (childItem != null) // if (childItem != null)
{ // {
childItem.ForEach(t => t.CellValue = item.CellValue + t.CellValue); // childItem.ForEach(t => t.CellValue = item.CellValue + t.CellValue);
children = children.Union(childItem).ToList(); // children = children.Union(childItem).ToList();
} // }
} // }
for (int i = 0; i < dataList.Count; i++) // for (int i = 0; i < dataList.Count; i++)
{ // {
var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1); // var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1);
Dictionary<string, Func<PerDataAccountBaisc, object>> keyValues = new Dictionary<string, Func<PerDataAccountBaisc, object>> // Dictionary<string, Func<PerDataAccountBaisc, object>> keyValues = new Dictionary<string, Func<PerDataAccountBaisc, object>>
{ // {
{ "核算单元类型", (t) => t.UnitType }, // { "核算单元类型", (t) => t.UnitType },
{ "核算单元", (t) => t.AccountingUnit }, // { "核算单元", (t) => t.AccountingUnit },
{ "科室名称", (t) => t.Department }, // { "科室名称", (t) => t.Department },
{ "医生组核算单元医生数量", (t) => t.Number }, // { "医生组核算单元医生数量", (t) => t.Number },
{ "医生组基础系数", (t) => t.BasicFactor }, // { "医生组基础系数", (t) => t.BasicFactor },
{ "医生组倾斜系数", (t) => t.SlopeFactor }, // { "医生组倾斜系数", (t) => t.SlopeFactor },
{ "医生组其他绩效1", (t) => t.OtherPerfor1 }, // { "医生组其他绩效1", (t) => t.OtherPerfor1 },
{ "医生组考核得分率", (t) => t.ScoringAverage }, // { "医生组考核得分率", (t) => t.ScoringAverage },
{ "医生组医院奖罚", (t) => t.Extra }, // { "医生组医院奖罚", (t) => t.Extra },
{ "医生组其他绩效2", (t) => t.OtherPerfor2 }, // { "医生组其他绩效2", (t) => t.OtherPerfor2 },
{ "医生组调节系数", (t) => t.AdjustFactor }, // { "医生组调节系数", (t) => t.AdjustFactor },
}; // };
foreach (var item in keyValues.Keys) // foreach (var item in keyValues.Keys)
{ // {
var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == item) // var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == item)
?? children?.FirstOrDefault(t => t.CellValue == item); // ?? children?.FirstOrDefault(t => t.CellValue == item);
if (headInfo != null) // if (headInfo != null)
{ // {
var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString(); // var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString();
if (Regex.Match(value.Trim(), @"(0*.0*)|0").ToString() != value.Trim()) // if (Regex.Match(value.Trim(), @"(0*.0*)|0").ToString() != value.Trim())
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(value)); // importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(value));
} // }
} // }
} // }
} // }
//SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充 // //SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充
else if (scriptList.Any(t => sheet.SheetName.Contains(t.SheetName))) // else if (scriptList.Any(t => sheet.SheetName.Contains(t.SheetName)))
{ // {
logger.LogInformation($"提取绩效数据 执行SQL脚本获取数据,", ""); // logger.LogInformation($"提取绩效数据 执行SQL脚本获取数据,", "");
var script = scriptList.First(t => sheet.SheetName.Contains(t.SheetName)); // var script = scriptList.First(t => sheet.SheetName.Contains(t.SheetName));
if (!string.IsNullOrEmpty(script.ExecuteScript)) // if (!string.IsNullOrEmpty(script.ExecuteScript))
{ // {
script.ExecuteScript = ReplaceParameter(script.ExecuteScript, allot); // script.ExecuteScript = ReplaceParameter(script.ExecuteScript, allot);
logger.LogInformation($"提取绩效数据 SQL脚本{script.ExecuteScript},", ""); // logger.LogInformation($"提取绩效数据 SQL脚本{script.ExecuteScript},", "");
var children = new List<PerHeader>(); // var children = new List<PerHeader>();
foreach (var item in sheet.PerHeader?.Select(t => t.Children)) // foreach (var item in sheet.PerHeader?.Select(t => t.Children))
{ // {
if (item != null) // if (item != null)
children = children.Union(item).ToList(); // children = children.Union(item).ToList();
} // }
var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, hospitalConfig.DbSource, hospitalConfig.DbName, hospitalConfig.DbUser, hospitalConfig.DbPassword); // var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, hospitalConfig.DbSource, hospitalConfig.DbName, hospitalConfig.DbUser, hospitalConfig.DbPassword);
var dataList = perforExtractRepository.ExecuteScript(connection, script.ExecuteScript, null); // var dataList = perforExtractRepository.ExecuteScript(connection, script.ExecuteScript, null);
logger.LogInformation($"提取绩效数据 写入SQL脚本执行结果", ""); // logger.LogInformation($"提取绩效数据 写入SQL脚本执行结果", "");
//用于查询核算单元 // //用于查询核算单元
var deptList = dataList.Where(t => t.ColumnName == "科室名称").Select(t => t.Value.ToString()).Distinct().ToList(); // var deptList = dataList.Where(t => t.ColumnName == "科室名称").Select(t => t.Value.ToString()).Distinct().ToList();
var imdata = perforImdataRepository.GetAccountingUnit(hospitalId, (int)sheet.SheetType, deptList); // var imdata = perforImdataRepository.GetAccountingUnit(hospitalId, (int)sheet.SheetType, deptList);
//创建数据行 // //创建数据行
foreach (var pointRow in dataList.Select(t => t.RowNumber).Distinct().OrderBy(t => t)) // foreach (var pointRow in dataList.Select(t => t.RowNumber).Distinct().OrderBy(t => t))
{ // {
var importRow = importSheet.CreateRow(maxHeaderRowNumber + pointRow + 1); // var importRow = importSheet.CreateRow(maxHeaderRowNumber + pointRow + 1);
//写入单元格 // //写入单元格
foreach (var data in dataList.Where(t => t.RowNumber == pointRow)) // foreach (var data in dataList.Where(t => t.RowNumber == pointRow))
{ // {
var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == data.ColumnName) // var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == data.ColumnName)
?? children?.FirstOrDefault(t => t.CellValue == data.ColumnName); // ?? children?.FirstOrDefault(t => t.CellValue == data.ColumnName);
if (headInfo != null) // if (headInfo != null)
{ // {
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(data.Value.ToString())); // importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(data.Value.ToString()));
} // }
if (data.ColumnName == "科室名称") // if (data.ColumnName == "科室名称")
{ // {
//补充核算单元 // //补充核算单元
if (sheet.SheetType == SheetType.Income) // if (sheet.SheetType == SheetType.Income)
{ // {
var doctor = imdata.FirstOrDefault(t => t.UnitType == 1 && t.Department == data.Value.ToString()); // var doctor = imdata.FirstOrDefault(t => t.UnitType == 1 && t.Department == data.Value.ToString());
if (doctor != null) // if (doctor != null)
importRow.CreateCell(0).SetCellValue(doctor.AccountingUnit); // importRow.CreateCell(0).SetCellValue(doctor.AccountingUnit);
var nurse = imdata.FirstOrDefault(t => t.UnitType == 2 && t.Department == data.Value.ToString()); // var nurse = imdata.FirstOrDefault(t => t.UnitType == 2 && t.Department == data.Value.ToString());
if (nurse != null) // if (nurse != null)
importRow.CreateCell(1).SetCellValue(nurse.AccountingUnit); // importRow.CreateCell(1).SetCellValue(nurse.AccountingUnit);
} // }
else if (sheet.SheetType == SheetType.Workload) // else if (sheet.SheetType == SheetType.Workload)
{ // {
if (sheet.SheetName.Contains("医生")) // if (sheet.SheetName.Contains("医生"))
{ // {
var doctor = imdata.FirstOrDefault(t => t.UnitType == 1 && t.Department == data.Value.ToString()); // var doctor = imdata.FirstOrDefault(t => t.UnitType == 1 && t.Department == data.Value.ToString());
if (doctor != null) // if (doctor != null)
importRow.CreateCell(0).SetCellValue(doctor.AccountingUnit); // importRow.CreateCell(0).SetCellValue(doctor.AccountingUnit);
} // }
else // else
{ // {
var nurse = imdata.FirstOrDefault(t => t.UnitType == 2 && t.Department == data.Value.ToString()); // var nurse = imdata.FirstOrDefault(t => t.UnitType == 2 && t.Department == data.Value.ToString());
if (nurse != null) // if (nurse != null)
importRow.CreateCell(0).SetCellValue(nurse.AccountingUnit); // importRow.CreateCell(0).SetCellValue(nurse.AccountingUnit);
} // }
} // }
} // }
} // }
} // }
} // }
} // }
} // }
logger.LogInformation($"提取绩效数据 数据写入完成,开始保存文件{newpath}", ""); // logger.LogInformation($"提取绩效数据 数据写入完成,开始保存文件{newpath}", "");
file = new FileStream(newpath, FileMode.Create); // file = new FileStream(newpath, FileMode.Create);
workbook.Write(file); // workbook.Write(file);
filepath = newpath; // filepath = newpath;
return true; // return true;
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
logger.LogError($"提取绩效数据 数据写入出现异常{ex.ToString()}"); // logger.LogError($"提取绩效数据 数据写入出现异常{ex.ToString()}");
throw ex; // throw ex;
} // }
finally // finally
{ // {
workbook.Close(); // workbook.Close();
file.Close(); // file.Close();
file.Dispose(); // file.Dispose();
GC.Collect(); // GC.Collect();
} // }
} // }
/// <summary> // /// <summary>
/// 替换SQL参数 // /// 替换SQL参数
/// </summary> // /// </summary>
/// <param name="executeScript"></param> // /// <param name="executeScript"></param>
/// <param name="allot"></param> // /// <param name="allot"></param>
/// <returns></returns> // /// <returns></returns>
private string ReplaceParameter(string executeScript, per_allot allot) // private string ReplaceParameter(string executeScript, per_allot allot)
{ // {
var basicTime = new DateTime(allot.Year, allot.Month, 1); // var basicTime = new DateTime(allot.Year, allot.Month, 1);
string beginTime = basicTime.ToString("yyyy-MM-dd HH:mm:ss"); // string beginTime = basicTime.ToString("yyyy-MM-dd HH:mm:ss");
string endTime = basicTime.AddMonths(1).AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss"); // string endTime = basicTime.AddMonths(1).AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss");
executeScript = Regex.Replace(executeScript, "@beginTime", $"'{beginTime}'", RegexOptions.IgnoreCase); // executeScript = Regex.Replace(executeScript, "@beginTime", $"'{beginTime}'", RegexOptions.IgnoreCase);
executeScript = Regex.Replace(executeScript, "@endTime", $"'{endTime}'", RegexOptions.IgnoreCase); // executeScript = Regex.Replace(executeScript, "@endTime", $"'{endTime}'", RegexOptions.IgnoreCase);
return executeScript; // return executeScript;
} // }
/// <summary> // /// <summary>
/// 从数据库中获取sheet及列头 // /// 从数据库中获取sheet及列头
/// </summary> // /// </summary>
/// <param name="allotId"></param> // /// <param name="allotId"></param>
/// <returns></returns> // /// <returns></returns>
private List<PerSheet> GetRepositoryData(int allotId) // private List<PerSheet> GetRepositoryData(int allotId)
{ // {
List<PerSheet> sheetList = new List<PerSheet>(); // List<PerSheet> sheetList = new List<PerSheet>();
//获取最近一次绩效 // //获取最近一次绩效
var perSheetList = perforPersheetRepository.GetEntities(t => t.AllotID == allotId); // var perSheetList = perforPersheetRepository.GetEntities(t => t.AllotID == allotId);
if (perSheetList == null || perSheetList.Count == 0) // if (perSheetList == null || perSheetList.Count == 0)
return sheetList; // return sheetList;
foreach (var sheet in perSheetList) // foreach (var sheet in perSheetList)
{ // {
PerSheet perSheet = new PerSheet() // PerSheet perSheet = new PerSheet()
{ // {
SheetName = sheet.SheetName, // SheetName = sheet.SheetName,
SheetType = (SheetType)sheet.SheetType, // SheetType = (SheetType)sheet.SheetType,
ModuleName = EnumHelper.GetDescription((SheetType)sheet.SheetType), // ModuleName = EnumHelper.GetDescription((SheetType)sheet.SheetType),
}; // };
var perHeadList = perforImheaderRepository.GetEntities(t => t.SheetID == sheet.ID); // var perHeadList = perforImheaderRepository.GetEntities(t => t.SheetID == sheet.ID);
perSheet.PerHeader = AutoMapper.Mapper.Map<List<PerHeader>>(perHeadList); // perSheet.PerHeader = AutoMapper.Mapper.Map<List<PerHeader>>(perHeadList);
if (SheetType.Employee == (SheetType)sheet.SheetType) // if (SheetType.Employee == (SheetType)sheet.SheetType)
{ // {
perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType); // perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType);
var employeeList = perforImemployeeRepository.GetEntities(t => t.AllotID == sheet.AllotID); // var employeeList = perforImemployeeRepository.GetEntities(t => t.AllotID == sheet.AllotID);
var perEmployeeList = AutoMapper.Mapper.Map<List<PerDataEmployee>>(employeeList); // var perEmployeeList = AutoMapper.Mapper.Map<List<PerDataEmployee>>(employeeList);
perSheet.PerData = perEmployeeList?.ConvertAll(new Converter<PerDataEmployee, IPerData>(m => m)); // perSheet.PerData = perEmployeeList?.ConvertAll(new Converter<PerDataEmployee, IPerData>(m => m));
} // }
else if (SheetType.SpecialUnit == (SheetType)sheet.SheetType) // else if (SheetType.SpecialUnit == (SheetType)sheet.SheetType)
{ // {
perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType); // perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType);
} // }
else if (SheetType.AccountBasic == (SheetType)sheet.SheetType) // else if (SheetType.AccountBasic == (SheetType)sheet.SheetType)
{ // {
perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType); // perSheet.PerHeader = GetHeader((SheetType)sheet.SheetType);
var basicList = perforImaccountbasicRepository.GetEntities(t => t.AllotID == sheet.AllotID); // var basicList = perforImaccountbasicRepository.GetEntities(t => t.AllotID == sheet.AllotID);
var perBasicList = AutoMapper.Mapper.Map<List<PerDataAccountBaisc>>(basicList); // var perBasicList = AutoMapper.Mapper.Map<List<PerDataAccountBaisc>>(basicList);
perSheet.PerData = perBasicList?.ConvertAll(new Converter<PerDataAccountBaisc, IPerData>(m => m)); // perSheet.PerData = perBasicList?.ConvertAll(new Converter<PerDataAccountBaisc, IPerData>(m => m));
} // }
sheetList.Add(perSheet); // sheetList.Add(perSheet);
} // }
return sheetList; // return sheetList;
} // }
/// <summary> // /// <summary>
/// 获取sheet及列头 // /// 获取sheet及列头
/// </summary> // /// </summary>
/// <param name="path"></param> // /// <param name="path"></param>
/// <returns></returns> // /// <returns></returns>
private List<PerSheet> GetFileData(string path) // private List<PerSheet> GetFileData(string path)
{ // {
if (!FileHelper.IsExistFile(path)) // if (!FileHelper.IsExistFile(path))
throw new PerformanceException($"{path}文件不存在"); // throw new PerformanceException($"{path}文件不存在");
List<PerSheet> sheetList = new List<PerSheet>(); // List<PerSheet> sheetList = new List<PerSheet>();
FileStream fs = null; // FileStream fs = null;
IWorkbook workbook = null; // IWorkbook workbook = null;
try // try
{ // {
fs = new FileStream(path, FileMode.Open, FileAccess.Read); // fs = new FileStream(path, FileMode.Open, FileAccess.Read);
var version = FileHelper.GetExtension(path) == ".xlsx" ? ExcelVersion.xlsx : ExcelVersion.xls; // var version = FileHelper.GetExtension(path) == ".xlsx" ? ExcelVersion.xlsx : ExcelVersion.xls;
workbook = (version == ExcelVersion.xlsx) ? (IWorkbook)(new XSSFWorkbook(fs)) : (IWorkbook)(new HSSFWorkbook(fs)); // workbook = (version == ExcelVersion.xlsx) ? (IWorkbook)(new XSSFWorkbook(fs)) : (IWorkbook)(new HSSFWorkbook(fs));
for (int i = 0; i < workbook.NumberOfSheets; i++) // for (int i = 0; i < workbook.NumberOfSheets; i++)
{ // {
var sheet = workbook.GetSheetAt(i); // var sheet = workbook.GetSheetAt(i);
var sheetType = perSheetService.GetSheetType(sheet.SheetName); // var sheetType = perSheetService.GetSheetType(sheet.SheetName);
if (SheetType.Unidentifiable != sheetType) // if (SheetType.Unidentifiable != sheetType)
{ // {
var sheetRead = PerSheetDataFactory.GetDataRead(sheetType); // var sheetRead = PerSheetDataFactory.GetDataRead(sheetType);
var perHeader = perHeaderService.GetPerHeader(sheet, sheetRead.Point); // var perHeader = perHeaderService.GetPerHeader(sheet, sheetRead.Point);
PerSheet perSheet = new PerSheet() // PerSheet perSheet = new PerSheet()
{ // {
SheetName = sheet.SheetName, // SheetName = sheet.SheetName,
SheetType = sheetType, // SheetType = sheetType,
ModuleName = EnumHelper.GetDescription(sheetType), // ModuleName = EnumHelper.GetDescription(sheetType),
PerHeader = perHeader // PerHeader = perHeader
}; // };
if (SheetType.Employee == sheetType) // if (SheetType.Employee == sheetType)
{ // {
var headerReverse = perHeaderService.GetPerHeaderReverse(perHeader); // var headerReverse = perHeaderService.GetPerHeaderReverse(perHeader);
perSheet.PerData = sheetRead.ReadData(sheet, headerReverse); // perSheet.PerData = sheetRead.ReadData(sheet, headerReverse);
} // }
if (SheetType.AccountBasic == sheetType) // if (SheetType.AccountBasic == sheetType)
{ // {
var headerReverse = perHeaderService.GetPerHeaderReverse(perHeader); // var headerReverse = perHeaderService.GetPerHeaderReverse(perHeader);
perSheet.PerData = sheetRead.ReadData(sheet, headerReverse); // perSheet.PerData = sheetRead.ReadData(sheet, headerReverse);
} // }
sheetList.Add(perSheet); // sheetList.Add(perSheet);
} // }
} // }
} // }
catch (Exception ex) // catch (Exception ex)
{ // {
throw ex; // throw ex;
} // }
finally // finally
{ // {
workbook.Close(); // workbook.Close();
fs.Close(); // fs.Close();
fs.Dispose(); // fs.Dispose();
} // }
return sheetList; // return sheetList;
} // }
#region 校验数据格式 // #region 校验数据格式
/// <summary> // /// <summary>
/// 校验数据格式,并转换 // /// 校验数据格式,并转换
/// </summary> // /// </summary>
/// <param name="obj"></param> // /// <param name="obj"></param>
/// <returns></returns> // /// <returns></returns>
public dynamic Verify(string obj) // public dynamic Verify(string obj)
{ // {
try // try
{ // {
//判断值是否为double类型 // //判断值是否为double类型
if (!string.IsNullOrEmpty(obj) && Regex.Match(obj.Trim(), @"([1-9]\d*\.?\d*)|(0\.\d*[1-9]?\d*)|0").ToString() == obj.Trim()) // if (!string.IsNullOrEmpty(obj) && Regex.Match(obj.Trim(), @"([1-9]\d*\.?\d*)|(0\.\d*[1-9]?\d*)|0").ToString() == obj.Trim())
return ConvertHelper.To<double>(obj); // return ConvertHelper.To<double>(obj);
//判断值是否为日期格式 // //判断值是否为日期格式
else if (!string.IsNullOrEmpty(obj) && Regex.Match(obj.Trim(), @"(19|20)\d{2}(-|/)[01]?\d(-|/)[0123]?\d( [012]?\d\:\d{2}\:\d{2})?").ToString() == obj.Trim()) // else if (!string.IsNullOrEmpty(obj) && Regex.Match(obj.Trim(), @"(19|20)\d{2}(-|/)[01]?\d(-|/)[0123]?\d( [012]?\d\:\d{2}\:\d{2})?").ToString() == obj.Trim())
return ConvertHelper.To<DateTime>(obj).ToString("yyyy/M/d"); // return ConvertHelper.To<DateTime>(obj).ToString("yyyy/M/d");
else // else
return obj; // return obj;
} // }
catch // catch
{ // {
return obj; // return obj;
} // }
} // }
#endregion // #endregion
#region 获取列头 // #region 获取列头
/// <summary> // /// <summary>
/// 获取列头 // /// 获取列头
/// </summary> // /// </summary>
/// <param name="sheetType">sheet页类型</param> // /// <param name="sheetType">sheet页类型</param>
/// <returns></returns> // /// <returns></returns>
public List<PerHeader> GetHeader(SheetType sheetType) // public List<PerHeader> GetHeader(SheetType sheetType)
{ // {
List<PerHeader> header = new List<PerHeader>(); // List<PerHeader> header = new List<PerHeader>();
if (SheetType.Employee == sheetType) // if (SheetType.Employee == sheetType)
{ // {
header = new List<PerHeader> // header = new List<PerHeader>
{ // {
new PerHeader { CellValue = "核算单元分类", //列名 // new PerHeader { CellValue = "核算单元分类", //列名
MergeCell = 1, //单元格占据的列数 // MergeCell = 1, //单元格占据的列数
MergeRow = 1, //单元格占据的行数 // MergeRow = 1, //单元格占据的行数
PointCell = 0, //单元格列 // PointCell = 0, //单元格列
PointRow = 1 //单元格行 // PointRow = 1 //单元格行
}, // },
new PerHeader { CellValue = "核算单元", MergeCell = 1, MergeRow = 1, PointCell = 1, PointRow = 1 }, // new PerHeader { CellValue = "核算单元", MergeCell = 1, MergeRow = 1, PointCell = 1, PointRow = 1 },
new PerHeader { CellValue = "绩效基数核算参考对象", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 1 }, // new PerHeader { CellValue = "绩效基数核算参考对象", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 1 },
new PerHeader { CellValue = "绩效基数核算系数", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 1 }, // new PerHeader { CellValue = "绩效基数核算系数", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 1 },
new PerHeader { CellValue = "医生姓名", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 1 }, // new PerHeader { CellValue = "医生姓名", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 1 },
new PerHeader { CellValue = "职称", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 1 }, // new PerHeader { CellValue = "职称", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 1 },
new PerHeader { CellValue = "岗位系数", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 1 }, // new PerHeader { CellValue = "岗位系数", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 1 },
new PerHeader { CellValue = "参加工作时间", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 1 }, // new PerHeader { CellValue = "参加工作时间", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 1 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 1 }, // new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 1 },
new PerHeader { CellValue = "出勤率", MergeCell = 1, MergeRow = 1, PointCell = 9, PointRow = 1 }, // new PerHeader { CellValue = "出勤率", MergeCell = 1, MergeRow = 1, PointCell = 9, PointRow = 1 },
new PerHeader { CellValue = "核算单元医生数", MergeCell = 1, MergeRow = 1, PointCell = 10, PointRow = 1 }, // new PerHeader { CellValue = "核算单元医生数", MergeCell = 1, MergeRow = 1, PointCell = 10, PointRow = 1 },
new PerHeader { CellValue = "工作量绩效", MergeCell = 1, MergeRow = 1, PointCell = 11, PointRow = 1 }, // new PerHeader { CellValue = "工作量绩效", MergeCell = 1, MergeRow = 1, PointCell = 11, PointRow = 1 },
new PerHeader { CellValue = "其他绩效", MergeCell = 1, MergeRow = 1, PointCell = 12, PointRow = 1 }, // new PerHeader { CellValue = "其他绩效", MergeCell = 1, MergeRow = 1, PointCell = 12, PointRow = 1 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 13, PointRow = 1 }, // new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 13, PointRow = 1 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 14, PointRow = 1 }, // new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 14, PointRow = 1 },
new PerHeader { CellValue = "发放系数", MergeCell = 1, MergeRow = 1, PointCell = 15, PointRow = 1 }, // new PerHeader { CellValue = "发放系数", MergeCell = 1, MergeRow = 1, PointCell = 15, PointRow = 1 },
}; // };
} // }
else if (SheetType.AccountBasic == sheetType) // else if (SheetType.AccountBasic == sheetType)
{ // {
header = new List<PerHeader> // header = new List<PerHeader>
{ // {
new PerHeader { CellValue = "核算单元(医生组)", MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 1 }, // new PerHeader { CellValue = "核算单元(医生组)", MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 1 },
new PerHeader { CellValue = "核算单元(护理组)", MergeCell = 1, MergeRow = 2, PointCell = 1, PointRow = 1 }, // new PerHeader { CellValue = "核算单元(护理组)", MergeCell = 1, MergeRow = 2, PointCell = 1, PointRow = 1 },
new PerHeader { CellValue = "医生组", MergeCell = 8, MergeRow = 1, PointCell = 2, PointRow = 1, // new PerHeader { CellValue = "医生组", MergeCell = 8, MergeRow = 1, PointCell = 2, PointRow = 1,
Children = new List<PerHeader>{ // Children = new List<PerHeader>{
new PerHeader { CellValue = "核算单元医生数量", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 2 }, // new PerHeader { CellValue = "核算单元医生数量", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 2 },
new PerHeader { CellValue = "基础系数", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 2 }, // new PerHeader { CellValue = "基础系数", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 2 },
new PerHeader { CellValue = "倾斜系数", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 2 }, // new PerHeader { CellValue = "倾斜系数", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 2 },
new PerHeader { CellValue = "其他绩效1", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 2 }, // new PerHeader { CellValue = "其他绩效1", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 2 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 2 }, // new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 2 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 2 }, // new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 2 },
new PerHeader { CellValue = "其他绩效2", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 2 }, // new PerHeader { CellValue = "其他绩效2", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 2 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 9, PointRow = 2 }, // new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 9, PointRow = 2 },
} // }
}, // },
new PerHeader { CellValue = "护理组", MergeCell = 8, MergeRow = 1, PointCell = 3, PointRow = 1, // new PerHeader { CellValue = "护理组", MergeCell = 8, MergeRow = 1, PointCell = 3, PointRow = 1,
Children = new List<PerHeader>{ // Children = new List<PerHeader>{
new PerHeader { CellValue = "核算单元护士数量", MergeCell = 1, MergeRow = 1, PointCell = 10, PointRow = 2 }, // new PerHeader { CellValue = "核算单元护士数量", MergeCell = 1, MergeRow = 1, PointCell = 10, PointRow = 2 },
new PerHeader { CellValue = "基础系数", MergeCell = 1, MergeRow = 1, PointCell = 11, PointRow = 2 }, // new PerHeader { CellValue = "基础系数", MergeCell = 1, MergeRow = 1, PointCell = 11, PointRow = 2 },
new PerHeader { CellValue = "倾斜系数", MergeCell = 1, MergeRow = 1, PointCell = 12, PointRow = 2 }, // new PerHeader { CellValue = "倾斜系数", MergeCell = 1, MergeRow = 1, PointCell = 12, PointRow = 2 },
new PerHeader { CellValue = "其他绩效1", MergeCell = 1, MergeRow = 1, PointCell = 13, PointRow = 2 }, // new PerHeader { CellValue = "其他绩效1", MergeCell = 1, MergeRow = 1, PointCell = 13, PointRow = 2 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 14, PointRow = 2 }, // new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 14, PointRow = 2 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 15, PointRow = 2 }, // new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 15, PointRow = 2 },
new PerHeader { CellValue = "其他绩效2", MergeCell = 1, MergeRow = 1, PointCell = 16, PointRow = 2 }, // new PerHeader { CellValue = "其他绩效2", MergeCell = 1, MergeRow = 1, PointCell = 16, PointRow = 2 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 17, PointRow = 2 }, // new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 17, PointRow = 2 },
} // }
}, // },
}; // };
} // }
else if (SheetType.SpecialUnit == sheetType) // else if (SheetType.SpecialUnit == sheetType)
{ // {
header = new List<PerHeader> // header = new List<PerHeader>
{ // {
new PerHeader { CellValue = "科室", MergeCell = 1, MergeRow = 1, PointCell = 0, PointRow = 1 }, // new PerHeader { CellValue = "科室", MergeCell = 1, MergeRow = 1, PointCell = 0, PointRow = 1 },
new PerHeader { CellValue = "人数", MergeCell = 1, MergeRow = 1, PointCell = 1, PointRow = 1 }, // new PerHeader { CellValue = "人数", MergeCell = 1, MergeRow = 1, PointCell = 1, PointRow = 1 },
new PerHeader { CellValue = "量化指标", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 1 }, // new PerHeader { CellValue = "量化指标", MergeCell = 1, MergeRow = 1, PointCell = 2, PointRow = 1 },
new PerHeader { CellValue = "数量", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 1 }, // new PerHeader { CellValue = "数量", MergeCell = 1, MergeRow = 1, PointCell = 3, PointRow = 1 },
new PerHeader { CellValue = "量化指标绩效分值", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 1 }, // new PerHeader { CellValue = "量化指标绩效分值", MergeCell = 1, MergeRow = 1, PointCell = 4, PointRow = 1 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 1 }, // new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 5, PointRow = 1 },
new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 1 }, // new PerHeader { CellValue = "医院奖罚", MergeCell = 1, MergeRow = 1, PointCell = 6, PointRow = 1 },
new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 1 }, // new PerHeader { CellValue = "考核得分率", MergeCell = 1, MergeRow = 1, PointCell = 7, PointRow = 1 },
new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 1 }, // new PerHeader { CellValue = "调节系数", MergeCell = 1, MergeRow = 1, PointCell = 8, PointRow = 1 },
}; // };
} // }
return header; // return header;
} // }
#endregion // #endregion
} // }
} //}
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