科室核算

parent b13d0549
...@@ -145,47 +145,7 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody]Al ...@@ -145,47 +145,7 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody]Al
if (null == allot || string.IsNullOrEmpty(allot.Path)) if (null == allot || string.IsNullOrEmpty(allot.Path))
throw new PerformanceException("当前绩效记录不存在或没有上传数据文件"); throw new PerformanceException("当前绩效记录不存在或没有上传数据文件");
// 拷贝配置信息 BackgroundJob.Schedule(() => _perExcelService.Execute(allot), TimeSpan.FromSeconds(10));
_perExcelService.Copy(allot.ID);
// 导出数据
var excel = _perExcelService.Import(allot.Path);
// 保存数据
_perExcelService.Save(excel.PerSheet, allot.ID, 1);
// 计算合并数据
List<PerSheet> list = _perExcelService.ProcessCompute(excel);
// 保存过程数据
_perExcelService.Save(list, allot.ID, 2);
// 计算最总数据
_perExcelService.Compute(excel);
//Action<PerExcelService> action = (service) =>
//{
// // 拷贝配置信息
// service.Copy(allot.ID);
// // 导出数据
// var excel = service.Import(allot.Path);
// // 保存数据
// //service.ImportSave(excel);
// // 计算合并数据
// service.ProcessCompute(excel);
// // 保存过程数据
// service.ProcessSave(excel, allot.ID);
// // 计算最总数据
// service.Compute(excel);
//};
//BackgroundJob.Enqueue(() => action.Invoke(_perExcelService));
return new ApiResponse(ResponseType.OK); return new ApiResponse(ResponseType.OK);
} }
} }
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<PackageReference Include="CSRedisCore" Version="3.0.45" /> <PackageReference Include="CSRedisCore" Version="3.0.45" />
<PackageReference Include="FluentValidation.AspNetCore" Version="8.1.3" /> <PackageReference Include="FluentValidation.AspNetCore" Version="8.1.3" />
<PackageReference Include="Hangfire" Version="1.6.22" /> <PackageReference Include="Hangfire" Version="1.6.22" />
<PackageReference Include="Hangfire.Redis.StackExchange" Version="1.8.0" /> <PackageReference Include="Hangfire.MySql.Core" Version="2.2.2" />
<PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.0" />
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
using FluentValidation; using FluentValidation;
using FluentValidation.AspNetCore; using FluentValidation.AspNetCore;
using Hangfire; using Hangfire;
using Hangfire.MySql.Core;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
...@@ -113,11 +114,11 @@ public void ConfigureServices(IServiceCollection services) ...@@ -113,11 +114,11 @@ public void ConfigureServices(IServiceCollection services)
var csredis = new CSRedis.CSRedisClient(connection.Value.RedisConnectionString); var csredis = new CSRedis.CSRedisClient(connection.Value.RedisConnectionString);
RedisHelper.Initialization(csredis); RedisHelper.Initialization(csredis);
////后台任务调度 //后台任务调度
//services.AddHangfire(config => services.AddHangfire(config =>
//{ {
// config.UseRedisStorage(connection.Value.HangfireRedisConnectionString); config.UseStorage(new MySqlStorage(connection.Value.HangfireConnectionString));
//}); });
services.AddDbContext<PerformanceDbContext>(options => services.AddDbContext<PerformanceDbContext>(options =>
{ {
...@@ -146,13 +147,21 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF ...@@ -146,13 +147,21 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
//{ //{
// c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); // c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
// c.RoutePrefix = string.Empty; // c.RoutePrefix = string.Empty;
//}); //});
app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", new DashboardOptions { Authorization = new[] { new HangfireAuthorizationFilter() } });
//app.UseHangfireServer();
//app.UseHangfireDashboard();
loggerFactory.CreateLogger<Startup>().LogDebug(env.EnvironmentName); loggerFactory.CreateLogger<Startup>().LogDebug(env.EnvironmentName);
app.UseMvc(); app.UseMvc();
} }
} }
public class HangfireAuthorizationFilter : Hangfire.Dashboard.IDashboardAuthorizationFilter
{
//这里需要配置权限规则
public bool Authorize(Hangfire.Dashboard.DashboardContext context)
{
return true;
}
}
} }
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
}, },
"AppConnection": { "AppConnection": {
"PerformanceConnectionString": "server=192.168.18.166;database=db_performance;uid=root;pwd=1234qwer;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;", "PerformanceConnectionString": "server=192.168.18.166;database=db_performance;uid=root;pwd=1234qwer;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"HangfireConnectionString": "server=192.168.18.166;database=db_hangfire;uid=root;pwd=1234qwer;port=3306;allow user variables=true;",
"RedisConnectionString": "116.62.245.55:6379,defaultDatabase=1" "RedisConnectionString": "116.62.245.55:6379,defaultDatabase=1"
}, },
"Application": { "Application": {
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
//连接字符串 //连接字符串
"AppConnection": { "AppConnection": {
"PerformanceConnectionString": "server=116.62.245.55;database=db_performance;uid=suvalue;pwd=suvalue2017;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;", "PerformanceConnectionString": "server=116.62.245.55;database=db_performance;uid=suvalue;pwd=suvalue2017;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"HangfireRedisConnectionString": "116.62.245.55:6379,defaultDatabase=1", "HangfireConnectionString": "server=116.62.245.55;database=db_hangfire;uid=suvalue;pwd=suvalue2017;port=3306;allow user variables=true;",
"RedisConnectionString": "116.62.245.55:6379,defaultDatabase=2" "redisconnectionstring": "116.62.245.55:6379,defaultdatabase=2"
}, },
//互亿 //互亿
"HuyiSmsConfig": { "HuyiSmsConfig": {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
//连接字符串 //连接字符串
"AppConnection": { "AppConnection": {
"PerformanceConnectionString": "server=116.62.245.55;database=db_performance;uid=suvalue;pwd=suvalue2017;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;", "PerformanceConnectionString": "server=116.62.245.55;database=db_performance;uid=suvalue;pwd=suvalue2017;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"HangfireRedisConnectionString": "116.62.245.55:6379,defaultDatabase=1", "HangfireConnectionString": "server=192.168.18.166;database=db_hangfire;uid=root;pwd=1234qwer;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"RedisConnectionString": "116.62.245.55:6379,defaultDatabase=2" "RedisConnectionString": "116.62.245.55:6379,defaultDatabase=2"
}, },
//互亿 //互亿
......
...@@ -11,6 +11,6 @@ public class AppConnection ...@@ -11,6 +11,6 @@ public class AppConnection
{ {
public string PerformanceConnectionString { get; set; } public string PerformanceConnectionString { get; set; }
public string RedisConnectionString { get; set; } public string RedisConnectionString { get; set; }
public string HangfireRedisConnectionString { get; set; } public string HangfireConnectionString { get; set; }
} }
} }
...@@ -70,7 +70,34 @@ public AutoMapperConfigs() ...@@ -70,7 +70,34 @@ public AutoMapperConfigs()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType == "医生组" ? 1 : (src.UnitType == "护理组" ? 2 : 0))); .ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType == "医生组" ? 1 : (src.UnitType == "护理组" ? 2 : 0)));
CreateMap<PerDataEmployee, im_employee>(); CreateMap<PerDataEmployee, im_employee>();
CreateMap<PerDataDeptAccounting, im_deptaccounting>();
CreateMap<PerDataAccountBaisc, PerDataAccountDoctor>()
.ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.DoctorNumber))
.ForMember(dest => dest.BasicFactor, opt => opt.MapFrom(src => src.DoctorBasicFactor))
.ForMember(dest => dest.SlopeFactor, opt => opt.MapFrom(src => src.DoctorSlopeFactor))
.ForMember(dest => dest.OtherPerfor1, opt => opt.MapFrom(src => src.DoctorOtherPerfor1))
.ForMember(dest => dest.OtherPerfor2, opt => opt.MapFrom(src => src.DoctorOtherPerfor2))
.ForMember(dest => dest.Extra, opt => opt.MapFrom(src => src.DoctorExtra))
.ForMember(dest => dest.ScoringAverage, opt => opt.MapFrom(src => src.DoctorScoringAverage))
.ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.DoctorAdjustFactor));
CreateMap<PerDataAccountBaisc, PerDataAccountNurse>()
.ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.NurseNumber))
.ForMember(dest => dest.BasicFactor, opt => opt.MapFrom(src => src.NurseBasicFactor))
.ForMember(dest => dest.SlopeFactor, opt => opt.MapFrom(src => src.NurseSlopeFactor))
.ForMember(dest => dest.OtherPerfor1, opt => opt.MapFrom(src => src.NurseOtherPerfor1))
.ForMember(dest => dest.OtherPerfor2, opt => opt.MapFrom(src => src.NurseOtherPerfor2))
.ForMember(dest => dest.Extra, opt => opt.MapFrom(src => src.NurseExtra))
.ForMember(dest => dest.ScoringAverage, opt => opt.MapFrom(src => src.NurseScoringAverage))
.ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.NurseAdjustFactor));
CreateMap<PerDataAccountBaisc, im_accountbasic>();
CreateMap<PerDataAccountDoctor, im_accountdoctor>();
CreateMap<PerDataAccountNurse, im_accountnurse>();
} }
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
/// <summary>
/// 门诊药占比分值
/// </summary>
public class CofDrugProp
{
public string AccoutingUnit { get; set; }
/// <summary>
/// 占比
/// </summary>
public decimal Prop { get; set; }
/// <summary>
/// 分值
/// </summary>
public decimal Factor { get; set; }
}
}
...@@ -31,5 +31,11 @@ public enum SheetType ...@@ -31,5 +31,11 @@ public enum SheetType
SpecialUnit = 8, SpecialUnit = 8,
[Description("核算单元统一系数")] [Description("核算单元统一系数")]
DeptAccounting = 9, DeptAccounting = 9,
ComputeEconomic = 10,
ComputeDoctorWorkload = 11,
ComputeNurseWorkload = 12,
ComputeDoctorAccount = 13,
ComputeNurseAccount = 14,
} }
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
namespace Performance.DtoModels namespace Performance.DtoModels
{ {
public class PerDataDeptAccounting : IPerData public class PerDataAccountBaisc : IPerData
{ {
/// <summary> /// <summary>
/// 核算单元 /// 核算单元
...@@ -19,65 +19,84 @@ public class PerDataDeptAccounting : IPerData ...@@ -19,65 +19,84 @@ public class PerDataDeptAccounting : IPerData
/// <summary> /// <summary>
/// 核算单元医生数量 /// 核算单元医生数量
/// </summary> /// </summary>
public Nullable<int> DoctorNumber { get; set; } public decimal DoctorNumber { get; set; }
/// <summary> /// <summary>
/// 医生预设总系数 /// 医生基础系数
/// </summary> /// </summary>
public Nullable<decimal> DoctorFactor { get; set; } public decimal DoctorBasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public decimal DoctorSlopeFactor { get; set; }
/// <summary> /// <summary>
/// 其他绩效1 /// 其他绩效1
/// </summary> /// </summary>
public Nullable<decimal> DoctorOtherPerfor1 { get; set; } public decimal DoctorOtherPerfor1 { get; set; }
/// <summary> /// <summary>
/// 其他绩效2 /// 其他绩效2
/// </summary> /// </summary>
public Nullable<decimal> DoctorOtherPerfor2 { get; set; } public decimal DoctorOtherPerfor2 { get; set; }
/// <summary> /// <summary>
/// 医院奖罚 /// 医院奖罚
/// </summary> /// </summary>
public Nullable<decimal> DoctorExtra { get; set; } public decimal DoctorExtra { get; set; }
/// <summary> /// <summary>
/// 考核对分率 /// 考核对分率
/// </summary> /// </summary>
public Nullable<decimal> DoctorScoringAverage { get; set; } public decimal DoctorScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal DoctorAdjustFactor { get; set; }
/// <summary> /// <summary>
/// 核算单元护士数量 /// 核算单元护士数量
/// </summary> /// </summary>
public Nullable<int> NurseNumber { get; set; } public decimal NurseNumber { get; set; }
/// <summary> /// <summary>
/// 护理预设总系数 /// 护理基础系数
/// </summary> /// </summary>
public Nullable<decimal> NurseFactor { get; set; } public decimal NurseBasicFactor { get; set; }
/// <summary>
/// 护理倾斜系数
/// </summary>
public decimal NurseSlopeFactor { get; set; }
/// <summary> /// <summary>
/// 其他绩效1 /// 其他绩效1
/// </summary> /// </summary>
public Nullable<decimal> NurseOtherPerfor1 { get; set; } public decimal NurseOtherPerfor1 { get; set; }
/// <summary> /// <summary>
/// 其他绩效2 /// 其他绩效2
/// </summary> /// </summary>
public Nullable<decimal> NurseOtherPerfor2 { get; set; } public decimal NurseOtherPerfor2 { get; set; }
/// <summary> /// <summary>
/// 医院奖罚 /// 医院奖罚
/// </summary> /// </summary>
public Nullable<decimal> NurseExtra { get; set; } public decimal NurseExtra { get; set; }
/// <summary> /// <summary>
/// 考核对分率 /// 考核对分率
/// </summary> /// </summary>
public Nullable<decimal> NurseScoringAverage { get; set; } public decimal NurseScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal NurseAdjustFactor { get; set; }
/// <summary> /// <summary>
/// 行号 /// 行号
/// </summary> /// </summary>
public int RowNumber { get; set; } public int RowNumber { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class PerDataAccountDoctor : IPerData
{
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public decimal Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public decimal BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public decimal SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public decimal OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public decimal OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public decimal Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public decimal ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public decimal Income { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public decimal WorkloadFee { get; set; }
private decimal perforFee;
private decimal perforTotal;
private decimal avg;
private decimal giveFee;
/// <summary>
/// 绩效合计
/// </summary>
public decimal PerforTotal { get => PerforFee + WorkloadFee + OtherPerfor1; set => perforTotal = value; }
/// <summary>
/// 业绩绩效
/// </summary>
public decimal PerforFee { get => Income * (BasicFactor + (BasicFactor * SlopeFactor)); set => perforFee = value; }
/// <summary>
/// 实发绩效
/// </summary>
public decimal GiveFee { get => (PerforTotal * ScoringAverage + Extra + OtherPerfor2) * AdjustFactor; set => giveFee = value; }
/// <summary>
/// 人均绩效
/// </summary>
public decimal Avg { get => Number == 0 ? 0 : PerforTotal / Number; set => avg = value; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class PerDataAccountNurse : IPerData
{
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算单元护士数量
/// </summary>
public decimal Number { get; set; }
/// <summary>
/// 护理基础系数
/// </summary>
public decimal BasicFactor { get; set; }
/// <summary>
/// 护理倾斜系数
/// </summary>
public decimal SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public decimal OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public decimal OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public decimal Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public decimal ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public decimal Income { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public decimal WorkloadFee { get; set; }
private decimal perforFee;
private decimal perforTotal;
private decimal avg;
private decimal giveFee;
/// <summary>
/// 绩效合计
/// </summary>
public decimal PerforTotal { get => PerforFee + WorkloadFee + OtherPerfor1; set => perforTotal = value; }
/// <summary>
/// 业绩绩效
/// </summary>
public decimal PerforFee { get => Income * (BasicFactor + (BasicFactor * SlopeFactor)); set => perforFee = value; }
/// <summary>
/// 实发绩效
/// </summary>
public decimal GiveFee { get => (PerforTotal * ScoringAverage + Extra + OtherPerfor2) * AdjustFactor; set => giveFee = value; }
/// <summary>
/// 人均绩效
/// </summary>
public decimal Avg { get => Number == 0 ? 0 : PerforTotal / Number; set => avg = value; }
}
}
...@@ -26,5 +26,16 @@ public class PerSheet ...@@ -26,5 +26,16 @@ public class PerSheet
/// sheet数据 /// sheet数据
/// </summary> /// </summary>
public List<IPerData> PerData { get; set; } public List<IPerData> PerData { get; set; }
public PerSheet() { }
public PerSheet(string sheetName, string moduleName, SheetType sheetType, List<PerHeader> perHeader, List<IPerData> perData)
{
SheetName = sheetName;
ModuleName = moduleName;
SheetType = sheetType;
PerHeader = perHeader;
PerData = perData;
}
} }
} }
...@@ -24,6 +24,9 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options) ...@@ -24,6 +24,9 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<im_employee> Im_Employee { get; set; } public virtual DbSet<im_employee> Im_Employee { get; set; }
public virtual DbSet<im_header> Im_Header { get; set; } public virtual DbSet<im_header> Im_Header { get; set; }
public virtual DbSet<im_data> Im_Data { get; set; } public virtual DbSet<im_data> Im_Data { get; set; }
public virtual DbSet<im_deptaccounting> Im_DeptAccounting { get; set; } public virtual DbSet<im_accountbasic> Im_AccountBasic { get; set; }
public virtual DbSet<im_accountdoctor> Im_AccountDoctor { get; set; }
public virtual DbSet<im_accountnurse> Im_AccountNurse { get; set; }
public virtual DbSet<cof_drugprop> Cof_DrugProp { get; set; }
} }
} }
//-----------------------------------------------------------------------
// <copyright file=" cof_drugprop.cs">
// * FileName: cof_drugprop.cs
// * history : 2019-03-20 16:16:15
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
namespace Performance.EntityModels
{
/// <summary>
/// cof_drugprop Entity Model
/// </summary>
public class cof_drugprop
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
/// >
/// </summary>
public Nullable<decimal> MaxRange { get; set; }
/// <summary>
/// <=
/// </summary>
public Nullable<decimal> MinRange { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> Value { get; set; }
}
}
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
// <copyright file=" im_deptaccounting.cs"> // <copyright file=" im_accountbasic.cs">
// * FileName: im_deptaccounting.cs // * FileName: im_accountbasic.cs
// * history : 2019-03-19 13:24:29 // * history : 2019-03-20 09:47:33
// </copyright> // </copyright>
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
using System; using System;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Performance.EntityModels namespace Performance.EntityModels
{ {
/// <summary> /// <summary>
/// im_deptaccounting Entity Model /// im_accountbasic Entity Model
/// </summary> /// </summary>
public class im_deptaccounting public class im_accountbasic
{ {
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
[Key] [Key]
public int ID { get; set; } public int ID { get; set; }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public int SheetID { get; set; } public Nullable<int> SheetID { get; set; }
/// <summary> /// <summary>
/// 核算单元 /// 核算单元
/// </summary> /// </summary>
public string AccountingUnit { get; set; } public string AccountingUnit { get; set; }
/// <summary> /// <summary>
/// 科室 /// 科室
/// </summary> /// </summary>
public string Department { get; set; } public string Department { get; set; }
/// <summary> /// <summary>
/// 核算单元医生数量 /// 核算单元医生数量
/// </summary> /// </summary>
public Nullable<int> DoctorNumber { get; set; } public Nullable<decimal> DoctorNumber { get; set; }
/// <summary> /// <summary>
/// 医生预设总系数 /// 医生基础系数
/// </summary> /// </summary>
public Nullable<decimal> DoctorFactor { get; set; } public Nullable<decimal> DoctorBasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> DoctorSlopeFactor { get; set; }
/// <summary> /// <summary>
/// 其他绩效1 /// 其他绩效1
/// </summary> /// </summary>
public Nullable<decimal> DoctorOtherPerfor1 { get; set; } public Nullable<decimal> DoctorOtherPerfor1 { get; set; }
/// <summary> /// <summary>
/// 其他绩效2 /// 其他绩效2
/// </summary> /// </summary>
public Nullable<decimal> DoctorOtherPerfor2 { get; set; } public Nullable<decimal> DoctorOtherPerfor2 { get; set; }
/// <summary> /// <summary>
/// 医院奖罚 /// 医院奖罚
/// </summary> /// </summary>
public Nullable<decimal> DoctorExtra { get; set; } public Nullable<decimal> DoctorExtra { get; set; }
/// <summary> /// <summary>
/// 考核对分率 /// 考核对分率
/// </summary> /// </summary>
public Nullable<decimal> DoctorScoringAverage { get; set; } public Nullable<decimal> DoctorScoringAverage { get; set; }
/// <summary> /// <summary>
/// 核算单元护士数量 /// 调节系数
/// </summary>
public Nullable<decimal> DoctorAdjustFactor { get; set; }
/// <summary>
/// 护士人数
/// </summary> /// </summary>
public Nullable<int> NurseNumber { get; set; } public Nullable<int> NurseNumber { get; set; }
/// <summary> /// <summary>
/// 护理预设总系数 /// 护理基础系数
/// </summary> /// </summary>
public Nullable<decimal> NurseFactor { get; set; } public Nullable<decimal> NurseBasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> NurseSlopeFactor { get; set; }
/// <summary> /// <summary>
/// 其他绩效1 /// 其他绩效1
/// </summary> /// </summary>
public Nullable<decimal> NurseOtherPerfor1 { get; set; } public Nullable<decimal> NurseOtherPerfor1 { get; set; }
/// <summary> /// <summary>
/// 其他绩效2 /// 其他绩效2
/// </summary> /// </summary>
public Nullable<decimal> NurseOtherPerfor2 { get; set; } public Nullable<decimal> NurseOtherPerfor2 { get; set; }
/// <summary> /// <summary>
/// 医院奖罚 /// 医院奖罚
/// </summary> /// </summary>
public Nullable<decimal> NurseExtra { get; set; } public Nullable<decimal> NurseExtra { get; set; }
/// <summary> /// <summary>
/// 考核对分率 /// 考核对分率
/// </summary> /// </summary>
public Nullable<decimal> NurseScoringAverage { get; set; } public Nullable<decimal> NurseScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> NurseAdjustFactor { get; set; }
} }
} }
//-----------------------------------------------------------------------
// <copyright file=" im_accountdoctor.cs">
// * FileName: im_accountdoctor.cs
// * history : 2019-03-20 09:47:33
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
namespace Performance.EntityModels
{
/// <summary>
/// im_accountdoctor Entity Model
/// </summary>
public class im_accountdoctor
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> GiveFee { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" im_accountnurse.cs">
// * FileName: im_accountnurse.cs
// * history : 2019-03-20 09:47:33
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
namespace Performance.EntityModels
{
/// <summary>
/// im_accountnurse Entity Model
/// </summary>
public class im_accountnurse
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 护士人数
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 护理基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> GiveFee { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" cof_drugprop.cs">
// * FileName: cof_drugprop.cs
// * history : Created by T4 2019-03-20 16:16:18
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// cof_drugprop Repository
/// </summary>
public class PerforCofdrugpropRepository : PerforRepository<cof_drugprop>
{
public PerforCofdrugpropRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
// <copyright file=" im_deptaccounting.cs"> // <copyright file=" im_accountbasic.cs">
// * FileName: im_deptaccounting.cs // * FileName: im_accountbasic.cs
// * history : Created by T4 2019-03-19 13:24:26 // * history : Created by T4 2019-03-20 09:47:36
// </copyright> // </copyright>
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
using Performance.EntityModels;
using System; using System;
using Performance.EntityModels;
namespace Performance.Repository namespace Performance.Repository
{ {
/// <summary> /// <summary>
/// im_deptaccounting Repository /// im_accountbasic Repository
/// </summary> /// </summary>
public class PerforImDeptAccountingRepository : PerforRepository<im_deptaccounting> public class PerforImaccountbasicRepository : PerforRepository<im_accountbasic>
{ {
public PerforImDeptAccountingRepository(PerformanceDbContext context) : base(context) public PerforImaccountbasicRepository(PerformanceDbContext context) : base(context)
{ {
} }
} }
......
//-----------------------------------------------------------------------
// <copyright file=" im_accountdoctor.cs">
// * FileName: im_accountdoctor.cs
// * history : Created by T4 2019-03-20 09:47:36
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// im_accountdoctor Repository
/// </summary>
public class PerforImaccountdoctorRepository : PerforRepository<im_accountdoctor>
{
public PerforImaccountdoctorRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//-----------------------------------------------------------------------
// <copyright file=" im_accountnurse.cs">
// * FileName: im_accountnurse.cs
// * history : Created by T4 2019-03-20 09:47:36
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// im_accountnurse Repository
/// </summary>
public class PerforImaccountnurseRepository : PerforRepository<im_accountnurse>
{
public PerforImaccountnurseRepository(PerformanceDbContext context) : base(context)
{
}
}
}
...@@ -22,14 +22,20 @@ public class PerExcelService : IAutoInjection ...@@ -22,14 +22,20 @@ public class PerExcelService : IAutoInjection
private PerforImDataRepository _perforImDataRepository; private PerforImDataRepository _perforImDataRepository;
private PerforImHeaderRepository _perforImHeaderRepository; private PerforImHeaderRepository _perforImHeaderRepository;
private PerforImEmployeeRepository _perforImEmployeeRepository; private PerforImEmployeeRepository _perforImEmployeeRepository;
private PerforImDeptAccountingRepository _perforImDeptAccountingRepository; private PerforImaccountbasicRepository _perforImaccountbasicRepository;
private PerforImaccountdoctorRepository _perforImaccountdoctorRepository;
private PerforImaccountnurseRepository _perforImaccountnurseRepository;
private PerforCofdrugpropRepository _perforCofdrugpropRepository;
public PerExcelService(PerSheetService perSheetService, public PerExcelService(PerSheetService perSheetService,
PerHeaderService perHeaderService, PerHeaderService perHeaderService,
PerforImSheetRepository perforImSheetRepository, PerforImSheetRepository perforImSheetRepository,
PerforImDataRepository perforImDataRepository, PerforImDataRepository perforImDataRepository,
PerforImHeaderRepository perforImHeaderRepository, PerforImHeaderRepository perforImHeaderRepository,
PerforImEmployeeRepository perforImEmployeeRepository, PerforImEmployeeRepository perforImEmployeeRepository,
PerforImDeptAccountingRepository perforImDeptAccountingRepository) PerforImaccountbasicRepository perforImaccountbasicRepository,
PerforImaccountdoctorRepository perforImaccountdoctorRepository,
PerforImaccountnurseRepository perforImaccountnurseRepository,
PerforCofdrugpropRepository perforCofdrugpropRepository)
{ {
_perSheetService = perSheetService; _perSheetService = perSheetService;
_perHeaderService = perHeaderService; _perHeaderService = perHeaderService;
...@@ -37,7 +43,33 @@ public class PerExcelService : IAutoInjection ...@@ -37,7 +43,33 @@ public class PerExcelService : IAutoInjection
_perforImDataRepository = perforImDataRepository; _perforImDataRepository = perforImDataRepository;
_perforImHeaderRepository = perforImHeaderRepository; _perforImHeaderRepository = perforImHeaderRepository;
_perforImEmployeeRepository = perforImEmployeeRepository; _perforImEmployeeRepository = perforImEmployeeRepository;
_perforImDeptAccountingRepository = perforImDeptAccountingRepository; _perforImaccountbasicRepository = perforImaccountbasicRepository;
_perforImaccountdoctorRepository = perforImaccountdoctorRepository;
_perforImaccountnurseRepository = perforImaccountnurseRepository;
_perforCofdrugpropRepository = perforCofdrugpropRepository;
}
public void Execute(sys_allot allot)
{
// 拷贝配置信息
Copy(allot.ID);
// 导出数据
var excel = Import(allot.Path);
// 保存数据
Save(excel.PerSheet, allot.ID, 1);
// 计算合并数据
List<PerSheet> list = ProcessCompute(excel);
// 保存过程数据
Save(list, allot.ID, 2);
// 计算最总数据
Compute(excel);
} }
/// <summary> /// <summary>
...@@ -88,7 +120,35 @@ public void Copy(int iD) ...@@ -88,7 +120,35 @@ public void Copy(int iD)
/// <param name="excel"></param> /// <param name="excel"></param>
public List<PerSheet> ProcessCompute(PerExcel excel) public List<PerSheet> ProcessCompute(PerExcel excel)
{ {
return _perSheetService.ProcessCompute(excel); var confs = GetDrugConfig(excel);
return _perSheetService.ProcessCompute(excel, confs);
}
private List<CofDrugProp> GetDrugConfig(PerExcel excel)
{
//计算药占比
List<CofDrugProp> cofs = new List<CofDrugProp>();
var incomeSheet = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.Income && t.SheetName.Contains("门诊") && t.SheetName.Contains("就诊"));
var datalist = incomeSheet.PerData.Select(t => (PerData)t);
var drugData = datalist.Where(t => t.TypeName == "西药费" && t.TypeName == "中成药费").GroupBy(t => t.AccountingUnit).Select(t => new { AccountingUnit = t.Key, SumValue = t.Sum(s => s.CellValue) });
var allData = datalist.GroupBy(t => t.AccountingUnit).Select(t => new { AccountingUnit = t.Key, SumValue = t.Sum(s => s.CellValue) });
var cofList = _perforCofdrugpropRepository.GetEntities();
var unitList = drugData.Select(t => t.AccountingUnit).Union(allData.Select(t => t.AccountingUnit));
foreach (var unit in unitList)
{
var dsv = drugData.FirstOrDefault(t => t.AccountingUnit == unit)?.SumValue;
var asv = allData.FirstOrDefault(t => t.AccountingUnit == unit)?.SumValue;
var prop = asv.HasValue || asv.Value == 0 ? 0 : Math.Round(dsv.Value / asv.Value, 2);
var fvalue = prop == 0
? 0
: cofList.FirstOrDefault(t => prop > t.MinRange && prop <= t.MaxRange)?.Value ?? 0;
cofs.Add(new CofDrugProp { AccoutingUnit = unit, Factor = fvalue, Prop = prop });
}
return cofs;
} }
/// <summary> /// <summary>
...@@ -115,12 +175,32 @@ public void Save(List<PerSheet> perSheets, int allotId, int source) ...@@ -115,12 +175,32 @@ public void Save(List<PerSheet> perSheets, int allotId, int source)
} }
else if (sheet.SheetType == SheetType.DeptAccounting) else if (sheet.SheetType == SheetType.DeptAccounting)
{ {
var dataList = sheet.PerData.Select(t => (PerDataDeptAccounting)t); var dataList = sheet.PerData.Select(t => (PerDataAccountBaisc)t);
foreach (var data in dataList)
{
var imdata = Mapper.Map<im_accountbasic>(data);
imdata.SheetID = imsheet.ID;
_perforImaccountbasicRepository.Add(imdata);
}
}
else if (sheet.SheetType == SheetType.ComputeDoctorAccount)
{
var dataList = sheet.PerData.Select(t => (PerDataAccountDoctor)t);
foreach (var data in dataList)
{
var imdata = Mapper.Map<im_accountdoctor>(data);
imdata.SheetID = imsheet.ID;
_perforImaccountdoctorRepository.Add(imdata);
}
}
else if (sheet.SheetType == SheetType.ComputeNurseAccount)
{
var dataList = sheet.PerData.Select(t => (PerDataAccountNurse)t);
foreach (var data in dataList) foreach (var data in dataList)
{ {
var imdata = Mapper.Map<im_deptaccounting>(data); var imdata = Mapper.Map<im_accountnurse>(data);
imdata.SheetID = imsheet.ID; imdata.SheetID = imsheet.ID;
_perforImDeptAccountingRepository.Add(imdata); _perforImaccountnurseRepository.Add(imdata);
} }
} }
else else
......
using NPOI.SS.UserModel; using AutoMapper;
using NPOI.SS.UserModel;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.Infrastructure; using Performance.Infrastructure;
using System; using System;
...@@ -62,10 +63,11 @@ public SheetType GetSheetType(string sheetName) ...@@ -62,10 +63,11 @@ public SheetType GetSheetType(string sheetName)
return SheetType.Unidentifiable; return SheetType.Unidentifiable;
} }
internal List<PerSheet> ProcessCompute(PerExcel excel) internal List<PerSheet> ProcessCompute(PerExcel excel, List<CofDrugProp> confs)
{ {
List<PerSheet> perSheet = new List<PerSheet>(); List<PerSheet> perSheet = new List<PerSheet>();
//合并科室收入、支出 //合并科室收入、支出
var economicCompute = new PerSheetDataComputeEconomic(); var economicCompute = new PerSheetDataComputeEconomic();
var mergeResult = economicCompute.MergeCompute(excel); var mergeResult = economicCompute.MergeCompute(excel);
...@@ -74,6 +76,8 @@ internal List<PerSheet> ProcessCompute(PerExcel excel) ...@@ -74,6 +76,8 @@ internal List<PerSheet> ProcessCompute(PerExcel excel)
//二次计算 //二次计算
var twiceEconomicResult = economicCompute.TwiceCompute(onceEconomic); var twiceEconomicResult = economicCompute.TwiceCompute(onceEconomic);
twiceEconomicResult.Sheet.SheetType = SheetType.ComputeEconomic;
perSheet.Add(twiceEconomicResult.Sheet); perSheet.Add(twiceEconomicResult.Sheet);
//工作量 //工作量
...@@ -82,9 +86,11 @@ internal List<PerSheet> ProcessCompute(PerExcel excel) ...@@ -82,9 +86,11 @@ internal List<PerSheet> ProcessCompute(PerExcel excel)
workload1.SheetName = "医生组工作量绩效测算表"; workload1.SheetName = "医生组工作量绩效测算表";
//医生组 一次计算 //医生组 一次计算
var onceWorkload1 = workloadCompute.OnceCompute(workload1); var onceWorkload1 = workloadCompute.OnceCompute(workload1, confs);
//医生组 二次计算 //医生组 二次计算
var twiceWorkloadResult1 = workloadCompute.TwiceCompute(onceWorkload1); var twiceWorkloadResult1 = workloadCompute.TwiceCompute(onceWorkload1);
twiceWorkloadResult1.Sheet.SheetType = SheetType.ComputeDoctorWorkload;
perSheet.Add(twiceWorkloadResult1.Sheet); perSheet.Add(twiceWorkloadResult1.Sheet);
var workload2 = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.Workload && t.SheetName.Contains("护理组")); var workload2 = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.Workload && t.SheetName.Contains("护理组"));
...@@ -93,8 +99,34 @@ internal List<PerSheet> ProcessCompute(PerExcel excel) ...@@ -93,8 +99,34 @@ internal List<PerSheet> ProcessCompute(PerExcel excel)
var onceWorkload2 = workloadCompute.OnceCompute(workload2); var onceWorkload2 = workloadCompute.OnceCompute(workload2);
//护理组 二次计算 //护理组 二次计算
var twiceWorkloadResult2 = workloadCompute.TwiceCompute(onceWorkload2); var twiceWorkloadResult2 = workloadCompute.TwiceCompute(onceWorkload2);
twiceWorkloadResult2.Sheet.SheetType = SheetType.ComputeNurseWorkload;
perSheet.Add(twiceWorkloadResult2.Sheet); perSheet.Add(twiceWorkloadResult2.Sheet);
var deptAccounting = excel.PerSheet.FirstOrDefault(t => t.SheetType == SheetType.DeptAccounting);
var dataList = deptAccounting.PerData.Select(t => (PerDataAccountBaisc)t);
PerSheet doctorSheet = new PerSheet("医生组临床科室单元核算表", "医生组临床科室单元核算表", SheetType.ComputeDoctorAccount, new List<PerHeader>(), new List<IPerData>());
PerSheet nurseSheet = new PerSheet("护理组临床科室单元核算表", "护理组临床科室单元核算表", SheetType.ComputeNurseAccount, new List<PerHeader>(), new List<IPerData>());
foreach (var dept in dataList)
{
var doctor = Mapper.Map<PerDataAccountDoctor>(dept);
var econDoctor = twiceEconomicResult.PerData.FirstOrDefault(t => t.UnitType == "医生组" && t.AccountingUnit == dept.AccountingUnit);
doctor.Income = econDoctor?.CellValue ?? 0;
var workDoctor = twiceWorkloadResult1.PerData.FirstOrDefault(t => t.UnitType == "医生组" && t.AccountingUnit == dept.AccountingUnit);
doctor.WorkloadFee = workDoctor?.CellValue ?? 0;
doctorSheet.PerData.Add(doctor);
var nurse = Mapper.Map<PerDataAccountNurse>(dept);
var econNurse = twiceEconomicResult.PerData.FirstOrDefault(t => t.UnitType == "护理组" && t.AccountingUnit == dept.AccountingUnit);
nurse.Income = econNurse?.CellValue ?? 0;
var workNurse = twiceWorkloadResult2.PerData.FirstOrDefault(t => t.UnitType == "医生组" && t.AccountingUnit == dept.AccountingUnit);
nurse.WorkloadFee = workNurse?.CellValue ?? 0;
nurseSheet.PerData.Add(nurse);
}
perSheet.Add(doctorSheet);
perSheet.Add(nurseSheet);
return perSheet; return perSheet;
} }
} }
......
...@@ -174,7 +174,10 @@ public PerSheet OnceCompute(PerSheet sheet) ...@@ -174,7 +174,10 @@ public PerSheet OnceCompute(PerSheet sheet)
public (PerSheet Sheet, List<PerData> PerData) TwiceCompute(PerSheet sheet) public (PerSheet Sheet, List<PerData> PerData) TwiceCompute(PerSheet sheet)
{ {
//获取最大列坐标位置 //获取最大列坐标位置
int thiscell = sheet.PerHeader.OrderByDescending(t => t.PointCell).FirstOrDefault().Children.Max(t => t.PointCell) + 1; var maxhead = sheet.PerHeader.OrderByDescending(t => t.PointCell).FirstOrDefault();
int thiscell = maxhead.Children != null && maxhead.Children.Count > 0
? maxhead.Children.Max(t => t.PointCell) + 1
: maxhead.PointCell;
PerHeader perHead = new PerHeader(0, thiscell, "科室可核算业绩收入", 0, 1, 2, new List<PerHeader>(), 1); PerHeader perHead = new PerHeader(0, thiscell, "科室可核算业绩收入", 0, 1, 2, new List<PerHeader>(), 1);
var dataList = sheet.PerData.Select(t => (PerData)t); var dataList = sheet.PerData.Select(t => (PerData)t);
......
...@@ -18,8 +18,9 @@ public class PerSheetDataComputeWorkload ...@@ -18,8 +18,9 @@ public class PerSheetDataComputeWorkload
/// 工作量一次计算 /// 工作量一次计算
/// </summary> /// </summary>
/// <param name="sheet"></param> /// <param name="sheet"></param>
/// <param name="confs">药占比分值</param>
/// <returns></returns> /// <returns></returns>
public PerSheet OnceCompute(PerSheet sheet) public PerSheet OnceCompute(PerSheet sheet, List<CofDrugProp> confs = null)
{ {
var dataList = sheet.PerData.Select(t => (PerData)t); var dataList = sheet.PerData.Select(t => (PerData)t);
int phead = 0; int phead = 0;
...@@ -48,6 +49,7 @@ public PerSheet OnceCompute(PerSheet sheet) ...@@ -48,6 +49,7 @@ public PerSheet OnceCompute(PerSheet sheet)
var typeClass = dataList.Where(t => header.Children.Select(s => s.CellValue).Contains(t.TypeName)); var typeClass = dataList.Where(t => header.Children.Select(s => s.CellValue).Contains(t.TypeName));
int pointcell = 0; int pointcell = 0;
foreach (var group in typeClass.GroupBy(t => t.UnitType)) foreach (var group in typeClass.GroupBy(t => t.UnitType))
{ {
var ds = group.Where(t => t.CellValue.HasValue && t.CellValue.Value > 0) var ds = group.Where(t => t.CellValue.HasValue && t.CellValue.Value > 0)
...@@ -55,7 +57,7 @@ public PerSheet OnceCompute(PerSheet sheet) ...@@ -55,7 +57,7 @@ public PerSheet OnceCompute(PerSheet sheet)
{ {
UnitType = group.Key, UnitType = group.Key,
AccountingUnit = t.Key, AccountingUnit = t.Key,
CellValue = t.Sum(s => s.CellValue), CellValue = ComputValue(header, confs, t),
TypeName = group.Key, TypeName = group.Key,
RowNumber = t.FirstOrDefault()?.RowNumber ?? 0, RowNumber = t.FirstOrDefault()?.RowNumber ?? 0,
IsTotal = 1, IsTotal = 1,
...@@ -75,6 +77,18 @@ public PerSheet OnceCompute(PerSheet sheet) ...@@ -75,6 +77,18 @@ public PerSheet OnceCompute(PerSheet sheet)
return sheet; return sheet;
} }
private static decimal? ComputValue(PerHeader header, List<CofDrugProp> confs, IGrouping<string, PerData> group)
{
var value = group.Sum(s => s.CellValue);
if (header.CellValue == "门急诊工作量")
{
var factor = confs.FirstOrDefault(t => t.AccoutingUnit == group.Key)?.Factor ?? 0;
value = value * factor;
}
return value;
}
#endregion #endregion
......
...@@ -32,24 +32,27 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader) ...@@ -32,24 +32,27 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString(); var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString();
if (string.IsNullOrEmpty(accountingUnit)) if (string.IsNullOrEmpty(accountingUnit))
continue; continue;
PerDataDeptAccounting unifyUnit = new PerDataDeptAccounting PerDataAccountBaisc unifyUnit = new PerDataAccountBaisc();
{ unifyUnit.RowNumber = r;
RowNumber = r, unifyUnit.AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString();
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString(), unifyUnit.Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell).ToString();
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell).ToString(), unifyUnit.DoctorNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元医生数量" && p.Parent.CellValue == "医生组").PointCell).ToString());
DoctorNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元医生数量" && p.Parent.CellValue == "医生组").PointCell).ToString()), unifyUnit.DoctorBasicFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "基础系数" && p.Parent.CellValue == "医生组").PointCell).ToString());
DoctorFactor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医生预设总系数" && p.Parent.CellValue == "医生组").PointCell).ToString()), unifyUnit.DoctorSlopeFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "倾斜系数" && p.Parent.CellValue == "医生组").PointCell).ToString());
DoctorOtherPerfor1 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1" && p.Parent.CellValue == "医生组").PointCell).ToString()), unifyUnit.DoctorOtherPerfor1 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1" && p.Parent.CellValue == "医生组").PointCell).ToString());
DoctorOtherPerfor2 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2" && p.Parent.CellValue == "医生组").PointCell).ToString()), unifyUnit.DoctorOtherPerfor2 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2" && p.Parent.CellValue == "医生组").PointCell).ToString());
DoctorExtra = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚" && p.Parent.CellValue == "医生组").PointCell).ToString()), unifyUnit.DoctorExtra = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚" && p.Parent.CellValue == "医生组").PointCell).ToString());
DoctorScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核对分率" && p.Parent.CellValue == "医生组").PointCell).ToString()), unifyUnit.DoctorScoringAverage = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率" && p.Parent.CellValue == "医生组").PointCell).ToString());
NurseNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元护士数量" && p.Parent.CellValue == "护理组").PointCell).ToString()), unifyUnit.DoctorAdjustFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数" && p.Parent.CellValue == "医生组").PointCell).ToString());
NurseFactor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "护理预设总系数" && p.Parent.CellValue == "护理组").PointCell).ToString()), unifyUnit.NurseNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元护士数量" && p.Parent.CellValue == "护理组").PointCell).ToString());
NurseOtherPerfor1 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1" && p.Parent.CellValue == "护理组").PointCell).ToString()), unifyUnit.NurseBasicFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "基础系数" && p.Parent.CellValue == "护理组").PointCell).ToString());
NurseOtherPerfor2 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2" && p.Parent.CellValue == "护理组").PointCell).ToString()), unifyUnit.NurseSlopeFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "倾斜系数" && p.Parent.CellValue == "护理组").PointCell).ToString());
NurseExtra = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚" && p.Parent.CellValue == "护理组").PointCell).ToString()), unifyUnit.NurseOtherPerfor1 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1" && p.Parent.CellValue == "护理组").PointCell).ToString());
NurseScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核对分率" && p.Parent.CellValue == "护理组").PointCell).ToString()), unifyUnit.NurseOtherPerfor2 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2" && p.Parent.CellValue == "护理组").PointCell).ToString());
}; unifyUnit.NurseExtra = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚" && p.Parent.CellValue == "护理组").PointCell).ToString());
unifyUnit.NurseScoringAverage = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率" && p.Parent.CellValue == "护理组").PointCell).ToString());
unifyUnit.NurseAdjustFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数" && p.Parent.CellValue == "护理组").PointCell).ToString());
dataList.Add(unifyUnit); dataList.Add(unifyUnit);
} }
......
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