绩效数据调整

parent 2e468456
...@@ -115,8 +115,8 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo ...@@ -115,8 +115,8 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo
return new ApiResponse(ResponseType.Fail, "医院无效"); return new ApiResponse(ResponseType.Fail, "医院无效");
var user = claim.At(request.Token); var user = claim.At(request.Token);
//extractService.ExtractData(request.ID, user.Mail, hospital); extractService.ExtractData(request.ID, user.Mail, hospital);
BackgroundJob.Enqueue(() => extractService.ExtractData(request.ID, user.Mail, hospital)); //BackgroundJob.Enqueue(() => extractService.ExtractData(request.ID, user.Mail, hospital));
return new ApiResponse(ResponseType.OK, "HIS绩效数据提取任务正在执行,稍后我们将以邮件的通知您!"); return new ApiResponse(ResponseType.OK, "HIS绩效数据提取任务正在执行,稍后我们将以邮件的通知您!");
} }
} }
......
...@@ -22,7 +22,7 @@ public List<CustomExecute> ExecuteScript(IDbConnection connection, string sql, s ...@@ -22,7 +22,7 @@ public List<CustomExecute> ExecuteScript(IDbConnection connection, string sql, s
List<CustomExecute> result = new List<CustomExecute>(); List<CustomExecute> result = new List<CustomExecute>();
using (connection) using (connection)
{ {
var dataReader = connection.ExecuteReader(sql, param); var dataReader = connection.ExecuteReader(sql, param, commandTimeout: 1000 * 3600 * 24);
int row = 0; int row = 0;
while (dataReader.Read()) while (dataReader.Read())
{ {
......
...@@ -138,16 +138,16 @@ public void ExtractData(int allotId, string mail, sys_hospital hospital) ...@@ -138,16 +138,16 @@ public void ExtractData(int allotId, string mail, sys_hospital hospital)
/// <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>
...@@ -167,43 +167,45 @@ private bool WriteExcel(string newpath, string originalPath, List<PerSheet> shee ...@@ -167,43 +167,45 @@ private bool WriteExcel(string newpath, string originalPath, List<PerSheet> shee
throw new PerformanceException($"{originalPath}文件路径无效"); throw new PerformanceException($"{originalPath}文件路径无效");
var scriptList = perforExtractRepository.GetEntities(t => t.HospitalId == hospitalId); var scriptList = perforExtractRepository.GetEntities(t => t.HospitalId == hospitalId);
var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, hospitalConfig.DbSource, hospitalConfig.DbName, hospitalConfig.DbUser, hospitalConfig.DbPassword);
//根据SHEET页信息,列头信息,创建EXCEL文件 //根据SHEET页信息,列头信息,创建EXCEL文件
IWorkbook workbook = new XSSFWorkbook(originalPath); IWorkbook workbook = null;
foreach (var sheet in sheetList) try
{ {
var importSheet = workbook.GetSheet(sheet.SheetName); workbook = new XSSFWorkbook(originalPath);
if (importSheet == null) continue; foreach (var sheet in sheetList)
if (sheet.PerHeader == null) continue;
var maxHeaderRowNumber = sheet.PerHeader.Max(t => t.PointRow);
sheet.PerHeader?.ForEach(t =>
{ {
if (t.IsHasChildren) var importSheet = workbook.GetSheet(sheet.SheetName);
if (importSheet == null) continue;
if (sheet.PerHeader == null) continue;
var maxHeaderRowNumber = sheet.PerHeader.Max(t => t.PointRow);
sheet.PerHeader?.ForEach(t =>
{ {
var maxnum = t.Children.Max(c => c.PointRow); if (t.IsHasChildren)
maxHeaderRowNumber = maxHeaderRowNumber > maxnum ? maxHeaderRowNumber : maxnum; {
var maxnum = t.Children.Max(c => c.PointRow);
maxHeaderRowNumber = maxHeaderRowNumber > maxnum ? maxHeaderRowNumber : maxnum;
}
});
if (sheet.SheetType == SheetType.Workload)
maxHeaderRowNumber += 1;
//清空数据行
for (int i = maxHeaderRowNumber + 1; i < importSheet.LastRowNum + 1; i++)
{
var importRow = importSheet.GetRow(i);
if (importRow != null)
importSheet.RemoveRow(importRow);
} }
});
if (sheet.SheetType == SheetType.Workload)
maxHeaderRowNumber += 1;
//清空数据行
for (int i = maxHeaderRowNumber + 1; i < importSheet.LastRowNum + 1; i++)
{
var importRow = importSheet.GetRow(i);
if (importRow != null)
importSheet.RemoveRow(importRow);
}
//填充人员信息 //填充人员信息
if (SheetType.Employee == sheet.SheetType && sheet.PerData != null && sheet.PerData.Any()) if (SheetType.Employee == sheet.SheetType && sheet.PerData != null && sheet.PerData.Any())
{
var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataEmployee>(t => (PerDataEmployee)t));
for (int i = 0; i < dataList.Count; i++)
{ {
var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1); var dataList = sheet.PerData.ConvertAll(new Converter<IPerData, PerDataEmployee>(t => (PerDataEmployee)t));
Dictionary<string, Func<PerDataEmployee, object>> keyValues = new Dictionary<string, Func<PerDataEmployee, object>> for (int i = 0; i < dataList.Count; i++)
{
var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1);
Dictionary<string, Func<PerDataEmployee, object>> keyValues = new Dictionary<string, Func<PerDataEmployee, object>>
{ {
{ "核算单元", (t) => t.AccountingUnit }, { "核算单元", (t) => t.AccountingUnit },
{ "医生姓名", (t) => t.DoctorName }, { "医生姓名", (t) => t.DoctorName },
...@@ -221,45 +223,55 @@ private bool WriteExcel(string newpath, string originalPath, List<PerSheet> shee ...@@ -221,45 +223,55 @@ private bool WriteExcel(string newpath, string originalPath, List<PerSheet> shee
{ "调节系数", (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);
if (headInfo != null)
{ {
var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString(); var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == item);
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(value)); if (headInfo != null)
{
var value = (keyValues[item].Invoke(dataList[i]) ?? "").ToString();
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)))
{
var script = scriptList.First(t => sheet.SheetName.Contains(t.SheetName));
if (!string.IsNullOrEmpty(script.ExecuteScript))
{ {
var dataList = perforExtractRepository.ExecuteScript(connection, script.ExecuteScript, null); var script = scriptList.First(t => sheet.SheetName.Contains(t.SheetName));
//创建数据行 if (!string.IsNullOrEmpty(script.ExecuteScript))
foreach (var pointRow in dataList.Select(t => t.RowNumber).Distinct().OrderBy(t => t))
{ {
var importRow = importSheet.CreateRow(maxHeaderRowNumber + pointRow + 1); var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, hospitalConfig.DbSource, hospitalConfig.DbName, hospitalConfig.DbUser, hospitalConfig.DbPassword);
//写入单元格 var dataList = perforExtractRepository.ExecuteScript(connection, script.ExecuteScript, null);
foreach (var data in dataList.Where(t => t.RowNumber == pointRow)) //创建数据行
foreach (var pointRow in dataList.Select(t => t.RowNumber).Distinct().OrderBy(t => t))
{ {
var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == data.ColumnName); var importRow = importSheet.CreateRow(maxHeaderRowNumber + pointRow + 1);
if (headInfo != null) //写入单元格
foreach (var data in dataList.Where(t => t.RowNumber == pointRow))
{ {
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(data.Value.ToString())); var headInfo = sheet.PerHeader.FirstOrDefault(t => t.CellValue == data.ColumnName);
if (headInfo != null)
{
importRow.CreateCell(headInfo.PointCell).SetCellValue(Verify(data.Value.ToString()));
}
} }
} }
} }
} }
} }
using (FileStream file = new FileStream(newpath, FileMode.Create))
workbook.Write(file);
filepath = newpath;
return true;
}
catch (Exception ex)
{
throw ex;
}
finally
{
workbook.Close();
} }
using (FileStream file = new FileStream(newpath, FileMode.Create))
workbook.Write(file);
filepath = newpath;
return true;
} }
/// <summary> /// <summary>
...@@ -318,8 +330,11 @@ private List<PerSheet> GetFileData(string path) ...@@ -318,8 +330,11 @@ 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>();
using (FileStream fs = new FileStream(path, FileMode.Open)) FileStream fs = null;
try
{ {
fs = new FileStream(path, FileMode.Open);
var version = FileHelper.GetExtension(path) == ".xlsx" ? ExcelVersion.xlsx : ExcelVersion.xls; var version = FileHelper.GetExtension(path) == ".xlsx" ? ExcelVersion.xlsx : ExcelVersion.xls;
IWorkbook workbook = (version == ExcelVersion.xlsx) ? (IWorkbook)(new XSSFWorkbook(fs)) : (IWorkbook)(new HSSFWorkbook(fs)); IWorkbook 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++)
...@@ -348,6 +363,15 @@ private List<PerSheet> GetFileData(string path) ...@@ -348,6 +363,15 @@ private List<PerSheet> GetFileData(string path)
} }
} }
} }
catch (Exception ex)
{
throw ex;
}
finally
{
fs.Close();
}
return sheetList; return sheetList;
} }
......
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