Commit 18968fad by 799284587@qq.com

提取

parent b0823f19
...@@ -131,6 +131,7 @@ public ApiResponse Import([FromForm] IFormCollection form) ...@@ -131,6 +131,7 @@ public ApiResponse Import([FromForm] IFormCollection form)
return new ApiResponse(ResponseType.OK); return new ApiResponse(ResponseType.OK);
} }
#region 老版提取
/// <summary> /// <summary>
/// 提取绩效数据 /// 提取绩效数据
/// </summary> /// </summary>
...@@ -191,6 +192,7 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo ...@@ -191,6 +192,7 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo
throw ex; throw ex;
} }
} }
#endregion
/// <summary> /// <summary>
/// 从WebAPI下载文件 /// 从WebAPI下载文件
......
...@@ -1223,6 +1223,21 @@ ...@@ -1223,6 +1223,21 @@
发放系数 发放系数
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.ExtractRequest.AllotId">
<summary>
绩效ID
</summary>
</member>
<member name="P:Performance.DtoModels.ExtractRequest.HospitalId">
<summary>
医院ID
</summary>
</member>
<member name="P:Performance.DtoModels.ExtractRequest.UseScheme">
<summary>
使用方案
</summary>
</member>
<member name="T:Performance.DtoModels.HospitalRequest"> <member name="T:Performance.DtoModels.HospitalRequest">
<summary> <summary>
登录请求 登录请求
......
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class ExtractRequest
{
/// <summary>
/// 绩效ID
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 医院ID
/// </summary>
public int HospitalId { get; set; }
/// <summary>
/// 使用方案
/// </summary>
public int UseScheme { get; set; }
}
public class ExtractRequestValidator : AbstractValidator<ExtractRequest>
{
public ExtractRequestValidator()
{
RuleFor(x => x.AllotId).NotNull().GreaterThan(0);
RuleFor(x => x.HospitalId).NotNull().GreaterThan(0);
RuleFor(x => x.UseScheme).NotNull().InclusiveBetween(1, 2);
}
}
}
using System; using FluentValidation.AspNetCore;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal; using Microsoft.AspNetCore.Http.Internal;
...@@ -15,6 +10,11 @@ ...@@ -15,6 +10,11 @@
using Performance.DtoModels.AppSettings; using Performance.DtoModels.AppSettings;
using Performance.Infrastructure; using Performance.Infrastructure;
using Performance.Services; using Performance.Services;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Performance.Extract.Api.Controllers namespace Performance.Extract.Api.Controllers
{ {
...@@ -22,15 +22,20 @@ namespace Performance.Extract.Api.Controllers ...@@ -22,15 +22,20 @@ namespace Performance.Extract.Api.Controllers
public class ExtractController : Controller public class ExtractController : Controller
{ {
private readonly ExtractService extractService; private readonly ExtractService extractService;
private readonly NewExtractService newExtractService;
private readonly HospitalService hospitalService; private readonly HospitalService hospitalService;
private readonly WebapiUrl url; private readonly WebapiUrl url;
private readonly ILogger<ExtractController> logger; private readonly ILogger<ExtractController> logger;
private IHostingEnvironment evn; private readonly IHostingEnvironment evn;
public ExtractController(ExtractService extractService, HospitalService hospitalService, public ExtractController(ExtractService extractService,
IOptions<WebapiUrl> url, ILogger<ExtractController> logger, NewExtractService newExtractService,
HospitalService hospitalService,
IOptions<WebapiUrl> url,
ILogger<ExtractController> logger,
IHostingEnvironment evn) IHostingEnvironment evn)
{ {
this.extractService = extractService; this.extractService = extractService;
this.newExtractService = newExtractService;
this.hospitalService = hospitalService; this.hospitalService = hospitalService;
this.url = url.Value; this.url = url.Value;
this.logger = logger; this.logger = logger;
...@@ -100,5 +105,21 @@ public void Index([FromBody]AllotRequest request) ...@@ -100,5 +105,21 @@ public void Index([FromBody]AllotRequest request)
} }
logger.LogInformation(token + ",提取结束,请求参数:" + JsonHelper.Serialize(request)); logger.LogInformation(token + ",提取结束,请求参数:" + JsonHelper.Serialize(request));
} }
#region 新版提取
/// <summary>
/// 提取绩效数据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("extract")]
[HttpPost]
public void ExtractData([CustomizeValidator, FromBody]ExtractRequest request)
{
newExtractService.ExtractData(request.AllotId, "", request.HospitalId, (UseTemplate)request.UseScheme);
}
#endregion
} }
} }
\ No newline at end of file
...@@ -81,6 +81,10 @@ public class NewExtractService : IAutoInjection ...@@ -81,6 +81,10 @@ public class NewExtractService : IAutoInjection
public string ExtractData(int allotId, string email, int hospitalId, UseTemplate useTemplate) public string ExtractData(int allotId, string email, int hospitalId, UseTemplate useTemplate)
{ {
// 获取医院信息 // 获取医院信息
var allot = perforPerallotRepository.GetEntity(t => t.ID == allotId);
if (allot == null)
throw new PerformanceException("AllotID错误");
// 获取医院信息
var hospital = perforHospitalRepository.GetEntity(t => t.ID == hospitalId); var hospital = perforHospitalRepository.GetEntity(t => t.ID == hospitalId);
if (hospital == null) if (hospital == null)
throw new PerformanceException("医院ID错误"); throw new PerformanceException("医院ID错误");
...@@ -109,12 +113,10 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate ...@@ -109,12 +113,10 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate
IWorkbook workbook = null; IWorkbook workbook = null;
FileStream file = null;
try try
{ {
var path = CopyOriginalFile(hospitalId, useTemplate); var (tempPath, newPath) = CopyOriginalFile(hospitalId);
file = new FileStream(path, FileMode.Open); workbook = new XSSFWorkbook(tempPath);
workbook = new XSSFWorkbook(file);
CreateNotExistSheet(modulesList, workbook); CreateNotExistSheet(modulesList, workbook);
...@@ -137,7 +139,7 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate ...@@ -137,7 +139,7 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate
WriteSpecialUnit(sheet, hospital.ID, allotLast.ID, sheetRead); WriteSpecialUnit(sheet, hospital.ID, allotLast.ID, sheetRead);
break; break;
case SheetType.Income: case SheetType.Income:
WriteIncome(sheet, allotLast.ID, sheetRead, hospitalConfigList); WriteIncome(sheet, allotLast.ID, sheetRead, allot, modulesList, hospitalConfigList);
break; break;
case SheetType.OtherIncome: case SheetType.OtherIncome:
WriteOtherIncome(sheet, sheetRead); WriteOtherIncome(sheet, sheetRead);
...@@ -146,14 +148,16 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate ...@@ -146,14 +148,16 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate
WriteExpend(sheet, sheetRead); WriteExpend(sheet, sheetRead);
break; break;
case SheetType.Workload: case SheetType.Workload:
WriteWorkload(sheet, allotLast.ID, sheetRead, hospitalConfigList); WriteWorkload(sheet, allotLast.ID, sheetRead, allot, modulesList, hospitalConfigList);
break; break;
} }
} }
using (FileStream file = new FileStream(newPath, FileMode.OpenOrCreate))
{
workbook.Write(file);
}
workbook.Write(file); return newPath;
return path;
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -163,8 +167,6 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate ...@@ -163,8 +167,6 @@ public string ExtractData(int allotId, string email, int hospitalId, UseTemplate
finally finally
{ {
workbook.Close(); workbook.Close();
file.Close();
file.Dispose();
GC.Collect(); GC.Collect();
} }
} }
...@@ -201,6 +203,7 @@ private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead) ...@@ -201,6 +203,7 @@ private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead)
{ {
var module = perforModmoduleRepository.GetEntity(t => t.SheetType == (int)SheetType.Expend); var module = perforModmoduleRepository.GetEntity(t => t.SheetType == (int)SheetType.Expend);
var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id); var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id);
if (itemList == null || !itemList.Any()) return;
var nurseFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1); var nurseFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1);
var doctorFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2); var doctorFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2);
...@@ -219,86 +222,110 @@ private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead) ...@@ -219,86 +222,110 @@ private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead)
} }
} }
private void WriteIncome(ISheet sheet, int allotLastId, IPerSheetDataRead sheetRead, List<sys_hospitalconfig> hospitalConfigList) private void WriteIncome(ISheet sheet, int allotLastId, IPerSheetDataRead sheetRead, per_allot allot, List<mod_module> moduleList, List<sys_hospitalconfig> hospitalConfigList)
{ {
var moduleList = perforModmoduleRepository.GetEntities(t => t.SheetType == (int)SheetType.Income); var module = moduleList.FirstOrDefault(t => t.ModuleName == sheet.SheetName);
foreach (var module in moduleList) if (module == null) return;
{
var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id);
var nurseFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1); var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id);
var doctorFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2); if (itemList == null || !itemList.Any()) return;
var technicianFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 3);
var head = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 4);
//写入列头信息 var nurseFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 0);
int cellStartIndex = sheetRead.Point.HeaderFirstCellNum.Value + 3; var doctorFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1);
foreach (var item in itemList) var technicianFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2);
{ var head = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 3);
head.GetCell(cellStartIndex).SetCellValue(item.ItemName);
doctorFactor.GetCell(cellStartIndex).SetCellValue(item.FactorValue1?.ToString());
nurseFactor.GetCell(cellStartIndex).SetCellValue(item.FactorValue2?.ToString());
technicianFactor.GetCell(cellStartIndex).SetCellValue(item.FactorValue3?.ToString());
cellStartIndex++;
}
//查询数据
var extractList = perforModextractRepository.GetEntities(t => module.ExtractId == t.Id);
List<ExtractDto> allExtract = new List<ExtractDto>(); //写入列头信息
foreach (var item in extractList) int cellStartIndex = sheetRead.Point.HeaderFirstCellNum.Value + 3;
{ foreach (var item in itemList)
var result = QueryDatabase(hospitalConfigList, item); {
if (result != null) GetOrCreate(head, cellStartIndex).SetCellValue(item.ItemName);
allExtract.AddRange(result); GetOrCreate(doctorFactor, cellStartIndex).SetCellValue(item.FactorValue1?.ToString());
} GetOrCreate(nurseFactor, cellStartIndex).SetCellValue(item.FactorValue2?.ToString());
//写入数据 GetOrCreate(technicianFactor, cellStartIndex).SetCellValue(item.FactorValue3?.ToString());
var importSheet = perforPersheetRepository.GetEntities(t => t.AllotID == allotLastId && t.SheetType == (int)SheetType.Income); cellStartIndex++;
var importSheetId = importSheet.Select(t => t.ID).ToList(); }
var importData = perforImdataRepository.GetEntities(t => importSheetId.Contains(t.SheetID.Value)); //查询数据
var rowIndex = sheetRead.Point.HeaderFirstRowNum.Value + 3; var extractList = perforModextractRepository.GetEntities(t => module.ExtractId == t.Id);
foreach (var department in allExtract.Select(t => t.Department).Distinct())
List<ExtractDto> allExtract = new List<ExtractDto>();
foreach (var item in extractList)
{
var result = QueryDatabase(hospitalConfigList, item, allot);
if (result != null)
allExtract.AddRange(result);
}
//写入数据
var importSheet = perforPersheetRepository.GetEntities(t => t.AllotID == allotLastId && t.SheetType == (int)SheetType.Income);
var importSheetId = importSheet.Select(t => t.ID).ToList();
var importData = perforImdataRepository.GetEntities(t => importSheetId.Contains(t.SheetID.Value));
var rowIndex = sheetRead.Point.HeaderFirstRowNum.Value + 3;
foreach (var department in allExtract.Select(t => t.Department).Distinct())
{
var row = sheet.CreateRow(rowIndex);
for (int i = head.FirstCellNum; i < head.LastCellNum; i++)
{ {
var row = sheet.CreateRow(rowIndex); var headName = head.GetCell(i).StringCellValue;
for (int i = head.FirstCellNum; i < head.LastCellNum; i++) var newCell = row.CreateCell(i);
if (headName == "核算单元(医生组)")
{ {
var headName = head.GetCell(i).StringCellValue; var dept = importData.FirstOrDefault(t => t.Department == department && t.UnitType == 1)?.AccountingUnit;
var newCell = row.CreateCell(i); newCell.SetCellValue(dept ?? "");
if (headName == "核算单元(医生组)")
{
var dept = importData.FirstOrDefault(t => t.Department == department && t.UnitType == 1)?.AccountingUnit;
newCell.SetCellValue(dept ?? "");
}
else if (headName == "核算单元(护理组)")
{
var dept = importData.FirstOrDefault(t => t.Department == department && t.UnitType == 2)?.AccountingUnit;
newCell.SetCellValue(dept ?? "");
}
else if (headName == "核算单元(医技组)")
{
var dept = importData.FirstOrDefault(t => t.Department == department && t.UnitType == 3)?.AccountingUnit;
newCell.SetCellValue(dept ?? "");
}
else if (headName == "科室名称")
{
var dept = importData.FirstOrDefault(t => t.Department == department)?.Department;
newCell.SetCellValue(dept ?? "");
}
else
{
var value = allExtract.FirstOrDefault(t => t.Department == department && t.Category == headName)?.Value;
newCell.SetCellValue(value == null || value == 0 ? "" : value.ToString());
}
newCell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.LightBlue.Index;
} }
else if (headName == "核算单元(护理组)")
{
var dept = importData.FirstOrDefault(t => t.Department == department && t.UnitType == 2)?.AccountingUnit;
newCell.SetCellValue(dept ?? "");
}
else if (headName == "核算单元(医技组)")
{
var dept = importData.FirstOrDefault(t => t.Department == department && t.UnitType == 3)?.AccountingUnit;
newCell.SetCellValue(dept ?? "");
}
else if (headName == "科室名称")
{
var dept = importData.FirstOrDefault(t => t.Department == department)?.Department;
newCell.SetCellValue(dept ?? "");
}
else
{
var value = allExtract.FirstOrDefault(t => t.Department == department && t.Category == headName)?.Value;
newCell.SetCellValue(value == null || value == 0 ? "" : value.ToString());
}
newCell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.LightBlue.Index;
} }
} }
} }
private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead sheetRead, List<sys_hospitalconfig> hospitalConfigList) private ICell GetOrCreate(IRow row, int index)
{
var cell = row.GetCell(index);
if (cell == null)
cell = row.CreateCell(index);
cell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Orange.Index;
return cell;
}
private Dictionary<string, string> GetParameters(per_allot allot)
{
DateTime beginTime = new DateTime(allot.Year, allot.Month, 1);
Dictionary<string, string> pairs = new Dictionary<string, string>
{
{ "@beginTime", $"'{beginTime.ToString("yyyy-MM-dd")}'" },
{ "@endTime", $"'{beginTime.AddMonths(1).ToString("yyyy-MM-dd")}'"},
};
return pairs;
}
private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead sheetRead, per_allot allot, List<mod_module> moduleList, List<sys_hospitalconfig> hospitalConfigList)
{ {
var module = perforModmoduleRepository.GetEntity(t => t.SheetType == (int)SheetType.Workload); var module = moduleList.FirstOrDefault(t => t.ModuleName == sheet.SheetName);
if (module == null) return;
var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id); var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id);
if (itemList == null || !itemList.Any()) return;
var head = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1); var head = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1);
var factor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2); var factor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2);
...@@ -307,8 +334,8 @@ private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead shee ...@@ -307,8 +334,8 @@ private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead shee
int cellStartIndex = sheetRead.Point.HeaderFirstCellNum.Value + 3; int cellStartIndex = sheetRead.Point.HeaderFirstCellNum.Value + 3;
foreach (var item in itemList) foreach (var item in itemList)
{ {
head.GetCell(cellStartIndex).SetCellValue(item.ItemName); GetOrCreate(head, cellStartIndex).SetCellValue(item.ItemName);
factor.GetCell(cellStartIndex).SetCellValue(item.FactorValue1?.ToString()); GetOrCreate(factor, cellStartIndex).SetCellValue(item.FactorValue1?.ToString());
cellStartIndex++; cellStartIndex++;
} }
//查询数据 //查询数据
...@@ -318,7 +345,7 @@ private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead shee ...@@ -318,7 +345,7 @@ private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead shee
List<ExtractDto> allExtract = new List<ExtractDto>(); List<ExtractDto> allExtract = new List<ExtractDto>();
foreach (var item in extractList) foreach (var item in extractList)
{ {
var result = QueryDatabase(hospitalConfigList, item); var result = QueryDatabase(hospitalConfigList, item, allot);
if (result != null) if (result != null)
allExtract.AddRange(result); allExtract.AddRange(result);
} }
...@@ -353,12 +380,18 @@ private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead shee ...@@ -353,12 +380,18 @@ private void WriteWorkload(ISheet sheet, int allotLastId, IPerSheetDataRead shee
} }
} }
private List<ExtractDto> QueryDatabase(List<sys_hospitalconfig> hospitalConfigList, mod_extract extract) private List<ExtractDto> QueryDatabase(List<sys_hospitalconfig> hospitalConfigList, mod_extract extract, per_allot allot)
{ {
var config = hospitalConfigList.FirstOrDefault(t => t.Type == extract.SourceType); var config = hospitalConfigList.FirstOrDefault(t => t.Type == extract.SourceType);
var parameters = GetParameters(allot);
using (var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, config.DbSource, config.DbName, config.DbUser, config.DbPassword)) using (var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, config.DbSource, config.DbName, config.DbUser, config.DbPassword))
{ {
var result = connection.Query<ExtractDto>(extract.ExecuteScript); foreach (var item in parameters)
{
extract.ExecuteScript = Regex.Replace(extract.ExecuteScript, item.Key, item.Value, RegexOptions.IgnoreCase);
}
var result = connection.Query<ExtractDto>(extract.ExecuteScript, commandTimeout: 20000);
if (result != null && result.Count() > 0) if (result != null && result.Count() > 0)
{ {
if (extract.ExecuteType == 2) if (extract.ExecuteType == 2)
...@@ -378,6 +411,7 @@ private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead) ...@@ -378,6 +411,7 @@ private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead)
{ {
var module = perforModmoduleRepository.GetEntity(t => t.SheetType == (int)SheetType.Expend); var module = perforModmoduleRepository.GetEntity(t => t.SheetType == (int)SheetType.Expend);
var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id); var itemList = perforModitemRepository.GetEntities(t => t.ModuleId == module.Id);
if (itemList == null || !itemList.Any()) return;
var head = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1); var head = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 1);
var nurseFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2); var nurseFactor = sheet.GetRow(sheetRead.Point.HeaderFirstRowNum.Value + 2);
...@@ -387,22 +421,23 @@ private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead) ...@@ -387,22 +421,23 @@ private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead)
//写入列头信息 //写入列头信息
foreach (var item in itemList) foreach (var item in itemList)
{ {
head.GetCell(cellStartIndex).SetCellValue(item.ItemName); GetOrCreate(head, cellStartIndex).SetCellValue(item.ItemName);
doctorFactor.GetCell(cellStartIndex).SetCellValue(item.FactorValue1?.ToString()); GetOrCreate(doctorFactor, cellStartIndex).SetCellValue(item.FactorValue1?.ToString());
nurseFactor.GetCell(cellStartIndex).SetCellValue(item.FactorValue2?.ToString()); GetOrCreate(nurseFactor, cellStartIndex).SetCellValue(item.FactorValue2?.ToString());
cellStartIndex++; cellStartIndex++;
} }
} }
private string CopyOriginalFile(int hospitalId, UseTemplate useTemplate) private (string TempPath, string NewPath) CopyOriginalFile(int hospitalId)
{ {
string originalPath = Path.Combine(environment.ContentRootPath, "Template", "医院绩效模板.xlsx"); string originalPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Template", "医院绩效模板.xlsx");
var dpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files", $"{hospitalId}", "autoextract");
var dpath = Path.Combine(environment.ContentRootPath, "Files", $"{hospitalId}", "autoextract");
FileHelper.CreateDirectory(dpath); FileHelper.CreateDirectory(dpath);
string path = Path.Combine(dpath, $"绩效提取数据{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx"); string tempPath = Path.Combine(dpath, $"Template{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx");
FileHelper.Copy(originalPath, path); FileHelper.Copy(originalPath, tempPath);
return path; string newPath = Path.Combine(dpath, $"绩效提取数据{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx");
return (tempPath, newPath);
} }
private void WriteEmployee(ISheet sheet, int allotLastId, IPerSheetDataRead sheetRead) private void WriteEmployee(ISheet sheet, int allotLastId, IPerSheetDataRead sheetRead)
...@@ -414,7 +449,7 @@ private void WriteEmployee(ISheet sheet, int allotLastId, IPerSheetDataRead shee ...@@ -414,7 +449,7 @@ private void WriteEmployee(ISheet sheet, int allotLastId, IPerSheetDataRead shee
{ "职称", (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 },
...@@ -467,11 +502,14 @@ private void WriteSpecialUnit(ISheet sheet, int hospitalId, int allotLastId, IPe ...@@ -467,11 +502,14 @@ private void WriteSpecialUnit(ISheet sheet, int hospitalId, int allotLastId, IPe
foreach (var cell in cellList) foreach (var cell in cellList)
{ {
var item = dictionary.FirstOrDefault(t => t.Key == cell.StringCellValue); if (dictionary.ContainsKey(cell.StringCellValue))
var value = (item.Value.Invoke(modDataList[i], allotDataList) ?? "").ToString(); {
var newCell = importRow.CreateCell(cell.ColumnIndex); var item = dictionary.First(t => t.Key == cell.StringCellValue);
newCell.SetCellValue(Verify(value)); var value = (item.Value.Invoke(modDataList[i], allotDataList) ?? "").ToString();
newCell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.LightBlue.Index; var newCell = importRow.CreateCell(cell.ColumnIndex);
newCell.SetCellValue(Verify(value));
newCell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.LightBlue.Index;
}
} }
} }
} }
...@@ -480,25 +518,23 @@ private void WriteAccountBasic(ISheet sheet, int allotLastId, IPerSheetDataRead ...@@ -480,25 +518,23 @@ private void WriteAccountBasic(ISheet sheet, int allotLastId, IPerSheetDataRead
{ {
var dictionary = new Dictionary<string, Func<im_accountbasic, object>> var dictionary = new Dictionary<string, Func<im_accountbasic, object>>
{ {
{ "核算单元(医生组)", (t) => t.DoctorAccountingUnit }, { "核算单元类型", (t) => t.UnitType },
{ "核算单元(护理组)", (t) => t.NurseAccountingUnit }, { "核算单元", (t) => t.DoctorAccountingUnit },
{ "科室名称", (t) => t.Department }, { "科室名称", (t) => t.Department },
{ "医生组核算单元医生数量", (t) => t.DoctorNumber }, { "科主任/护士长人数", (t) => t.DoctorDirectorNumber },
{ "医生组基础系数", (t) => t.DoctorBasicFactor }, { "核算单元人员数量", (t) => t.DoctorNumber },
{ "医生组倾斜系数", (t) => t.DoctorSlopeFactor }, { "预算比例", (t) => t.DoctorBasicFactor },
{ "医生组其他绩效1", (t) => t.DoctorOtherPerfor1 }, { "倾斜系数", (t) => t.DoctorSlopeFactor },
{ "医生组考核得分率", (t) => t.DoctorScoringAverage }, { "效率绩效系数", (t) => t.DoctorEffic },
{ "医生组医院奖罚", (t) => t.DoctorExtra }, { "规模绩效系数", (t) => t.DoctorScale },
{ "医生组其他绩效2", (t) => t.DoctorOtherPerfor2 }, { "管理绩效发放系数", (t) => t.DoctorGrant },
{ "医生组调节系数", (t) => t.DoctorAdjustFactor }, { "保底绩效参考标准", (t) => t.MinimumReference },
{ "护理组核算单元护士数量", (t) => t.NurseNumber }, { "保底绩效系数", (t) => t.MinimumFactor },
{ "护理组基础系数", (t) => t.NurseBasicFactor }, { "其他绩效1", (t) => t.DoctorOtherPerfor1 },
{ "护理组倾斜系数", (t) => t.NurseSlopeFactor }, { "考核得分率", (t) => t.DoctorScoringAverage },
{ "护理组其他绩效1", (t) => t.NurseOtherPerfor1 }, { "医院奖罚", (t) => t.DoctorExtra },
{ "护理组考核得分率", (t) => t.NurseScoringAverage }, { "其他绩效2", (t) => t.DoctorOtherPerfor2 },
{ "护理组医院奖罚", (t) => t.NurseExtra }, { "调节系数", (t) => t.DoctorAdjustFactor },
{ "护理组其他绩效2", (t) => t.NurseOtherPerfor2 },
{ "护理组调节系数", (t) => t.NurseAdjustFactor },
}; };
var dataList = perforImaccountbasicRepository.GetEntities(t => t.AllotID == allotLastId); var dataList = perforImaccountbasicRepository.GetEntities(t => t.AllotID == allotLastId);
......
...@@ -15,7 +15,7 @@ public class PerSheetDataReadIncome : IPerSheetDataRead ...@@ -15,7 +15,7 @@ public class PerSheetDataReadIncome : IPerSheetDataRead
{ {
public PerSheetPoint Point => new PerSheetPoint public PerSheetPoint Point => new PerSheetPoint
{ {
HeaderFirstRowNum = 4, HeaderFirstRowNum = 1,
HeaderLastRowNum = 4, HeaderLastRowNum = 4,
HeaderFirstCellNum = 0, HeaderFirstCellNum = 0,
DataFirstRowNum = 5, DataFirstRowNum = 5,
......
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