Commit 86af1c0c by lcx

保存接口调整、保证提交审核后数据和提交时数据一致,对workloadtype、workload进行统一修改(添加worktype时补充非提交二次的worktyp…

保存接口调整、保证提交审核后数据和提交时数据一致,对workloadtype、workload进行统一修改(添加worktype时补充非提交二次的worktypesource,删除时删除非提交二次的worktypesource,加载详情时对该次二次绩效的worktypesource进行补充),worktype、workload字典接口修改
parent 24774025
...@@ -87,7 +87,7 @@ public enum AgWorkloadType ...@@ -87,7 +87,7 @@ public enum AgWorkloadType
/// <summary> /// <summary>
/// 单项奖励 /// 单项奖励
/// </summary> /// </summary>
SingleAwards = 1, SingleAwards = -1,
/// <summary> /// <summary>
/// 工作量 /// 工作量
/// </summary> /// </summary>
......
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
// <copyright file=" ag_workload_source.cs"> // <copyright file=" ag_workload_source.cs">
// * FileName: .cs // * FileName: .cs
// </copyright> // </copyright>
...@@ -34,6 +34,31 @@ public class ag_workload_source ...@@ -34,6 +34,31 @@ public class ag_workload_source
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public string UnitType { get; set; }
/// <summary>
/// 工作量考核项ID
/// </summary>
public string ItemId { get; set; }
/// <summary>
/// 工作量名称
/// </summary>
public string ItemName { get; set; }
/// <summary>
/// 工作量系数
/// </summary>
public Nullable<decimal> FactorValue { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> Sort { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> Value { get; set; } public Nullable<decimal> Value { get; set; }
} }
} }
...@@ -1105,10 +1105,12 @@ private void AddWorkTypeDefaultValues(ag_workload_type type) ...@@ -1105,10 +1105,12 @@ private void AddWorkTypeDefaultValues(ag_workload_type type)
{ {
foreach (var item in defaultValues) foreach (var item in defaultValues)
{ {
if (!workItems.Any(t => t.ItemId.StartsWith(item.Item2))) if (!workItems.Any(t => t.ItemId == $"{item.Item2}_{type.Id}"))
addItems.Add(item); addItems.Add(item);
} }
} }
else
addItems = defaultValues;
if (addItems == null || !addItems.Any()) return; if (addItems == null || !addItems.Any()) return;
...@@ -1120,7 +1122,8 @@ private void AddWorkTypeDefaultValues(ag_workload_type type) ...@@ -1120,7 +1122,8 @@ private void AddWorkTypeDefaultValues(ag_workload_type type)
ItemId = $"{t.Item2}_{type.Id}", ItemId = $"{t.Item2}_{type.Id}",
ItemName = t.Item1, ItemName = t.Item1,
FactorValue = null, FactorValue = null,
Sort = 100 + t.Item3 Sort = 100 + t.Item3,
WorkTypeId = type.Id
}); });
agworkloadRepository.AddRange(insertData.ToArray()); agworkloadRepository.AddRange(insertData.ToArray());
} }
...@@ -1133,10 +1136,7 @@ private void AddWorkTypeDefaultValues(ag_workload_type type) ...@@ -1133,10 +1136,7 @@ private void AddWorkTypeDefaultValues(ag_workload_type type)
private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_workload_type type) private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_workload_type type)
{ {
List<ag_worktype_source> insertData = new List<ag_worktype_source>(); List<ag_worktype_source> insertData = new List<ag_worktype_source>();
var allots = perallotRepository.GetEntities(t => t.HospitalId == hospitalId); var seconds = GetNotAuditSeconds(hospitalId, type);
if (allots == null || !allots.Any()) return;
var seconds = agsecondallotRepository.GetEntities(t => allots.Select(w => w.ID).Contains(t.AllotId.Value) && t.Department == type.Department && t.UnitType == type.UnitType);
if (seconds == null || !seconds.Any()) if (seconds == null || !seconds.Any())
return; return;
...@@ -1183,6 +1183,70 @@ private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_workload_type type) ...@@ -1183,6 +1183,70 @@ private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_workload_type type)
} }
/// <summary> /// <summary>
/// 添加工作量类型默认配置 - 顶部数据中的占比、金额
/// </summary>
/// <param name="hospitalId"></param>
/// <param name="second"></param>
private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_secondallot second)
{
/**
*
* 二次绩效提交时,跳过该绩效新增工作量类型
* 防止在二次绩效审核期间新增工作量类型,进行数据补充
*
*/
if (second == null || IsAudit(second.Status)) return;
var worktypeSources = agworktypesourceRepository.GetEntities(t => t.SecondId == second.Id);
var worktypes = agworkloadtypeRepository.GetEntities(t => t.HospitalId == hospitalId && t.Department == second.Department && t.UnitType == second.UnitType);
if (worktypes == null || !worktypes.Any())
{
if (worktypeSources != null && worktypeSources.Any())
agworktypesourceRepository.RemoveRange(worktypeSources.ToArray());
return;
}
List<ag_worktype_source> insertData = new List<ag_worktype_source>(), updateData = new List<ag_worktype_source>();
foreach (var type in worktypes)
{
var sources = worktypeSources.Where(t => t.WorkTypeId == type.Id)?.ToList();
if (sources != null && sources.Any())
{
sources.ForEach(t => t.FieldName = type.TypeName + t.FieldName.Substring(t.FieldName.Length - 2));
updateData.AddRange(sources);
}
else
{
insertData.Add(new ag_worktype_source
{
WorkTypeId = type.Id,
SecondId = second.Id,
FieldId = $"{AgWorkloadType.Workload}_Ratio_{type.Id}",
FieldName = type.TypeName.EndsWith("占比") ? type.TypeName : type.TypeName + "占比"
});
}
}
if (insertData != null && insertData.Any())
{
var amounts = insertData.Select(t => new ag_worktype_source
{
WorkTypeId = t.Id,
SecondId = second.Id,
FieldId = $"{AgWorkloadType.Workload}_Amount_{t.Id}",
FieldName = t.FieldName.Substring(0, t.FieldName.Length - 2) + "金额"
}).ToList();
insertData.AddRange(amounts);
agworktypesourceRepository.AddRange(insertData.OrderBy(t => t.WorkTypeId).ThenBy(t => t.FieldName).ToArray());
}
if (updateData != null && updateData.Any())
{
agworktypesourceRepository.UpdateRange(updateData.ToArray());
}
}
/// <summary>
/// 检查默认工作量项是否已添加,添加默认的工作量得分、考核得分、工作量绩效工资 /// 检查默认工作量项是否已添加,添加默认的工作量得分、考核得分、工作量绩效工资
/// </summary> /// </summary>
/// <param name="hospitalId"></param> /// <param name="hospitalId"></param>
...@@ -1201,6 +1265,8 @@ private void CheckDefaultWorkload(int hospitalId, string department, string unit ...@@ -1201,6 +1265,8 @@ private void CheckDefaultWorkload(int hospitalId, string department, string unit
addItems.Add(item); addItems.Add(item);
} }
} }
else
addItems = defaultValues;
if (addItems == null || !addItems.Any()) return; if (addItems == null || !addItems.Any()) return;
...@@ -1212,7 +1278,8 @@ private void CheckDefaultWorkload(int hospitalId, string department, string unit ...@@ -1212,7 +1278,8 @@ private void CheckDefaultWorkload(int hospitalId, string department, string unit
ItemId = t.Item2 + "_Default", ItemId = t.Item2 + "_Default",
ItemName = t.Item1, ItemName = t.Item1,
FactorValue = null, FactorValue = null,
Sort = 100 + t.Item3 Sort = 100 + t.Item3,
WorkTypeId = (int)AgWorkloadType.Workload
}); });
agworkloadRepository.AddRange(insertData.ToArray()); agworkloadRepository.AddRange(insertData.ToArray());
} }
...@@ -1237,9 +1304,15 @@ public bool DeleteWorkType(WorkloadRequest request) ...@@ -1237,9 +1304,15 @@ public bool DeleteWorkType(WorkloadRequest request)
var items = agworkloadRepository.GetEntities(t => t.WorkTypeId == request.Id); var items = agworkloadRepository.GetEntities(t => t.WorkTypeId == request.Id);
if (items != null && items.Any()) if (items != null && items.Any())
agworkloadRepository.RemoveRange(items.ToArray()); agworkloadRepository.RemoveRange(items.ToArray());
var sources = agworktypesourceRepository.GetEntities(t => t.WorkTypeId == request.Id);
var seconds = GetNotAuditSeconds(entity.HospitalId, entity);
if (seconds != null && seconds.Any())
{
// 删除未提交驳回的二次绩效的数据
var sources = agworktypesourceRepository.GetEntities(t => t.WorkTypeId == request.Id && seconds.Select(w => w.Id).Contains(t.SecondId));
if (sources != null && sources.Any()) if (sources != null && sources.Any())
agworktypesourceRepository.RemoveRange(sources.ToArray()); agworktypesourceRepository.RemoveRange(sources.ToArray());
}
return agworkloadtypeRepository.Remove(entity); return agworkloadtypeRepository.Remove(entity);
} }
...@@ -1276,7 +1349,7 @@ public bool WorkloadAdd(WorkloadRequest request) ...@@ -1276,7 +1349,7 @@ public bool WorkloadAdd(WorkloadRequest request)
FactorValue = request.FactorValue ?? 1, FactorValue = request.FactorValue ?? 1,
ItemName = request.ItemName, ItemName = request.ItemName,
Sort = request.Sort ?? 1, Sort = request.Sort ?? 1,
WorkTypeId = request.WorkTypeId, WorkTypeId = request.IsSingleAwards ? (int)AgWorkloadType.SingleAwards : request.WorkTypeId
}; };
var result = agworkloadRepository.Add(workload); var result = agworkloadRepository.Add(workload);
if (result) if (result)
...@@ -1307,7 +1380,7 @@ public bool WorkloadUpdate(WorkloadRequest request) ...@@ -1307,7 +1380,7 @@ public bool WorkloadUpdate(WorkloadRequest request)
workload.ItemName = request.ItemName; workload.ItemName = request.ItemName;
workload.Sort = request.Sort; workload.Sort = request.Sort;
workload.ItemId = getWorkloadItemId.Invoke(request.IsSingleAwards, request.WorkTypeId, workload.Id); ; workload.ItemId = getWorkloadItemId.Invoke(request.IsSingleAwards, request.WorkTypeId, workload.Id); ;
workload.WorkTypeId = request.WorkTypeId; workload.WorkTypeId = request.IsSingleAwards ? (int)AgWorkloadType.SingleAwards : request.WorkTypeId;
return agworkloadRepository.Update(workload); return agworkloadRepository.Update(workload);
} }
...@@ -1332,6 +1405,21 @@ public bool WorkloadUpdate(WorkloadRequest request) ...@@ -1332,6 +1405,21 @@ public bool WorkloadUpdate(WorkloadRequest request)
}; };
/// <summary> /// <summary>
/// 获取等待提交或驳回的二次绩效(同一医院同一科室)
/// </summary>
private List<ag_secondallot> GetNotAuditSeconds(int hospitalId, ag_workload_type type)
{
List<ag_secondallot> seconds = new List<ag_secondallot>();
var allots = perallotRepository.GetEntities(t => t.HospitalId == hospitalId);
if (allots == null || !allots.Any()) return seconds;
/**
* 添加数据时注意避免给已经提交过的数据添加,否则会造成提交时的数据和显示数据不一致
*/
return agsecondallotRepository.GetEntities(t => allots.Select(w => w.ID).Contains(t.AllotId.Value) && t.Department == type.Department && t.UnitType == type.UnitType && IsAudit(t.Status)) ?? seconds;
}
/// <summary>
/// 删除工作量绩效配置 /// 删除工作量绩效配置
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
......
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