二次分配结构加载,数据未加载

parent e743ba6d
...@@ -23,18 +23,21 @@ public class SecondAllotController : ControllerBase ...@@ -23,18 +23,21 @@ public class SecondAllotController : ControllerBase
private readonly SecondAllotService secondAllotService; private readonly SecondAllotService secondAllotService;
private readonly ResultComputeService resultComputeService; private readonly ResultComputeService resultComputeService;
private readonly SecondAllotDetails secondAllotDetails; private readonly SecondAllotDetails secondAllotDetails;
private readonly RedistributionService _redistributionService;
public SecondAllotController( public SecondAllotController(
ClaimService claimService, ClaimService claimService,
SecondAllotService secondAllotService, SecondAllotService secondAllotService,
ResultComputeService resultComputeService, ResultComputeService resultComputeService,
SecondAllotDetails secondAllotDetails SecondAllotDetails secondAllotDetails,
RedistributionService redistributionService
) )
{ {
this.claimService = claimService; this.claimService = claimService;
this.secondAllotService = secondAllotService; this.secondAllotService = secondAllotService;
this.resultComputeService = resultComputeService; this.resultComputeService = resultComputeService;
this.secondAllotDetails = secondAllotDetails; this.secondAllotDetails = secondAllotDetails;
_redistributionService = redistributionService;
} }
#region 二次绩效列表、录入数据展示,保存数据 #region 二次绩效列表、录入数据展示,保存数据
...@@ -530,5 +533,19 @@ public ApiResponse AutoCompleteBodyData([FromRoute] int secondId, SecondEmployee ...@@ -530,5 +533,19 @@ public ApiResponse AutoCompleteBodyData([FromRoute] int secondId, SecondEmployee
var result = secondAllotService.AutoComplete(secondId, request); var result = secondAllotService.AutoComplete(secondId, request);
return new ApiResponse(ResponseType.OK, result); return new ApiResponse(ResponseType.OK, result);
} }
/// <summary>
/// 二次绩效录入页面
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("api/second/redistribution")]
[HttpGet]
public ApiResponse Redistribution([FromRoute] SecondLoadRequest request)
{
var result = _redistributionService.Load(request.SecondId, request.ComputeMode);
return new ApiResponse(ResponseType.OK, result);
}
} }
} }
...@@ -3810,24 +3810,29 @@ ...@@ -3810,24 +3810,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>
</member>
<member name="T:Performance.DtoModels.TitleValue`1">
<summary> <summary>
1、已选,2、未选,3、已被选择 title value
</summary> </summary>
</member> </member>
<member name="T:Performance.DtoModels.TitleValue"> <member name="T:Performance.DtoModels.TitleValue">
......
...@@ -6,23 +6,35 @@ ...@@ -6,23 +6,35 @@
namespace Performance.DtoModels namespace Performance.DtoModels
{ {
public class HandsonTable public class HandsonTableBase
{
public HandsonTableBase()
{
ColHeaders = new List<string>();
Columns = new List<HandsonColumn>();
Data = new List<Dictionary<string, string>>();
NestedHeadersArray = new List<List<string>>();
}
public List<string> ColHeaders { get; set; }
public List<Dictionary<string, string>> Data { get; set; }
public List<HandsonColumn> Columns { get; set; }
public List<List<string>> NestedHeadersArray { get; set; }
}
public class HandsonTable : HandsonTableBase
{ {
private IEnumerable<collect_permission> _permissions; private IEnumerable<collect_permission> _permissions;
private List<Dictionary<string, string>> _data;
public HandsonTable(int sheetType, string[] cols, List<collect_permission> permissions) public HandsonTable(int sheetType, string[] cols, List<collect_permission> permissions)
: base()
{ {
_permissions = permissions; _permissions = permissions;
_data = new List<Dictionary<string, string>>();
InitColHeaders(sheetType, cols); InitColHeaders(sheetType, cols);
InitColumns(permissions); InitColumns(permissions);
} }
public string[] ColHeaders { get; private set; }
public List<Dictionary<string, string>> Data => _data;
public HandsonColumn[] Columns { get; private set; }
/// <summary> /// <summary>
/// ///
...@@ -43,7 +55,7 @@ public void SetRowData(IEnumerable<HandsonRowData> datas, bool isTypein) ...@@ -43,7 +55,7 @@ public void SetRowData(IEnumerable<HandsonRowData> datas, bool isTypein)
else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower())) else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower()))
dic[item.Name.ToLower()] = item.Value?.ToString() ?? ""; dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
} }
_data.Add(dic); Data.Add(dic);
} }
} }
...@@ -68,7 +80,7 @@ private void InitColHeaders(int sheetType, string[] cols) ...@@ -68,7 +80,7 @@ private void InitColHeaders(int sheetType, string[] cols)
if (!_permissions.Any(w => w.HeadName.ToLower() == item && w.Visible == 1)) if (!_permissions.Any(w => w.HeadName.ToLower() == item && w.Visible == 1))
necessitys.Remove(item); necessitys.Remove(item);
} }
ColHeaders = necessitys.ToArray(); ColHeaders = necessitys;
} }
private void InitColumns(List<collect_permission> permissions) private void InitColumns(List<collect_permission> permissions)
...@@ -80,7 +92,7 @@ private void InitColumns(List<collect_permission> permissions) ...@@ -80,7 +92,7 @@ private void InitColumns(List<collect_permission> permissions)
var readnoly = _permissions.FirstOrDefault(f => f.HeadName == item)?.Readnoly == 1; var readnoly = _permissions.FirstOrDefault(f => f.HeadName == item)?.Readnoly == 1;
columns.Add(new HandsonColumn(item.ToLower(), readnoly)); columns.Add(new HandsonColumn(item.ToLower(), readnoly));
} }
Columns = columns.ToArray(); Columns = columns;
} }
private Dictionary<string, string> CreateDataRow(string key, string value) private Dictionary<string, string> CreateDataRow(string key, string value)
......
...@@ -5,6 +5,14 @@ ...@@ -5,6 +5,14 @@
namespace Performance.DtoModels namespace Performance.DtoModels
{ {
public class SecondLoadRequest
{
public int SecondId { get; set; }
/// <summary>
/// 计算方式:1 不计算 2 横向计算 3 纵向计算
/// </summary>
public int ComputeMode { get; set; }
}
public class SecondEmployeeRequest public class SecondEmployeeRequest
{ {
public string EmployeeName { get; set; } public string EmployeeName { get; set; }
......
...@@ -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
......
using AutoMapper;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services
{
public class RedistributionService : IAutoInjection
{
private readonly PerforPerallotRepository _perallotRepository;
private readonly PerforAgsecondallotRepository _secondallotRepository;
private readonly PerforAgworkloadRepository _agworkloadRepository;
public RedistributionService(
PerforPerallotRepository perallotRepository,
PerforAgsecondallotRepository secondallotRepository,
PerforAgworkloadRepository agworkloadRepository)
{
_perallotRepository = perallotRepository;
_secondallotRepository = secondallotRepository;
_agworkloadRepository = agworkloadRepository;
}
/// <summary>
///
/// </summary>
/// <param name="secondId"></param>
/// <param name="computeMode">计算方式:1 不计算 2 横向计算 3 纵向计算</param>
/// <returns></returns>
public HandsonTableBase Load(int secondId, int computeMode)
{
var second = _secondallotRepository.GetEntity(t => t.Id == secondId);
if (second == null) throw new PerformanceException("参数SecondId无效!");
var allot = _perallotRepository.GetEntity(t => t.ID == second.AllotId);
if (allot == null) throw new PerformanceException("绩效记录不存在!");
var loads = GetWorkLoads(allot.HospitalId, second.UnitType, second.Department);
var (colHeaderCustoms, columnCustoms) = GetCustomColumns(computeMode, loads);
HandsonTableBase handson = new HandsonTableBase();
switch (computeMode)
{
case 1:
handson = ComputeMode_Format1(colHeaderCustoms, columnCustoms);
break;
case 2:
handson = ComputeMode_Format2(colHeaderCustoms, columnCustoms);
break;
case 3:
handson = ComputeMode_Format3(colHeaderCustoms, columnCustoms, loads);
break;
}
#region 结构案例
//var colHeaders = new List<string> { "工号", "姓名", "核算单元", "主管", "人员系数", "出勤", "职称", "职称系数", "A班", "P班", "N班", "考核得分", "A班", "P班", "N班", "考核得分", "单项奖励A", "单项奖励B", "夜班绩效", };
//var columns = new List<HandsonColumn>
//{
// new HandsonColumn("WorkNumber"),
// new HandsonColumn("Name"),
// new HandsonColumn("Department"),
// new HandsonColumn("Post"),
// new HandsonColumn("StaffCoefficient"),
// new HandsonColumn("ActualAttendance"),
// new HandsonColumn("JobTitle"),
// new HandsonColumn("TitleCoefficient"),
// new HandsonColumn("Workload_Default_84"),
// new HandsonColumn("Workload_Default_85"),
// new HandsonColumn("Workload_Default_86"),
// new HandsonColumn("AssessmentScore_Default"),
// new HandsonColumn("Workload_101_84"),
// new HandsonColumn("Workload_101_85"),
// new HandsonColumn("Workload_101_86"),
// new HandsonColumn("AssessmentScore_101"),
// new HandsonColumn("SingleAwards_125"),
// new HandsonColumn("SingleAwards_126"),
// new HandsonColumn("SingleAwards_127"),
// new HandsonColumn("NightWorkPerformance"),
//};
//var data = new List<Dictionary<string, string>>
//{
// new Dictionary<string, string>
// {
// { "WorkNumber", "0575" },
// { "Name", "甘永玫" },
// { "Department", "肿瘤科三区" },
// { "Post", "是" },
// { "StaffCoefficient", "1.0000" },
// { "ActualAttendance", "30.0000" },
// { "JobTitle", "主管护师" },
// { "TitleCoefficient", "1.3000" },
// { "Workload_Default_84", "1" },
// { "Workload_Default_85", "2" },
// { "Workload_Default_86", "3" },
// { "AssessmentScore_Default", "100" },
// { "Workload_101_84", "1" },
// { "Workload_101_85", "2" },
// { "Workload_101_86", "3" },
// { "AssessmentScore_101", "99" },
// { "SingleAwards_125", "100" },
// { "SingleAwards_126", "200" },
// { "SingleAwards_127", "300" },
// },
//};
//handson.ColHeaders = colHeaders;
//handson.Columns = columns;
//handson.Data = data;
#endregion
return handson;
}
/// <summary>
/// 动态生成列头信息
/// </summary>
/// <param name="computeMode"></param>
/// <param name="loads"></param>
/// <returns></returns>
private (List<string> colHeaderCustoms, List<HandsonColumn> columnCustoms) GetCustomColumns(int computeMode, List<TitleValue<string, decimal?>> loads)
{
var colHeaderCustoms = new List<string>();
var columnCustoms = new List<HandsonColumn>();
// 工作量
if (computeMode == 2 || computeMode == 3)
{
var keys = loads.Where(w => w.Title.StartsWith("AssessmentScore_")).Select(w => w.Title.Replace("AssessmentScore_", "")).Distinct();
foreach (var key in keys)
{
foreach (var item in loads.Where(w => w.Title.Equals($"AssessmentScore_{key}") || w.Title.StartsWith($"Workload_{key}_")))
{
colHeaderCustoms.Add(item.Value);
columnCustoms.Add(new HandsonColumn(item.Title, format: DataFormat.小数));
}
}
}
// 单项奖励
foreach (var awards in loads.Where(w => w.Title.StartsWith("SingleAwards_")))
{
colHeaderCustoms.Add(awards.Value);
columnCustoms.Add(new HandsonColumn(awards.Title, format: DataFormat.小数));
}
return (colHeaderCustoms, columnCustoms);
}
/// <summary>
/// 获取工作量及单项奖励
/// </summary>
/// <param name="hospitalId"></param>
/// <param name="unitType"></param>
/// <param name="accountingUnit"></param>
/// <returns></returns>
private List<TitleValue<string, decimal?>> GetWorkLoads(int hospitalId, string unitType, string accountingUnit)
{
var workloads = _agworkloadRepository.GetEntities(t => t.HospitalId == hospitalId && t.Department == accountingUnit && t.UnitType == unitType) ?? new List<ag_workload>();
var loads = workloads
.OrderBy(t => t.WorkTypeId).ThenBy(t => t.Sort)
.Select(t => new TitleValue<string, decimal?> { Title = t.ItemId, Value = t.ItemName, State = t.FactorValue })
.ToList();
return loads;
}
/// <summary>
/// 格式生成,不计算,手动录入
/// </summary>
/// <param name="colHeaders"></param>
/// <param name="columns"></param>
/// <returns></returns>
private HandsonTableBase ComputeMode_Format1(List<string> colHeaders, List<HandsonColumn> columns)
{
HandsonTableBase handson = new HandsonTableBase();
handson.ColHeaders.AddRange(new string[] { "工号", "姓名", "核算单元", "主管", "职称绩效", "工作量绩效工资", });
handson.Columns.AddRange(
new HandsonColumn[]
{
new HandsonColumn("WorkNumber"),
new HandsonColumn("Name"),
new HandsonColumn("Department"),
new HandsonColumn("Post"),
new HandsonColumn("TitlePerformance", format: DataFormat.小数),
new HandsonColumn("WorkPerformance", format: DataFormat.小数),
});
handson.ColHeaders.AddRange(colHeaders);
handson.Columns.AddRange(columns);
handson.ColHeaders.AddRange(new string[] { "夜班绩效", });
handson.Columns.AddRange(new HandsonColumn[] { new HandsonColumn("NightWorkPerformance", format: DataFormat.小数), });
return handson;
}
/// <summary>
/// 格式生成,横向计算,不使用系数
/// </summary>
/// <param name="colHeaders"></param>
/// <param name="columns"></param>
/// <returns></returns>
private HandsonTableBase ComputeMode_Format2(List<string> colHeaders, List<HandsonColumn> columns)
{
HandsonTableBase handson = new HandsonTableBase();
handson.ColHeaders.AddRange(new string[] { "工号", "姓名", "核算单元", "主管", "人员系数", "出勤", "职称", "职称系数", });
handson.Columns.AddRange(
new HandsonColumn[]
{
new HandsonColumn("WorkNumber"),
new HandsonColumn("Name"),
new HandsonColumn("Department"),
new HandsonColumn("Post"),
new HandsonColumn("StaffCoefficient", format: DataFormat.小数),
new HandsonColumn("ActualAttendance", format: DataFormat.小数),
new HandsonColumn("JobTitle"),
new HandsonColumn("TitleCoefficient", format: DataFormat.小数),
});
handson.ColHeaders.AddRange(colHeaders);
handson.Columns.AddRange(columns);
handson.ColHeaders.AddRange(new string[] { "夜班绩效", });
handson.Columns.AddRange(new HandsonColumn[] { new HandsonColumn("NightWorkPerformance", format: DataFormat.小数), });
return handson;
}
/// <summary>
/// 格式生成,纵向计算,使用系数计算
/// </summary>
/// <param name="colHeaders"></param>
/// <param name="columns"></param>
/// <param name="loads"></param>
/// <returns></returns>
private HandsonTableBase ComputeMode_Format3(List<string> colHeaders, List<HandsonColumn> columns, IEnumerable<TitleValue<string, decimal?>> loads)
{
HandsonTableBase handson = ComputeMode_Format2(colHeaders, columns);
var fs = handson.Columns.Select(col =>
{
var f = loads.FirstOrDefault(w => w.Title.StartsWith($"Workload_") && w.State.HasValue && w.State != 0 && w.Title == col.Data);
return f == null || !f.State.HasValue ? "" : f.State.Value.ToString("F0");
});
handson.NestedHeadersArray.Add(handson.ColHeaders);
handson.NestedHeadersArray.Add(fs.ToList());
return handson;
}
}
}
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