Commit fe31cb71 by lcx

Merge branch '科室取值' into 原始数据修改生成

parents bfbab080 c3b1cf4b
......@@ -150,5 +150,18 @@ public ApiResponse DeleteClinic([CustomizeValidator(RuleSet = "Delete"), FromBod
return new ApiResponse(ResponseType.Fail);
return new ApiResponse(ResponseType.OK);
}
/// <summary>
/// 人事科修改参数后提交
/// </summary>
/// <param name="allotid"></param>
/// <returns></returns>
[Route("manage/audit/{allotid}")]
[HttpPost]
public ApiResponse Audit(int allotid)
{
var result = employeeService.Audit(allotid);
return result ? new ApiResponse(ResponseType.OK, "提交成功") : new ApiResponse(ResponseType.Fail, "提交失败");
}
}
}
\ No newline at end of file
......@@ -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/worktype/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>
考核类别
......@@ -2457,6 +2495,11 @@
是否在抽取数据0 否、1 是、2 抽取成功、3 抽取失败
</summary>
</member>
<member name="P:Performance.EntityModels.per_allot.Generate">
<summary>
1、人事科提交重新生成 2、生成成功
</summary>
</member>
<member name="T:Performance.EntityModels.per_budget_amount">
<summary>
预算管理金额
......@@ -2854,7 +2897,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">
......
......@@ -126,7 +126,7 @@ public AutoMapperConfigs()
CreateMap<im_accountbasic, PerDataAccountBaisc>()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType))
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => ((UnitType)src.UnitType).ToString()))
.ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.DoctorAccountingUnit))
.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.ManagerNumber, opt => opt.MapFrom(src => src.DoctorDirectorNumber))
......@@ -142,7 +142,7 @@ public AutoMapperConfigs()
.ForMember(dest => dest.Effic, opt => opt.MapFrom(src => src.DoctorEffic))
.ForMember(dest => dest.Grant, opt => opt.MapFrom(src => src.DoctorGrant));
CreateMap<PerDataSpecialUnit, im_specialunit>();
CreateMap<PerDataSpecialUnit, im_specialunit>().ReverseMap();
//CreateMap<PerDataAccountDoctor, res_accountdoctor>();
//CreateMap<PerDataAccountNurse, res_accountnurse>();
//CreateMap<res_accountdoctor, PerDataAccountBaisc>();
......@@ -187,7 +187,8 @@ public AutoMapperConfigs()
CreateMap<ag_tempitem, HeadItem>();
CreateMap<ag_workload, HeadItem>()
.ForMember(dest => dest.FiledId, opt => opt.MapFrom(src => src.ItemId))
.ForMember(dest => dest.FiledName, opt => opt.MapFrom(src => src.ItemName));
.ForMember(dest => dest.FiledName, opt => opt.MapFrom(src => src.ItemName))
.ForMember(dest => dest.WorkType, opt => opt.MapFrom(src => src.WorkTypeId));
CreateMap<ag_fixatitem, BodyItem>()
.ForMember(dest => dest.FiledName, opt => opt.MapFrom(src => src.ItemName))
.ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.ItemValue));
......
......@@ -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>
{
......
......@@ -65,6 +65,11 @@ public class AllotResponse
public int HasConfig { get; set; }
/// <summary>
/// 1、人事科提交重新生成
/// </summary>
public int Generate { get; set; }
/// <summary>
/// 0 不显示 1 显示
/// </summary>
public int ShowFormula { get; set; }
......
......@@ -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; }
}
}
......@@ -105,17 +105,17 @@ public class im_accountbasic
/// 其他绩效2
/// </summary>
public Nullable<decimal> DoctorOtherPerfor2 { get; set; }
/// <summary>
/// 药占比奖罚
/// </summary>
public Nullable<decimal> MedicineExtra { get; set; }
/// <summary>
/// 材料占比奖罚
/// </summary>
public Nullable<decimal> MaterialsExtra { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
......
......@@ -80,7 +80,7 @@ public class per_allot
/// 是否在抽取数据0 否、1 是、2 抽取成功、3 抽取失败
/// </summary>
public Nullable<int> IsExtracting { get; set; }
/// <summary>
/// 1、人事科提交重新生成
/// </summary>
......
......@@ -25,12 +25,12 @@ public class per_budget_amount
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
/// 根据该年份测算下一年
/// </summary>
public int MainYear { get; set; }
/// <summary>
/// 实际年份、预算年份
/// </summary>
......
......@@ -25,12 +25,12 @@ public class per_budget_ratio
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
/// 根据该年份测算下一年
/// </summary>
public int MainYear { get; set; }
/// <summary>
/// 实际年份、预算年份
/// </summary>
......
......@@ -140,22 +140,22 @@ public class per_budget_result
/// 成本合计实际比例
/// </summary>
public Nullable<decimal> TheCostCombinedRatio { get; set; }
/// <summary>
/// 人员经费(不含绩效)
/// </summary>
public Nullable<decimal> NoPerformanceExpenditure { get; set; }
/// <summary>
/// 人员经费(不含绩效)实际比例
/// </summary>
public Nullable<decimal> NoPerformanceExpenditureRatio { get; set; }
/// <summary>
/// 1.初始 2.确认使用发放/调节系数 3.取消使用
/// 1.初始 2. 确认使用发放/调节系数
/// </summary>
public int States { get; set; }
/// <summary>
///
/// </summary>
......
......@@ -100,17 +100,17 @@ public class res_account
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 药占比奖罚
/// </summary>
public Nullable<decimal> MedicineExtra { get; set; }
/// <summary>
/// 材料占比奖罚
/// </summary>
public Nullable<decimal> MaterialsExtra { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
......
......@@ -43,6 +43,25 @@ public int DeleteData(int allotId)
return Execute(sql, new { allotId });
}
public int DeleteResData(int allotId)
{
List<string> tableArray = new List<string>
{
"res_account",
"res_accountdoctor",
"res_accountnurse",
"res_baiscnorm",
"res_compute",
"res_specialunit",
"log_dbug",
};
string sql = "";
tableArray.ForEach(t => sql += $"delete from {t} where allotid=@allotId;");
sql += "delete from per_sheet where allotid=@allotId and source=2;";
return Execute(sql, new { allotId });
}
public int DelAgain(int againid)
{
List<string> tableArray = new List<string>
......
......@@ -20,11 +20,14 @@ namespace Performance.Repository
/// </summary>
public partial class PerforPerallotRepository : PerforRepository<per_allot>
{
public bool UpdateAllotStates(int allotId, int states, string remark)
public bool UpdateAllotStates(int allotId, int states, string remark, bool success)
{
var allot = GetEntity(t => t.ID == allotId);
allot.States = states;
allot.Remark = remark;
if (success && allot.Generate == 1)
allot.Generate = 2;
return Update(allot);
}
......
//-----------------------------------------------------------------------
// <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)
{
}
}
}
using AutoMapper;
using Microsoft.EntityFrameworkCore.Internal;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services.AllotCompute
{
public class QueryDataService : IAutoInjection
{
private readonly LogManageService logManageService;
private readonly PerforPersheetRepository persheetRepository;
private readonly PerforImemployeeRepository imemployeeRepository;
private readonly PerforImemployeeclinicRepository imemployeeclinicRepository;
private readonly PerforImaccountbasicRepository imaccountbasicRepository;
private readonly PerforImspecialunitRepository imspecialunitRepository;
private readonly PerforImdataRepository imdataRepository;
private readonly PerforImheaderRepository imheaderRepository;
public QueryDataService(LogManageService logManageService,
PerforPersheetRepository persheetRepository,
PerforImemployeeRepository imemployeeRepository,
PerforImemployeeclinicRepository imemployeeclinicRepository,
PerforImaccountbasicRepository imaccountbasicRepository,
PerforImspecialunitRepository imspecialunitRepository,
PerforImdataRepository imdataRepository,
PerforImheaderRepository imheaderRepository)
{
this.logManageService = logManageService;
this.persheetRepository = persheetRepository;
this.imemployeeRepository = imemployeeRepository;
this.imemployeeclinicRepository = imemployeeclinicRepository;
this.imaccountbasicRepository = imaccountbasicRepository;
this.imspecialunitRepository = imspecialunitRepository;
this.imdataRepository = imdataRepository;
this.imheaderRepository = imheaderRepository;
}
public PerExcel QueryDataAndHeader(per_allot allot)
{
var sheetTypes = new List<int>
{
(int)SheetType.Employee,
(int)SheetType.Income,
(int)SheetType.OtherIncome,
(int)SheetType.Expend,
(int)SheetType.Overtime,
(int)SheetType.Workload,
(int)SheetType.SpecialUnit,
(int)SheetType.AccountBasic,
(int)SheetType.ClinicEmployee,
};
var sheets = persheetRepository.GetEntities(t => t.AllotID == allot.ID && sheetTypes.Contains(t.SheetType.Value));
return Query(sheets, allot.ID);
}
private PerExcel Query(List<per_sheet> sheets, int allotId)
{
if (sheets == null || !sheets.Any())
throw new Exception("未查询到数据");
var allheader = imheaderRepository.GetEntities(t => sheets.Select(s => s.ID).Contains(t.SheetID.Value));
if (allheader == null || !allheader.Any())
throw new Exception("未获取到列");
var perExcel = new PerExcel
{
PerSheet = new List<PerSheet>()
};
sheets.ForEach(t =>
{
perExcel.PerSheet.Add(new PerSheet
{
SheetName = t.SheetName,
SheetType = (SheetType)t.SheetType,
PerData = new List<IPerData>(),
PerHeader = new List<PerHeader>()
}); ;
});
foreach (var sheet in perExcel.PerSheet)
{
var imSheet = sheets.FirstOrDefault(t => t.SheetName == sheet.SheetName && t.SheetType == (int)sheet.SheetType);
logManageService.WriteMsg("获取基础数据", $"开始查询数据 -- {sheet.SheetName}", 1, allotId, "ReceiveMessage", true);
if (sheet.SheetType == SheetType.Employee)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryEmployee(allotId, imSheet.ID, sheet);
}
else if (sheet.SheetType == SheetType.ClinicEmployee)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryClinicEmployee(allotId, imSheet.ID, sheet);
}
else if (sheet.SheetType == SheetType.AccountBasic)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryAccountBasic(allotId, imSheet.ID, sheet);
}
else if (sheet.SheetType == SheetType.SpecialUnit)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QuerySpecialUnit(allotId, imSheet.ID, sheet);
}
else
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryCommon(allotId, imSheet.ID, sheet);
}
}
logManageService.WriteMsg("保存基础数据", $"基础数据保存完成!", 1, allotId, "ReceiveMessage", true);
return perExcel;
}
private void QueryEmployee(int allotId, int sheetId, PerSheet sheet)
{
var data = imemployeeRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataEmployee>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryClinicEmployee(int allotId, int sheetId, PerSheet sheet)
{
var data = imemployeeclinicRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataClinicEmployee>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryAccountBasic(int allotId, int sheetId, PerSheet sheet)
{
var data = imaccountbasicRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataAccountBaisc>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QuerySpecialUnit(int allotId, int sheetId, PerSheet sheet)
{
var data = imspecialunitRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataSpecialUnit>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryCommon(int allotId, int sheetId, PerSheet sheet)
{
var data = imdataRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerData>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryHeader(int allotId, int sheetId, List<im_header> allheader, PerSheet sheet)
{
var perHeaders = new List<PerHeader>();
var headers = allheader.Where(t => (t.ParentID ?? 0) == 0 && t.SheetID == sheetId).ToList();
sheet.PerHeader = GetHeaderAndChild(headers, allheader, perHeaders);
}
private List<PerHeader> GetHeaderAndChild(List<im_header> headers, List<im_header> allheaders, List<PerHeader> perHeaders)
{
foreach (var header in headers)
{
var perHeader = Mapper.Map<PerHeader>(header);
var children = allheaders.Where(t => t.ParentID == header.ID);
if (children != null && children.Any())
{
perHeader.Children = GetHeaderAndChild(children.ToList(), allheaders, perHeaders);
}
perHeaders.Add(perHeader);
}
return perHeaders;
}
}
}
......@@ -41,6 +41,7 @@ public class AllotService : IAutoInjection
//private readonly IHubContext<AllotLogHub> hubContext;
private readonly LogManageService logManageService;
private readonly ReportService reportService;
private readonly QueryDataService queryDataService;
public AllotService(PerforPerallotRepository allotRepository,
BaiscNormService baiscNormService,
......@@ -61,7 +62,8 @@ public class AllotService : IAutoInjection
//IHubContext<AllotLogHub> hubContext
LogManageService logManageService,
ReportService reportService,
PerforCofdirectorRepository perforCofdirectorRepository)
PerforCofdirectorRepository perforCofdirectorRepository,
QueryDataService queryDataService)
{
_allotRepository = allotRepository;
_againallotRepository = againallotRepository;
......@@ -84,6 +86,7 @@ public class AllotService : IAutoInjection
this.logManageService = logManageService;
this.reportService = reportService;
this.perforCofdirectorRepository = perforCofdirectorRepository;
this.queryDataService = queryDataService;
}
#region 基础功能
......@@ -240,9 +243,9 @@ public bool Update(per_allot allot)
}
#endregion
public void UpdateAllotStates(int allotId, int states, string remark)
public void UpdateAllotStates(int allotId, int states, string remark, bool success = false)
{
_allotRepository.UpdateAllotStates(allotId, states, remark);
_allotRepository.UpdateAllotStates(allotId, states, remark, success);
}
public per_allot UpdateAllotShowFormula(int allotId)
......@@ -266,20 +269,28 @@ public void Generate(per_allot allot, string mail)
try
{
logManageService.WriteMsg("绩效开始执行", $"正在生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效!", 1, allot.ID, "ReceiveMessage", true);
configService.Clear(allot.ID);
// 导出数据
var excel = importDataService.ReadDataAndSave(allot);
UpdateAllotStates(allot.ID, (int)AllotStates.InCheckData, EnumHelper.GetDescription(AllotStates.InCheckData));
if (!checkDataService.Check(excel, allot))
var excel = new PerExcel();
if (allot.Generate == 1)
{
UpdateAllotStates(allot.ID, (int)AllotStates.CheckFail, EnumHelper.GetDescription(AllotStates.CheckFail));
//SendEmail(allot, mail, 3, time);
logManageService.WriteMsg("绩效数据校验失败", "详情可至“更多 -- 查看日志”查看", 3, allot.ID, "ReceiveMessage", true);
return;
configService.ClearResData(allot.ID);
excel = queryDataService.QueryDataAndHeader(allot);
}
else
{
configService.Clear(allot.ID);
// 导出数据
excel = importDataService.ReadDataAndSave(allot);
UpdateAllotStates(allot.ID, (int)AllotStates.InCheckData, EnumHelper.GetDescription(AllotStates.InCheckData));
if (!checkDataService.Check(excel, allot))
{
UpdateAllotStates(allot.ID, (int)AllotStates.CheckFail, EnumHelper.GetDescription(AllotStates.CheckFail));
//SendEmail(allot, mail, 3, time);
logManageService.WriteMsg("绩效数据校验失败", "详情可至“更多 -- 查看日志”查看", 3, allot.ID, "ReceiveMessage", true);
return;
}
}
UpdateAllotStates(allot.ID, (int)AllotStates.InGenerate, EnumHelper.GetDescription(AllotStates.InGenerate));
//保底绩效计算需分两次进行;
......@@ -340,7 +351,7 @@ public void Generate(per_allot allot, string mail)
logManageService.WriteMsg("正在生成绩效", "保存绩效人均参考标准", 1, allot.ID, "ReceiveMessage", true);
perforResbaiscnormRepository.AddRange(baiscnormList.ToArray());
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish));
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish), true);
perforCofdirectorRepository.SupplementaryData(allot.ID);
logManageService.WriteMsg("正在生成报表数据", "正在生成报表数据", 1, allot.ID, "ReceiveMessage", true);
......
......@@ -575,6 +575,16 @@ public void Clear(int allotId)
}
/// <summary>
/// 清除核算数据
/// </summary>
/// <param name="allotId"></param>
public void ClearResData(int allotId)
{
var count = _directorRepository.DeleteResData(allotId);
logManageService.WriteMsg("清理无效数据", $"清理无效数据,受影响行数:{count}", 1, allotId, "ReceiveMessage", true);
}
/// <summary>
/// 清除二次绩效中无效数据
/// </summary>
/// <param name="againId"></param>
......
......@@ -245,5 +245,20 @@ public bool DeleteClinic(im_employee_clinic request)
}
#endregion
/// <summary>
/// 人事科修改后提交状态
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
public bool Audit(int allotId)
{
var allot = perforPerallotRepository.GetEntity(t => t.ID == allotId);
if (allot == null || !new List<int> { (int)AllotStates.GenerateSucceed, (int)AllotStates.Archive }.Contains(allot.States))
throw new PerformanceException("绩效信息错误");
allot.Generate = 1;
return perforPerallotRepository.Update(allot);
}
}
}
......@@ -19,11 +19,11 @@ public static string GetCellStringValue(ICell cell)
switch (cell.CellType)
{
case CellType.Numeric:
return cell.NumericCellValue.ToString();
return cell.NumericCellValue.ToString().Replace("0", "");
case CellType.String:
return cell.StringCellValue.ToString();
return cell.StringCellValue.ToString().Replace("0", "");
case CellType.Formula:
return cell.NumericCellValue.ToString();
return cell.NumericCellValue.ToString().Replace("0", "");
}
}
catch (Exception ex)
......
......@@ -75,8 +75,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = row.GetCell(unit.AccountingUnitCellNum.Value)?.StringCellValue,
Department = row.GetCell(unit.DeptCellNum.Value)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(unit.AccountingUnitCellNum.Value)),
Department = NopiSevice.GetCellStringValue(row.GetCell(unit.DeptCellNum.Value)),
TypeName = athead?.CellValue,
CellValue = cellValue,
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
......
......@@ -54,9 +54,9 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
RowNumber = r,
UnitType = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元分类").PointCell)?.StringCellValue,
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.StringCellValue,
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.StringCellValue,
PersonnelNumber = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人员工号").PointCell)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)),
Department = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)),
PersonnelNumber = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人员工号").PointCell)),
DoctorName = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医生姓名").PointCell)?.StringCellValue,
JobTitle = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "职务分类").PointCell)?.StringCellValue,
Basics = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "基础绩效系数").PointCell)?.NumericCellValue),
......
......@@ -56,8 +56,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
PerDataAccountBaisc unifyUnit = new PerDataAccountBaisc();
unifyUnit.RowNumber = r;
unifyUnit.UnitType = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元类型").PointCell)?.StringCellValue;
unifyUnit.AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.StringCellValue;
unifyUnit.Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室名称").PointCell)?.StringCellValue;
unifyUnit.AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell));
unifyUnit.Department = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室名称").PointCell));
unifyUnit.PermanentStaff = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "效率绩效人数").PointCell)?.NumericCellValue);
unifyUnit.ManagerNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科主任/护士长人数").PointCell)?.NumericCellValue);
unifyUnit.Number = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元人员数量").PointCell)?.NumericCellValue);
......
......@@ -53,21 +53,23 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = row.GetCell(unit.AccountingUnitCellNum.Value)?.StringCellValue,
Department = row.GetCell(unit.DeptCellNum.Value)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(unit.AccountingUnitCellNum.Value)),
Department = NopiSevice.GetCellStringValue(row.GetCell(unit.DeptCellNum.Value)),
TypeName = athead?.CellValue,
CellValue = cellValue,
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
UnitType = row.GetCell(0).ToString(),
UnitType = row.GetCell(0)?.ToString(),
FactorValue = 0,
IsFactor = false,
};
if (sheet.SheetName.Contains("医生组"))
data.UnitType = "医生组";
else if (sheet.SheetName.Contains("护理组"))
data.UnitType = "护理组";
dataList.Add(data);
if (!string.IsNullOrEmpty(data.UnitType))
dataList.Add(data);
}
}
......
......@@ -55,9 +55,9 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
PerDataEmployee employee = new PerDataEmployee
{
RowNumber = r,
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.StringCellValue,
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.StringCellValue,
PersonnelNumber = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人员工号").PointCell)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)),
Department = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)),
PersonnelNumber = NopiSevice.GetCellStringValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人员工号").PointCell)),
DoctorName = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医生姓名").PointCell)?.StringCellValue,
JobTitle = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "职务分类").PointCell)?.StringCellValue,
FitPeople = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "绩效基数核算参考对象").PointCell)?.StringCellValue,
......
......@@ -78,8 +78,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = row.GetCell(unit.AccountingUnitCellNum.Value)?.StringCellValue,
Department = row.GetCell(unit.DeptCellNum.Value)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(unit.AccountingUnitCellNum.Value)),
Department = NopiSevice.GetCellStringValue(row.GetCell(unit.DeptCellNum.Value)),
TypeName = athead?.CellValue,
CellValue = cellValue,
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
......@@ -90,6 +90,9 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
var lastcell = vhead.OrderByDescending(t => t.PointCell).First();
if (lastcell.CellValue.Contains("备注"))
data.Remark = row.GetCell(lastcell.PointCell)?.StringCellValue;
if (string.IsNullOrEmpty(data.AccountingUnit) && string.IsNullOrEmpty(data.Department))
continue;
dataList.Add(data);
}
}
......
......@@ -82,6 +82,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
FactorValue = ConvertHelper.To<decimal?>(sheet.GetRow(unit.FactorRow.Value).GetCell(athead.PointCell)?.NumericCellValue),
IsFactor = true,
};
if (string.IsNullOrEmpty(data.AccountingUnit) && string.IsNullOrEmpty(data.Department))
continue;
dataList.Add(data);
}
}
......
......@@ -73,8 +73,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = row.GetCell(unit.AccountingUnitCellNum.Value)?.StringCellValue,
Department = row.GetCell(unit.DeptCellNum.Value)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(unit.AccountingUnitCellNum.Value)),
Department = NopiSevice.GetCellStringValue(row.GetCell(unit.DeptCellNum.Value)),
TypeName = athead?.CellValue,
CellValue = cellValue,
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
......@@ -82,6 +82,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
FactorValue = ConvertHelper.To<decimal?>(sheet.GetRow(unit.FactorRow.Value).GetCell(athead.PointCell)?.NumericCellValue),
IsFactor = true,
};
if (string.IsNullOrEmpty(data.AccountingUnit) && string.IsNullOrEmpty(data.Department))
continue;
dataList.Add(data);
}
}
......
......@@ -57,7 +57,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
QuantitativeIndicatorsValue = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "量化指标绩效分值").PointCell)?.NumericCellValue),
};
var cell = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell);//?.ToString();
var accountingUnit = cell?.StringCellValue;
var accountingUnit = NopiSevice.GetCellStringValue(cell);
if (cell != null && IsMergeCell(cell, out Point start, out Point end) && r != start.X)
{
row = sheet.GetRow(start.X);
......
......@@ -54,8 +54,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
RowNumber = r,
SignID = athead.SignID,
AccountingUnit = row.GetCell(unit.AccountingUnitCellNum.Value)?.StringCellValue,
Department = row.GetCell(unit.DeptCellNum.Value)?.StringCellValue,
AccountingUnit = NopiSevice.GetCellStringValue(row.GetCell(unit.AccountingUnitCellNum.Value)),
Department = NopiSevice.GetCellStringValue(row.GetCell(unit.DeptCellNum.Value)),
TypeName = athead?.CellValue,
CellValue = cellValue,
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
......@@ -68,6 +68,8 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
else if (sheet.SheetName.Contains("护理组"))
data.UnitType = "护理组";
if (string.IsNullOrEmpty(data.AccountingUnit) && string.IsNullOrEmpty(data.Department))
continue;
dataList.Add(data);
}
}
......
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