Commit 5cb55851 by 钟博

Merge branch 'feature/费用类型系数' into feature/划拨

# Conflicts:
#	performance/Performance.EntityModels/Context/PerformanceDbContext.cs
parents c80be479 8138b430
using FluentScheduler;
using Microsoft.Extensions.DependencyInjection;
using Performance.Services;
using System;
using System.Linq;
using System.Reflection;
namespace Performance.Api.Configurations
{
public static class FluentSchedulerConfig
{
public static void AddFluentSchedulerConfiguration(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
ServiceLocator.Instance = services.BuildServiceProvider();
JobManager.Initialize(new JobRegistry());
////扫描当前程序集中实现了Registry的类
//var registrys = Assembly.GetExecutingAssembly().GetTypes()
// .Where(t => !t.IsInterface && !t.IsSealed && !t.IsAbstract && typeof(Registry).IsAssignableFrom(t))
// .Select(s => s.Assembly.CreateInstance(s.FullName) as Registry)?.ToArray();
//// 注册同步服务
//JobManager.Initialize(registrys);
}
}
}
using FluentValidation.AspNetCore; using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
...@@ -713,5 +714,30 @@ public ApiResponse SaveSecondaryAlias([FromBody] SaveCollectData request) ...@@ -713,5 +714,30 @@ public ApiResponse SaveSecondaryAlias([FromBody] SaveCollectData request)
} }
#endregion #endregion
#region 费用类型系数
[HttpPost("drugtype/factor")]
public ApiResponse GetDrugtypeFactor([FromBody] AllotDeptRequest request)
{
var data = _configService.GetDrugtypeFactor(request);
return new ApiResponse(ResponseType.OK, data);
}
[HttpPost("drugtype/factor/config")]
public ApiResponse GetDrugtypeFactorConfig([FromBody] AllotDeptRequest request)
{
var data = _configService.GetDrugtypeFactorConfig(request.HospitalId, request.AllotId);
return new ApiResponse(ResponseType.OK, data);
}
[HttpPost("drugtype/factor/save")]
public ApiResponse SaveDrugtypeFactor([FromBody] DrugtypeFactorRequest request)
{
_configService.SaveDrugtypeFactor(request);
return new ApiResponse(ResponseType.OK, "保存成功!");
}
#endregion
} }
} }
\ No newline at end of file
...@@ -22,14 +22,19 @@ public class EmployeeController : Controller ...@@ -22,14 +22,19 @@ public class EmployeeController : Controller
private AllotService allotService; private AllotService allotService;
private ClaimService claim; private ClaimService claim;
private IHostingEnvironment evn; private IHostingEnvironment evn;
private readonly RoleService roleService;
private readonly UserService userService;
public EmployeeController(EmployeeService employeeService, AllotService allotService, public EmployeeController(EmployeeService employeeService, AllotService allotService,
ClaimService claim, IHostingEnvironment evn) ClaimService claim, IHostingEnvironment evn, RoleService roleService,
UserService userService)
{ {
this.employeeService = employeeService; this.employeeService = employeeService;
this.allotService = allotService; this.allotService = allotService;
this.claim = claim; this.claim = claim;
this.evn = evn; this.evn = evn;
this.roleService = roleService;
this.userService = userService;
} }
/// <summary> /// <summary>
...@@ -456,8 +461,20 @@ public ApiResponse<List<TitleValue>> GetPerforTypeDict([FromRoute] int allotId) ...@@ -456,8 +461,20 @@ public ApiResponse<List<TitleValue>> GetPerforTypeDict([FromRoute] int allotId)
[HttpPost] [HttpPost]
public ApiResponse AprOverview(int allotId) public ApiResponse AprOverview(int allotId)
{ {
var relust = employeeService.GetOtherPerStats(allotId); var roleType = new[] { 3, 4, 9, 10 };
return new ApiResponse(ResponseType.OK, relust); var userid = claim.GetUserId();
var user = userService.GetUser(userid);
var role = roleService.GetUserRole(user.UserID);
var result = new List<Dictionary<string, string>>();
if (role.Any(t => roleType.Contains(t.Type.Value)))
result = employeeService.GetOtherPerStats(allotId,user.Department??"");
else
result = employeeService.GetOtherPerStats(allotId);
return new ApiResponse(ResponseType.OK, result);
} }
#endregion #endregion
......
...@@ -8,7 +8,7 @@ public JobRegistry() ...@@ -8,7 +8,7 @@ public JobRegistry()
{ {
//Schedule<ExtractDataJob>().ToRunNow().AndEvery(1).Days().At(23, 0); //Schedule<ExtractDataJob>().ToRunNow().AndEvery(1).Days().At(23, 0);
//Schedule<ExtractDataJob>().ToRunEvery(1).Days().At(23, 0); //Schedule<ExtractDataJob>().ToRunEvery(1).Days().At(23, 0);
Schedule<ExtractGenerateJob>().ToRunEvery(1).Days().At(1, 0); Schedule<ExtractGenerateJob>().ToRunEvery(1).Days().At(14, 00);
} }
} }
} }
...@@ -87,6 +87,9 @@ public void ConfigureServices(IServiceCollection services) ...@@ -87,6 +87,9 @@ public void ConfigureServices(IServiceCollection services)
policy.SetIsOriginAllowed(origin => true).AllowAnyHeader().AllowAnyMethod().AllowCredentials(); policy.SetIsOriginAllowed(origin => true).AllowAnyHeader().AllowAnyMethod().AllowCredentials();
}); });
}); });
// fluentscheduler
services.AddFluentSchedulerConfiguration();
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
......
...@@ -179,6 +179,12 @@ ...@@ -179,6 +179,12 @@
<member name="F:Performance.DtoModels.DataFormat.小数"> <member name="F:Performance.DtoModels.DataFormat.小数">
<summary> 小数 </summary> <summary> 小数 </summary>
</member> </member>
<member name="F:Performance.DtoModels.DataFormat.小数1">
<summary> 小数 </summary>
</member>
<member name="F:Performance.DtoModels.DataFormat.整数">
<summary> 整数 </summary>
</member>
<member name="F:Performance.DtoModels.DataFormat.货币"> <member name="F:Performance.DtoModels.DataFormat.货币">
<summary> 货币 </summary> <summary> 货币 </summary>
</member> </member>
...@@ -836,6 +842,12 @@ ...@@ -836,6 +842,12 @@
<member name="F:Performance.DtoModels.SheetType.Assess"> <member name="F:Performance.DtoModels.SheetType.Assess">
<summary> 考核 </summary> <summary> 考核 </summary>
</member> </member>
<member name="F:Performance.DtoModels.SheetType.DoctorIncome">
<summary> 医生收入 </summary>
</member>
<member name="F:Performance.DtoModels.SheetType.Custom">
<summary> 自定义抽取模板 </summary>
</member>
<member name="T:Performance.DtoModels.AccountUnitType"> <member name="T:Performance.DtoModels.AccountUnitType">
<summary> <summary>
核算单元类型 核算单元类型
...@@ -3690,6 +3702,11 @@ ...@@ -3690,6 +3702,11 @@
夜班工作量绩效 夜班工作量绩效
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.SecPrintResponse.ReservedRatio">
<summary>
预留比例
</summary>
</member>
<member name="P:Performance.DtoModels.SecPrintResponse.RealAmount"> <member name="P:Performance.DtoModels.SecPrintResponse.RealAmount">
<summary> <summary>
实发绩效工资金额 实发绩效工资金额
......
...@@ -100,6 +100,9 @@ ...@@ -100,6 +100,9 @@
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_drugtype"> <member name="P:Performance.EntityModels.PerformanceDbContext.cof_drugtype">
<summary> 药占比费用列头名称 </summary> <summary> 药占比费用列头名称 </summary>
</member> </member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_drugtype_factor">
<summary> 药占比费用列头名称系数 </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_guarantee"> <member name="P:Performance.EntityModels.PerformanceDbContext.cof_guarantee">
<summary> 保底科室配置 </summary> <summary> 保底科室配置 </summary>
</member> </member>
...@@ -1894,6 +1897,51 @@ ...@@ -1894,6 +1897,51 @@
费用类别 费用类别
</summary> </summary>
</member> </member>
<member name="T:Performance.EntityModels.cof_drugtype_factor">
<summary>
药占比费用列头名称
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.ID">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.HospitalId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.AllotID">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.Charge">
<summary>
费用名称
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.ExModuleId">
<summary>
收入类型
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.YSZ">
<summary>
医生组
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.HLZ">
<summary>
护理组
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.YJZ">
<summary>
医技组
</summary>
</member>
<member name="T:Performance.EntityModels.cof_guarantee"> <member name="T:Performance.EntityModels.cof_guarantee">
<summary> <summary>
保底科室配置 保底科室配置
...@@ -7529,6 +7577,61 @@ ...@@ -7529,6 +7577,61 @@
</summary> </summary>
</member> </member>
<member name="T:Performance.EntityModels.view_dic_category_factor">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.ID">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.HospitalId">
<summary>
医院id
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.AllotID">
<summary>
绩效id
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.Charge">
<summary>
费用名称
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.ChargeType">
<summary>
费用类别
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.ExModuleId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.ModuleName">
<summary>
模块名称
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.YSZ">
<summary>
医生组系数
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.HLZ">
<summary>
护理组系数
</summary>
</member>
<member name="P:Performance.EntityModels.view_dic_category_factor.YJZ">
<summary>
医技组系数
</summary>
</member>
<member name="P:Performance.EntityModels.HisData.HisDepartment"> <member name="P:Performance.EntityModels.HisData.HisDepartment">
<summary> <summary>
His科室 His科室
......
...@@ -99,6 +99,10 @@ public enum DataFormat ...@@ -99,6 +99,10 @@ public enum DataFormat
普通格式, 普通格式,
/// <summary> 小数 </summary> /// <summary> 小数 </summary>
小数, 小数,
/// <summary> 小数 </summary>
小数1,
/// <summary> 整数 </summary>
整数,
/// <summary> 货币 </summary> /// <summary> 货币 </summary>
货币, 货币,
/// <summary> 百分比 </summary> /// <summary> 百分比 </summary>
......
...@@ -6,23 +6,35 @@ ...@@ -6,23 +6,35 @@
namespace Performance.DtoModels namespace Performance.DtoModels
{ {
public class HandsonTable public class HandsonTableBase
{
public HandsonTableBase()
{
ColHeaders = new List<string>();
Columns = new List<HandsonColumn>();
Data = new List<Dictionary<string, object>>();
NestedHeadersArray = new object[] { };
}
public List<string> ColHeaders { get; set; }
public List<Dictionary<string, object>> Data { get; set; }
public List<HandsonColumn> Columns { get; set; }
public object[] NestedHeadersArray { get; set; }
}
public class HandsonTable : HandsonTableBase
{ {
private IEnumerable<collect_permission> _permissions; private IEnumerable<collect_permission> _permissions;
private List<Dictionary<string, string>> _data;
public HandsonTable(int sheetType, string[] cols, List<collect_permission> permissions) public HandsonTable(int sheetType, string[] cols, List<collect_permission> permissions)
: base()
{ {
_permissions = permissions; _permissions = permissions;
_data = new List<Dictionary<string, string>>();
InitColHeaders(sheetType, cols); InitColHeaders(sheetType, cols);
InitColumns(permissions); InitColumns(permissions);
} }
public string[] ColHeaders { get; private set; }
public List<Dictionary<string, string>> Data => _data;
public HandsonColumn[] Columns { get; private set; }
/// <summary> /// <summary>
/// ///
...@@ -43,7 +55,7 @@ public void SetRowData(IEnumerable<HandsonRowData> datas, bool isTypein) ...@@ -43,7 +55,7 @@ public void SetRowData(IEnumerable<HandsonRowData> datas, bool isTypein)
else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower())) else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower()))
dic[item.Name.ToLower()] = item.Value?.ToString() ?? ""; dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
} }
_data.Add(dic); Data.Add(dic);
} }
} }
...@@ -68,7 +80,7 @@ private void InitColHeaders(int sheetType, string[] cols) ...@@ -68,7 +80,7 @@ private void InitColHeaders(int sheetType, string[] cols)
if (!_permissions.Any(w => w.HeadName.ToLower() == item && w.Visible == 1)) if (!_permissions.Any(w => w.HeadName.ToLower() == item && w.Visible == 1))
necessitys.Remove(item); necessitys.Remove(item);
} }
ColHeaders = necessitys.ToArray(); ColHeaders = necessitys;
} }
private void InitColumns(List<collect_permission> permissions) private void InitColumns(List<collect_permission> permissions)
...@@ -80,12 +92,12 @@ private void InitColumns(List<collect_permission> permissions) ...@@ -80,12 +92,12 @@ private void InitColumns(List<collect_permission> permissions)
var readnoly = _permissions.FirstOrDefault(f => f.HeadName == item)?.Readnoly == 1; var readnoly = _permissions.FirstOrDefault(f => f.HeadName == item)?.Readnoly == 1;
columns.Add(new HandsonColumn(item.ToLower(), readnoly)); columns.Add(new HandsonColumn(item.ToLower(), readnoly));
} }
Columns = columns.ToArray(); Columns = columns;
} }
private Dictionary<string, string> CreateDataRow(string key, string value) private Dictionary<string, object> CreateDataRow(string key, string value)
{ {
var temp = new Dictionary<string, string>() { { key, value } }; var temp = new Dictionary<string, object>() { { key, value } };
foreach (var item in ColHeaders) foreach (var item in ColHeaders)
{ {
if (!temp.ContainsKey(item)) if (!temp.ContainsKey(item))
...@@ -113,6 +125,16 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat ...@@ -113,6 +125,16 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat
NumericFormat = new NumericFormat { Pattern = "0,00.00" }; NumericFormat = new NumericFormat { Pattern = "0,00.00" };
break; break;
case DataFormat.小数1:
Type = "numeric";
NumericFormat = new NumericFormat { Pattern = "0,00.0" };
break;
case DataFormat.整数:
Type = "numeric";
NumericFormat = new NumericFormat { Pattern = "0,00" };
break;
case DataFormat.百分比: case DataFormat.百分比:
Type = "numeric"; Type = "numeric";
NumericFormat = new NumericFormat { Pattern = "0,00.00%" }; NumericFormat = new NumericFormat { Pattern = "0,00.00%" };
...@@ -124,7 +146,7 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat ...@@ -124,7 +146,7 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat
public bool ReadOnly { get; set; } public bool ReadOnly { get; set; }
public string Type { get; set; } public string Type { get; set; }
public string[] Source { get; set; } public string[] Source { get; set; }
public bool Strict { get; set; } = false; public bool Strict { get; set; } = false;
public NumericFormat NumericFormat { get; set; } public NumericFormat NumericFormat { get; set; }
} }
...@@ -163,4 +185,17 @@ public HandsonCellData(string name, object value) ...@@ -163,4 +185,17 @@ public HandsonCellData(string name, object value)
public string Name { get; set; } public string Name { get; set; }
public object Value { get; set; } public object Value { get; set; }
} }
public class NestedHeader
{
public NestedHeader(string label, int colspan)
{
Label = label;
Colspan = colspan;
}
public string Label { get; set; }
public int Colspan { get; set; }
}
} }
...@@ -187,6 +187,14 @@ public enum SheetType ...@@ -187,6 +187,14 @@ public enum SheetType
/// <summary> 考核 </summary> /// <summary> 考核 </summary>
[Description("考核")] [Description("考核")]
Assess = 38, //该参数作用类似于 其他工作量 Assess = 38, //该参数作用类似于 其他工作量
/// <summary> 医生收入 </summary>
[Description("医生收入")]
DoctorIncome = 100,
/// <summary> 自定义抽取模板 </summary>
[Description("自定义抽取模板")]
Custom = 101,
} }
/// <summary> /// <summary>
......
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class DrugtypeFactorRequest
{
public int HospitalId { get; set; }
public int AllotId { get; set; }
public List<Dictionary<string, object>> Data { get; set; }
}
}
...@@ -47,6 +47,10 @@ public class SecPrintResponse ...@@ -47,6 +47,10 @@ public class SecPrintResponse
/// </summary> /// </summary>
public decimal? NightWorkPerformance { get; set; } public decimal? NightWorkPerformance { get; set; }
/// <summary> /// <summary>
/// 预留比例
/// </summary>
public decimal? ReservedRatio { get; set; }
/// <summary>
/// 实发绩效工资金额 /// 实发绩效工资金额
/// </summary> /// </summary>
public decimal? RealAmount { get; set; } public decimal? RealAmount { get; set; }
......
...@@ -73,6 +73,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options) ...@@ -73,6 +73,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<cof_drugprop> cof_drugprop { get; set; } public virtual DbSet<cof_drugprop> cof_drugprop { get; set; }
/// <summary> 药占比费用列头名称 </summary> /// <summary> 药占比费用列头名称 </summary>
public virtual DbSet<cof_drugtype> cof_drugtype { get; set; } public virtual DbSet<cof_drugtype> cof_drugtype { get; set; }
/// <summary> 药占比费用列头名称系数 </summary>
public virtual DbSet<cof_drugtype_factor> cof_drugtype_factor { get; set; }
/// <summary> 保底科室配置 </summary> /// <summary> 保底科室配置 </summary>
public virtual DbSet<cof_guarantee> cof_guarantee { get; set; } public virtual DbSet<cof_guarantee> cof_guarantee { get; set; }
/// <summary> </summary> /// <summary> </summary>
......
//-----------------------------------------------------------------------
// <copyright file=" cof_drugtype_factor.cs">
// * FileName: 药占比费用列头名称.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 药占比费用列头名称
/// </summary>
[Table("cof_drugtype_factor")]
public class cof_drugtype_factor
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> HospitalId { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
/// 费用名称
/// </summary>
public string Charge { get; set; }
/// <summary>
/// 收入类型
/// </summary>
public Nullable<int> ExModuleId { get; set; }
/// <summary>
/// 医生组
/// </summary>
public Nullable<decimal> YSZ { get; set; }
/// <summary>
/// 护理组
/// </summary>
public Nullable<decimal> HLZ { get; set; }
/// <summary>
/// 医技组
/// </summary>
public Nullable<decimal> YJZ { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" view_dic_category_factor.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("view_dic_category_factor")]
public class view_dic_category_factor
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
/// 医院id
/// </summary>
public int HospitalId { get; set; }
/// <summary>
/// 绩效id
/// </summary>
public int AllotID { get; set; }
/// <summary>
/// 费用名称
/// </summary>
public string Charge { get; set; }
/// <summary>
/// 费用类别
/// </summary>
public string ChargeType { get; set; }
/// <summary>
///
/// </summary>
public int ExModuleId { get; set; }
/// <summary>
/// 模块名称
/// </summary>
public string ModuleName { get; set; }
/// <summary>
/// 医生组系数
/// </summary>
public Nullable<decimal> YSZ { get; set; }
/// <summary>
/// 护理组系数
/// </summary>
public Nullable<decimal> HLZ { get; set; }
/// <summary>
/// 医技组系数
/// </summary>
public Nullable<decimal> YJZ { get; set; }
}
}
...@@ -219,5 +219,11 @@ union all ...@@ -219,5 +219,11 @@ union all
return flag; return flag;
} }
} }
public IEnumerable<view_dic_category_factor> QueryCategoryFactor(int hospitalId, int allotId)
{
return DapperQuery<view_dic_category_factor>("select * from view_dic_category_factor where hospitalid = @hospitalid and allotid = @allotid;", new { hospitalId, allotId });
}
} }
} }
//-----------------------------------------------------------------------
// <copyright file=" cof_drugtype_factor.cs">
// * FileName: cof_drugtype_factor.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// cof_drugtype_factor Repository
/// </summary>
public partial class PerforCofdrugtypefactorRepository : PerforRepository<cof_drugtype_factor>
{
public PerforCofdrugtypefactorRepository(PerformanceDbContext context) : base(context)
{
}
}
}
...@@ -891,7 +891,7 @@ public List<ComputeResponse> AllCompute(int allotId, int hospitalId, int isShowM ...@@ -891,7 +891,7 @@ public List<ComputeResponse> AllCompute(int allotId, int hospitalId, int isShowM
item.ReservedRatioFee = Math.Round(real * (item.ReservedRatio ?? 0), 2, MidpointRounding.AwayFromZero); item.ReservedRatioFee = Math.Round(real * (item.ReservedRatio ?? 0), 2, MidpointRounding.AwayFromZero);
item.RealGiveFee = Math.Round(item.ShouldGiveFee - (item.ReservedRatioFee ?? 0) ?? 0, 2, MidpointRounding.AwayFromZero); item.RealGiveFee = Math.Round(item.ShouldGiveFee - (item.ReservedRatioFee ?? 0) ?? 0, 2, MidpointRounding.AwayFromZero);
// 姓名始终按人员字典显示 // 姓名始终按人员字典显示
item.EmployeeName = employees?.FirstOrDefault(w => w.PersonnelNumber == item.JobNumber)?.DoctorName ?? ""; //item.EmployeeName = employees?.FirstOrDefault(w => w.PersonnelNumber == item.JobNumber)?.DoctorName ?? "";
item.BankCard = employees?.FirstOrDefault(w => w.PersonnelNumber == item.JobNumber)?.BankCard ?? ""; item.BankCard = employees?.FirstOrDefault(w => w.PersonnelNumber == item.JobNumber)?.BankCard ?? "";
// 人员信息使用人员字典中数据 // 人员信息使用人员字典中数据
if (isEmpDic) if (isEmpDic)
...@@ -902,7 +902,7 @@ public List<ComputeResponse> AllCompute(int allotId, int hospitalId, int isShowM ...@@ -902,7 +902,7 @@ public List<ComputeResponse> AllCompute(int allotId, int hospitalId, int isShowM
} }
} }
response.RemoveAll(w => w.PerforSumFee == 0 && w.PerforManagementFee == 0 && w.ShouldGiveFee == 0 && w.OthePerfor == 0 && w.HideOtherPerfor == 0 && w.RealGiveFee == 0); response.RemoveAll(w => w.PerforSumFee == 0 && w.PerforManagementFee == 0 && w.ShouldGiveFee == 0 && w.OthePerfor == 0 && w.HideOtherPerfor == 0 && w.RealGiveFee == 0);
return response?.OrderByDescending(t => t.UnitType).ThenBy(t => t.AccountingUnit).ToList(); return response?.OrderByDescending(t => t.AccountingUnit).ToList();
} }
///// <summary> ///// <summary>
......
...@@ -267,7 +267,7 @@ public IEnumerable<dynamic> QueryData(sys_hospitalconfig config, string execsql, ...@@ -267,7 +267,7 @@ public IEnumerable<dynamic> QueryData(sys_hospitalconfig config, string execsql,
/// </summary> /// </summary>
/// <param name="allot"></param> /// <param name="allot"></param>
/// <returns></returns> /// <returns></returns>
private Dictionary<string, string> GetParameters(per_allot allot) public Dictionary<string, string> GetParameters(per_allot allot)
{ {
DateTime beginTime = new DateTime(allot.Year, allot.Month, 1); DateTime beginTime = new DateTime(allot.Year, allot.Month, 1);
......
...@@ -665,10 +665,12 @@ public List<TitleValue> GetPerforTypeDict(int allotId) ...@@ -665,10 +665,12 @@ public List<TitleValue> GetPerforTypeDict(int allotId)
/// </summary> /// </summary>
/// <param name="allotId"></param> /// <param name="allotId"></param>
/// <returns></returns> /// <returns></returns>
public List<Dictionary<string, string>> GetOtherPerStats(int allotId) public List<Dictionary<string, string>> GetOtherPerStats(int allotId, string department=null)
{ {
var others = new List<Dictionary<string, string>>(); var others = new List<Dictionary<string, string>>();
var aprAmountList = perapramountRepository.GetFullAmount(w => w.AllotId == allotId && w.Status == 3); var aprAmountList = perapramountRepository.GetFullAmount(w => w.AllotId == allotId && w.Status == 3);
if (department != null)
aprAmountList = aprAmountList.Where(t => t.AccountingUnit == department).ToList();
var perForType = aprAmountList.Select(t => t.PerforType).Distinct(); var perForType = aprAmountList.Select(t => t.PerforType).Distinct();
foreach (var num in aprAmountList.Select(t => t.PersonnelNumber).Distinct()) foreach (var num in aprAmountList.Select(t => t.PersonnelNumber).Distinct())
......
...@@ -82,7 +82,7 @@ public List<ex_module> QueryModule(int hospitalId) ...@@ -82,7 +82,7 @@ public List<ex_module> QueryModule(int hospitalId)
return list; return list;
} }
private void DefaultModules(int hospitalId) public void DefaultModules(int hospitalId)
{ {
var moduleList = new ex_module[] var moduleList = new ex_module[]
{ {
...@@ -552,7 +552,8 @@ public List<TitleValue> FeeType() ...@@ -552,7 +552,8 @@ public List<TitleValue> FeeType()
(int)SheetType.Expend, (int)SheetType.Expend,
(int)SheetType.Workload, (int)SheetType.Workload,
(int)SheetType.SpecialUnit, (int)SheetType.SpecialUnit,
(int)SheetType.OtherWorkload (int)SheetType.OtherWorkload,
(int)SheetType.Custom
}.Contains(t.Value)); }.Contains(t.Value));
if (type != null && type.Any()) if (type != null && type.Any())
{ {
......
...@@ -21,5 +21,19 @@ public class SpecialUnitColumns ...@@ -21,5 +21,19 @@ public class SpecialUnitColumns
public const string AssessBefore = "考核前绩效"; public const string AssessBefore = "考核前绩效";
public const string Avg = "人均"; public const string Avg = "人均";
#region Extend
public const string AssessBeforeTotal = "考核前绩效合计";
public const string NewAvg = "新人均";
public const string OldPerformanceTotal = "旧绩效合计";
public const string OldAvg = "旧人均";
public const string AvgDifference = "人均差额";
#endregion
} }
} }
...@@ -105,7 +105,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s ...@@ -105,7 +105,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
dataFirstRowNum = point.DataFirstRowNum.Value + rows.Count; dataFirstRowNum = point.DataFirstRowNum.Value + rows.Count;
} }
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return; if (data == null || !data.Any()) return;
WriteSheetDataNonexistent(sheet, columnHeader, point, sheetType, style, headers, data, dataFirstRowNum); WriteSheetDataNonexistent(sheet, columnHeader, point, sheetType, style, headers, data, dataFirstRowNum);
} }
...@@ -150,7 +150,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s ...@@ -150,7 +150,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var value = deptData.FirstOrDefault(t => t.Category.NoBlank() == column)?.Value; var value = deptData.FirstOrDefault(t => t.Category.NoBlank() == column)?.Value;
//数据为空,且单元格值不为空,不写入数据(保留原始值) //数据为空,且单元格值不为空,不写入数据(保留原始值)
var notWrite = !value.HasValue && !string.IsNullOrEmpty(cell.ToString()); var notWrite = !value.HasValue && !string.IsNullOrEmpty(cell.ToString());
if (cell.CellType != CellType.Formula && !notWrite) if (/*cell.CellType != CellType.Formula && */!notWrite)
{ {
cell.SetCellValue<decimal>(value); cell.SetCellValue<decimal>(value);
if (headers != null && headers.Contains(column)) if (headers != null && headers.Contains(column))
...@@ -171,7 +171,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s ...@@ -171,7 +171,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
private static void WriteSheetDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style, private static void WriteSheetDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
List<string> headers, List<ExtractTransDto> data, int dataFirstRowNum) List<string> headers, List<ExtractTransDto> data, int dataFirstRowNum)
{ {
var departments = data.Select(s => s.Department).Where(w => !string.IsNullOrEmpty(w)).Distinct().ToList(); var departments = data.Select(s => s.Department ?? "")/*.Where(w => !string.IsNullOrEmpty(w))*/.Distinct().ToList();
var filed = sheet.SheetName.Contains("住院") ? fieldInpat : fieldOut; var filed = sheet.SheetName.Contains("住院") ? fieldInpat : fieldOut;
if (sheet.SheetName.Contains("工作量")) if (sheet.SheetName.Contains("工作量"))
...@@ -186,7 +186,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s ...@@ -186,7 +186,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
foreach (string department in departments) foreach (string department in departments)
{ {
var deptData = data.Where(t => t.Department == department); var deptData = data.Where(t => (t.Department ?? "") == department);
if (deptData == null || !deptData.Any()) continue; if (deptData == null || !deptData.Any()) continue;
var row = sheet.GetOrCreate(dataFirstRowNum); var row = sheet.GetOrCreate(dataFirstRowNum);
...@@ -327,7 +327,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType ...@@ -327,7 +327,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
dataFirstRowNum = point.DataFirstRowNum.Value + rows.Count; dataFirstRowNum = point.DataFirstRowNum.Value + rows.Count;
} }
if (data == null || !data.Any(t => !string.IsNullOrEmpty(t.Department))) return; if (data == null || !data.Any()) return;
WriteCollectDataNonexistent(sheet, columnHeader, point, sheetType, style, headers, data, dataFirstRowNum); WriteCollectDataNonexistent(sheet, columnHeader, point, sheetType, style, headers, data, dataFirstRowNum);
} }
...@@ -393,7 +393,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType ...@@ -393,7 +393,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
private static void WriteCollectDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style, private static void WriteCollectDataNonexistent(ISheet sheet, IRow columnHeader, PerSheetPoint point, SheetType sheetType, ExcelStyle style,
List<string> headers, List<collect_data> data, int dataFirstRowNum) List<string> headers, List<collect_data> data, int dataFirstRowNum)
{ {
var departments = data.Select(s => s.Department).Where(w => !string.IsNullOrEmpty(w)).Distinct().ToList(); var departments = data.Select(s => s.Department ?? "")/*.Where(w => !string.IsNullOrEmpty(w))*/.Distinct().ToList();
var filed = new SheetType[] { SheetType.Workload, SheetType.OtherWorkload }.Contains(sheetType) var filed = new SheetType[] { SheetType.Workload, SheetType.OtherWorkload }.Contains(sheetType)
? collectWork ? collectWork
...@@ -406,7 +406,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType ...@@ -406,7 +406,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
foreach (string department in departments) foreach (string department in departments)
{ {
var deptData = data.Where(t => t.Department == department); var deptData = data.Where(t => (t.Department ?? "") == department);
if (deptData == null || !deptData.Any()) continue; if (deptData == null || !deptData.Any()) continue;
var row = sheet.GetOrCreate(dataFirstRowNum); var row = sheet.GetOrCreate(dataFirstRowNum);
......
...@@ -130,7 +130,7 @@ public void ExportFile() ...@@ -130,7 +130,7 @@ public void ExportFile()
string extractFilePath = extractService.Main(allot.ID, allot.HospitalId, "", "User" + userId, filePath, isSingle); string extractFilePath = extractService.Main(allot.ID, allot.HospitalId, "", "User" + userId, filePath, isSingle);
if (string.IsNullOrEmpty(extractFilePath) || !FileHelper.IsExistFile(extractFilePath)) return; if (string.IsNullOrEmpty(extractFilePath) || !FileHelper.IsExistFile(extractFilePath)) return;
ImportFile(allot, filePath); ImportFile(allot, extractFilePath);
allotService.Generate(allot); allotService.Generate(allot);
} }
......
...@@ -21,6 +21,7 @@ public class ExtractService : IAutoInjection ...@@ -21,6 +21,7 @@ public class ExtractService : IAutoInjection
private readonly PerSheetService perSheetService; private readonly PerSheetService perSheetService;
private readonly CostTransferDataWrite costTransfer; private readonly CostTransferDataWrite costTransfer;
private readonly DictionaryService dictionaryService; private readonly DictionaryService dictionaryService;
private readonly CustomDataWrite customDataWrite;
private readonly PerforPerallotRepository perallotRepository; private readonly PerforPerallotRepository perallotRepository;
private readonly PerforCollectdataRepository collectdataRepository; private readonly PerforCollectdataRepository collectdataRepository;
private readonly PerforPeremployeeRepository peremployeeRepository; private readonly PerforPeremployeeRepository peremployeeRepository;
...@@ -34,6 +35,7 @@ public class ExtractService : IAutoInjection ...@@ -34,6 +35,7 @@ public class ExtractService : IAutoInjection
PerSheetService perSheetService, PerSheetService perSheetService,
CostTransferDataWrite costTransfer, CostTransferDataWrite costTransfer,
DictionaryService dictionaryService, DictionaryService dictionaryService,
CustomDataWrite customDataWrite,
PerforPerallotRepository perallotRepository, PerforPerallotRepository perallotRepository,
PerforCollectdataRepository collectdataRepository, PerforCollectdataRepository collectdataRepository,
PerforPeremployeeRepository peremployeeRepository, PerforPeremployeeRepository peremployeeRepository,
...@@ -47,6 +49,7 @@ PerforPerdeptdicRepository perdeptdicRepository ...@@ -47,6 +49,7 @@ PerforPerdeptdicRepository perdeptdicRepository
this.perSheetService = perSheetService; this.perSheetService = perSheetService;
this.costTransfer = costTransfer; this.costTransfer = costTransfer;
this.dictionaryService = dictionaryService; this.dictionaryService = dictionaryService;
this.customDataWrite = customDataWrite;
this.perallotRepository = perallotRepository; this.perallotRepository = perallotRepository;
this.collectdataRepository = collectdataRepository; this.collectdataRepository = collectdataRepository;
this.peremployeeRepository = peremployeeRepository; this.peremployeeRepository = peremployeeRepository;
...@@ -146,19 +149,19 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD ...@@ -146,19 +149,19 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD
var types = new List<SheetType> { SheetType.OtherIncome, SheetType.Income, SheetType.Expend, SheetType.Workload, SheetType.OtherWorkload/*, SheetType.AccountBasic*/ }; var types = new List<SheetType> { SheetType.OtherIncome, SheetType.Income, SheetType.Expend, SheetType.Workload, SheetType.OtherWorkload/*, SheetType.AccountBasic*/ };
decimal ratio = 60m; decimal ratio = 60m;
string accountBasicSheetName = ""; //string accountBasicSheetName = "";
for (int sheetIndex = 0; sheetIndex < workbook.NumberOfSheets; sheetIndex++) //for (int sheetIndex = 0; sheetIndex < workbook.NumberOfSheets; sheetIndex++)
{ //{
var sheetName = workbook.GetSheetAt(sheetIndex).SheetName; // var sheetName = workbook.GetSheetAt(sheetIndex).SheetName;
if (!sheetName.StartsWith("4.1")) // if (!sheetName.StartsWith("4.1"))
continue; // continue;
accountBasicSheetName = sheetName; // accountBasicSheetName = sheetName;
break; // break;
} //}
var accountBasicSheet = workbook.GetSheet(accountBasicSheetName); //var accountBasicSheet = workbook.GetSheet(accountBasicSheetName);
HandleSheet(workbook, allot, exdict, extractDto, groupName, isSingle, accountBasicSheet, ratio, types, factory, style, employeeDict, collectData); //HandleSheet(workbook, allot, exdict, extractDto, groupName, isSingle, accountBasicSheet, ratio, types, factory, style, employeeDict, collectData);
for (int sheetIndex = 0; sheetIndex < workbook.NumberOfSheets; sheetIndex++) for (int sheetIndex = 0; sheetIndex < workbook.NumberOfSheets; sheetIndex++)
{ {
...@@ -166,6 +169,8 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD ...@@ -166,6 +169,8 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD
HandleSheet(workbook, allot, exdict, extractDto, groupName, isSingle, sheet, ratio, types, factory, style, employeeDict, collectData); HandleSheet(workbook, allot, exdict, extractDto, groupName, isSingle, sheet, ratio, types, factory, style, employeeDict, collectData);
} }
customDataWrite.WriteDataToCustom(workbook, allot, style);
} }
private void HandleSheet(IWorkbook workbook, per_allot allot, Dictionary<ExDataDict, object> exdict, List<ExtractTransDto> extractDto, string groupName, bool isSingle, private void HandleSheet(IWorkbook workbook, per_allot allot, Dictionary<ExDataDict, object> exdict, List<ExtractTransDto> extractDto, string groupName, bool isSingle,
...@@ -245,6 +250,12 @@ private List<ExtractTransDto> StandDataFormat(int hospitalId, List<ex_result> re ...@@ -245,6 +250,12 @@ private List<ExtractTransDto> StandDataFormat(int hospitalId, List<ex_result> re
{ {
if (results == null || !results.Any()) return new List<ExtractTransDto>(); if (results == null || !results.Any()) return new List<ExtractTransDto>();
results.ForEach(t =>
{
t.Category = string.IsNullOrEmpty(t.Category) ? "(空白)" : t.Category;
t.Department = string.IsNullOrEmpty(t.Department) ? "(空白)" : t.Department;
});
var dict = personService.GetDepartments(hospitalId)?.ToList(); var dict = personService.GetDepartments(hospitalId)?.ToList();
if (dict == null || !dict.Any()) if (dict == null || !dict.Any())
return results.GroupBy(t => new { t.Department, t.Category, t.Source }).Select(t => new ExtractTransDto return results.GroupBy(t => new { t.Department, t.Category, t.Source }).Select(t => new ExtractTransDto
......
...@@ -125,7 +125,7 @@ private List<int> GetQueryScriptIds(int hospitalId, ref Dictionary<ExDataDict, o ...@@ -125,7 +125,7 @@ private List<int> GetQueryScriptIds(int hospitalId, ref Dictionary<ExDataDict, o
{ {
var extypeIds = new List<int>(); var extypeIds = new List<int>();
var modules = exmoduleRepository.GetEntities(t => t.HospitalId == hospitalId); var modules = exmoduleRepository.GetEntities(t => t.HospitalId == hospitalId && t.SheetType != (int)SheetType.Custom);
var items = new List<ex_item>(); var items = new List<ex_item>();
if (modules != null && modules.Any()) if (modules != null && modules.Any())
{ {
......
using Microsoft.Extensions.Logging;
using NPOI.SS.UserModel;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Performance.Services.ExtractExcelService.SheetDataWrite
{
public class CustomDataWrite : IAutoInjection
{
private readonly ILogger<CustomDataWrite> logger;
private readonly PerforHospitalconfigRepository hospitalconfigRepository;
private readonly PerforExmoduleRepository exmoduleRepository;
private readonly PerforExscriptRepository exscriptRepository;
private readonly CustomExtractService customExtractService;
public CustomDataWrite(
ILogger<CustomDataWrite> logger,
PerforHospitalconfigRepository hospitalconfigRepository,
PerforExmoduleRepository exmoduleRepository,
PerforExscriptRepository exscriptRepository,
CustomExtractService customExtractService
)
{
this.logger = logger;
this.hospitalconfigRepository = hospitalconfigRepository;
this.exmoduleRepository = exmoduleRepository;
this.exscriptRepository = exscriptRepository;
this.customExtractService = customExtractService;
}
public PerSheetPoint Point => new PerSheetPoint
{
HeaderFirstRowNum = 1,
HeaderFirstCellNum = 6,
DataFirstRowNum = 2,
DataFirstCellNum = 6,
};
public void WriteDataToCustom(IWorkbook workbook, per_allot allot, ExcelStyle style)
{
var modules = exmoduleRepository.GetEntities(t => t.SheetType == (int)SheetType.Custom)?.OrderBy(t => t.ModuleName);
if (modules == null || !modules.Any()) return;
var exscripts = exscriptRepository.GetEntities(t => modules.Select(s => s.TypeId).Contains(t.TypeId));
if (exscripts == null || !exscripts.Any()) return;
var configs = hospitalconfigRepository.GetEntities(t => t.HospitalId == allot.HospitalId);
if (configs == null || !configs.Any()) throw new Exception("医院未配置绩效抽取信息");
var parameters = customExtractService.GetParameters(allot);
var headerStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.列头);
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
foreach (var module in modules)
{
var sheet = workbook.GetSheet(module.ModuleName) ?? workbook.GetSheet(module.ModuleName.NoBlank());
if (sheet == null)
{
sheet = workbook.CreateSheet(module.ModuleName);
workbook.SetSheetOrder(sheet.SheetName, workbook.NumberOfSheets - 1);
}
var exscript = exscripts.FirstOrDefault(t => t.TypeId == module.TypeId);
if (exscript == null) continue;
var conf = configs.FirstOrDefault(w => w.Id == (module.ConfigId ?? exscript.ConfigId));
if (conf == null) continue;
var execsql = exscript.ExecScript;
var dynamics = customExtractService.QueryData(conf, execsql, parameters);
try
{
// 没数据跳过
if (dynamics == null || dynamics.Count() == 0)
continue;
var first = (IDictionary<string, object>)dynamics.ElementAt(0);
var header = sheet.GetOrCreate(Point.HeaderFirstRowNum.Value);
if (header != null)
{
var cellindex = Point.HeaderFirstCellNum.Value;
foreach (var item in first)
{
var cell = header.GetOrCreate(cellindex);
cell.SetCellOValue(item.Key);
cell.CellStyle = headerStyle;
cellindex++;
}
}
var rowindex = Point.DataFirstRowNum.Value;
for (int r = 0; r < dynamics.Count(); r++)
{
var temp = (IDictionary<string, object>)dynamics.ElementAt(r); // 行数据
var row = sheet.GetOrCreate(rowindex);
var cellindex = Point.DataFirstCellNum.Value;
foreach (var item in temp)
{
var cell = row.GetOrCreate(cellindex);
cell.SetCellOValue(item.Value);
cell.CellStyle = cellStyle;
cellindex++;
}
rowindex++;
}
}
catch (Exception ex)
{
logger.LogError($"自定义模板 - {sheet.SheetName}抽取异常:" + ex);
}
}
}
}
}
...@@ -44,7 +44,7 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp ...@@ -44,7 +44,7 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
if (data is List<ExtractTransDto> extractDto && extractDto.Any()) if (data is List<ExtractTransDto> extractDto && extractDto.Any())
{ {
var headers = extractDto.Select(t => t.Category.Trim()).Distinct() var headers = extractDto.Select(t => t.Category?.Trim() ?? "").Distinct()
.Select(t => new ExcelHeader .Select(t => new ExcelHeader
{ {
ColumnName = t, ColumnName = t,
......
...@@ -329,8 +329,13 @@ private void AddMergedRegion(ISheet sheet, List<SpecialCellRange> ranges, List<s ...@@ -329,8 +329,13 @@ private void AddMergedRegion(ISheet sheet, List<SpecialCellRange> ranges, List<s
SpecialUnitColumns.Department, SpecialUnitColumns.Department,
SpecialUnitColumns.PeopleNumber, SpecialUnitColumns.PeopleNumber,
SpecialUnitColumns.AdjustFactor, SpecialUnitColumns.AdjustFactor,
SpecialUnitColumns.AssessBefore, //SpecialUnitColumns.AssessBefore,
SpecialUnitColumns.Avg SpecialUnitColumns.Avg,
SpecialUnitColumns.AssessBeforeTotal,
SpecialUnitColumns.NewAvg,
SpecialUnitColumns.OldPerformanceTotal,
SpecialUnitColumns.OldAvg,
SpecialUnitColumns.AvgDifference
}.Select(t => columns.IndexOf(t)); }.Select(t => columns.IndexOf(t));
if (columnIndexs == null || !columnIndexs.Any(t => t > -1)) return; if (columnIndexs == null || !columnIndexs.Any(t => t > -1)) return;
......
...@@ -36,9 +36,9 @@ public ISheetDataWrite GetWriteData(SheetType sheetType, ILogger logger) ...@@ -36,9 +36,9 @@ public ISheetDataWrite GetWriteData(SheetType sheetType, ILogger logger)
factory = new WorkloadDataWrite(logger); factory = new WorkloadDataWrite(logger);
break; break;
case SheetType.AccountBasic: //case SheetType.AccountBasic:
factory = new AccountBasicDataWrite(logger); // factory = new AccountBasicDataWrite(logger);
break; // break;
case SheetType.SpecialUnit: case SheetType.SpecialUnit:
factory = new SpecialUnitDataWrite(logger); factory = new SpecialUnitDataWrite(logger);
...@@ -52,18 +52,18 @@ public ISheetDataWrite GetWriteData(SheetType sheetType, ILogger logger) ...@@ -52,18 +52,18 @@ public ISheetDataWrite GetWriteData(SheetType sheetType, ILogger logger)
// factory = new DepartmentDataWrite(logger); // factory = new DepartmentDataWrite(logger);
// break; // break;
case SheetType.AccountExtra: //case SheetType.AccountExtra:
case SheetType.AccountDrugAssess: //case SheetType.AccountDrugAssess:
case SheetType.AccountMaterialsAssess: //case SheetType.AccountMaterialsAssess:
case SheetType.AccountScoreAverage: //case SheetType.AccountScoreAverage:
case SheetType.BudgetRatio: //case SheetType.BudgetRatio:
case SheetType.AssessBeforeOtherFee: //case SheetType.AssessBeforeOtherFee:
case SheetType.AccountAdjustLaterOtherFee: //case SheetType.AccountAdjustLaterOtherFee:
case SheetType.WorkloadMedicineProp: //case SheetType.WorkloadMedicineProp:
case SheetType.WorkloadCMI: //case SheetType.WorkloadCMI:
case SheetType.WorkloadIncline: //case SheetType.WorkloadIncline:
factory = new AccountExtraDataWrite(logger); // factory = new AccountExtraDataWrite(logger);
break; // break;
default: default:
return null; return null;
......
...@@ -71,7 +71,7 @@ public string Execture(int allotId) ...@@ -71,7 +71,7 @@ public string Execture(int allotId)
var configs = hospitalconfigRepository.GetEntities(t => t.HospitalId == allot.HospitalId); var configs = hospitalconfigRepository.GetEntities(t => t.HospitalId == allot.HospitalId);
if (configs == null || !configs.Any()) throw new PerformanceException("未添加医院提取配置"); if (configs == null || !configs.Any()) throw new PerformanceException("未添加医院提取配置");
var types = extypeRepository.GetEntities(t => t.Source == 100); var types = extypeRepository.GetEntities(t => t.Source == (int)SheetType.DoctorIncome);
if (types == null || !types.Any()) throw new PerformanceException("未配置数据提取内容"); if (types == null || !types.Any()) throw new PerformanceException("未配置数据提取内容");
Dictionary<string, List<IncomeDataDto>> pairs = new Dictionary<string, List<IncomeDataDto>>(); Dictionary<string, List<IncomeDataDto>> pairs = new Dictionary<string, List<IncomeDataDto>>();
......
...@@ -378,7 +378,7 @@ public IEnumerable<DeptdicResponse> GetDepartments(int hospitalId) ...@@ -378,7 +378,7 @@ public IEnumerable<DeptdicResponse> GetDepartments(int hospitalId)
{ application.DirectorRole, new string[]{ UnitType.医生组.ToString(), UnitType.其他医生组.ToString(), UnitType.医技组.ToString(), UnitType.其他医技组.ToString() } }, { application.DirectorRole, new string[]{ UnitType.医生组.ToString(), UnitType.其他医生组.ToString(), UnitType.医技组.ToString(), UnitType.其他医技组.ToString() } },
{ application.NurseRole, new string[]{ UnitType.护理组.ToString() } }, { application.NurseRole, new string[]{ UnitType.护理组.ToString() } },
{ application.SpecialRole, new string[]{ UnitType.特殊核算组.ToString() } }, { application.SpecialRole, new string[]{ UnitType.特殊核算组.ToString() } },
{ application.OfficeRole, new string[]{ UnitType.行政后勤.ToString() } }, { application.OfficeRole, new string[]{ UnitType.行政后勤.ToString(), "行政工勤" } },
}; };
if (dict.Keys.Contains(role.Type.Value)) if (dict.Keys.Contains(role.Type.Value))
...@@ -720,6 +720,7 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request) ...@@ -720,6 +720,7 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request)
var dicData = CreateDataRow(request, dict); var dicData = CreateDataRow(request, dict);
List<per_employee> employees = new List<per_employee>(); List<per_employee> employees = new List<per_employee>();
var persons = peremployeeRepository.GetEntities(t => t.HospitalId == HospitalId && t.AllotId == AllotId); var persons = peremployeeRepository.GetEntities(t => t.HospitalId == HospitalId && t.AllotId == AllotId);
var delPersonsNum =new List<string>();
foreach (var item in dicData) foreach (var item in dicData)
{ {
if (!string.IsNullOrEmpty(item["AttendanceDay"]) && !string.IsNullOrEmpty(item["ReservedRatio"])) if (!string.IsNullOrEmpty(item["AttendanceDay"]) && !string.IsNullOrEmpty(item["ReservedRatio"]))
...@@ -732,7 +733,8 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request) ...@@ -732,7 +733,8 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request)
var json = JsonHelper.Serialize(item); var json = JsonHelper.Serialize(item);
var data = JsonHelper.Deserialize<per_employee>(json); var data = JsonHelper.Deserialize<per_employee>(json);
if (persons != null) if (persons != null)
if (persons.Any(t => t.PersonnelNumber?.Trim() == data.PersonnelNumber?.Trim() && t.DoctorName?.Trim() == data.DoctorName?.Trim())) continue; if (persons.Any(t => t.PersonnelNumber?.Trim() == data.PersonnelNumber?.Trim())) delPersonsNum.Add(data.PersonnelNumber);
var any = employees.Any(w => w.Department?.Trim() == data.Department?.Trim() && w.DoctorName?.Trim() == data.DoctorName?.Trim()); var any = employees.Any(w => w.Department?.Trim() == data.Department?.Trim() && w.DoctorName?.Trim() == data.DoctorName?.Trim());
if (!string.IsNullOrEmpty(data.Department?.Trim()) && !string.IsNullOrEmpty(data.AccountingUnit?.Trim()) && !string.IsNullOrEmpty(data.DoctorName?.Trim()) && !any) if (!string.IsNullOrEmpty(data.Department?.Trim()) && !string.IsNullOrEmpty(data.AccountingUnit?.Trim()) && !string.IsNullOrEmpty(data.DoctorName?.Trim()) && !any)
...@@ -746,6 +748,8 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request) ...@@ -746,6 +748,8 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request)
employees.Add(data); employees.Add(data);
} }
} }
var delPerson = persons.Where(t => delPersonsNum.Contains(t.PersonnelNumber)).ToArray();
peremployeeRepository.RemoveRange(delPerson);
if (employees.Any()) if (employees.Any())
peremployeeRepository.AddRange(employees.ToArray()); peremployeeRepository.AddRange(employees.ToArray());
...@@ -755,23 +759,27 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request) ...@@ -755,23 +759,27 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request)
public void SaveDeptDicHands(int HospitalId, SaveCollectData request) public void SaveDeptDicHands(int HospitalId, SaveCollectData request)
{ {
var dicData = CreateDataRow(request, DeptDic); var dicData = CreateDataRow(request, DeptDic);
var depts = perdeptdicRepository.GetEntities(t => t.HospitalId == HospitalId)?.Select(w => new { w.Department, w.HISDeptName }).Distinct(); var deptDic = perdeptdicRepository.GetEntities(t => t.HospitalId == HospitalId);
var depts =deptDic?.Select(w => new { w.Department, w.HISDeptName }).Distinct();
List<per_dept_dic> deptDics = new List<per_dept_dic>(); List<per_dept_dic> deptDics = new List<per_dept_dic>();
var delDepartment = new List<string>();
foreach (var dic in dicData) foreach (var dic in dicData)
{ {
var json = JsonHelper.Serialize(dic); var json = JsonHelper.Serialize(dic);
var data = JsonHelper.Deserialize<DeptdicHands>(json); var data = JsonHelper.Deserialize<DeptdicHands>(json);
if (depts != null) if (depts != null)
if (depts.Any(t => t.Department?.Trim() == data.Department?.Trim())) continue; if (depts.Any(t => t.HISDeptName?.Trim() == data.HISDeptName?.Trim())) delDepartment.Add(data.HISDeptName);
var any = deptDics.Any(w => w.Department?.Trim() == data.Department?.Trim()); var any = deptDics.Any(w => w.HISDeptName?.Trim() == data.HISDeptName?.Trim());
if (!string.IsNullOrEmpty(data.Department?.Trim()) && !any) if (!string.IsNullOrEmpty(data.HISDeptName?.Trim()) && !any)
{ {
DeptDicList(HospitalId, deptDics, data); DeptDicList(HospitalId, deptDics, data);
} }
} }
var delDept = deptDic.Where(t => delDepartment.Contains(t.HISDeptName)).ToArray();
perdeptdicRepository.RemoveRange(delDept);
if (deptDics.Any()) if (deptDics.Any())
perdeptdicRepository.AddRange(deptDics.ToArray()); perdeptdicRepository.AddRange(deptDics.ToArray());
} }
......
...@@ -106,7 +106,7 @@ private JArray GetBodyItemsByEmployeeSource(int userId, int employeeSource, ag_s ...@@ -106,7 +106,7 @@ private JArray GetBodyItemsByEmployeeSource(int userId, int employeeSource, ag_s
break; break;
case int source when source == (int)EmployeeSource.PrevSecondAllot && prevSecond != null: case int source when source == (int)EmployeeSource.PrevSecondAllot && prevSecond != null:
bodysources = GetEmployeeFromPrevData(prevSecond, employeeList); bodysources = GetEmployeeFromPrevData(prevSecond, employeeList, second.Id);
break; break;
default: default:
...@@ -149,19 +149,24 @@ public List<ag_bodysource> GetEmployeeFromEmployeeDict(List<per_employee> employ ...@@ -149,19 +149,24 @@ public List<ag_bodysource> GetEmployeeFromEmployeeDict(List<per_employee> employ
} }
return bodysources; return bodysources;
} }
/// <summary> /// <summary>
/// 从上一次的保存信息中获取人员信息 /// 从上一次的保存信息中获取人员信息
/// </summary> /// </summary>
/// <param name="prevSecondAllot"></param> /// <param name="prevSecond"></param>
/// <param name="otherShowColumns"></param> /// <param name="employeeList"></param>
/// <param name="secondId"></param>
/// <returns></returns> /// <returns></returns>
public List<ag_bodysource> GetEmployeeFromPrevData(ag_secondallot prevSecond, List<per_employee> employeeList) public List<ag_bodysource> GetEmployeeFromPrevData(ag_secondallot prevSecond, List<per_employee> employeeList, int secondId)
{ {
var result = new List<ag_bodysource>();
var body = agbodysourceRepository.GetEntities(t => t.SecondId == prevSecond.Id); var body = agbodysourceRepository.GetEntities(t => t.SecondId == prevSecond.Id);
if (body == null || !body.Any()) return new List<ag_bodysource>(); if (body == null || !body.Any()) return result;
foreach (var item in body.Select(t => new ag_bodysource var data = body.Select(t => new ag_bodysource
{ {
Id = 0,
SecondId = secondId,
WorkNumber = t.WorkNumber, WorkNumber = t.WorkNumber,
Name = t.Name, Name = t.Name,
Post = t.Post, Post = t.Post,
...@@ -169,11 +174,13 @@ public List<ag_bodysource> GetEmployeeFromPrevData(ag_secondallot prevSecond, Li ...@@ -169,11 +174,13 @@ public List<ag_bodysource> GetEmployeeFromPrevData(ag_secondallot prevSecond, Li
StaffCoefficient = t.StaffCoefficient, StaffCoefficient = t.StaffCoefficient,
JobTitle = t.JobTitle, JobTitle = t.JobTitle,
TitleCoefficient = t.TitleCoefficient TitleCoefficient = t.TitleCoefficient
})) });
foreach (var item in data)
{ {
item.ActualAttendance = employeeList?.FirstOrDefault(w => w.PersonnelNumber == item.WorkNumber && w.DoctorName == item.Name)?.AttendanceDay; item.ActualAttendance = employeeList?.FirstOrDefault(w => w.PersonnelNumber == item.WorkNumber && w.DoctorName == item.Name)?.AttendanceDay;
result.Add(item);
} }
return body; return result;
} }
/// <summary> /// <summary>
......
...@@ -2185,7 +2185,10 @@ public List<SecPrintResponse> Print(int secondId) ...@@ -2185,7 +2185,10 @@ public List<SecPrintResponse> Print(int secondId)
// 重算实发绩效 // 重算实发绩效
foreach (var item in result) foreach (var item in result)
{ {
item.RealAmount = (item.DistPerformance ?? 0) + (item.OtherPerformance ?? 0) + (item.NightWorkPerformance ?? 0); per_employee employee = employees?.FirstOrDefault(t => t.PersonnelNumber == item.JobNumber);
if (employee != null)
item.ReservedRatio = employee.ReservedRatio ?? 0;
item.RealAmount = (item.DistPerformance ?? 0) * (1 - (item.ReservedRatio ?? 0)) + (item.OtherPerformance ?? 0) + (item.NightWorkPerformance ?? 0);
} }
......
...@@ -143,7 +143,7 @@ public SheetExportResponse SheetExport(int sheetID) ...@@ -143,7 +143,7 @@ public SheetExportResponse SheetExport(int sheetID)
private void CommonExport(int sheetID, SheetExportResponse response) private void CommonExport(int sheetID, SheetExportResponse response)
{ {
var headList = _perforImHeaderRepository.GetEntities(t => t.SheetID == sheetID)?.OrderBy(t => t.PointCell); var headList = _perforImHeaderRepository.GetEntities(t => t.SheetID == sheetID)?.OrderBy(t => t.PointCell).ToDistinct(t=>t.CellValue);
if (headList == null) return; if (headList == null) return;
var dataList = _perforImDataRepository.GetEntities(t => t.SheetID == sheetID)?.OrderByDescending(t => t.AccountingUnit).ToList(); var dataList = _perforImDataRepository.GetEntities(t => t.SheetID == sheetID)?.OrderByDescending(t => t.AccountingUnit).ToList();
......
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