绩效数据调整

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