优化

parent cf96e1ed
......@@ -552,9 +552,9 @@ public ApiResponse RedistributionLoad([FromBody] SecondLoadDto request)
if (!Enum.IsDefined(typeof(ComputeMode), request.ComputeMode))
throw new PerformanceException("暂不支持当前计算方式!");
var overrideMode = OverrideMode.Initial;
if (Enum.IsDefined(typeof(OverrideMode), request.OverrideMode))
overrideMode = (OverrideMode)request.OverrideMode;
var overrideMode = EmployeeSource.Initial;
if (Enum.IsDefined(typeof(EmployeeSource), request.OverrideMode))
overrideMode = (EmployeeSource)request.OverrideMode;
var result = _redistributionService.Load(request.SecondId, (ComputeMode)request.ComputeMode, overrideMode);
return new ApiResponse(ResponseType.OK, result);
......
......@@ -3781,26 +3781,6 @@
纵向计算
</summary>
</member>
<member name="T:Performance.DtoModels.Second.OverrideMode">
<summary>
人员带出方式 已保存,上次,字典,测算表
</summary>
</member>
<member name="F:Performance.DtoModels.Second.OverrideMode.Initial">
<summary>
初始化(用户保存后的数据)
</summary>
</member>
<member name="F:Performance.DtoModels.Second.OverrideMode.PrevSecondAllot">
<summary>
上一个二次绩效记录
</summary>
</member>
<member name="F:Performance.DtoModels.Second.OverrideMode.EmployeeDict">
<summary>
人员字典
</summary>
</member>
<member name="P:Performance.DtoModels.SecondLoadDto.ComputeMode">
<summary>
计算方式:1 不计算 2 横向计算 3 纵向计算
......
......@@ -12,34 +12,14 @@ public enum ComputeMode
/// <summary>
/// 不计算
/// </summary>
NotCalculate = 1,
NotCalculate = 11,
/// <summary>
/// 横向计算
/// </summary>
Horizontal = 2,
Horizontal = 12,
/// <summary>
/// 纵向计算
/// </summary>
Vertical = 3,
}
/// <summary>
/// 人员带出方式 已保存,上次,字典,测算表
/// </summary>
public enum OverrideMode
{
/// <summary>
/// 初始化(用户保存后的数据)
/// </summary>
Initial = 0,
/// <summary>
/// 上一个二次绩效记录
/// </summary>
PrevSecondAllot = 1,
/// <summary>
/// 人员字典
/// </summary>
EmployeeDict = 2,
Vertical = 13,
}
}
......@@ -5,20 +5,24 @@ public class SecondColumnDictionary
public string Label { get; set; }
public string Key { get; set; }
public bool IsTrue { get; set; }
public string Fixed { get; set; }
public int Sort { get; set; }
public string Site { get; set; }
public string Type { get; set; }
public SecondColumnDictionary()
{
}
public SecondColumnDictionary(string label, string key, bool isTrue, int sort, string site = "Table")
public SecondColumnDictionary(string label, string key, bool isTrue, int sort, string site = "Table", string fix = "", string type = "")
{
Label = label;
Key = key;
IsTrue = isTrue;
Sort = sort;
Site = site;
Fixed = fix;
Type = type;
}
}
}
......@@ -72,10 +72,10 @@ public class RedistributionService : IAutoInjection
/// 加载
/// </summary>
/// <param name="secondId"></param>
/// <param name="computeMode">计算方式:1 不计算 2 横向计算 3 纵向计算</param>
/// <param name="computeMode">计算方式:11 不计算 12 横向计算 13 纵向计算</param>
/// <param name="overrideMode">数据加载方式:0 保存,1 上次,2 字典,3 测算表</param>
/// <returns></returns>
public SecondDetailDto Load(int secondId, ComputeMode computeMode, OverrideMode overrideMode)
public SecondDetailDto Load(int secondId, ComputeMode computeMode, EmployeeSource overrideMode)
{
var second = _secondallotRepository.GetEntity(t => t.Id == secondId);
if (second == null) throw new PerformanceException("参数SecondId无效!");
......@@ -128,45 +128,52 @@ public SecondDetailDto Load(int secondId, ComputeMode computeMode, OverrideMode
return new SecondDetailDto { Head = head, Body = handson, Dic = dic };
}
/// <summary>
/// 表格及列头 字典信息
/// </summary>
/// <param name="second"></param>
/// <param name="loads"></param>
/// <returns></returns>
public List<SecondColumnDictionary> GetTableHeaderDictionary(ag_secondallot second, List<TitleValue<string, decimal?>> loads)
{
var maps = new List<SecondColumnDictionary>()
{
new SecondColumnDictionary("人员工号",nameof(ag_bodysource.WorkNumber),true,100 ),
new SecondColumnDictionary("姓名",nameof(ag_bodysource.Name),true,100 ),
new SecondColumnDictionary("科室",nameof(ag_bodysource.Department),true,100 ),
new SecondColumnDictionary("岗位",nameof(ag_bodysource.Post),true,100 ),
new SecondColumnDictionary("人员工号",nameof(ag_bodysource.WorkNumber),true,100, fix:"Left"),
new SecondColumnDictionary("姓名",nameof(ag_bodysource.Name),true,100, fix:"Left"),
new SecondColumnDictionary("科室",nameof(ag_bodysource.Department),true,100, fix:"Left"),
new SecondColumnDictionary("主管",nameof(ag_bodysource.Post),true,100 ),
new SecondColumnDictionary("人员系数",nameof(ag_bodysource.StaffCoefficient),true,200 ),
new SecondColumnDictionary("出勤",nameof(ag_bodysource.ActualAttendance),true,201 ),
new SecondColumnDictionary("职称",nameof(ag_bodysource.JobTitle),true,202 ),
new SecondColumnDictionary("职称系数",nameof(ag_bodysource.TitleCoefficient),true,203 ),
new SecondColumnDictionary("人员系数",nameof(ag_bodysource.StaffCoefficient),false,200 ),
new SecondColumnDictionary("出勤",nameof(ag_bodysource.ActualAttendance),false,201 ),
new SecondColumnDictionary("职称",nameof(ag_bodysource.JobTitle),false,202 ),
new SecondColumnDictionary("职称系数",nameof(ag_bodysource.TitleCoefficient),false,203 ),
new SecondColumnDictionary("职称绩效",nameof(ag_bodysource.TitlePerformance),true,299 ),
new SecondColumnDictionary("工作量绩效工资",nameof(ag_bodysource.WorkPerformance),true,399 ),
new SecondColumnDictionary("单项奖励计",nameof(ag_bodysource.DeptReward),true,499 ),
new SecondColumnDictionary("工作量绩效合计",nameof(ag_bodysource.WorkPerformance),true,399 ),
new SecondColumnDictionary("单项奖励计",nameof(ag_bodysource.DeptReward),true,499 ),
new SecondColumnDictionary("可分配绩效",nameof(ag_bodysource.DistPerformance),true,500 ),
new SecondColumnDictionary("医院其他绩效",nameof(ag_bodysource.OtherPerformance),true,501 ),
new SecondColumnDictionary("夜班工作量绩效",nameof(ag_bodysource.NightWorkPerformance),true,502 ),
new SecondColumnDictionary("预留比例",nameof(ag_bodysource.ReservedRatio),true,601 ),
new SecondColumnDictionary("预留金额",nameof(ag_bodysource.ReservedAmount),true,602 ),
//new SecondColumnDictionary("预留比例",nameof(ag_bodysource.ReservedRatio),false,601 ),
//new SecondColumnDictionary("预留金额",nameof(ag_bodysource.ReservedAmount),false,602 ),
new SecondColumnDictionary("实发绩效工资金额",nameof(ag_bodysource.RealAmount),true,700 ),
new SecondColumnDictionary("实发绩效",nameof(ag_bodysource.RealAmount),true,700 ),
};
// 工作量
int sort = 300;
foreach (var item in loads.Where(w => !w.Title.StartsWithIgnoreCase("SingleAwards_")))
{
maps.Add(new SecondColumnDictionary(item.Value, item.Title, false, ++sort));
maps.Add(new SecondColumnDictionary(item.Value, item.Title, false, ++sort, type: "Workload"));
}
// 单项奖励
sort = 400;
foreach (var item in loads.Where(w => w.Title.StartsWithIgnoreCase("SingleAwards_")))
{
maps.Add(new SecondColumnDictionary(item.Value, item.Title, false, ++sort));
maps.Add(new SecondColumnDictionary(item.Value, item.Title, false, ++sort, type: "SingleAwards"));
}
......@@ -284,12 +291,12 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ag_secondallot seco
/// <param name="secondId"></param>
/// <param name="mode"></param>
/// <returns></returns>
private List<ag_bodysource> LoadEmployees(per_allot allot, ag_secondallot second, OverrideMode mode)
private List<ag_bodysource> LoadEmployees(per_allot allot, ag_secondallot second, EmployeeSource mode)
{
var employees = _peremployeeRepository.GetEntities(w => w.AllotId == second.AllotId);
// 默认流程
if (mode == OverrideMode.Initial)
if (mode == EmployeeSource.Initial)
{
var saveDatas = _agbodysourceRepository.GetEntities(w => w.SecondId == second.Id);
// 数据带出顺序 1 已保存 2 上次 3 科室字典(或EXCEL行政工勤)
......@@ -311,12 +318,12 @@ private List<ag_bodysource> LoadEmployees(per_allot allot, ag_secondallot second
else
{
List<string> numbers = new List<string>();
if (mode == OverrideMode.PrevSecondAllot)
if (mode == EmployeeSource.PrevSecondAllot)
numbers = LoadEmployees_PrevSecondAllot(allot, second);
// 如果行政工勤科室则默认从EXCEL中带出数据
else if (mode == OverrideMode.EmployeeDict && UnitTypeUtil.IsOffice(second.UnitType))
else if (mode == EmployeeSource.EmployeeDict && UnitTypeUtil.IsOffice(second.UnitType))
numbers = LoadEmployees_OfficeExcel(second);
else if (mode == OverrideMode.EmployeeDict)
else if (mode == EmployeeSource.EmployeeDict)
numbers = LoadEmployees_EmployeeDict(second, employees);
if (numbers == null || numbers.Count == 0)
......@@ -409,11 +416,6 @@ private List<string> LoadEmployees_OfficeExcel(ag_secondallot second)
return numbers;
}
private List<string> LoadEmployees_Save(List<ag_bodysource> saveDatas)
{
return saveDatas.Select(w => w.WorkNumber).ToList();
}
#region 动态生成列头信息
/// <summary>
/// 动态生成列头信息
......@@ -482,7 +484,7 @@ private List<string> LoadEmployees_Save(List<ag_bodysource> saveDatas)
private HandsonTableBase ComputeMode_Format1(List<string> colHeaders, List<HandsonColumn> columns)
{
HandsonTableBase handson = new HandsonTableBase();
handson.ColHeaders.AddRange(new string[] { "工号", "姓名",/* "核算单元",*/ "主管", "职称绩效", "工作量绩效工资", });
handson.ColHeaders.AddRange(new string[] { "工号", "姓名",/* "核算单元", "主管",*/ "职称绩效", "工作量绩效工资", });
handson.Columns.AddRange(
new HandsonColumn[]
{
......@@ -677,13 +679,13 @@ private void clearPerformanceWorkload(List<Dictionary<string, object>> rows, Lis
{
foreach (var workload in workloadGroups)
{
row.Remove(workload.WorkloadScore);
row.Remove(workload.AssessmentScore);
row.Remove(workload.WorkPerformance);
row.AddOrUpdate(workload.WorkloadScore, 0m);
row.AddOrUpdate(workload.AssessmentScore, 0m);
row.AddOrUpdate(workload.WorkPerformance, 0m);
foreach (var item in workload.Items)
{
row.Remove(item);
row.AddOrUpdate(item, 0m);
}
}
}
......@@ -909,6 +911,7 @@ decimal ComputeMode_3(Dictionary<string, object> row, List<TitleValue<string, de
});
return workload_score;
}
/// <summary>
/// 2 横向计算
/// </summary>
......@@ -1082,17 +1085,16 @@ public List<SecondComputeCheckResultDto> CheckData(ag_secondallot second, List<D
if (string.IsNullOrEmpty(number) || string.IsNullOrEmpty(name))
{
item.AddOrUpdate(nameof(ResponseType), ResponseType.Warning);
result.Add(new SecondComputeCheckResultDto(nameof(ResponseType.Warning), number, name, $"第{(i + 1)}行,工号或姓名无效;计算式忽略。"));
result.Add(new SecondComputeCheckResultDto(nameof(ResponseType.Warning), "空", "空", $"第{(i + 1)}行,工号或姓名无效;计算式忽略。"));
}
var emp = employees.FirstOrDefault(w => w.PersonnelNumber == number && w.DoctorName == name);
if (emp == null)
else if (!employees.Any(w => w.PersonnelNumber == number && w.DoctorName == name))
{
item.AddOrUpdate(nameof(ResponseType), ResponseType.Error);
result.Add(new SecondComputeCheckResultDto(nameof(ResponseType.Error), number, name, $"第{(i + 1)}行,工号和姓名在字典中不存在,请修复。"));
}
else
{
var emp = employees.FirstOrDefault(w => w.PersonnelNumber == number && w.DoctorName == name);
item.AddOrUpdate(nameof(ResponseType), ResponseType.OK);
item.AddOrUpdate(nameof(ag_bodysource.Department), emp.AccountingUnit);
item.AddOrUpdate(nameof(ag_bodysource.ReservedRatio), emp.ReservedRatio);
......
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