Commit c804db8e by ruyun.zhang

二次分配固定金额工作量计算

parent 3a58a07e
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Performance.DtoModels.AppSettings; using Performance.DtoModels.AppSettings;
using Performance.EntityModels; using Performance.EntityModels;
using System; using System;
namespace Performance.Api.Configurations namespace Performance.Api.Configurations
...@@ -17,14 +17,14 @@ public static void AddDatabaseConfiguration(this IServiceCollection services) ...@@ -17,14 +17,14 @@ public static void AddDatabaseConfiguration(this IServiceCollection services)
services.AddDbContext<PerformanceDbContext>(options => services.AddDbContext<PerformanceDbContext>(options =>
{ {
options.UseMySql( var connectionString = connection.Value.PerformanceConnectionString;
connection.Value.PerformanceConnectionString, var serverVersion = ServerVersion.AutoDetect(connection.Value.PerformanceConnectionString);
ServerVersion.AutoDetect(connection.Value.PerformanceConnectionString), var builder = options.UseMySql(connectionString, serverVersion, optionBuilder =>
optionBuilder => {
{ optionBuilder.EnableStringComparisonTranslations(true);
optionBuilder.EnableStringComparisonTranslations(true); optionBuilder.EnableRetryOnFailure();
optionBuilder.EnableRetryOnFailure(); });
}); builder.EnableSensitiveDataLogging().EnableDetailedErrors();
}, ServiceLifetime.Transient); }, ServiceLifetime.Transient);
} }
} }
......
...@@ -321,7 +321,7 @@ public ApiResponse WorkloadMap(int secondId) ...@@ -321,7 +321,7 @@ public ApiResponse WorkloadMap(int secondId)
/// <returns></returns> /// <returns></returns>
[Route("api/second/worktype/save/{secondId}")] [Route("api/second/worktype/save/{secondId}")]
[HttpPost] [HttpPost]
public ApiResponse SingleSave([FromBody] ag_workload_type request, int secondId) public ApiResponse SingleSave([FromBody] SecondWorkloadTypeDto request, int secondId)
{ {
if (request.HospitalId == 0) if (request.HospitalId == 0)
return new ApiResponse(ResponseType.ParameterError, "医院信息无效"); return new ApiResponse(ResponseType.ParameterError, "医院信息无效");
......
...@@ -369,7 +369,7 @@ private void Timeout(TaskService service, List<bg_task> tasks) ...@@ -369,7 +369,7 @@ private void Timeout(TaskService service, List<bg_task> tasks)
foreach (var task in tasks) foreach (var task in tasks)
{ {
var sett = _settings.FirstOrDefault(w => (int)w.JobType == task.JobType); var sett = _settings.FirstOrDefault(w => (int)w.JobType == task.JobType);
if (task.Status == (int)Background.Status.执行中 && task.CreateTime.AddMinutes(sett.Timeout) < DateTime.Now) if (task.Status == (int)Background.Status.执行中 && task.CreateTime.AddMinutes(sett?.Timeout ?? 20) < DateTime.Now)
service.Update(task.ID, Background.Status.超时); service.Update(task.ID, Background.Status.超时);
} }
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<SatelliteResourceLanguages>zh-Hans</SatelliteResourceLanguages>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
......
using Microsoft.AspNetCore; using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using NLog.Web; using NLog.Web;
using System;
namespace Performance.Api namespace Performance.Api
{ {
......
...@@ -2826,7 +2826,7 @@ ...@@ -2826,7 +2826,7 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.SecondAllotController.SingleSave(Performance.EntityModels.ag_workload_type,System.Int32)"> <member name="M:Performance.Api.Controllers.SecondAllotController.SingleSave(Performance.DtoModels.Second.SecondWorkloadTypeDto,System.Int32)">
<summary> <summary>
保存二次绩效工作量类型 保存二次绩效工作量类型
</summary> </summary>
......
...@@ -150,6 +150,11 @@ ...@@ -150,6 +150,11 @@
工作量 工作量
</summary> </summary>
</member> </member>
<member name="T:Performance.DtoModels.AgWorkPurpose">
<summary>
工作量金额计算规则
</summary>
</member>
<member name="F:Performance.DtoModels.DataFormat.普通格式"> <member name="F:Performance.DtoModels.DataFormat.普通格式">
<summary> 普通格式 </summary> <summary> 普通格式 </summary>
</member> </member>
...@@ -5580,6 +5585,21 @@ ...@@ -5580,6 +5585,21 @@
纵向计算 纵向计算
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.Second.SecondWorkloadTypeDto.TypeName">
<summary>
工作量类型名称
</summary>
</member>
<member name="P:Performance.DtoModels.Second.SecondWorkloadTypeDto.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="P:Performance.DtoModels.Second.SecondWorkDto.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="P:Performance.DtoModels.SecondBaseDto.ComputeMode"> <member name="P:Performance.DtoModels.SecondBaseDto.ComputeMode">
<summary> <summary>
计算方式:11 不计算 12 横向计算 13 纵向计算 计算方式:11 不计算 12 横向计算 13 纵向计算
...@@ -5645,6 +5665,11 @@ ...@@ -5645,6 +5665,11 @@
数据加载方式:0 保存,1 上次,2 字典 数据加载方式:0 保存,1 上次,2 字典
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.SecondWorkLoadDto.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="P:Performance.DtoModels.SelectionOptions.SelectionID"> <member name="P:Performance.DtoModels.SelectionOptions.SelectionID">
<summary> <summary>
ID ID
......
...@@ -1398,6 +1398,11 @@ ...@@ -1398,6 +1398,11 @@
工作量来源类型 工作量来源类型
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_workload.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="T:Performance.EntityModels.ag_workload_source"> <member name="T:Performance.EntityModels.ag_workload_source">
<summary> <summary>
...@@ -1448,6 +1453,11 @@ ...@@ -1448,6 +1453,11 @@
-1、单项奖励 0、工作量占比 ..(自定义占比) -1、单项奖励 0、工作量占比 ..(自定义占比)
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_workload_source.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="T:Performance.EntityModels.ag_workload_type"> <member name="T:Performance.EntityModels.ag_workload_type">
<summary> <summary>
二次绩效工作量绩效分类 二次绩效工作量绩效分类
...@@ -1478,6 +1488,11 @@ ...@@ -1478,6 +1488,11 @@
科室类型 科室类型
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_workload_type.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="T:Performance.EntityModels.ag_worktype_source"> <member name="T:Performance.EntityModels.ag_worktype_source">
<summary> <summary>
...@@ -1513,6 +1528,11 @@ ...@@ -1513,6 +1528,11 @@
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_worktype_source.Purpose">
<summary>
工作量用途 0 工作量占比 1 固定金额
</summary>
</member>
<member name="T:Performance.EntityModels.as_assess"> <member name="T:Performance.EntityModels.as_assess">
<summary> <summary>
考核类别 考核类别
......
...@@ -62,6 +62,16 @@ public enum AgWorkloadType ...@@ -62,6 +62,16 @@ public enum AgWorkloadType
/// </summary> /// </summary>
Workload = 0, Workload = 0,
} }
/// <summary>
/// 工作量金额计算规则
/// </summary>
public enum AgWorkPurpose
{
工作量系数 = 0,
工作量固定金额 = 1,
}
public enum DataFormat public enum DataFormat
{ {
/// <summary> 普通格式 </summary> /// <summary> 普通格式 </summary>
......
namespace Performance.DtoModels.Second
{
public class SecondWorkloadTypeDto
{
public int Id { get; set; }
public int HospitalId { get; set; }
/// <summary>
/// 工作量类型名称
/// </summary>
public string TypeName { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int Purpose { get; set; }
}
public class SecondWorkDto
{
public string Title { get; set; }
public string Value { get; set; }
public decimal? State { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int Purpose { get; set; }
}
}
...@@ -5,9 +5,10 @@ namespace Performance.DtoModels ...@@ -5,9 +5,10 @@ namespace Performance.DtoModels
{ {
public class SecondWorkLoadDto public class SecondWorkLoadDto
{ {
public SecondWorkLoadDto(string name) public SecondWorkLoadDto(string name, int purpose)
{ {
Name = name; Name = name;
Purpose = purpose;
Unit_Price = 0m; Unit_Price = 0m;
Items = new List<string>(); Items = new List<string>();
...@@ -22,6 +23,10 @@ public SecondWorkLoadDto(string name) ...@@ -22,6 +23,10 @@ public SecondWorkLoadDto(string name)
public decimal Unit_Price { get; set; } public decimal Unit_Price { get; set; }
public List<string> Items { get; set; } public List<string> Items { get; set; }
public string Name { get; set; } public string Name { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int Purpose { get; set; }
public void AddItem(string name) public void AddItem(string name)
{ {
......
...@@ -65,5 +65,9 @@ public class ag_workload ...@@ -65,5 +65,9 @@ public class ag_workload
/// 工作量来源类型 /// 工作量来源类型
/// </summary> /// </summary>
public string SourceCategory { get; set; } public string SourceCategory { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int? Purpose { get; set; }
} }
} }
...@@ -60,5 +60,9 @@ public class ag_workload_source ...@@ -60,5 +60,9 @@ public class ag_workload_source
/// -1、单项奖励 0、工作量占比 ..(自定义占比) /// -1、单项奖励 0、工作量占比 ..(自定义占比)
/// </summary> /// </summary>
public Nullable<int> WorkTypeId { get; set; } public Nullable<int> WorkTypeId { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int? Purpose { get; set; }
} }
} }
...@@ -39,5 +39,9 @@ public class ag_workload_type ...@@ -39,5 +39,9 @@ public class ag_workload_type
/// 科室类型 /// 科室类型
/// </summary> /// </summary>
public string UnitType { get; set; } public string UnitType { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int? Purpose { get; set; }
} }
} }
...@@ -45,5 +45,9 @@ public class ag_worktype_source ...@@ -45,5 +45,9 @@ public class ag_worktype_source
/// ///
/// </summary> /// </summary>
public Nullable<decimal> Value { get; set; } public Nullable<decimal> Value { get; set; }
/// <summary>
/// 工作量用途 0 工作量占比 1 固定金额
/// </summary>
public int? Purpose { get; set; }
} }
} }
...@@ -522,8 +522,7 @@ public void SaveSecondAllotHeadData(int secondId, string json) ...@@ -522,8 +522,7 @@ public void SaveSecondAllotHeadData(int secondId, string json)
if (!Regex.IsMatch(value, @"^\d")) continue; if (!Regex.IsMatch(value, @"^\d")) continue;
workValue.Add(Convert.ToInt32(value)); workValue.Add(Convert.ToInt32(value));
} }
if (workValue == null || !workValue.Any()) if (!workValue.Any()) return;
return;
foreach (var value in workValue.Distinct()) foreach (var value in workValue.Distinct())
{ {
...@@ -531,13 +530,15 @@ public void SaveSecondAllotHeadData(int secondId, string json) ...@@ -531,13 +530,15 @@ public void SaveSecondAllotHeadData(int secondId, string json)
{ {
var fieldId = prefix[i] + $"{value}"; var fieldId = prefix[i] + $"{value}";
var typeName = workTypes?.FirstOrDefault(t => t.Id == value)?.TypeName; var typeName = workTypes?.FirstOrDefault(t => t.Id == value)?.TypeName;
var purpose = workTypes?.FirstOrDefault(t => t.Id == value)?.Purpose ?? (int)AgWorkPurpose.工作量系数;
var source = new ag_worktype_source var source = new ag_worktype_source
{ {
WorkTypeId = value, WorkTypeId = value,
SecondId = secondId, SecondId = secondId,
FieldId = fieldId, FieldId = fieldId,
FieldName = i == 0 ? typeName + "占比" : typeName + "金额", FieldName = i == 0 ? typeName + "占比" : typeName + "金额",
Value = prefix[i].StartsWith(prefix[0]) ? ConvertHelper.ToDecimalOrNull(dict[fieldId.ToLower()]) : null, Value = prefix[i].StartsWith(prefix[0]) && dict.ContainsKey(fieldId.ToLower()) ? ConvertHelper.ToDecimalOrNull(dict[fieldId.ToLower()]) : null,
Purpose = purpose,
}; };
insertData.Add(source); insertData.Add(source);
...@@ -589,7 +590,7 @@ public void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dynam ...@@ -589,7 +590,7 @@ public void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dynam
if (body == null || !((IEnumerable<dynamic>)body).Any()) return; if (body == null || !((IEnumerable<dynamic>)body).Any()) return;
var temp = agworkloadRepository.GetEntities(t => t.HospitalId == hospitalId); var temp = agworkloadRepository.GetEntities(t => t.HospitalId == hospitalId);
var workloads = temp?.Where(w => UnitTypeUtil.Is(w.UnitType, second.UnitType) && w.Department == second.Department)?.ToList() ?? new List<ag_workload>(); var workloads = temp?.Where(w => UnitTypeUtil.Is(w.UnitType, second.UnitType) && w.Department == second.Department)?.ToList() ?? new List<ag_workload>();
if (workloads.Count() == 0) if (workloads.Count == 0)
workloads = temp?.Where(w => UnitTypeUtil.Is(w.UnitType, second.NewUnitType) && w.Department == second.NewAccountingUnit)?.ToList() ?? new List<ag_workload>(); workloads = temp?.Where(w => UnitTypeUtil.Is(w.UnitType, second.NewUnitType) && w.Department == second.NewAccountingUnit)?.ToList() ?? new List<ag_workload>();
string[] prefix = new string[] { "WorkloadScore_", "AssessmentScore_", "WorkPerformance_", $"{AgWorkloadType.SingleAwards}_", $"{AgWorkloadType.Workload}_", $"{AgWorkloadType.PreAccountingReward}_" }; string[] prefix = new string[] { "WorkloadScore_", "AssessmentScore_", "WorkPerformance_", $"{AgWorkloadType.SingleAwards}_", $"{AgWorkloadType.Workload}_", $"{AgWorkloadType.PreAccountingReward}_" };
...@@ -620,7 +621,8 @@ public void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dynam ...@@ -620,7 +621,8 @@ public void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dynam
FactorValue = workload.FactorValue, FactorValue = workload.FactorValue,
Sort = workload.Sort, Sort = workload.Sort,
Value = ConvertHelper.To<decimal>(dict[key]), Value = ConvertHelper.To<decimal>(dict[key]),
WorkTypeId = workload.WorkTypeId WorkTypeId = workload.WorkTypeId,
Purpose = workload.Purpose ?? (int)AgWorkPurpose.工作量系数,
}); });
} }
} }
......
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