Commit 56b80856 by 钟博

Merge branch '新增菜单' into v20201230yubei

parents e6ede3ac 1d294215
......@@ -13,6 +13,7 @@
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Performance.DtoModels.Request;
namespace Performance.Api.Controllers
{
......@@ -22,12 +23,15 @@ public class ComputeController : Controller
private ComputeService _computeService;
private AllotService _allotService;
private ClaimService _claim;
private EmployeeService _employeeService;
public ComputeController(AllotService allotService,
ComputeService computeService,
EmployeeService employeeService,
ClaimService claim)
{
_allotService = allotService;
_computeService = computeService;
_employeeService = employeeService;
_claim = claim;
}
......@@ -253,7 +257,7 @@ public ApiResponse AllComputeAvg([FromBody] ComputerRequest request)
// ? 0 : Math.Round(gc.Sum(s => s.RealGiveFee) / gc.Select(p => new { p.JobNumber, p.EmployeeName }).Distinct().Count() ?? 0)
// }));
return new ApiResponse(ResponseType.OK, "ok", avgs.Select(w => new { w.PositionName, w.TotelNumber, w.TotelValue, w.AvgValue }));
return new ApiResponse(ResponseType.OK, "ok", avgs.Select(w => new {w.ID, w.PositionName, w.TotelNumber, w.TotelValue, w.AvgValue }));
}
/// <summary>
......@@ -366,5 +370,47 @@ public ApiResponse DoctorDetail(int computeId)
var result = _computeService.GetDoctorDetail(computeId);
return new ApiResponse(ResponseType.OK, result);
}
#region 人均绩效修改
/// <summary>
/// 编辑全院绩效平均
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("EditHospitalAvg")]
[HttpPost]
public ApiResponse<res_baiscnorm> EditHospitalAvg([FromBody] ComputerAvgRequest request)
{
var allot = _allotService.GetAllot(request.AllotId);
if (null == allot)
throw new PerformanceException("当前绩效记录不存在");
var result = _computeService.EditHospitalAvg(request);
return new ApiResponse<res_baiscnorm>(ResponseType.OK, result);
}
#endregion
#region 其他绩效统计
/// <summary>
/// 其他医院绩效统计
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("OtherPerStats/{allotId}")]
[HttpPost]
public ApiResponse OtherPerStats(int allotId)
{
var employee = _employeeService.GetAprList(allotId, _claim.GetUserId());
if (employee==null)
return new ApiResponse(ResponseType.OK,null);
var relust= _computeService.GetOtherPerStats(employee);
return new ApiResponse(ResponseType.OK,relust);
}
#endregion
}
}
\ No newline at end of file
......@@ -462,5 +462,20 @@ public ApiResponse<List<TitleValue>> GetPerforTypeDict([FromRoute] int allotId)
var result = employeeService.GetPerforTypeDict(allotId);
return new ApiResponse<List<TitleValue>>(ResponseType.OK, "绩效类型字典", result);
}
/// <summary>
/// 材料科室考核
/// </summary>
/// <returns></returns>
[Route("deptAssessment/{allotId}")]
[HttpPost]
public ApiResponse GetDeptAssessment(int allotId)
{
if (allotId<=0)
return new ApiResponse(ResponseType.ParameterError, "参数AllotId无效!");
var result=employeeService.GetDeptAssessment(allotId);
return new ApiResponse(ResponseType.OK,result);
}
}
}
......@@ -401,11 +401,11 @@ public ApiResponse NursingDeptAuditResult([FromBody] SecondAuditRequest request)
[HttpPost]
public ApiResponse OtherList([FromBody] AgOtherRequest request)
{
//var result = secondAllotService.OtherList(request.SecondId, claimService.GetUserId());
var result = secondAllotDetails.GetOtherTempData(claimService.GetUserId(), request.SecondId, request.IsArchive, request.EmployeeSource, out decimal? realAmount);
var result = secondAllotService.OtherList(request.SecondId, claimService.GetUserId());
//var result = secondAllotDetails.GetOtherTempData(claimService.GetUserId(), request.SecondId, request.IsArchive, request.EmployeeSource, out decimal? realAmount);
var obj = new
{
header = secondAllotService.OtherListHeader(request.SecondId, realAmount),
header = secondAllotService.OtherListHeader(request.SecondId, result?.Sum(t=>t.RealAmount)),
body = result,
};
return new ApiResponse(ResponseType.OK, obj);
......
using System;
using System.Collections.Generic;
using System.Text;
using FluentValidation;
namespace Performance.DtoModels.Request
{
public class ComputerAvgRequest
{
public int Id { get; set; }
public int AllotId { get; set; }
public int SheetId { get; set; }
/// <summary>
/// 绩效核算人群
/// </summary>
public string PositionName { get; set; }
/// <summary>
/// 绩效总额
/// </summary>
public decimal TotelValue { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public decimal AvgValue { get; set; }
/// <summary>
/// 总人数
/// </summary>
public decimal TotelNumber { get; set; }
}
public class ComputerRequestValidator : AbstractValidator<ComputerAvgRequest>
{
public ComputerRequestValidator()
{
RuleFor(x => x.Id).NotNull();
RuleFor(x => x.AllotId).NotNull().GreaterThan(0);
RuleFor(x => x.PositionName).NotNull().NotEmpty();
RuleFor(x => x.TotelNumber).NotNull();
RuleFor(x => x.TotelValue).NotNull();
RuleFor(x => x.AvgValue).NotNull();
}
}
}
......@@ -9,6 +9,8 @@
using System.Linq.Expressions;
using System.Text;
using System.Text.RegularExpressions;
using Performance.DtoModels.Request;
using Performance.DtoModels.Response;
namespace Performance.Services
{
......@@ -210,8 +212,15 @@ public List<res_baiscnorm> AllComputeAvg(int allotId, List<ComputeResponse> list
List<res_baiscnorm> avgs = new List<res_baiscnorm>();
var emps = perforPeremployeeRepository.GetEntities(w => w.AllotId == allotId);
var jobCategory = emps?.Select(w => string.IsNullOrEmpty(w.JobCategory) ? "未知" : w.JobCategory).Distinct() ?? new List<string>();
var basicnorm = perforResbaiscnormRepository.GetEntities(t => t.AllotID == allotId);
var position = basicnorm?.Select(t => string.IsNullOrEmpty(t.PositionName) ? "" : t.PositionName).Distinct() ?? new List<string>();
foreach (var item in jobCategory)
{
if (position.Contains(item))
{
avgs.Add(basicnorm.First(t => t.PositionName == item));
continue;
}
var sumfee = (from com in list
join emp in emps?.Where(w => w.JobCategory == item)
on com.JobNumber equals emp.PersonnelNumber
......@@ -1416,5 +1425,65 @@ public DeptDataDetails GetDoctorDetail(int computeId)
}
return doctorDetails;
}
public res_baiscnorm EditHospitalAvg(ComputerAvgRequest request)
{
if (request.Id == 0)
{
var baiscnorm = Mapper.Map<res_baiscnorm>(request);
if (!perforResbaiscnormRepository.Add(baiscnorm))
throw new PerformanceException("保存失败");
return Mapper.Map<res_baiscnorm>(baiscnorm);
}
else
{
var baiscnorm = perforResbaiscnormRepository.GetEntity(t => t.ID == request.Id);
if (baiscnorm == null)
throw new PerformanceException($"ID不存在 :{request.Id}");
baiscnorm.TotelNumber = request.TotelNumber;
baiscnorm.TotelValue = request.TotelValue;
baiscnorm.AvgValue = request.AvgValue;
//var baiscnorm = Mapper.Map<res_baiscnorm>(request);
if (!perforResbaiscnormRepository.Update(baiscnorm))
throw new PerformanceException("保存失败");
return Mapper.Map<res_baiscnorm>(baiscnorm);
}
}
public List<Dictionary<string, string>> GetOtherPerStats(List<per_apr_amount> employees)
{
var perForType = employees.Select(t => t.PerforType).Distinct();
var doctor = employees.Select(t => t.DoctorName.Trim()).Distinct();
var others = new List<Dictionary<string, string>>();
foreach (var name in doctor)
{
var dicData = new Dictionary<string, string>();
var amount = employees.First(t => t.DoctorName == name);
var unitype = perforPeremployeeRepository.GetEntity(t =>
t.DoctorName == name && t.JobNumber == amount.PersonnelNumber)?.UnitType;
dicData.Add("核算单元组别",unitype??"/");
dicData.Add("核算单元",amount?.AccountingUnit??"");
dicData.Add("工号",amount?.PersonnelNumber??"");
dicData.Add("人员姓名",amount?.DoctorName??"");
foreach (var type in perForType)
{
var emp = employees.Where(t => t.PerforType == type && t.DoctorName == name)?.ToList();
if (!emp.Any())
dicData.Add(type,"0");
else
dicData.Add(type,Math.Round(Convert.ToDecimal(emp?.First()?.Amount),0).ToString());
}
var sum = employees.Where(c=>c.DoctorName==name)?.Sum(t => t.Amount);
dicData.Add("合计",Math.Round(Convert.ToDecimal(sum),0).ToString());
others.Add(dicData);
}
return others;
}
}
}
......@@ -21,6 +21,7 @@ public class EmployeeService : IAutoInjection
{
private PerforImemployeeRepository perforImemployeeRepository;
private PerforPersheetRepository perforPersheetRepository;
private PerforImdataRepository perforImdataRepository;
private PerforPerallotRepository perforPerallotRepository;
private PerforImemployeeclinicRepository perforImemployeeclinicRepository;
private PerforUserhospitalRepository perforUserhospitalRepository;
......@@ -34,6 +35,7 @@ public class EmployeeService : IAutoInjection
public EmployeeService(PerforImemployeeRepository perforImemployeeRepository,
PerforPersheetRepository perforPersheetRepository,
PerforImdataRepository perforImdataRepository,
PerforPerallotRepository perforPerallotRepository,
PerforImemployeeclinicRepository perforImemployeeclinicRepository,
PerforUserhospitalRepository perforUserhospitalRepository,
......@@ -47,6 +49,7 @@ public class EmployeeService : IAutoInjection
{
this.perforImemployeeRepository = perforImemployeeRepository;
this.perforPersheetRepository = perforPersheetRepository;
this.perforImdataRepository = perforImdataRepository;
this.perforPerallotRepository = perforPerallotRepository;
this.perforImemployeeclinicRepository = perforImemployeeclinicRepository;
this.perforUserhospitalRepository = perforUserhospitalRepository;
......@@ -637,5 +640,63 @@ public List<TitleValue> GetPerforTypeDict(int allotId)
Value = t
}).ToList();
}
#region 科室考核
public List<string[]> GetDeptAssessment(int allotId)
{
var sheet = perforPersheetRepository.GetEntity(t => t.AllotID == allotId && t.SheetName == "5.4 科室材料考核2");
if (sheet == null)
return new List<string[]>();
var data = perforImdataRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheet.ID);
var dataNum = data?.Select(t => t.RowNumber)?.OrderBy(c=>c.Value).Distinct();
var rowData = new List<string[]>();
if (dataNum != null)
foreach (var num in dataNum)
{
var deptData = new string[7];
var row = data.Where(t => t.RowNumber == num);
deptData[2] = row.First()?.AccountingUnit;
if((int)row.First()?.UnitType==(int)UnitType.医生组)
deptData[1] = "医生组";
else if((int)row.First()?.UnitType==(int)UnitType.医技组)
deptData[1] = "医技组";
else if ((int)row.First()?.UnitType == (int)UnitType.护理组)
deptData[1] = "护理组";
foreach (var imData in row)
{
if (imData.TypeName == "考核得分合计")
{
if (imData.CellValue != null)
deptData[0] = Math.Round((decimal) imData.CellValue * 100) + "%";
}
else if(imData.TypeName == "考核1")
{
if (imData.CellValue != null)
deptData[3] = Math.Round((decimal) imData.CellValue * 100) + "%";
}
else if (imData.TypeName == "考核2")
{
if (imData.CellValue != null)
deptData[4] = Math.Round((decimal) imData.CellValue * 100) + "%";
}
else if (imData.TypeName == "考核三")
{
if (imData.CellValue != null)
deptData[5] = Math.Round((decimal) imData.CellValue * 100) + "%";
}
else if (imData.TypeName == "考核四")
if (imData.CellValue != null)
deptData[6] = Math.Round((decimal) imData.CellValue * 100) + "%";
}
rowData.Add(deptData);
}
return rowData;
}
#endregion
}
}
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