Commit 573d7557 by 钟博

Merge branch 'feature/新二次分配' into release/v20210707Develop新二次分配合并

# Conflicts:
#	performance/Performance.Api/wwwroot/Performance.DtoModels.xml
#	performance/Performance.DtoModels/PerExcel/ExcelEnum.cs
parents 1d4c85e1 829b1b92
...@@ -73,7 +73,7 @@ public class RequestRateLimitingMiddleware ...@@ -73,7 +73,7 @@ public class RequestRateLimitingMiddleware
var response = new ApiResponse var response = new ApiResponse
{ {
State = ResponseType.TooManyRequests, State = ResponseType.TooManyRequests,
Message = "访问过于频繁,请稍后重试" Message = "您的操作正在处理,请稍等片刻!"
}; };
await context.Response.WriteAsync(JsonHelper.Serialize(response)); await context.Response.WriteAsync(JsonHelper.Serialize(response));
} }
......
...@@ -38,7 +38,13 @@ ...@@ -38,7 +38,13 @@
"HttpPost": "http://localhost:50997/api/" "HttpPost": "http://localhost:50997/api/"
}, },
"RateLimitingConfig": { "RateLimitingConfig": {
"Endpoints": [ "/api/second/savevalue", "/api/second/savedata", "/api/second/other/save" ], "Endpoints": [
"/api/second/savevalue",
"/api/second/savedata",
"/api/second/other/save",
"/api/second/redistribution/save",
"/api/second/redistribution/submit"
],
"Period": "1", // 单位为秒 "Period": "1", // 单位为秒
"Limit": 1 "Limit": 1
} }
......
...@@ -1536,6 +1536,12 @@ ...@@ -1536,6 +1536,12 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.SecondAllotController.WorkloadMap(System.Int32)">
<summary>
获取二次分配 提取工作量带出字典
</summary>
<returns></returns>
</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.EntityModels.ag_workload_type,System.Int32)">
<summary> <summary>
保存二次绩效工作量类型 保存二次绩效工作量类型
...@@ -1647,6 +1653,55 @@ ...@@ -1647,6 +1653,55 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionLoad(Performance.DtoModels.SecondLoadDto)">
<summary>
二次绩效录入页面
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionCheck(Performance.DtoModels.SecondComputeDto)">
<summary>
提交数据正确性检验
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionCompute(Performance.DtoModels.SecondComputeDto)">
<summary>
二次绩效结果计算
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionSave(Performance.DtoModels.SecondComputeDto)">
<summary>
二次绩效保存
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionSubmit(Performance.DtoModels.SecondComputeDto)">
<summary>
二次绩效提交
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionEmployee(Performance.DtoModels.SecondEmployeeDto)">
<summary>
二次分配人员字典带出
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.RedistributionDetail(Performance.DtoModels.SecondBaseDto)">
<summary>
二次分配审核后查看详情
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SheetController.SheetList(Performance.DtoModels.SheetRequest)"> <member name="M:Performance.Api.Controllers.SheetController.SheetList(Performance.DtoModels.SheetRequest)">
<summary> <summary>
sheet 列表 sheet 列表
......
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
<summary> 正在生成绩效 </summary> <summary> 正在生成绩效 </summary>
</member> </member>
<member name="F:Performance.DtoModels.AllotStates.GenerateSucceed"> <member name="F:Performance.DtoModels.AllotStates.GenerateSucceed">
<summary> 绩效结果通过审核,允许下发 </summary> <summary> 绩效下发 </summary>
</member> </member>
<member name="F:Performance.DtoModels.AllotStates.GenerateFail"> <member name="F:Performance.DtoModels.AllotStates.GenerateFail">
<summary> 绩效解析失败 </summary> <summary> 绩效解析失败 </summary>
...@@ -848,6 +848,9 @@ ...@@ -848,6 +848,9 @@
<member name="F:Performance.DtoModels.SheetType.Custom"> <member name="F:Performance.DtoModels.SheetType.Custom">
<summary> 自定义抽取模板 </summary> <summary> 自定义抽取模板 </summary>
</member> </member>
<member name="F:Performance.DtoModels.SheetType.OnlyExtract">
<summary> 抽取数据,不写入 </summary>
</member>
<member name="T:Performance.DtoModels.AccountUnitType"> <member name="T:Performance.DtoModels.AccountUnitType">
<summary> <summary>
核算单元类型 核算单元类型
...@@ -2531,6 +2534,11 @@ ...@@ -2531,6 +2534,11 @@
是否是单项奖励 是否是单项奖励
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.WorkloadRequest.SourceCategory">
<summary>
工作量带出HIS来源
</summary>
</member>
<member name="P:Performance.DtoModels.WorkyearRequest.MaxRange"> <member name="P:Performance.DtoModels.WorkyearRequest.MaxRange">
<summary> <summary>
最大工龄范围(小于) 最大工龄范围(小于)
...@@ -3787,6 +3795,81 @@ ...@@ -3787,6 +3795,81 @@
绩效系数 绩效系数
</summary> </summary>
</member> </member>
<member name="T:Performance.DtoModels.Second.ComputeMode">
<summary>
二次分配计算方式
</summary>
</member>
<member name="F:Performance.DtoModels.Second.ComputeMode.NotCalculate">
<summary>
填报(不计算)
</summary>
</member>
<member name="F:Performance.DtoModels.Second.ComputeMode.Horizontal">
<summary>
横向计算
</summary>
</member>
<member name="F:Performance.DtoModels.Second.ComputeMode.Vertical">
<summary>
纵向计算
</summary>
</member>
<member name="P:Performance.DtoModels.SecondBaseDto.ComputeMode">
<summary>
计算方式:11 不计算 12 横向计算 13 纵向计算
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Label">
<summary>
描述
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Key">
<summary>
主键
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.IsTrue">
<summary>
是否显示 true显示
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Width">
<summary>
宽度
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Sort">
<summary>
排序
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Site">
<summary>
位置 Top、Table
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Type">
<summary>
类型 单项奖励:SingleAwards,工作量:Workload
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Color">
<summary>
颜色class名称
</summary>
</member>
<member name="P:Performance.DtoModels.SecondEmployeeDto.ComputeMode">
<summary>
计算方式:11 不计算 12 横向计算 13 纵向计算
</summary>
</member>
<member name="P:Performance.DtoModels.SecondLoadDto.OverrideMode">
<summary>
数据加载方式:0 保存,1 上次,2 字典
</summary>
</member>
<member name="P:Performance.DtoModels.SelectionOptions.SelectionID"> <member name="P:Performance.DtoModels.SelectionOptions.SelectionID">
<summary> <summary>
ID ID
...@@ -3842,24 +3925,29 @@ ...@@ -3842,24 +3925,29 @@
数据集合 数据集合
</summary> </summary>
</member> </member>
<member name="T:Performance.DtoModels.TitleValue`1"> <member name="T:Performance.DtoModels.TitleValue`2">
<summary> <summary>
title value title value
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.TitleValue`1.Title"> <member name="P:Performance.DtoModels.TitleValue`2.Title">
<summary> <summary>
Title Title
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.TitleValue`1.Value"> <member name="P:Performance.DtoModels.TitleValue`2.Value">
<summary> <summary>
Value Value
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.TitleValue`1.State"> <member name="P:Performance.DtoModels.TitleValue`2.State">
<summary> <summary>
1、已选,2、未选,3、已被选择 存储数据
</summary>
</member>
<member name="T:Performance.DtoModels.TitleValue`1">
<summary>
title value
</summary> </summary>
</member> </member>
<member name="T:Performance.DtoModels.TitleValue"> <member name="T:Performance.DtoModels.TitleValue">
......
...@@ -472,24 +472,19 @@ ...@@ -472,24 +472,19 @@
职称系数 职称系数
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.TitlePerformance"> <member name="P:Performance.EntityModels.ag_bodysource.TitlePerformanceScore">
<summary> <summary>
职称绩效 职称绩效得分
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.ManagementAllowance"> <member name="P:Performance.EntityModels.ag_bodysource.TitlePerformance">
<summary>
管理津贴
</summary>
</member>
<member name="P:Performance.EntityModels.ag_bodysource.IndividualReward">
<summary> <summary>
单项奖励 职称绩效
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.AllocationOfKeySpecialty"> <member name="P:Performance.EntityModels.ag_bodysource.WorkPerformance">
<summary> <summary>
重点专科分配 工作量绩效
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.DeptReward"> <member name="P:Performance.EntityModels.ag_bodysource.DeptReward">
...@@ -519,7 +514,7 @@ ...@@ -519,7 +514,7 @@
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.RealAmount"> <member name="P:Performance.EntityModels.ag_bodysource.RealAmount">
<summary> <summary>
实发绩效工资金额 实发绩效(不含医院其他绩效)
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.Signature"> <member name="P:Performance.EntityModels.ag_bodysource.Signature">
...@@ -537,6 +532,11 @@ ...@@ -537,6 +532,11 @@
预留金额 预留金额
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_bodysource.ReferToRealAmount">
<summary>
实发绩效(参考,含医院其他绩效)
</summary>
</member>
<member name="T:Performance.EntityModels.ag_compute"> <member name="T:Performance.EntityModels.ag_compute">
<summary> <summary>
二次绩效结果表 二次绩效结果表
...@@ -939,12 +939,12 @@ ...@@ -939,12 +939,12 @@
</member> </member>
<member name="P:Performance.EntityModels.ag_headsource.TheTotalAllocationOfPerformanceResults"> <member name="P:Performance.EntityModels.ag_headsource.TheTotalAllocationOfPerformanceResults">
<summary> <summary>
科室单项奖励 业绩分配绩效总额
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_headsource.BasisPerformance"> <member name="P:Performance.EntityModels.ag_headsource.TotalDeptReward">
<summary> <summary>
业绩分配绩效总额 科室单项奖励
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_headsource.SeniorityTitlesAccountedPerformance"> <member name="P:Performance.EntityModels.ag_headsource.SeniorityTitlesAccountedPerformance">
...@@ -1387,6 +1387,11 @@ ...@@ -1387,6 +1387,11 @@
1、单项奖励 2、工作量占比 ..(自定义占比) 1、单项奖励 2、工作量占比 ..(自定义占比)
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.ag_workload.SourceCategory">
<summary>
工作量来源类型
</summary>
</member>
<member name="T:Performance.EntityModels.ag_workload_source"> <member name="T:Performance.EntityModels.ag_workload_source">
<summary> <summary>
...@@ -7487,5 +7492,20 @@ ...@@ -7487,5 +7492,20 @@
是否被使用 默认false 是否被使用 默认false
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.view_second_workload_result.UnitType">
<summary>
核算单元组别
</summary>
</member>
<member name="P:Performance.EntityModels.view_second_workload_result.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.view_second_workload_result.HISDeptName">
<summary>
统计的HIS的原始科室名称
</summary>
</member>
</members> </members>
</doc> </doc>
...@@ -65,8 +65,8 @@ public enum AllotStates ...@@ -65,8 +65,8 @@ public enum AllotStates
/// <summary> 正在生成绩效 </summary> /// <summary> 正在生成绩效 </summary>
[Description("正在生成绩效")] [Description("正在生成绩效")]
InGenerate = 5, InGenerate = 5,
/// <summary> 绩效结果通过审核,允许下发 </summary> /// <summary> 绩效下发 </summary>
[Description("数据验证通过")] [Description("绩效下发")]
GenerateSucceed = 6, GenerateSucceed = 6,
/// <summary> 绩效解析失败 </summary> /// <summary> 绩效解析失败 </summary>
[Description("绩效解析失败")] [Description("绩效解析失败")]
......
...@@ -195,6 +195,10 @@ public enum SheetType ...@@ -195,6 +195,10 @@ public enum SheetType
/// <summary> 自定义抽取模板 </summary> /// <summary> 自定义抽取模板 </summary>
[Description("自定义抽取模板")] [Description("自定义抽取模板")]
Custom = 101, Custom = 101,
/// <summary> 抽取数据,不写入 </summary>
[Description("抽取数据,不写入")]
OnlyExtract = 102,
} }
/// <summary> /// <summary>
......
...@@ -51,6 +51,11 @@ public class WorkloadRequest ...@@ -51,6 +51,11 @@ public class WorkloadRequest
/// 是否是单项奖励 /// 是否是单项奖励
/// </summary> /// </summary>
public bool IsSingleAwards { get; set; } public bool IsSingleAwards { get; set; }
/// <summary>
/// 工作量带出HIS来源
/// </summary>
public string SourceCategory { get; set; }
} }
public class WorkloadRequestValidator : AbstractValidator<WorkloadRequest> public class WorkloadRequestValidator : AbstractValidator<WorkloadRequest>
{ {
......
...@@ -14,5 +14,6 @@ public enum ResponseType ...@@ -14,5 +14,6 @@ public enum ResponseType
ParameterError = 6, ParameterError = 6,
Disable = 7, Disable = 7,
TooManyRequests = 8, TooManyRequests = 8,
Warning = 9,
} }
} }
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
namespace Performance.DtoModels.Second
{
/// <summary>
/// 二次分配计算方式
/// </summary>
public enum ComputeMode
{
/// <summary>
/// 填报(不计算)
/// </summary>
[Description("填报")]
NotCalculate = 11,
/// <summary>
/// 横向计算
/// </summary>
[Description("横向计算")]
Horizontal = 12,
/// <summary>
/// 纵向计算
/// </summary>
[Description("纵向计算")]
Vertical = 13,
}
}
namespace Performance.DtoModels
{
public class SecondBaseDto
{
public int SecondId { get; set; }
/// <summary>
/// 计算方式:11 不计算 12 横向计算 13 纵向计算
/// </summary>
public int ComputeMode { get; set; }
}
}
namespace Performance.DtoModels
{
public class SecondColumnDictionary
{
/// <summary>
/// 描述
/// </summary>
public string Label { get; set; }
/// <summary>
/// 主键
/// </summary>
public string Key { get; set; }
/// <summary>
/// 是否显示 true显示
/// </summary>
public bool IsTrue { get; set; }
/// <summary>
/// 宽度
/// </summary>
public string Width { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 位置 Top、Table
/// </summary>
public string Site { get; set; }
/// <summary>
/// 类型 单项奖励:SingleAwards,工作量:Workload
/// </summary>
public string Type { get; set; }
/// <summary>
/// 颜色class名称
/// </summary>
public string Color { get; set; }
public SecondColumnDictionary()
{
}
public SecondColumnDictionary(string label, string key, bool isTrue, int sort, string site = "Table", string type = "", string color = "")
{
Label = label;
Key = key;
IsTrue = isTrue;
Sort = sort;
Site = site;
Type = type;
Color = color;
Width = ((label ?? "").Length * 20 + 10).ToString();
}
}
}
namespace Performance.DtoModels
{
public class SecondComputeCheckResultDto
{
public SecondComputeCheckResultDto(string level, string personnelNumber, string personnelName, string message)
{
Level = level;
PersonnelNumber = personnelNumber;
PersonnelName = personnelName;
Message = message;
}
public string Level { get; set; }
public string PersonnelNumber { get; set; }
public string PersonnelName { get; set; }
public string Message { get; set; }
}
}
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class SecondComputeDto : SecondLoadDto
{
public Dictionary<string, object> Head { get; set; }
public List<Dictionary<string, object>> Body { get; set; }
}
}
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class SecondDetailDto
{
public object Head { get; set; }
public HandsonTableBase Body { get; set; }
public List<SecondColumnDictionary> Dic { get; set; }
}
}
namespace Performance.DtoModels
{
public class SecondEmployeeDto : PersonParamsRequest
{
public int SecondId { get; set; }
/// <summary>
/// 计算方式:11 不计算 12 横向计算 13 纵向计算
/// </summary>
public int ComputeMode { get; set; }
}
}
namespace Performance.DtoModels
{
public class SecondLoadDto : SecondBaseDto
{
/// <summary>
/// 数据加载方式:0 保存,1 上次,2 字典
/// </summary>
public int OverrideMode { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class SecondWorkLoadDto
{
public SecondWorkLoadDto(string name)
{
Name = name;
Unit_Price = 0m;
Items = new List<string>();
AssessmentScore = $"AssessmentScore_{Name}";
WorkPerformance = $"WorkPerformance_{Name}";
WorkloadScore = $"WorkloadScore_{Name}";
}
public string AssessmentScore { get; set; }
public string WorkPerformance { get; set; }
public string WorkloadScore { get; set; }
public decimal Unit_Price { get; set; }
public List<string> Items { get; set; }
public string Name { get; set; }
public void AddItem(string name)
{
if (!Items.Contains(name))
Items.Add(name);
}
}
}
...@@ -7,7 +7,7 @@ namespace Performance.DtoModels ...@@ -7,7 +7,7 @@ namespace Performance.DtoModels
/// <summary> /// <summary>
/// title value /// title value
/// </summary> /// </summary>
public class TitleValue<T> public class TitleValue<TV, TS>
{ {
/// <summary> /// <summary>
/// Title /// Title
...@@ -16,11 +16,17 @@ public class TitleValue<T> ...@@ -16,11 +16,17 @@ public class TitleValue<T>
/// <summary> /// <summary>
/// Value /// Value
/// </summary> /// </summary>
public T Value { get; set; } public TV Value { get; set; }
/// <summary> /// <summary>
/// 1、已选,2、未选,3、已被选择 /// 存储数据
/// </summary> /// </summary>
public int State { get; set; } public TS State { get; set; }
}
/// <summary>
/// title value
/// </summary>
public class TitleValue<T> : TitleValue<T, int>
{
} }
/// <summary> /// <summary>
/// title value /// title value
......
...@@ -72,24 +72,34 @@ public class ag_bodysource ...@@ -72,24 +72,34 @@ public class ag_bodysource
public Nullable<decimal> TitleCoefficient { get; set; } public Nullable<decimal> TitleCoefficient { get; set; }
/// <summary> /// <summary>
/// 职称绩效 /// 职称绩效得分
/// </summary> /// </summary>
public Nullable<decimal> TitlePerformance { get; set; } public Nullable<decimal> TitlePerformanceScore { get; set; }
/// <summary> /// <summary>
/// 管理津贴 /// 职称绩效
/// </summary> /// </summary>
public Nullable<decimal> ManagementAllowance { get; set; } public Nullable<decimal> TitlePerformance { get; set; }
/// <summary> /// <summary>
/// 单项奖励 /// 工作量绩效
/// </summary> /// </summary>
public Nullable<decimal> IndividualReward { get; set; } public Nullable<decimal> WorkPerformance { get; set; }
/// <summary> ///// <summary>
/// 重点专科分配 ///// 管理津贴
/// </summary> ///// </summary>
public Nullable<decimal> AllocationOfKeySpecialty { get; set; } //public Nullable<decimal> ManagementAllowance { get; set; }
///// <summary>
///// 单项奖励
///// </summary>
//public Nullable<decimal> IndividualReward { get; set; }
///// <summary>
///// 重点专科分配
///// </summary>
//public Nullable<decimal> AllocationOfKeySpecialty { get; set; }
/// <summary> /// <summary>
/// 科室单项奖励 /// 科室单项奖励
...@@ -117,7 +127,7 @@ public class ag_bodysource ...@@ -117,7 +127,7 @@ public class ag_bodysource
public Nullable<decimal> NightWorkPerformance { get; set; } public Nullable<decimal> NightWorkPerformance { get; set; }
/// <summary> /// <summary>
/// 实发绩效工资金额 /// 实发绩效(不含医院其他绩效)
/// </summary> /// </summary>
public Nullable<decimal> RealAmount { get; set; } public Nullable<decimal> RealAmount { get; set; }
...@@ -135,5 +145,10 @@ public class ag_bodysource ...@@ -135,5 +145,10 @@ public class ag_bodysource
/// 预留金额 /// 预留金额
/// </summary> /// </summary>
public Nullable<decimal> ReservedAmount { get; set; } public Nullable<decimal> ReservedAmount { get; set; }
/// <summary>
/// 实发绩效(参考,含医院其他绩效)
/// </summary>
public Nullable<decimal> ReferToRealAmount { get; set; }
} }
} }
...@@ -52,14 +52,19 @@ public class ag_headsource ...@@ -52,14 +52,19 @@ public class ag_headsource
public Nullable<decimal> DirectorBasisPerformance { get; set; } public Nullable<decimal> DirectorBasisPerformance { get; set; }
/// <summary> /// <summary>
/// 科室单项奖励 /// 业绩分配绩效总额
/// </summary> /// </summary>
public Nullable<decimal> TheTotalAllocationOfPerformanceResults { get; set; } public Nullable<decimal> TheTotalAllocationOfPerformanceResults { get; set; }
/// <summary> /// <summary>
/// 业绩分配绩效总额 /// 科室单项奖励
/// </summary> /// </summary>
public Nullable<decimal> BasisPerformance { get; set; } public Nullable<decimal> TotalDeptReward { get; set; }
///// <summary>
///// 业绩分配绩效总额
///// </summary>
//public Nullable<decimal> BasisPerformance { get; set; }
/// <summary> /// <summary>
/// 年资职称绩效占比 /// 年资职称绩效占比
......
...@@ -60,5 +60,10 @@ public class ag_workload ...@@ -60,5 +60,10 @@ public class ag_workload
/// 1、单项奖励 2、工作量占比 ..(自定义占比) /// 1、单项奖励 2、工作量占比 ..(自定义占比)
/// </summary> /// </summary>
public int WorkTypeId { get; set; } public int WorkTypeId { get; set; }
/// <summary>
/// 工作量来源类型
/// </summary>
public string SourceCategory { get; set; }
} }
} }
namespace Performance.EntityModels
{
public class view_second_workload_result
{
public int HospitalId { get; set; }
public int AllotId { get; set; }
/// <summary>
/// 核算单元组别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 统计的HIS的原始科室名称
/// </summary>
public string HISDeptName { get; set; }
public string ItemId { get; set; }
public string ItemName { get; set; }
public decimal? FactorValue { get; set; }
public string PersonnelNumber { get; set; }
public string DoctorName { get; set; }
public string Category { get; set; }
public decimal Value { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
namespace Performance.Infrastructure
{
public static partial class UtilExtensions
{
public static string ToRGB(this Color color)
{
return $"{color.R},{color.G},{color.B}";
}
}
}
...@@ -18,8 +18,9 @@ public static partial class UtilExtensions ...@@ -18,8 +18,9 @@ public static partial class UtilExtensions
/// <returns></returns> /// <returns></returns>
public static T GetValue<T>(this Dictionary<string, object> keyValues, string key, T defaultValue = default(T)) public static T GetValue<T>(this Dictionary<string, object> keyValues, string key, T defaultValue = default(T))
{ {
object value; if (keyValues.TryGetValue(key, out object value))
if (keyValues.TryGetValue(key, out value)) return ConvertHelper.To<T>(value, defaultValue);
else if (keyValues.TryGetValue(key.ToLower(), out value))
return ConvertHelper.To<T>(value, defaultValue); return ConvertHelper.To<T>(value, defaultValue);
return defaultValue; return defaultValue;
} }
...@@ -33,13 +34,62 @@ public static T GetValue<T>(this Dictionary<string, object> keyValues, string ke ...@@ -33,13 +34,62 @@ public static T GetValue<T>(this Dictionary<string, object> keyValues, string ke
/// <returns></returns> /// <returns></returns>
public static T GetValue<T>(this SortedDictionary<string, object> keyValues, string key, T defaultValue = default(T)) public static T GetValue<T>(this SortedDictionary<string, object> keyValues, string key, T defaultValue = default(T))
{ {
object value; if (keyValues.TryGetValue(key, out object value))
if (keyValues.TryGetValue(key, out value)) return ConvertHelper.To<T>(value, defaultValue);
else if (keyValues.TryGetValue(key.ToLower(), out value))
return ConvertHelper.To<T>(value, defaultValue); return ConvertHelper.To<T>(value, defaultValue);
return defaultValue; return defaultValue;
} }
/// <summary> /// <summary>
/// 添加或修改
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="keyValues"></param>
/// <param name="key"></param>
/// <returns></returns>
public static void AddOrUpdate(this Dictionary<string, object> keyValues, string key, object value)
{
var pair = keyValues.FirstOrDefault(w => w.Key.Equals(key, StringComparison.OrdinalIgnoreCase));
if (default(KeyValuePair<string, object>).Equals(pair))
keyValues.Add(key, value);
else
keyValues[key] = value;
}
/// <summary>
/// 为了快速读取,忽略大小写,默认:0
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="keyValues"></param>
/// <param name="key"></param>
/// <returns></returns>
public static decimal GetDecimal(this Dictionary<string, object> keyValues, string key)
{
if (keyValues.TryGetValue(key, out object value))
return value == null || string.IsNullOrEmpty(value.ToString().Trim()) ? 0m : decimal.Parse(value.ToString());
else if (keyValues.TryGetValue(key.ToLower(), out value))
return value == null || string.IsNullOrEmpty(value.ToString().Trim()) ? 0m : decimal.Parse(value.ToString());
return 0m;
}
/// <summary>
/// 为了快速读取,忽略大小写,默认:空值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="keyValues"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string GetString(this Dictionary<string, object> keyValues, string key)
{
if (keyValues.TryGetValue(key, out object value))
return value?.ToString() ?? "";
else if (keyValues.TryGetValue(key.ToLower(), out value))
return value?.ToString() ?? "";
return "";
}
/// <summary>
/// form 转换 键值对 /// form 转换 键值对
/// </summary> /// </summary>
/// <param name="pairs"></param> /// <param name="pairs"></param>
......
...@@ -26,5 +26,27 @@ public static string[] SplitRemoveEmpty(this string text, params string[] separa ...@@ -26,5 +26,27 @@ public static string[] SplitRemoveEmpty(this string text, params string[] separa
{ {
return text.Split(separator, StringSplitOptions.RemoveEmptyEntries); return text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
} }
/// <summary>
/// 确定此字符串实例的开头是否与指定的匹配 忽略字母的大小写
/// </summary>
/// <param name="text"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool StartsWithIgnoreCase(this string text, string value)
{
return text.StartsWith(value, StringComparison.OrdinalIgnoreCase);
}
/// <summary>
/// 确定此字符串是否与指定的字符串对象具有相同的值 忽略字母的大小写
/// </summary>
/// <param name="text"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool EqualsIgnoreCase(this string text, string value)
{
return text.Equals(value, StringComparison.OrdinalIgnoreCase);
}
} }
} }
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
namespace Performance.Infrastructure namespace Performance.Infrastructure
{ {
...@@ -17,5 +19,26 @@ public static string GetSmsCode() ...@@ -17,5 +19,26 @@ public static string GetSmsCode()
return code.ToString().PadLeft(4, '0'); return code.ToString().PadLeft(4, '0');
} }
public static List<Color> Color(Color sColor, Color eColor, int number)
{
int sr = sColor.R;
int sg = sColor.G;
int sb = sColor.B;
int er = eColor.R;
int eg = eColor.G;
int eb = eColor.B;
var colorList = new List<Color>();
for (int i = 0; i < number; i++)
{
var rAverage = sr + (int)((er - sr) * i / number);
var gAverage = sg + (int)((eg - sg) * i / number);
var bAverage = sb + (int)((eb - sb) * i / number);
colorList.Add(System.Drawing.Color.FromArgb(rAverage, gAverage, bAverage));
}
return colorList;
}
} }
} }
...@@ -188,7 +188,7 @@ public IEnumerable<report_original_workload> QueryWorkloadData(int allotid, stri ...@@ -188,7 +188,7 @@ public IEnumerable<report_original_workload> QueryWorkloadData(int allotid, stri
WHERE t1.allotid = @allotid WHERE t1.allotid = @allotid
AND t3.unittype in @unittypes AND t3.unittype in @unittypes
AND t3.accountingunit = @accountingunit AND t3.accountingunit = @accountingunit
AND t1.Source LIKE CONCAT('%',@unittype,'工作量%') AND (t1.Source LIKE CONCAT('%',@unittype,'工作量%') OR t1.Source = '通用工作量')
AND T1.IsDelete = 0 AND T1.IsDelete = 0
GROUP BY ifnull(t1.DoctorName, '未知'),t1.PersonnelNumber,t1.Category GROUP BY ifnull(t1.DoctorName, '未知'),t1.PersonnelNumber,t1.Category
ORDER BY t1.doctorname,t1.Category;"; ORDER BY t1.doctorname,t1.Category;";
...@@ -229,5 +229,58 @@ public IEnumerable<ex_result> QueryIncomeData(int allotid, string source, string ...@@ -229,5 +229,58 @@ public IEnumerable<ex_result> QueryIncomeData(int allotid, string source, string
} }
} }
} }
/// <summary>
/// 二次分配按工号带出带出工作量
/// </summary>
/// <param name="allotid"></param>
/// <param name="unittype"></param>
/// <param name="accountingunit"></param>
/// <returns></returns>
public IEnumerable<view_second_workload_result> GetSecondWorkload(int allotid, string unittype, string accountingunit)
{
using (var connection = context.Database.GetDbConnection())
{
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string query = $@"SELECT * FROM view_second_workload_result WHERE AllotId = @allotid AND UnitType = @unittype AND AccountingUnit = @accountingunit";
return connection.Query<view_second_workload_result>(query, new { allotid, unittype, accountingunit }, commandTimeout: 60 * 60);
}
catch (Exception ex)
{
throw ex;
}
}
}
/// <summary>
/// 查询HIS提取数据,工作量字典
/// </summary>
/// <param name="allotid"></param>
/// <param name="unittype"></param>
/// <param name="accountingunit"></param>
/// <returns></returns>
public IEnumerable<string> GetSecondWorkloadMaps(int hospitalId)
{
using (var connection = context.Database.GetDbConnection())
{
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string query = $@"SELECT DISTINCT Category FROM (
SELECT IF(Source = 102,EName,ItemName) Category FROM ex_type t1
LEFT JOIN ex_item t2 ON t1.Id = t2.TypeId
WHERE Source IN (102,7) AND HospitalId = @hospitalId
)TAB
WHERE IFNULL(Category,'')<>''";
return connection.Query<string>(query, new { hospitalId }, commandTimeout: 60 * 60);
}
catch (Exception ex)
{
throw ex;
}
}
}
} }
} }
\ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
namespace Performance.Repository namespace Performance.Repository
{ {
/// <summary> /// <summary>
/// per_apr_amount Repository /// per_apr_amount_hide Repository
/// </summary> /// </summary>
public partial class PerforPerapramounthideRepository : PerforRepository<per_apr_amount_hide> public partial class PerforPerapramounthideRepository : PerforRepository<per_apr_amount_hide>
{ {
......
...@@ -20,6 +20,7 @@ public class DictionaryService : IAutoInjection ...@@ -20,6 +20,7 @@ public class DictionaryService : IAutoInjection
private readonly PerforHospitalconfigRepository hospitalconfigRepository; private readonly PerforHospitalconfigRepository hospitalconfigRepository;
private readonly PerforExtypeRepository extypeRepository; private readonly PerforExtypeRepository extypeRepository;
private readonly PerforExscriptRepository exscriptRepository; private readonly PerforExscriptRepository exscriptRepository;
private readonly PerforExresultRepository exresultRepository;
private readonly PerforHisdataRepository hisdataRepository; private readonly PerforHisdataRepository hisdataRepository;
private readonly PerforHisscriptRepository hisscriptRepository; private readonly PerforHisscriptRepository hisscriptRepository;
...@@ -31,6 +32,7 @@ public class DictionaryService : IAutoInjection ...@@ -31,6 +32,7 @@ public class DictionaryService : IAutoInjection
PerforHospitalconfigRepository hospitalconfigRepository, PerforHospitalconfigRepository hospitalconfigRepository,
PerforExtypeRepository extypeRepository, PerforExtypeRepository extypeRepository,
PerforExscriptRepository exscriptRepository, PerforExscriptRepository exscriptRepository,
PerforExresultRepository exresultRepository,
PerforHisdataRepository hisdataRepository, PerforHisdataRepository hisdataRepository,
PerforHisscriptRepository hisscriptRepository PerforHisscriptRepository hisscriptRepository
) )
...@@ -42,6 +44,7 @@ PerforHisscriptRepository hisscriptRepository ...@@ -42,6 +44,7 @@ PerforHisscriptRepository hisscriptRepository
this.hospitalconfigRepository = hospitalconfigRepository; this.hospitalconfigRepository = hospitalconfigRepository;
this.extypeRepository = extypeRepository; this.extypeRepository = extypeRepository;
this.exscriptRepository = exscriptRepository; this.exscriptRepository = exscriptRepository;
this.exresultRepository = exresultRepository;
this.hisdataRepository = hisdataRepository; this.hisdataRepository = hisdataRepository;
this.hisscriptRepository = hisscriptRepository; this.hisscriptRepository = hisscriptRepository;
} }
...@@ -53,7 +56,7 @@ public void Handler(int hospitalId, per_allot allot, string groupName, bool isSi ...@@ -53,7 +56,7 @@ public void Handler(int hospitalId, per_allot allot, string groupName, bool isSi
var configs = hospitalconfigRepository.GetEntities(t => t.HospitalId == hospitalId); var configs = hospitalconfigRepository.GetEntities(t => t.HospitalId == hospitalId);
if (configs == null || !configs.Any()) throw new Exception("医院未配置绩效抽取信息"); if (configs == null || !configs.Any()) throw new Exception("医院未配置绩效抽取信息");
var types = extypeRepository.GetEntities(t => t.HospitalId == hospitalId && new int[] { 2 }.Contains(t.Source)); var types = extypeRepository.GetEntities(t => t.HospitalId == hospitalId && new int[] { (int)SheetType.Employee, (int)SheetType.OnlyExtract }.Contains(t.Source));
if (types != null && types.Any()) if (types != null && types.Any())
{ {
logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"提取人员信息数据", isSingle: isSingle); logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"提取人员信息数据", isSingle: isSingle);
...@@ -67,6 +70,19 @@ public void Handler(int hospitalId, per_allot allot, string groupName, bool isSi ...@@ -67,6 +70,19 @@ public void Handler(int hospitalId, per_allot allot, string groupName, bool isSi
if (script != null) if (script != null)
Employee(allot, configs.FirstOrDefault(t => t.Id == script.ConfigId), script.ExecScript); Employee(allot, configs.FirstOrDefault(t => t.Id == script.ConfigId), script.ExecScript);
} }
if (types.Any(t => t.Source == (int)SheetType.OnlyExtract)) //不写入Excel的提取数据
{
foreach (var type in types.Where(t => t.Source == (int)SheetType.OnlyExtract))
{
var thisTypeScripts = scripts.Where(t => t.TypeId == type.Id);
if (thisTypeScripts == null || !thisTypeScripts.Any()) continue;
foreach (var script in thisTypeScripts)
{
ExResult(allot, configs.FirstOrDefault(t => t.Id == script.ConfigId), script.ExecScript, type.EName);
}
}
}
} }
} }
...@@ -154,6 +170,37 @@ private void Department() ...@@ -154,6 +170,37 @@ private void Department()
{ {
} }
private void ExResult(per_allot allot, sys_hospitalconfig config, string sql, string enmae)
{
try
{
if (config == null || string.IsNullOrEmpty(sql)) return;
var data = queryService.QueryData(config, allot, sql);
if (data == null || !data.Any()) return;
var createTime = DateTime.Now;
var result = data.Select(t => new ex_result
{
Department = t.Department,
Category = enmae,
Fee = t.Value,
DoctorName = t.DoctorName,
PersonnelNumber = t.PersonnelNumber,
Source = "通用工作量",
DatabaseType = config.DataBaseType,
ConfigId = config.Id,
AllotId = allot.ID,
CreateTime = createTime,
}).ToList();
exresultRepository.AddRange(result.ToArray());
}
catch (Exception ex)
{
logger.LogError("获取不写入Excel数据时发生异常:" + ex.ToString());
}
}
private string GetSaveValue(params string[] arr) private string GetSaveValue(params string[] arr)
{ {
string value = string.Empty; string value = string.Empty;
......
...@@ -80,6 +80,9 @@ public string Main(int allotId, int hospitalId, string email, string groupName, ...@@ -80,6 +80,9 @@ public string Main(int allotId, int hospitalId, string email, string groupName,
var dict = new Dictionary<ExDataDict, object>(); var dict = new Dictionary<ExDataDict, object>();
logService.ReturnTheLog(allotId, groupName, 3, "", 5, 1, isSingle); logService.ReturnTheLog(allotId, groupName, 3, "", 5, 1, isSingle);
queryService.ClearHistoryData(allot.ID, groupName, isSingle);
dictionaryService.Handler(hospitalId, allot, groupName, isSingle); dictionaryService.Handler(hospitalId, allot, groupName, isSingle);
var data = queryService.Handler(hospitalId, allot, groupName, isSingle, ref dict); var data = queryService.Handler(hospitalId, allot, groupName, isSingle, ref dict);
var standData = StandDataFormat(hospitalId, data); var standData = StandDataFormat(hospitalId, data);
......
...@@ -77,8 +77,6 @@ public List<ex_result> Handler(int hospitalId, per_allot allot, string groupName ...@@ -77,8 +77,6 @@ public List<ex_result> Handler(int hospitalId, per_allot allot, string groupName
}; };
var extypeIds = GetQueryScriptIds(hospitalId, ref dict); var extypeIds = GetQueryScriptIds(hospitalId, ref dict);
ClearHistoryData(allot.ID, groupName, isSingle);
var data = new List<ex_result>(); var data = new List<ex_result>();
logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"开始提取数据", isSingle: isSingle); logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"开始提取数据", isSingle: isSingle);
...@@ -157,7 +155,7 @@ private List<int> GetQueryScriptIds(int hospitalId, ref Dictionary<ExDataDict, o ...@@ -157,7 +155,7 @@ private List<int> GetQueryScriptIds(int hospitalId, ref Dictionary<ExDataDict, o
/// 清除历史抽取数据 /// 清除历史抽取数据
/// </summary> /// </summary>
/// <param name="allotId"></param> /// <param name="allotId"></param>
private void ClearHistoryData(int allotId, string groupName, bool isSingle) public void ClearHistoryData(int allotId, string groupName, bool isSingle)
{ {
logService.ReturnTheLog(allotId, groupName, 2, "清除数据", $"开始清除历史提取数据", 1, isSingle); logService.ReturnTheLog(allotId, groupName, 2, "清除数据", $"开始清除历史提取数据", 1, isSingle);
perallotRepository.ClearResultData(allotId); perallotRepository.ClearResultData(allotId);
......
...@@ -208,7 +208,7 @@ public PageList<per_employee> GetPersons(int allotId, int userId, PersonParamsRe ...@@ -208,7 +208,7 @@ public PageList<per_employee> GetPersons(int allotId, int userId, PersonParamsRe
if (request != null && !string.IsNullOrEmpty(request.SearchQuery)) if (request != null && !string.IsNullOrEmpty(request.SearchQuery))
{ {
exp = exp.And(t => true && (t.AccountingUnit.Contains(request.SearchQuery) || t.DoctorName.Contains(request.SearchQuery) || t.Department.Contains(request.SearchQuery))); exp = exp.And(t => true && (t.AccountingUnit.Contains(request.SearchQuery) || t.PersonnelNumber.Contains(request.SearchQuery) || t.DoctorName.Contains(request.SearchQuery) || t.Department.Contains(request.SearchQuery)));
} }
var result = new List<per_employee>(); var result = new List<per_employee>();
......
...@@ -530,10 +530,11 @@ private void SupplementOtherPerfor(ag_secondallot secondAllot, List<BodyItem> bo ...@@ -530,10 +530,11 @@ private void SupplementOtherPerfor(ag_secondallot secondAllot, List<BodyItem> bo
new Tuple<string, string, Func<per_employee, object>>("人员系数", "StaffCoefficient", (t) => 1), new Tuple<string, string, Func<per_employee, object>>("人员系数", "StaffCoefficient", (t) => 1),
new Tuple<string, string, Func<per_employee, object>>("职称", "JobTitle", (t) => t.JobTitle), new Tuple<string, string, Func<per_employee, object>>("职称", "JobTitle", (t) => t.JobTitle),
new Tuple<string, string, Func<per_employee, object>>("预留年度考核比例", "ReservedRatio", (t) => t.ReservedRatio), new Tuple<string, string, Func<per_employee, object>>("预留年度考核比例", "ReservedRatio", (t) => t.ReservedRatio),
new Tuple<string, string, Func<per_employee, object>>("医院其他绩效", "OtherPerformance", (t) => 0) new Tuple<string, string, Func<per_employee, object>>("医院其他绩效", "OtherPerformance", (t) => 0),
new Tuple<string, string, Func<per_employee, object>>("实发绩效工资金额", "ShifaAmountOfPerformancePay", (t) => 0)
}; };
var specialColumns = new string[] { "FullName", "OtherPerformance" }; var specialColumns = new string[] { "FullName", "OtherPerformance", "ShifaAmountOfPerformancePay" };
foreach (var item in groupData) foreach (var item in groupData)
{ {
...@@ -548,10 +549,12 @@ private void SupplementOtherPerfor(ag_secondallot secondAllot, List<BodyItem> bo ...@@ -548,10 +549,12 @@ private void SupplementOtherPerfor(ag_secondallot secondAllot, List<BodyItem> bo
var data = new BodyItem(headItem); var data = new BodyItem(headItem);
data.RowNumber = lastNumber; data.RowNumber = lastNumber;
if (specialColumns.Contains(column.Item2)) if (column.Item2 == "FullName")
{ data.Value = item.DoctorName;
data.Value = column.Item2 == "OtherPerformance" ? item.Amount : item.DoctorName; else if (column.Item2 == "OtherPerformance")
} data.Value = item.Amount;
else if (column.Item2 == "ShifaAmountOfPerformancePay")
data.Value = item.Amount;
else else
{ {
var value = column.Item3.Invoke(employee); var value = column.Item3.Invoke(employee);
...@@ -923,7 +926,7 @@ private void SupplementSecondDetail(ag_secondallot second, List<per_employee> em ...@@ -923,7 +926,7 @@ private void SupplementSecondDetail(ag_secondallot second, List<per_employee> em
/// <param name="hospitalId"></param> /// <param name="hospitalId"></param>
/// <param name="secondAllot"></param> /// <param name="secondAllot"></param>
/// <returns></returns> /// <returns></returns>
private ag_secondallot GetPreviousSecondAllot(int hospitalId, ag_secondallot secondAllot) public ag_secondallot GetPreviousSecondAllot(int hospitalId, ag_secondallot secondAllot)
{ {
// 历史删除绩效时,未删除对应的二次绩效记录 // 历史删除绩效时,未删除对应的二次绩效记录
var allotList = perallotRepository.GetEntities(w => w.HospitalId == hospitalId)?.OrderBy(s => s.Year).ThenBy(s => s.Month).ToList(); var allotList = perallotRepository.GetEntities(w => w.HospitalId == hospitalId)?.OrderBy(s => s.Year).ThenBy(s => s.Month).ToList();
......
...@@ -484,26 +484,23 @@ public void SaveSecondAllotData(int secondId, dynamic saveData) ...@@ -484,26 +484,23 @@ public void SaveSecondAllotData(int secondId, dynamic saveData)
/// </summary> /// </summary>
/// <param name="secondId"></param> /// <param name="secondId"></param>
/// <param name="json"></param> /// <param name="json"></param>
private void SaveSecondAllotHeadData(int secondId, string json) public void SaveSecondAllotHeadData(int secondId, string json)
{ {
if (string.IsNullOrEmpty(json)) return; if (string.IsNullOrEmpty(json)) return;
ag_headsource headsource = JsonHelper.Deserialize<ag_headsource>(json); ag_headsource headsource = JsonHelper.Deserialize<ag_headsource>(json);
if (headsource == null) return; if (headsource == null) return;
var exist = agheadsourceRepository.GetEntity(w => w.SecondId == secondId);
if (exist != null)
agheadsourceRepository.Remove(exist);
headsource.SecondId = secondId; headsource.SecondId = secondId;
if (headsource.Id == 0) agheadsourceRepository.Add(headsource);
{
agheadsourceRepository.Add(headsource);
}
else
{
agheadsourceRepository.UpdateByState(headsource);
}
string[] prefix = new string[] { "Workload_Ratio_", "Workload_Amount_" }; string[] prefix = new string[] { "Workload_Ratio_", "Workload_Amount_" };
Dictionary<string, object> dict = JsonHelper.Deserialize<Dictionary<string, object>>(json); Dictionary<string, object> dict = JsonHelper.Deserialize<Dictionary<string, object>>(json);
var keys = dict.Keys.Where(t => t.StartsWith(prefix[0]) || t.StartsWith(prefix[1])); var keys = dict.Keys.Where(t => t.StartsWithIgnoreCase(prefix[0]) || t.StartsWithIgnoreCase(prefix[1]));
if (keys == null || !keys.Any()) if (keys == null || !keys.Any())
return; return;
...@@ -514,7 +511,7 @@ private void SaveSecondAllotHeadData(int secondId, string json) ...@@ -514,7 +511,7 @@ private void SaveSecondAllotHeadData(int secondId, string json)
foreach (var key in keys) foreach (var key in keys)
{ {
var update = worktypeSources.FirstOrDefault(t => t.FieldId == key); var update = worktypeSources.FirstOrDefault(t => t.FieldId.EqualsIgnoreCase(key));
if (update != null) if (update != null)
{ {
update.Value = ConvertHelper.To<decimal>(dict[key]); update.Value = ConvertHelper.To<decimal>(dict[key]);
...@@ -529,7 +526,7 @@ private void SaveSecondAllotHeadData(int secondId, string json) ...@@ -529,7 +526,7 @@ private void SaveSecondAllotHeadData(int secondId, string json)
/// <param name="hospitalId"></param> /// <param name="hospitalId"></param>
/// <param name="second"></param> /// <param name="second"></param>
/// <param name="body"></param> /// <param name="body"></param>
private void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dynamic body) public void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dynamic body)
{ {
// 允许空行数据提交,删除数据库存数数据 // 允许空行数据提交,删除数据库存数数据
var bodyEntities = agbodysourceRepository.GetEntities(t => t.SecondId == second.Id); var bodyEntities = agbodysourceRepository.GetEntities(t => t.SecondId == second.Id);
...@@ -558,12 +555,12 @@ private void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dyna ...@@ -558,12 +555,12 @@ private void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dyna
if (!result) continue; if (!result) continue;
Dictionary<string, object> dict = JsonHelper.Deserialize<Dictionary<string, object>>(JsonHelper.Serialize(rowitem)); Dictionary<string, object> dict = JsonHelper.Deserialize<Dictionary<string, object>>(JsonHelper.Serialize(rowitem));
var keys = dict.Keys.Where(t => t.StartsWith(prefix[0]) || t.StartsWith(prefix[1]) || t.StartsWith(prefix[2]) || t.StartsWith(prefix[3]) || t.StartsWith(prefix[4])); var keys = dict.Keys.Where(t => t.StartsWithIgnoreCase(prefix[0]) || t.StartsWithIgnoreCase(prefix[1]) || t.StartsWithIgnoreCase(prefix[2]) || t.StartsWithIgnoreCase(prefix[3]) || t.StartsWithIgnoreCase(prefix[4]));
if (keys == null || !keys.Any()) continue; if (keys == null || !keys.Any()) continue;
foreach (var key in keys) foreach (var key in keys)
{ {
var workload = workloads.FirstOrDefault(t => t.ItemId == key); var workload = workloads.FirstOrDefault(t => t.ItemId.EqualsIgnoreCase(key));
if (workload == null) continue; if (workload == null) continue;
workloadSources.Add(new ag_workload_source workloadSources.Add(new ag_workload_source
...@@ -583,6 +580,23 @@ private void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dyna ...@@ -583,6 +580,23 @@ private void SaveSecondAllotBodyData(int hospitalId, ag_secondallot second, dyna
agworkloadsourceRepository.AddRange(workloadSources.ToArray()); agworkloadsourceRepository.AddRange(workloadSources.ToArray());
} }
public bool RedistributionSave(per_allot allot, ag_secondallot second, Dictionary<string, object> head, List<Dictionary<string, object>> rows)
{
try
{
SaveSecondAllotHeadData(second.Id, JsonHelper.Serialize(head));
SaveSecondAllotBodyData(allot.HospitalId, second, rows);
return true;
}
catch (Exception ex)
{
logger.LogError(ex.ToString());
}
return false;
}
#endregion #endregion
} }
} }
...@@ -25,5 +25,15 @@ public static bool IsOffice(string unit) ...@@ -25,5 +25,15 @@ public static bool IsOffice(string unit)
{ {
return !string.IsNullOrEmpty(unit) && (unit == "行政后勤" || unit == "行政工勤"); return !string.IsNullOrEmpty(unit) && (unit == "行政后勤" || unit == "行政工勤");
} }
/// <summary>
/// 核算单元类型是否相同
/// </summary>
/// <param name="left"></param>
/// <returns></returns>
public static bool IsEqualsUnitType(string left, string right)
{
return left?.Replace("行政后勤", "行政工勤") == right?.Replace("行政后勤", "行政工勤");
}
} }
} }
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