Commit cadb9048 by lcx

Merge branch 'sec_work' into 科室取值

# Conflicts:
#	performance/Performance.Services/SecondAllotService.cs
parents 468c038c a9fa0b60
......@@ -216,6 +216,59 @@ public ApiResponse WorkloadDelete([CustomizeValidator(RuleSet = "Delete"), FromB
var result = secondAllotService.WorkloadDelete(request.Id);
return new ApiResponse(result ? ResponseType.OK : ResponseType.Fail);
}
/// <summary>
/// 二次绩效单例奖励列表
/// </summary>
/// <returns></returns>
[Route("api/second/single/list")]
[HttpPost]
public ApiResponse SingleAwards([FromBody]WorkloadRequest request)
{
var result = secondAllotService.GetSingleList(request);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 二次绩效工作量类型列表
/// </summary>
/// <returns></returns>
[Route("api/second/worktype/list")]
[HttpPost]
public ApiResponse WorkTypeList([FromBody]WorkloadRequest request)
{
var result = secondAllotService.WorkTypeList(request);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 保存二次绩效工作量类型
/// </summary>
/// <returns></returns>
[Route("api/second/worktype/save")]
[HttpPost]
public ApiResponse SingleSave([FromBody]ag_workload_type request)
{
if (request.HospitalId == 0)
return new ApiResponse(ResponseType.ParameterError, "医院信息无效");
if (string.IsNullOrEmpty(request.TypeName))
return new ApiResponse(ResponseType.ParameterError, "填写参数无效");
var result = secondAllotService.SaveWorkType(request);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 删除二次绩效工作量类型
/// </summary>
/// <returns></returns>
[Route("api/second/single/delete")]
[HttpPost]
public ApiResponse SingleDelete([CustomizeValidator(RuleSet = "Delete"), FromBody]WorkloadRequest request)
{
var result = secondAllotService.DeleteWorkType(request);
return result ? new ApiResponse(ResponseType.OK, "删除成功") : new ApiResponse(ResponseType.Fail, "删除失败");
}
#endregion
#region 二次绩效审核
......
......@@ -840,6 +840,30 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.SingleAwards(Performance.DtoModels.WorkloadRequest)">
<summary>
二次绩效单例奖励列表
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.WorkTypeList(Performance.DtoModels.WorkloadRequest)">
<summary>
二次绩效工作量类型列表
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.SingleSave(Performance.EntityModels.ag_workload_type)">
<summary>
保存二次绩效工作量类型
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.SingleDelete(Performance.DtoModels.WorkloadRequest)">
<summary>
删除二次绩效工作量类型
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.SubmitAudit(Performance.DtoModels.SubmitAuditRequest)">
<summary>
提交审核
......
......@@ -143,6 +143,16 @@
<member name="F:Performance.DtoModels.AllotStates.GenerateAccomplish">
<summary> 绩效结果解析成功 </summary>
</member>
<member name="F:Performance.DtoModels.AgWorkloadType.SingleAwards">
<summary>
单项奖励
</summary>
</member>
<member name="F:Performance.DtoModels.AgWorkloadType.Workload">
<summary>
工作量
</summary>
</member>
<member name="P:Performance.DtoModels.PerAgainData.RowNumber">
<summary>
行号
......@@ -1955,6 +1965,11 @@
</summary>
</member>
<member name="P:Performance.DtoModels.WorkloadRequest.WorkTypeId">
<summary>
1、工作量 2、其他
</summary>
</member>
<member name="P:Performance.DtoModels.WorkyearRequest.MaxRange">
<summary>
最大工龄范围(小于)
......@@ -2732,6 +2747,9 @@
<member name="P:Performance.DtoModels.HeadItem.IsBring">
<summary> 1 带出历史数据 2不带出 </summary>
</member>
<member name="P:Performance.DtoModels.HeadItem.SpecialAttr">
<summary> 1 value相加值为1 </summary>
</member>
<member name="P:Performance.DtoModels.SecondTempResponse.TempName">
<summary>
模板名称
......
......@@ -43,6 +43,9 @@
<member name="P:Performance.EntityModels.PerformanceDbContext.ag_workload">
<summary> 二次绩效工作量绩效 </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.ag_workload_type">
<summary> </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.as_assess">
<summary> 考核类别 </summary>
</member>
......@@ -557,6 +560,11 @@
1 自动带出 2 计算得出
</summary>
</member>
<member name="P:Performance.EntityModels.ag_fixatitem.SpecialAttr">
<summary>
1 value相加值为1
</summary>
</member>
<member name="T:Performance.EntityModels.ag_header">
<summary>
二次分配不固定列头数据
......@@ -832,6 +840,11 @@
1 带出历史数据 2不带出
</summary>
</member>
<member name="P:Performance.EntityModels.ag_tempitem.SpecialAttr">
<summary>
1 value相加值为1
</summary>
</member>
<member name="T:Performance.EntityModels.ag_usetemp">
<summary>
......@@ -907,6 +920,31 @@
</summary>
</member>
<member name="P:Performance.EntityModels.ag_workload.WorkTypeId">
<summary>
1、单项奖励 2、工作量占比 ..(自定义占比)
</summary>
</member>
<member name="T:Performance.EntityModels.ag_workload_type">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.ag_workload_type.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.ag_workload_type.HospitalId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.ag_workload_type.TypeName">
<summary>
</summary>
</member>
<member name="T:Performance.EntityModels.as_assess">
<summary>
考核类别
......@@ -2854,7 +2892,7 @@
</member>
<member name="P:Performance.EntityModels.per_budget_result.States">
<summary>
1.初始 2.确认使用发放/调节系数 3.取消使用
1.初始 2. 确认使用发放/调节系数
</summary>
</member>
<member name="P:Performance.EntityModels.per_budget_result.CreateDate">
......
......@@ -81,4 +81,16 @@ public enum AllotStates
[Description("数据验证通过")]
GenerateAccomplish = 10,
}
public enum AgWorkloadType
{
/// <summary>
/// 单项奖励
/// </summary>
SingleAwards = 1,
/// <summary>
/// 工作量
/// </summary>
Workload = 2,
}
}
......@@ -41,6 +41,11 @@ public class WorkloadRequest
///
/// </summary>
public Nullable<decimal> Sort { get; set; }
/// <summary>
/// 1、工作量 2、其他
/// </summary>
public int WorkTypeId { get; set; }
}
public class WorkloadRequestValidator : AbstractValidator<WorkloadRequest>
{
......@@ -52,6 +57,7 @@ public WorkloadRequestValidator()
RuleFor(x => x.Department).NotNull().NotEmpty();
RuleFor(x => x.UnitType).NotNull().NotEmpty();
RuleFor(x => x.ItemName).NotNull().NotEmpty();
RuleFor(x => x.WorkTypeId).NotNull().GreaterThan(0);
});
RuleSet("Update", () =>
......@@ -59,6 +65,7 @@ public WorkloadRequestValidator()
RuleFor(x => x.Id).NotNull().GreaterThan(0);
RuleFor(x => x.HospitalId).NotNull().GreaterThan(0);
RuleFor(x => x.ItemName).NotNull().NotEmpty();
RuleFor(x => x.WorkTypeId).NotNull().GreaterThan(0);
});
RuleSet("Delete", () =>
......
......@@ -10,7 +10,7 @@ public class SecondResponse
public List<BodyItem> BodyItems { get; set; }
}
public class HeadItem
public class HeadItem : ICloneable
{
public string FiledId { get; set; }
public string FiledName { get; set; }
......@@ -20,6 +20,14 @@ public class HeadItem
public int SourceType { get; set; }
/// <summary> 1 带出历史数据 2不带出 </summary>
public Nullable<int> IsBring { get; set; }
/// <summary> 1 value相加值为1 </summary>
public Nullable<int> SpecialAttr { get; set; }
public Nullable<int> WorkType { get; set; }
public object Clone()
{
return MemberwiseClone();
}
}
public class BodyItem : HeadItem
......
......@@ -38,6 +38,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<ag_usetemp> ag_usetemp { get; set; }
/// <summary> 二次绩效工作量绩效 </summary>
public virtual DbSet<ag_workload> ag_workload { get; set; }
/// <summary> </summary>
public virtual DbSet<ag_workload_type> ag_workload_type { get; set; }
/// <summary> 考核类别 </summary>
public virtual DbSet<as_assess> as_assess { get; set; }
/// <summary> 考核列头 </summary>
......
......@@ -70,5 +70,10 @@ public class ag_fixatitem
/// 1 自动带出 2 计算得出
/// </summary>
public Nullable<int> SourceType { get; set; }
/// <summary>
/// 1 value相加值为1
/// </summary>
public Nullable<int> SpecialAttr { get; set; }
}
}
......@@ -55,5 +55,10 @@ public class ag_tempitem
/// 1 带出历史数据 2不带出
/// </summary>
public Nullable<int> IsBring { get; set; }
/// <summary>
/// 1 value相加值为1
/// </summary>
public Nullable<int> SpecialAttr { get; set; }
}
}
......@@ -55,5 +55,10 @@ public class ag_workload
///
/// </summary>
public Nullable<decimal> Sort { get; set; }
/// <summary>
/// 1、单项奖励 2、工作量占比 ..(自定义占比)
/// </summary>
public int WorkTypeId { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" ag_workload_type.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("ag_workload_type")]
public class ag_workload_type
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
///
/// </summary>
public string TypeName { get; set; }
}
}
......@@ -152,7 +152,7 @@ public class per_budget_result
public Nullable<decimal> NoPerformanceExpenditureRatio { get; set; }
/// <summary>
/// 1.初始 2.确认使用发放/调节系数 3.取消使用
/// 1.初始 2. 确认使用发放/调节系数
/// </summary>
public int States { get; set; }
......
//-----------------------------------------------------------------------
// <copyright file=" ag_workload_type.cs">
// * FileName: ag_workload_type.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// ag_workload_type Repository
/// </summary>
public partial class PerforAgworkloadtypeRepository : PerforRepository<ag_workload_type>
{
public PerforAgworkloadtypeRepository(PerformanceDbContext context) : base(context)
{
}
}
}
......@@ -7,6 +7,7 @@
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
......@@ -30,6 +31,7 @@ public class SecondAllotService : IAutoInjection
private readonly PerforAgcomputeRepository perforAgcomputeRepository;
private readonly PerforCofagainRepository perforCofagainRepository;
private readonly PerforAgothersourceRepository perforAgothersourceRepository;
private readonly PerforAgworkloadtypeRepository perforAgworkloadtypeRepository;
private readonly PerforRoleRepository roleRepository;
private readonly List<ag_tempitem> tempitems = new List<ag_tempitem>();
......@@ -48,6 +50,7 @@ public class SecondAllotService : IAutoInjection
PerforAgcomputeRepository perforAgcomputeRepository,
PerforCofagainRepository perforCofagainRepository,
PerforAgothersourceRepository perforAgothersourceRepository,
PerforAgworkloadtypeRepository perforAgworkloadtypeRepository,
PerforRoleRepository roleRepository)
{
this.application = application.Value;
......@@ -65,6 +68,7 @@ public class SecondAllotService : IAutoInjection
this.perforAgcomputeRepository = perforAgcomputeRepository;
this.perforCofagainRepository = perforCofagainRepository;
this.perforAgothersourceRepository = perforAgothersourceRepository;
this.perforAgworkloadtypeRepository = perforAgworkloadtypeRepository;
this.roleRepository = roleRepository;
this.tempitems = perforAgtempitemRepository.GetEntities();
}
......@@ -303,6 +307,9 @@ public SecondResponse GetSecondDetail(UseTempRequest request)
//检验 二次绩效配置 数据是否 有值,无则补充带出
FillData(second, result.BodyItems);
SupplyHeaderByWorkItem(request, result);
return new SecondResponse
{
HeadItems = result.HeadItems.OrderBy(t => t.Type).ThenBy(t => t.Sort).ThenBy(t => t.FiledName).ToList(),
......@@ -355,7 +362,8 @@ private List<BodyItem> GetBodyItems(List<ag_fixatitem> fixatitems, List<HeadItem
SourceType = t.SourceType ?? 0,
Type = t.Type ?? 0,
Value = t.ItemValue,
Sort = t.Sort ?? 0
Sort = t.Sort ?? 0,
SpecialAttr = t.SpecialAttr ?? headItems.FirstOrDefault(h => h.FiledName == t.ItemName && h.Type == t.Type)?.SpecialAttr,
}).ToList();
}
// 删除多余的headvalue
......@@ -363,8 +371,6 @@ private List<BodyItem> GetBodyItems(List<ag_fixatitem> fixatitems, List<HeadItem
return bodyItems;
}
/// <summary>
/// 补充须带出的历史数据,如姓名、职称等
/// </summary>
......@@ -421,6 +427,85 @@ private void FillData(ag_secondallot second, List<BodyItem> bodyItems)
bodyItems.FirstOrDefault(t => t.FiledName == item.Key).Value = item.Value;
}
}
/// <summary>
/// 根绝添加工作量类型判断是否添加
/// </summary>
/// <param name="request"></param>
/// <param name="result"></param>
private void SupplyHeaderByWorkItem(UseTempRequest request, SecondResponse result)
{
var workitem = perforAgworkloadRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.Department == request.Department
&& t.UnitType == request.UnitType && !EnumHelper.GetItems<AgWorkloadType>().Select(type => type.Value).Contains(t.WorkTypeId));
if (workitem == null || !workitem.Any(t => t.Id > 0))
return;
var deptHeader = perforAgworkloadtypeRepository.GetEntities(t => new List<int> { request.HospitalId, 0 }.Contains(t.HospitalId));
if (deptHeader == null || !deptHeader.Any())
return;
//不包含工作量绩效
if (!result.HeadItems.Select(t => t.FiledId).Contains("PerformanceShareTheWorkload"))
return;
var maxSortValue = result.HeadItems.Where(t => t.Type == 1).Max(t => t.Sort);
var headers = new HeadItem[] {
new HeadItem
{
FiledId = "ThePerformanceOf",
Type = 1,
SourceType = 1,
IsBring = 2,
SpecialAttr = 1,
},
new HeadItem
{
FiledId = "ThePerformanceAmountOf",
Type = 1,
SourceType = 1,
IsBring = 2
}
};
var headerItems = new List<HeadItem>();
int sortindex = 1;
foreach (var item in deptHeader)
{
if (item.HospitalId == 0) continue;
for (int i = 0; i < headers.Length; i++)
{
var headItem = (HeadItem)headers[i].Clone();
headItem.FiledName = (i % 2 == 0) ? item.TypeName : item.TypeName.Replace("占比", "金额");
headItem.FiledId += item.Id;
headItem.Sort = maxSortValue + sortindex;
headItem.WorkType = item.Id;
headerItems.Add(headItem);
sortindex++;
}
}
foreach (var item in deptHeader.Where(t => t.HospitalId == 0))
{
result.HeadItems.Where(t => t.FiledName == item.TypeName).ToList()?.ForEach(t => t.WorkType = item.Id);
result.BodyItems.Where(t => t.FiledName == item.TypeName).ToList()?.ForEach(t => t.WorkType = item.Id);
}
var rownumber = result.BodyItems.Any(t => t.RowNumber == -1) ? -1 : 0;
foreach (var item in headerItems)
{
if (!result.HeadItems.Select(t => t.FiledId).Contains(item.FiledId))
{
result.HeadItems.Add(item);
var body = Mapper.Map<BodyItem>(item);
body.RowNumber = rownumber;
result.BodyItems.Add(body);
}
}
}
#endregion
/// <summary>
......@@ -445,6 +530,7 @@ public bool SaveValue(List<ag_fixatitem> request)
cellItem.SourceType = item.SourceType;
cellItem.Type = item.Type;
cellItem.UnitType = item.UnitType;
cellItem.SpecialAttr = item.SpecialAttr;
perforAgfixatitemRepository.Update(cellItem);
}
else
......@@ -693,7 +779,8 @@ public void RefreshTemp(UseTempRequest request)
/// <returns></returns>
public List<ag_workload> GetWorkloadList(WorkloadRequest request)
{
return perforAgworkloadRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.Department == request.Department && t.UnitType == request.UnitType);
return perforAgworkloadRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.Department == request.Department
&& t.UnitType == request.UnitType && t.WorkTypeId != (int)AgWorkloadType.SingleAwards);
}
/// <summary>
......@@ -714,6 +801,7 @@ public bool WorkloadAdd(WorkloadRequest request)
FactorValue = request.FactorValue ?? 1,
ItemName = request.ItemName,
Sort = request.Sort ?? 1,
WorkTypeId = request.WorkTypeId,
};
var result = perforAgworkloadRepository.Add(workload);
if (result)
......@@ -744,6 +832,7 @@ public bool WorkloadUpdate(WorkloadRequest request)
workload.ItemName = request.ItemName;
workload.Sort = request.Sort;
workload.ItemId = $"Feild{workload.Id}";
workload.WorkTypeId = request.WorkTypeId;
return perforAgworkloadRepository.Update(workload);
}
......@@ -759,6 +848,86 @@ public bool WorkloadDelete(int id)
return perforAgworkloadRepository.Remove(workload);
}
/// <summary>
/// 获取单行奖励列表
/// </summary>
/// <param name="secondId"></param>
/// <returns></returns>
public List<ag_workload> GetSingleList(WorkloadRequest request)
{
return perforAgworkloadRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.Department == request.Department
&& t.UnitType == request.UnitType && t.WorkTypeId == (int)AgWorkloadType.SingleAwards);
}
/// <summary>
/// 获取工作量类型列表
/// </summary>
/// <param name="secondId"></param>
/// <returns></returns>
public List<TitleValue<int>> WorkTypeList(WorkloadRequest request)
{
var worktypes = perforAgworkloadtypeRepository.GetEntities(t => new List<int> { 0, request.HospitalId.Value }.Contains(t.HospitalId));
if (worktypes != null && worktypes.Any())
{
return worktypes.Select(t => new TitleValue<int>
{
Title = t.TypeName,
Value = t.Id
}).ToList();
}
return null;
}
/// <summary>
/// 保存工作量类型
/// </summary>
/// <param name="secondId"></param>
/// <returns></returns>
public ag_workload_type SaveWorkType(ag_workload_type request)
{
var entity = perforAgworkloadtypeRepository.GetEntity(t => new List<int> { 0, request.HospitalId }.Contains(t.HospitalId) && t.TypeName == request.TypeName);
if (entity == null)
{
if (request.Id > 0)
{
entity = perforAgworkloadtypeRepository.GetEntity(t => t.Id == request.Id);
entity.HospitalId = request.HospitalId;
entity.TypeName = request.TypeName;
perforAgworkloadtypeRepository.Update(entity);
}
else
{
entity = new ag_workload_type
{
HospitalId = request.HospitalId,
TypeName = request.TypeName,
};
perforAgworkloadtypeRepository.Add(entity);
}
return entity;
}
else if (request.Id != entity.Id)
throw new PerformanceException("类型已存在");
else
return request;
}
/// <summary>
/// 获取工作量类型列表
/// </summary>
/// <param name="secondId"></param>
/// <returns></returns>
public bool DeleteWorkType(WorkloadRequest request)
{
var entity = perforAgworkloadtypeRepository.GetEntity(t => t.Id == request.Id);
if (entity != null)
{
return perforAgworkloadtypeRepository.Remove(entity);
}
else
return false;
}
#endregion
#region 二次绩效考核
......@@ -951,9 +1120,13 @@ public List<HeadItem> GetHeadItems(int tempId, int hospitalId, string department
var workItem = perforAgworkloadRepository.GetEntities(t => t.HospitalId == hospitalId && t.Department == department && t.UnitType == unitType);
if (workItem != null && workItem.Count > 0)
{
var workDtos = Mapper.Map<List<HeadItem>>(workItem);
var workDtos = Mapper.Map<List<HeadItem>>(workItem.Where(t => t.WorkTypeId != (int)AgWorkloadType.SingleAwards));
workDtos.ForEach(t => { t.Type = 3; });
headItems.AddRange(workDtos);
workDtos = Mapper.Map<List<HeadItem>>(workItem.Where(t => t.WorkTypeId == (int)AgWorkloadType.SingleAwards));
workDtos.ForEach(t => { t.Type = 4; });
headItems.AddRange(workDtos);
}
return headItems;
}
......
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