Commit e10576de by lcx

collect数据写入

parent 149adcc0
......@@ -54,6 +54,11 @@
数据收集角色(可查看所有)
</summary>
</member>
<member name="P:Performance.DtoModels.AppSettings.Application.OfficeRole">
<summary>
行政科室二次绩效管理员
</summary>
</member>
<member name="P:Performance.DtoModels.AppSettings.Application.Receiver">
<summary>
邮件指定接收人
......@@ -174,6 +179,41 @@
<member name="F:Performance.DtoModels.DataFormat.日期">
<summary> 日期 </summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.Year">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.Month">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.HospitalID">
<summary>
医院ID
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.SourceType">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.AccountingUnit">
<summary>
科室核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.Department">
<summary>
科室
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.ResultData">
<summary>
结果值
</summary>
</member>
<member name="P:Performance.DtoModels.PerAgainData.RowNumber">
<summary>
行号
......@@ -394,6 +434,11 @@
核算基数
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.OtherManagePerfor">
<summary>
其他管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.DoctorName">
<summary>
医生姓名
......@@ -424,11 +469,26 @@
效率绩效人数
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.AssessBeforeOtherFee">
<summary>
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.ScoreAverageRate">
<summary>
考核得分率
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.Attendance">
<summary>
出勤率
......@@ -464,6 +524,11 @@
管理绩效发放系数
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeEmployee.NightWorkPerfor">
<summary>
夜班费
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.AccountType">
<summary>
科室类别(例如 医技科室 临床科室 其他科室)
......@@ -479,6 +544,16 @@
绩效基数核算参考对象
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.FitPeopleValue">
<summary>
绩效基础核算参考值
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.FitPeopleRatio">
<summary>
绩效基数核算参考对象取值比例(如临床科室护士*95%)
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.EmployeeName">
<summary>
人员姓名
......@@ -486,7 +561,7 @@
</member>
<member name="P:Performance.DtoModels.ComputeResult.PerforTotal">
<summary>
绩效合计(来自科室经济测算表)
绩效合计 考核前(来自科室经济测算表)
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.Number">
......@@ -526,12 +601,27 @@
</member>
<member name="P:Performance.DtoModels.ComputeResult.PerforSumFee">
<summary>
绩效合计(需计算)
绩效合计 考核前(需计算)
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.AssessBeforeOtherFee">
<summary>
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.ScoreAverageRate">
<summary>
考核对分率(来自人员名单)
考核得分率
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.Attendance">
......@@ -544,6 +634,11 @@
医院奖罚 来自5.2
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.OtherManagePerfor">
<summary>
其他管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.OtherPerfor">
<summary>
其他绩效(来自人员名单)
......@@ -551,7 +646,7 @@
</member>
<member name="P:Performance.DtoModels.ComputeResult.GiveFee">
<summary>
应发绩效(需计算)
应发绩效 考核前(需计算)
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.BaiscNormPerforTotal">
......@@ -599,6 +694,11 @@
效率绩效人数
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResult.NightWorkPerfor">
<summary>
夜班费
</summary>
</member>
<member name="T:Performance.DtoModels.UnitType">
<summary> 核算单元类型 </summary>
</member>
......@@ -665,6 +765,18 @@
<member name="F:Performance.DtoModels.SheetType.LogisticsEmployee">
<summary> 行政后勤 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.AccountScoreAverage">
<summary> 科室材料考核 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.AccountAdjustLaterOtherFee">
<summary> 科室调节后其他绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.PersonAdjustLaterOtherFee">
<summary> 业务中层行政中高层调节后其他绩效 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.OtherWorkload">
<summary> 其他工作量(不参与核算) </summary>
</member>
<member name="T:Performance.DtoModels.AccountUnitType">
<summary>
核算单元类型
......@@ -813,9 +925,9 @@
其他绩效1
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.OtherPerfor2">
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AssessBeforeOtherFee">
<summary>
其他绩效2
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.MedicineExtra">
......@@ -838,11 +950,21 @@
考核对分率
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AdjustFactor">
<summary>
调节系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Scale">
<summary>
规模绩效系数
......@@ -880,7 +1002,12 @@
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.PerforTotal">
<summary>
绩效合计
绩效合计 考核前
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.AssessLaterPerforTotal">
<summary>
绩效合计 考核后
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.Avg">
......@@ -923,6 +1050,11 @@
职务分类
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.FitPeopleValue">
<summary>
实际人均绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.Basics">
<summary>
基础绩效系数
......@@ -948,26 +1080,46 @@
管理绩效发放系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.AssessBeforeOtherFee">
<summary>
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.ScoreAverageRate">
<summary>
考核得分率
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.Attendance">
<summary>
出勤率
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.OtheManagementPerfor">
<member name="P:Performance.DtoModels.PerDataClinicEmployee.OtherManagePerfor">
<summary>
其他管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.OthePerfor">
<summary>
其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.Adjust">
<summary>
调节系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.RowNumber">
<summary>
行号
......@@ -1023,11 +1175,26 @@
岗位系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.NightWorkPerfor">
<summary>
夜班费
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.AssessBeforeOtherFee">
<summary>
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.ScoreAverageRate">
<summary>
考核得分率
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.Attendance">
<summary>
出勤率
......@@ -1038,6 +1205,11 @@
调节系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataEmployee.RowNumber">
<summary>
行号
......@@ -1068,7 +1240,7 @@
科室类别(例如 医技科室 临床科室 其他科室)
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataLogisticsEmployee.JobNumber">
<member name="P:Performance.DtoModels.PerDataLogisticsEmployee.PersonnelNumber">
<summary>
人员工号
</summary>
......@@ -1098,6 +1270,11 @@
其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataLogisticsEmployee.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataLogisticsEmployee.RowNumber">
<summary>
行号
......@@ -1468,6 +1645,15 @@
路径
</summary>
</member>
<member name="P:Performance.DtoModels.AprAmountAuditRequest.Id">
<summary> 二次绩效Id </summary>
</member>
<member name="P:Performance.DtoModels.AprAmountAuditRequest.IsPass">
<summary> 审核结果 1、审核通过 2、驳回 </summary>
</member>
<member name="P:Performance.DtoModels.AprAmountAuditRequest.Remark">
<summary> 备注 </summary>
</member>
<member name="P:Performance.DtoModels.Request.SmsCodeRequest.Type">
<summary>
短信验证类型 1 手机号登录 2 其他
......@@ -1543,6 +1729,11 @@
汇总ID
</summary>
</member>
<member name="P:Performance.DtoModels.DeptDetailRequest.UnitType">
<summary>
核算单元类型
</summary>
</member>
<member name="P:Performance.DtoModels.DirectorRequest.Department">
<summary>
科室
......@@ -1766,6 +1957,11 @@
是否显示绩效合计 1 显示绩效合计 2 显示管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.HospitalRequest.IsOpenCMIPercent">
<summary>
是否开启科室CMI占比 1 启用 2 禁用
</summary>
</member>
<member name="P:Performance.DtoModels.IncomeRequest.SheetNameKeyword">
<summary>
关键字匹配
......@@ -2387,11 +2583,46 @@
职位
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.PerforSumFee">
<summary>
业绩绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.PerforManagementFee">
<summary>
管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.ShouldGiveFee">
<summary>
应发小计
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.OthePerfor">
<summary>
医院其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.NightWorkPerfor">
<summary>
夜班费
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.RealGiveFee">
<summary>
实发绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.ReservedRatio">
<summary>
预留比例
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.ReservedRatioFee">
<summary>
预留比例金额
</summary>
</member>
<member name="P:Performance.DtoModels.DeptDataDetails`1.Pandect">
<summary> 概览</summary>
</member>
......@@ -2452,6 +2683,11 @@
<member name="P:Performance.DtoModels.DetailModuleExtend.ItemValue2">
<summary> 结算值 </summary>
</member>
<member name="T:Performance.DtoModels.DeptIncomeResponse">
<summary>
查看科室绩效详情
</summary>
</member>
<member name="P:Performance.DtoModels.DeptResponse.ID">
<summary>
......@@ -2592,6 +2828,21 @@
备注
</summary>
</member>
<member name="P:Performance.DtoModels.DeptResponse.AssessBeforeOtherFee">
<summary>
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.DeptResponse.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.DeptResponse.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.DirectorResponse.TypeName">
<summary>
绩效类型
......@@ -2647,6 +2898,16 @@
保底来源科室
</summary>
</member>
<member name="P:Performance.DtoModels.HospitalResponse.IsOpenCMIPercent">
<summary>
是否开启科室CMI占比 1 启用 2 禁用
</summary>
</member>
<member name="P:Performance.DtoModels.HospitalResponse.IsOpenNursingDeptAudit">
<summary>
是否开启护理部审核 1 启用 2 禁用
</summary>
</member>
<member name="P:Performance.DtoModels.IncomeResponse.SheetNameKeyword">
<summary>
关键字匹配
......@@ -2762,6 +3023,11 @@
规模绩效(需计算)
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.OtherManagePerfor">
<summary>
其他管理绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.PostCoefficient">
<summary>
岗位系数
......@@ -2857,6 +3123,31 @@
效率绩效人数
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.NightWorkPerfor">
<summary>
夜班费
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.OtherPerformance">
<summary>
医院其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.AssessBeforeOtherFee">
<summary>
考核前其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.AssessLaterOtherFee">
<summary>
考核后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.ResComputeResponse.AdjustLaterOtherFee">
<summary>
调节后其他绩效
</summary>
</member>
<member name="P:Performance.DtoModels.RoleResponse.RoleName">
<summary>
角色名称
......
......@@ -31,6 +31,7 @@ public class DFExtractService : IAutoInjection
private readonly PerforImspecialunitRepository perforImspecialunitRepository;
private readonly PerforImdataRepository perforImdataRepository;
private readonly PerforRepimportconfigRepository repimportconfigRepository;
private readonly PerforcollectdataRepository perforcollectdataRepository;
private readonly PerforExitemRepository perforExitemRepository;
private readonly PerforExmoduleRepository perforExmoduleRepository;
......@@ -60,6 +61,7 @@ public class DFExtractService : IAutoInjection
PerforImspecialunitRepository perforImspecialunitRepository,
PerforImdataRepository perforImdataRepository,
PerforRepimportconfigRepository repimportconfigRepository,
PerforcollectdataRepository perforcollectdataRepository,
PerforExitemRepository perforExitemRepository,
PerforExmoduleRepository perforExmoduleRepository,
......@@ -81,6 +83,7 @@ public class DFExtractService : IAutoInjection
this.perforImspecialunitRepository = perforImspecialunitRepository;
this.perforImdataRepository = perforImdataRepository;
this.repimportconfigRepository = repimportconfigRepository;
this.perforcollectdataRepository = perforcollectdataRepository;
this.perforExitemRepository = perforExitemRepository;
this.perforExmoduleRepository = perforExmoduleRepository;
......@@ -154,9 +157,12 @@ public string ExtractData(int allotId, string email, int hospitalId, string grou
}
var standData = StandData(data);
var collectData = perforcollectdataRepository.GetEntities(t => t.AllotID == allotId);
logger.LogInformation("Execute Main");
return lastAllot == null ? TemplateExecute(email, hospital, configs, modules, items, specials, standData)
: AlllotExecute(email, hospital, configs, modules, items, specials, standData, lastAllot, filePath);
return lastAllot == null ? TemplateExecute(email, hospital, configs, modules, items, specials, standData, collectData)
: AlllotExecute(email, hospital, configs, modules, items, specials, standData, collectData, lastAllot, filePath);
}
catch (Exception ex)
{
......@@ -178,9 +184,6 @@ public string ExtractData(int allotId, string email, int hospitalId, string grou
}
}
/// <summary>
/// 抽取收入费用
/// </summary>
......@@ -366,7 +369,7 @@ private void ClearHistData(per_allot allot)
/// <param name="specials"></param>
/// <param name="extracts"></param>
/// <returns></returns>
public string TemplateExecute(string email, sys_hospital hospital, List<sys_hospitalconfig> configs, List<ex_module> modules, List<ex_item> items, List<ex_special> specials, List<NewExtractDto> data)
public string TemplateExecute(string email, sys_hospital hospital, List<sys_hospitalconfig> configs, List<ex_module> modules, List<ex_item> items, List<ex_special> specials, List<NewExtractDto> data, List<collect_data> collectData)
{
if (Math.Round(ratio) < 60)
{
......@@ -405,6 +408,8 @@ public string TemplateExecute(string email, sys_hospital hospital, List<sys_hosp
var sheetType = perSheetService.GetSheetType(sheet.SheetName);
if (sheetType == SheetType.Unidentifiable) continue;
var sheetCollectData = collectData?.Where(t => t.SheetName == sheet.SheetName)?.ToList();
var sheetRead = PerSheetDataFactory.GetDataRead(sheetType);
switch (sheetType)
{
......@@ -415,17 +420,17 @@ public string TemplateExecute(string email, sys_hospital hospital, List<sys_hosp
// WriteClinicEmployee(sheet, sheetRead);
// break;
case SheetType.OtherIncome:
WriteOtherIncome(sheet, sheetRead, modules, items, data);
WriteOtherIncome(sheet, sheetRead, modules, items, data, sheetCollectData);
break;
case SheetType.Income:
WriteIncome(sheet, sheetRead, modules, items, data);
WriteIncome(sheet, sheetRead, modules, items, data, sheetCollectData);
break;
case SheetType.Expend:
WriteExpend(sheet, sheetRead, modules, items, data);
WriteExpend(sheet, sheetRead, modules, items, data, sheetCollectData);
break;
case SheetType.Workload:
case SheetType.OtherWorkload:
WriteWorkload(sheet, sheetRead, modules, items, data);
WriteWorkload(sheet, sheetRead, modules, items, data, sheetCollectData);
break;
//case SheetType.AccountBasic:
// WriteAccountBasic(sheet, sheetRead);
......@@ -458,7 +463,7 @@ public string TemplateExecute(string email, sys_hospital hospital, List<sys_hosp
/// <param name="specials"></param>
/// <param name="extracts"></param>
/// <returns></returns>
public string AlllotExecute(string email, sys_hospital hospital, List<sys_hospitalconfig> configs, List<ex_module> modules, List<ex_item> items, List<ex_special> specials, List<NewExtractDto> extracts, per_allot lastAllot, string path)
public string AlllotExecute(string email, sys_hospital hospital, List<sys_hospitalconfig> configs, List<ex_module> modules, List<ex_item> items, List<ex_special> specials, List<NewExtractDto> extracts, List<collect_data> collectData, per_allot lastAllot, string path)
{
if (Math.Round(ratio) < 60)
{
......@@ -498,6 +503,8 @@ public string AlllotExecute(string email, sys_hospital hospital, List<sys_hospit
var sheetType = perSheetService.GetSheetType(sheet.SheetName);
if (sheetType == SheetType.Unidentifiable) continue;
var sheetCollectData = collectData?.Where(t => t.SheetName == sheet.SheetName)?.ToList();
var sheetRead = PerSheetDataFactory.GetDataRead(sheetType);
switch (sheetType)
{
......@@ -509,20 +516,20 @@ public string AlllotExecute(string email, sys_hospital hospital, List<sys_hospit
// break;
case SheetType.OtherIncome:
ClearData(sheet, 5, 7);
WriteOtherIncome(sheet, sheetRead, modules, items, extracts, false);
WriteOtherIncome(sheet, sheetRead, modules, items, extracts, sheetCollectData, false);
break;
case SheetType.Income:
ClearData(sheet, 5, 3, true);
WriteIncome(sheet, sheetRead, modules, items, extracts, false);
WriteIncome(sheet, sheetRead, modules, items, extracts, sheetCollectData, false);
break;
case SheetType.Expend:
ClearData(sheet, 5, 7);
WriteExpend(sheet, sheetRead, modules, items, extracts, false);
WriteExpend(sheet, sheetRead, modules, items, extracts, sheetCollectData, false);
break;
case SheetType.Workload:
case SheetType.OtherWorkload:
ClearData(sheet, 3, 3);
WriteWorkload(sheet, sheetRead, modules, items, extracts, false);
WriteWorkload(sheet, sheetRead, modules, items, extracts, sheetCollectData, false);
break;
//case SheetType.AccountBasic:
// WriteAccountBasic(sheet, sheetRead, false);
......@@ -1202,9 +1209,17 @@ private void WriteAccountBasic(ISheet sheet, IPerSheetDataRead sheetRead, bool i
}
}
private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, bool isNewTemp = true)
private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, List<collect_data> collectData, bool isNewTemp = true)
{
logger.LogInformation($"{sheet.SheetName}开始执行写入.");
if (collectData != null && collectData.Any())
{
WriteCollectHeader(sheet, sheetRead, collectData, isNewTemp);
WriteCollectData(sheet, sheetRead, collectData, isNewTemp, false);
isNewTemp = false;
}
var module = modules.FirstOrDefault(t => t.SheetType == (int)SheetType.OtherIncome);
if (module == null) return;
......@@ -1226,9 +1241,17 @@ private void WriteOtherIncome(ISheet sheet, IPerSheetDataRead sheetRead, List<ex
logger.LogInformation($"{sheet.SheetName}写入结束.");
}
private void WriteIncome(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, bool isNewTemp = true)
private void WriteIncome(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, List<collect_data> collectData, bool isNewTemp = true)
{
logger.LogInformation($"{sheet.SheetName}开始执行写入.");
if (collectData != null && collectData.Any())
{
WriteCollectHeader(sheet, sheetRead, collectData, isNewTemp);
WriteCollectData(sheet, sheetRead, collectData, isNewTemp, true);
isNewTemp = false;
}
var module = modules.FirstOrDefault(t => t.ModuleName.Replace(" ", "") == sheet.SheetName.Replace(" ", ""));
if (module == null) return;
......@@ -1259,9 +1282,17 @@ private void WriteIncome(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_modu
logger.LogInformation($"{sheet.SheetName}写入结束.");
}
private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, bool isNewTemp = true)
private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, List<collect_data> collectData, bool isNewTemp = true)
{
logger.LogInformation($"{sheet.SheetName}开始执行写入.");
if (collectData != null && collectData.Any())
{
WriteCollectHeader(sheet, sheetRead, collectData, isNewTemp);
WriteCollectData(sheet, sheetRead, collectData, isNewTemp, false);
isNewTemp = false;
}
var module = modules.FirstOrDefault(t => t.SheetType == (int)SheetType.Expend);
if (module == null) return;
......@@ -1282,9 +1313,17 @@ private void WriteExpend(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_modu
logger.LogInformation($"{sheet.SheetName}写入结束.");
}
private void WriteWorkload(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, bool isNewTemp = true)
private void WriteWorkload(ISheet sheet, IPerSheetDataRead sheetRead, List<ex_module> modules, List<ex_item> items, List<NewExtractDto> data, List<collect_data> collectData, bool isNewTemp = true)
{
logger.LogInformation($"{sheet.SheetName}开始执行写入.");
if (collectData != null && collectData.Any())
{
WriteCollectWorkHeader(sheet, sheetRead, collectData, isNewTemp);
WriteCollectWorkData(sheet, sheetRead, collectData, isNewTemp);
isNewTemp = false;
}
var module = modules.FirstOrDefault(t => t.ModuleName.Replace(" ", "") == sheet.SheetName.Replace(" ", ""));
if (module == null) return;
......@@ -1929,6 +1968,322 @@ private string HasValue(params string[] list)
#endregion
#region CollectData
private void WriteCollectData(int allotId, IWorkbook workbook, bool isNewTemp)
{
var collectData = perforcollectdataRepository.GetEntities(t => t.AllotID == allotId);
if (collectData == null || !collectData.Any()) return;
for (int i = 0; i < workbook.NumberOfSheets; i++)
{
var sheet = workbook.GetSheetAt(i);
var data = collectData.Where(t => t.SheetName.Trim() == sheet.SheetName.Trim())?.ToList();
if (data == null || !data.Any()) continue;
var sheetType = perSheetService.GetSheetType(sheet.SheetName);
if (sheetType == SheetType.Unidentifiable) continue;
var sheetRead = PerSheetDataFactory.GetDataRead(sheetType);
switch (sheetType)
{
case SheetType.OtherIncome:
case SheetType.Expend:
WriteCollectHeader(sheet, sheetRead, data, isNewTemp);
WriteCollectData(sheet, sheetRead, data, isNewTemp, false);
break;
case SheetType.Income:
WriteCollectHeader(sheet, sheetRead, data, isNewTemp);
WriteCollectData(sheet, sheetRead, data, isNewTemp, true);
break;
case SheetType.Workload:
case SheetType.OtherWorkload:
WriteCollectWorkHeader(sheet, sheetRead, data, isNewTemp);
WriteCollectWorkData(sheet, sheetRead, data, isNewTemp);
break;
case SheetType.SpecialUnit:
break;
}
logManage.ReturnTheLog(Allot.ID, GroupName, 2, "写入数据", $"sheet“{sheet.SheetName}”已完成数据写入");
}
}
private void WriteCollectHeader(ISheet sheet, IPerSheetDataRead sheetRead, List<collect_data> data, bool isNewTemp)
{
logger.LogInformation($"提取绩效数据 提取绩效数据 写入列头信息 -- {sheet.SheetName}");
var head = GetOrCreate(sheet, sheetRead.Point.HeaderFirstRowNum.Value);
var cellItems = data.Select(t => t.TypeName).Distinct().ToList();
if (!isNewTemp)
{
List<string> original = new List<string>();
#region 过滤历史模板中已有的列头
//写入列头信息
int cellStartIndex = sheetRead.Point.HeaderFirstCellNum.Value + 4;
for (int i = cellStartIndex; i < head.LastCellNum; i++)
{
var cellvalue = head.GetCell(i)?.ToString()?.Trim();
if (string.IsNullOrEmpty(cellvalue)) continue;
cellItems.Remove(cellvalue);
}
#endregion
}
if (cellItems == null || !cellItems.Any()) return;
#region 新增模板中不存在的列头
var lastcellIndex = isNewTemp ? sheetRead.Point.HeaderFirstCellNum.Value + 4 : head.LastCellNum;
foreach (var item in cellItems)
{
var headcell = GetOrCreate(head, lastcellIndex);
headcell.SetCellValue(item);
headcell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.列头);
lastcellIndex++;
}
#endregion
}
private void WriteCollectData(ISheet sheet, IPerSheetDataRead sheetRead, List<collect_data> data, bool isNewTemp, bool isIncom)
{
logger.LogInformation($"提取绩效数据 填充数据 -- {sheet.SheetName}");
//写入数据
var head = GetOrCreate(sheet, sheetRead.Point.HeaderFirstRowNum.Value);
var rowIndex = sheetRead.Point.HeaderFirstRowNum.Value + 1;
var header = data.Select(t => t.TypeName).Distinct();
int lastrownumber = rowIndex;
if (!isNewTemp && !isIncom)
{
#region 给历史模板已有科室补充数据
for (int i = rowIndex; i < sheet.LastRowNum + 1; i++)
{
var row = sheet.GetRow(i);
if (row != null)
{
var technicianAccount = row.GetCell(3)?.ToString(); // 核算单元(医技组)
var doctorAccount = row.GetCell(4)?.ToString(); // 核算单元(医生组)
var nurseAccount = row.GetCell(5)?.ToString(); // 核算单元(护理组)
var department = row.GetCell(6)?.ToString(); // 科室名称
if (string.IsNullOrEmpty(department)) continue;
lastrownumber = rowIndex;
var deptData = data.Where(t => t.AccountingUnitTechnician == technicianAccount && t.AccountingUnitDoctor == doctorAccount && t.AccountingUnitNurse == nurseAccount && t.Department == department);
if (deptData == null || !deptData.Any()) continue;
for (int j = 7; j < head.LastCellNum; j++)
{
var headName = head.GetCell(j).StringCellValue;
var newCell = GetOrCreate(row, j);
if (newCell == null) continue;
var value = deptData.FirstOrDefault(t => t.TypeName == headName)?.CellValue ?? "0";
if (isIncom)
{
var cellvalue = value == "0" ? null : ConvertHelper.To<decimal?>(value);
OutToExcelCell(newCell, cellvalue);
newCell.CellStyle = style;
}
else if (newCell.CellType != CellType.Formula)
{
var cellvalue = value == "0" ? null : ConvertHelper.To<decimal?>(value);
OutToExcelCell(newCell, cellvalue);
if (header != null && header.Contains(headName))
newCell.CellStyle = style;
}
}
data.RemoveAll(t => t.AccountingUnitTechnician == technicianAccount && t.AccountingUnitDoctor == doctorAccount && t.AccountingUnitNurse == nurseAccount && t.Department == department);
}
}
#endregion
}
if (data == null || !data.Any()) return;
#region 补充新的科室及数据
var lastrowIndex = (isNewTemp || isIncom) ? rowIndex : lastrownumber + 1;
foreach (var department in data.Select(t => new { t.Department, t.AccountingUnitDoctor, t.AccountingUnitNurse, t.AccountingUnitTechnician }).Distinct())
{
var row = GetOrCreate(sheet, lastrowIndex);
for (int i = head.FirstCellNum + 3; i < head.LastCellNum; i++)
{
var headName = head.GetCell(i).StringCellValue;
var newCell = row.CreateCell(i);
if (headName == "科室名称")
{
newCell.SetCellValue(department.Department ?? "");
newCell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.默认);
}
else if (headName.Replace("\n", "") == "核算单元(医生组)")
{
newCell.SetCellValue(department.AccountingUnitDoctor ?? "");
newCell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.默认);
}
else if (headName.Replace("\n", "") == "核算单元(护理组)")
{
newCell.SetCellValue(department?.AccountingUnitNurse ?? "");
newCell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.默认);
}
else if (headName.Replace("\n", "") == "核算单元(医技组)")
{
newCell.SetCellValue(department.AccountingUnitTechnician ?? "");
newCell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.默认);
}
else
{
var celldata = data.FirstOrDefault(t => t.Department == department.Department && t.AccountingUnitDoctor == department.AccountingUnitDoctor && t.AccountingUnitNurse == department.AccountingUnitNurse && t.AccountingUnitTechnician == department.AccountingUnitTechnician && t.TypeName == headName);
if (isIncom)
{
OutToExcelCell(newCell, celldata?.CellValue);
newCell.CellStyle = style;
}
else if (header != null && header.Contains(headName))
{
OutToExcelCell(newCell, celldata?.CellValue);
newCell.CellStyle = style;
}
}
}
lastrowIndex++;
}
#endregion
}
private void WriteCollectWorkHeader(ISheet sheet, IPerSheetDataRead sheetRead, List<collect_data> data, bool isNewTemp)
{
var head = GetOrCreate(sheet, sheetRead.Point.HeaderFirstRowNum.Value + 0);
var cellItems = data.Select(t => t.TypeName).Distinct().ToList();
if (!isNewTemp)
{
#region 过滤历史模板中已有的列头
//写入列头信息
int cellStartIndex = sheetRead.Point.HeaderFirstCellNum.Value + 2;
for (int i = cellStartIndex; i < head.LastCellNum; i++)
{
var cellvalue = head.GetCell(i)?.ToString()?.Trim();
if (string.IsNullOrEmpty(cellvalue)) continue;
cellItems.Remove(cellvalue);
}
#endregion
}
if (cellItems == null || !cellItems.Any()) return;
cellItems.Remove("核算单元");
#region 新增模板中不存在的列头
var lastcellIndex = isNewTemp ? sheetRead.Point.HeaderFirstCellNum.Value + 2 : head.LastCellNum;
foreach (var item in cellItems)
{
var headcell = GetOrCreate(head, lastcellIndex);
headcell.SetCellValue(item);
headcell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.列头);
lastcellIndex++;
}
#endregion
}
private void WriteCollectWorkData(ISheet sheet, IPerSheetDataRead sheetRead, List<collect_data> data, bool isNewTemp)
{
var head = GetOrCreate(sheet, sheetRead.Point.HeaderFirstRowNum.Value + 0);
var rowIndex = sheetRead.Point.HeaderFirstRowNum.Value + 2;
int lastrownumber = rowIndex;
var header = data.Select(t => t.TypeName).Distinct();
if (!isNewTemp)
{
#region 给历史模板已有科室补充数据
for (int i = rowIndex; i < sheet.LastRowNum + 1; i++)
{
var row = sheet.GetRow(i);
if (row != null)
{
var department = row.GetCell(2)?.ToString(); // 科室名称
if (string.IsNullOrEmpty(department)) continue;
lastrownumber++;
var deptData = data.Where(t => t.Department == department);
if (deptData == null || !deptData.Any()) continue;
var accounting = deptData.FirstOrDefault(t => t.TypeName == "核算单元")?.CellValue;
if (!string.IsNullOrEmpty(accounting))
{
var accountCell = GetOrCreate(row, 1);
accountCell.SetCellValue(accounting);
}
for (int j = 3; j < head.LastCellNum; j++)
{
var headName = head.GetCell(j).StringCellValue;
var newCell = GetOrCreate(row, j);
if (newCell == null) continue;
if (newCell.CellType != CellType.Formula)
{
var extract = deptData.FirstOrDefault(t => t.TypeName == headName);
var value = extract?.CellValue == "0" ? null : extract?.CellValue;
OutToExcelCell(newCell, value);
if (header != null && header.Contains(headName))
newCell.CellStyle = style;
}
}
data.RemoveAll(t => t.Department == department);
}
}
#endregion
}
if (data == null || !data.Any()) return;
//var unit = sheet.SheetName.IndexOf("医生") > -1 ? new int[] { (int)UnitType.医生组, (int)UnitType.医技组 } : new int[] { (int)UnitType.护理组 };
#region 补充新的科室及数据
var lastrowIndex = isNewTemp ? rowIndex : lastrownumber + 1;
foreach (var department in data.Select(t => t.Department).Where(t => !string.IsNullOrEmpty(t)).Distinct())
{
var row = sheet.CreateRow(lastrowIndex);
for (int i = head.FirstCellNum + 1; i < head.LastCellNum; i++)
{
var headName = head.GetCell(i).StringCellValue;
var newCell = row.CreateCell(i);
var celldata = data.Where(t => t.Department == department);
if (headName == "科室名称")
{
newCell.SetCellValue(department);
newCell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.默认);
}
else if (celldata != null && celldata.Any())
{
if (headName == "核算单元")
{
var accounting = celldata.FirstOrDefault(t => t.TypeName == "核算单元")?.CellValue;
newCell.SetCellValue(accounting);
newCell.CellStyle = CellStyle.CreateCellStyle(workbook, StyleType.默认);
}
else
{
var extract = celldata.FirstOrDefault(t => t.Department == department && t.TypeName == headName);
OutToExcelCell(newCell, extract?.CellValue);
if (header != null && header.Contains(headName))
newCell.CellStyle = style;
}
}
}
lastrowIndex++;
}
#endregion
}
#endregion
#region Common
/// <summary>
......
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