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
/// <summary>
/// 单项奖励
/// </summary>
SingleAwards = 1,
SingleAwards = -1,
/// <summary>
/// 工作量
/// </summary>
......
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// <copyright file=" ag_workload_source.cs">
// * FileName: .cs
// </copyright>
......@@ -34,6 +34,31 @@ public class ag_workload_source
/// <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; }
}
}
......@@ -1105,10 +1105,12 @@ private void AddWorkTypeDefaultValues(ag_workload_type type)
{
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);
}
}
else
addItems = defaultValues;
if (addItems == null || !addItems.Any()) return;
......@@ -1120,7 +1122,8 @@ private void AddWorkTypeDefaultValues(ag_workload_type type)
ItemId = $"{t.Item2}_{type.Id}",
ItemName = t.Item1,
FactorValue = null,
Sort = 100 + t.Item3
Sort = 100 + t.Item3,
WorkTypeId = type.Id
});
agworkloadRepository.AddRange(insertData.ToArray());
}
......@@ -1133,10 +1136,7 @@ private void AddWorkTypeDefaultValues(ag_workload_type type)
private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_workload_type type)
{
List<ag_worktype_source> insertData = new List<ag_worktype_source>();
var allots = perallotRepository.GetEntities(t => t.HospitalId == hospitalId);
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);
var seconds = GetNotAuditSeconds(hospitalId, type);
if (seconds == null || !seconds.Any())
return;
......@@ -1183,6 +1183,70 @@ private void AddWorkTypeDefaultHeadValue(int hospitalId, ag_workload_type type)
}
/// <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>
/// <param name="hospitalId"></param>
......@@ -1201,6 +1265,8 @@ private void CheckDefaultWorkload(int hospitalId, string department, string unit
addItems.Add(item);
}
}
else
addItems = defaultValues;
if (addItems == null || !addItems.Any()) return;
......@@ -1212,7 +1278,8 @@ private void CheckDefaultWorkload(int hospitalId, string department, string unit
ItemId = t.Item2 + "_Default",
ItemName = t.Item1,
FactorValue = null,
Sort = 100 + t.Item3
Sort = 100 + t.Item3,
WorkTypeId = (int)AgWorkloadType.Workload
});
agworkloadRepository.AddRange(insertData.ToArray());
}
......@@ -1237,9 +1304,15 @@ public bool DeleteWorkType(WorkloadRequest request)
var items = agworkloadRepository.GetEntities(t => t.WorkTypeId == request.Id);
if (items != null && items.Any())
agworkloadRepository.RemoveRange(items.ToArray());
var sources = agworktypesourceRepository.GetEntities(t => t.WorkTypeId == request.Id);
if (sources != null && sources.Any())
agworktypesourceRepository.RemoveRange(sources.ToArray());
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())
agworktypesourceRepository.RemoveRange(sources.ToArray());
}
return agworkloadtypeRepository.Remove(entity);
}
......@@ -1276,7 +1349,7 @@ public bool WorkloadAdd(WorkloadRequest request)
FactorValue = request.FactorValue ?? 1,
ItemName = request.ItemName,
Sort = request.Sort ?? 1,
WorkTypeId = request.WorkTypeId,
WorkTypeId = request.IsSingleAwards ? (int)AgWorkloadType.SingleAwards : request.WorkTypeId
};
var result = agworkloadRepository.Add(workload);
if (result)
......@@ -1307,7 +1380,7 @@ public bool WorkloadUpdate(WorkloadRequest request)
workload.ItemName = request.ItemName;
workload.Sort = request.Sort;
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);
}
......@@ -1332,6 +1405,21 @@ public bool WorkloadUpdate(WorkloadRequest request)
};
/// <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>
/// <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