Commit 4a447221 by 李承祥

Merge branch 'feature/report' into feature/mergereport

# Conflicts:
#	performance/Performance.Api/wwwroot/Performance.Api.xml
parents 93691577 d9b592cf
......@@ -29,17 +29,19 @@ public class AllotController : Controller
private IHostingEnvironment _evn;
private ILogger<AllotController> _logger;
private ClaimService _claim;
private readonly LogManageService logManageService;
public AllotController(AllotService allotService,
HospitalService hospitalService, ConfigService configService,
ILogger<AllotController> logger, IHostingEnvironment evn,
ClaimService claim)
ClaimService claim, LogManageService logManageService)
{
_allotService = allotService;
_hospitalService = hospitalService;
_logger = logger;
_evn = evn;
_claim = claim;
this.logManageService = logManageService;
_configService = configService;
}
......@@ -164,7 +166,7 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody]Al
_allotService.Generate(allot, email);
else
BackgroundJob.Schedule(() => _allotService.Generate(allot, email), TimeSpan.FromSeconds(1));
logManageService.WriteMsg("等待绩效生成", $"等待绩效生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效!", 1, allot.ID, "ReceiveMessage");
//_allotService.Generate(allot, email);
////BackgroundJob.Enqueue(() => _allotService.Generate(allot, email));
return new ApiResponse(ResponseType.OK);
......
......@@ -130,5 +130,31 @@ public ApiResponse AvgRatio([CustomizeValidator(RuleSet = "Query"), FromBody]Rep
var list = reportService.AvgRatio(request.HospitalId);
return new ApiResponse(ResponseType.OK, "", list);
}
/// <summary>
/// 首页报表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("index")]
[HttpPost]
public ApiResponse IndexReport([CustomizeValidator(RuleSet = "Index"), FromBody]ReportRequest request)
{
var list = reportService.IndexReport(request.HospitalId, request.Source);
return new ApiResponse(ResponseType.OK, "", list);
}
/// <summary>
/// 菜单报表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("menu")]
[HttpPost]
public ApiResponse MenuReport([CustomizeValidator(RuleSet = "Menu"), FromBody]ReportRequest request)
{
var list = reportService.MenuReport(request.HospitalId, request.OnlyYear, request.Source, request.IsInHos);
return new ApiResponse(ResponseType.OK, "", list);
}
}
}
\ No newline at end of file
......@@ -9,7 +9,17 @@ public class ReportRequest
{
public int HospitalId { get; set; }
/// <summary> 是否为首页 </summary>
public int IsIndex { get; set; }
/// <summary> 是否以年为单位 </summary>
public int OnlyYear { get; set; }
/// <summary> 是否住院 </summary>
public int IsInHos { get; set; }
/// <summary> 报表名称 </summary>
public string Source { get; set; }
}
public class ReportRequestValidator : AbstractValidator<ReportRequest>
{
......@@ -19,6 +29,19 @@ public ReportRequestValidator()
{
RuleFor(x => x.HospitalId).NotNull().GreaterThan(0);
});
RuleSet("Index", () =>
{
RuleFor(x => x.HospitalId).NotNull().GreaterThan(0);
RuleFor(x => x.Source).NotNull().NotEmpty();
});
RuleSet("Menu", () =>
{
RuleFor(x => x.HospitalId).NotNull().GreaterThan(0);
RuleFor(x => x.OnlyYear).NotNull();
RuleFor(x => x.Source).NotNull().NotEmpty();
});
}
}
}
......@@ -21,5 +21,12 @@ public bool UpdateAllotStates(int allotId, int states, string remark)
allot.Remark = remark;
return Update(allot);
}
public int ImportData(int allotId)
{
string sql = @"select * from view_report_allot_summary where allotid=@allotId;
select * from view_report_original_income where allotid=@allotId;";
return Execute(sql, new { allotId });
}
}
}
......@@ -38,6 +38,7 @@ public class AllotService : IAutoInjection
//private readonly IHubContext<AllotLogHub> hubContext;
private readonly LogManageService logManageService;
private readonly ReportService reportService;
public AllotService(PerforPerallotRepository allotRepository,
BaiscNormService baiscNormService,
......@@ -55,7 +56,8 @@ public class AllotService : IAutoInjection
PerforHospitalRepository perforHospitalRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
//IHubContext<AllotLogHub> hubContext
LogManageService logManageService)
LogManageService logManageService,
ReportService reportService)
{
_allotRepository = allotRepository;
_againallotRepository = againallotRepository;
......@@ -75,6 +77,7 @@ public class AllotService : IAutoInjection
this.perforResbaiscnormRepository = perforResbaiscnormRepository;
//this.hubContext = hubContext;
this.logManageService = logManageService;
this.reportService = reportService;
}
#region 基础功能
......@@ -294,7 +297,13 @@ public void Generate(per_allot allot, string mail)
perforResbaiscnormRepository.AddRange(baiscnormList.ToArray());
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateSucceed, EnumHelper.GetDescription(AllotStates.GenerateSucceed));
logManageService.WriteMsg("正在生成报表数据", "正在生成报表数据", 1, allot.ID, "ReceiveMessage", true);
var res = reportService.ImportData(allot.ID);
logManageService.WriteMsg("正在生成报表数据", $"报表数据生成完成;受影响:{res}行", 1, allot.ID, "ReceiveMessage", true);
//发送邮件
logManageService.WriteMsg("正在发送邮件", "正在发送邮件", 1, allot.ID, "ReceiveMessage", true);
SendEmail(allot, mail, 1, time);
//logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功");
logManageService.WriteMsg("绩效生成结束", "绩效生成成功", 5, allot.ID, "ReceiveMessage", true);
......
......@@ -63,7 +63,7 @@ public dynamic Survey(int hospitalId)
var allot = allotList.OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).FirstOrDefault();
var keyvalue = new Dictionary<string, decimal>();
var basicList = perforResbaiscnormRepository.GetEntities(t => t.AllotID == allot.ID);
var basicList = perforResbaiscnormRepository.GetEntities(t => t.AllotID == allot.ID && t.PositionName.IndexOf("保底") < 0);
if (basicList != null)
{
foreach (var basic in basicList)
......@@ -71,17 +71,6 @@ public dynamic Survey(int hospitalId)
keyvalue.Add(basic.PositionName, Math.Round(basic.AvgValue.Value, 2));
}
}
var fee = perforHospersonfeeRepository.GetEntities(t => t.Year == allot.Year && t.Month == allot.Month);
if (fee != null)
{
keyvalue.Add("门诊患者均次", Math.Round(fee.Where(t => t.Source == "门诊").Sum(t => t.Fee.Value) / fee.Where(t => t.Source == "门诊").Sum(t => t.PersonTime.Value), 2));
keyvalue.Add("住院患者均次", Math.Round(fee.Where(t => t.Source == "住院").Sum(t => t.Fee.Value) / fee.Where(t => t.Source == "住院").Sum(t => t.PersonTime.Value), 2));
}
else
{
keyvalue.Add("门诊患者均次", 0M);
keyvalue.Add("住院患者均次", 0M);
}
return new
{
year = allot.Year,
......@@ -123,7 +112,7 @@ public List<PerReport> DoctorAvg(int hospitalId, int isIndex)
}
/// <summary>
/// 科室医生人均绩效(含科主任
/// 科室护理人均绩效(含护士长
/// </summary>
/// <returns></returns>
public List<PerReport> NurseAvg(int hospitalId, int isIndex)
......@@ -234,5 +223,98 @@ public List<PerReport> Income(int hospitalId, int isIndex)
}
return perforReportRepository.Income(hospitalId, date);
}
internal int ImportData(int allotId)
{
try
{
return perforPerallotRepository.ImportData(allotId);
}
catch { }
return 0;
}
/// <summary>
/// 首页
/// </summary>
/// <param name="hospitalId"></param>
/// <returns></returns>
public List<PerReport> IndexReport(int hospitalId, string source)
{
var states = new List<int>() { 6, 8 };
var allotList = perforPerallotRepository.GetEntities(t => t.HospitalId == hospitalId && states.Contains(t.States));
if (allotList == null || !allotList.Any())
throw new PerformanceException("用户未创建绩效!");
var allot = allotList.OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).FirstOrDefault();
var currentDate = allot.Year + "-" + allot.Month.ToString().PadLeft(2, '0'); //本月
var yoyDate = (allot.Year - 1) + "-" + allot.Month.ToString().PadLeft(2, '0'); //同比
var chainDate = allot.Year + "-" + (allot.Month - 1).ToString().PadLeft(2, '0'); //环比
var report = new List<PerReport>();
switch (source)
{
case "绩效发放金额":
report = perforReportRepository.PerforPayment(hospitalId, currentDate, yoyDate, chainDate);
break;
case "绩效发放金额占全院收入占比":
report = perforReportRepository.IndexPerforRatio(hospitalId, currentDate, yoyDate, chainDate);
break;
case "药占比":
report = perforReportRepository.IndexDrugRatio(hospitalId, currentDate, yoyDate, chainDate);
break;
case "材料占比":
report = perforReportRepository.IndexMaterialRatio(hospitalId, currentDate, yoyDate, chainDate);
break;
case "结构占比":
report = perforReportRepository.IndexStructRatio(hospitalId, currentDate);
break;
}
return report;
}
/// <summary>
/// 菜单
/// </summary>
/// <param name="hospitalId"></param>
/// <returns></returns>
public List<PerReport> MenuReport(int hospitalId, int isOnlyYear, string source, int? isInHos = null)
{
var report = new List<PerReport>();
switch (source)
{
case "业务总收入":
report = perforReportRepository.GeneralIncome(hospitalId, isOnlyYear);
break;
case "门诊、住院业务收入占比":
report = perforReportRepository.InHosIncome(hospitalId, isOnlyYear, isInHos.Value);
break;
case "业务收入结构占比":
report = perforReportRepository.StructRatio(hospitalId, isOnlyYear);
break;
case "药占比":
report = perforReportRepository.DrugRatio(hospitalId, isOnlyYear);
break;
case "材料占比":
report = perforReportRepository.MaterialRatio(hospitalId, isOnlyYear);
break;
case "绩效发放金额占全院收入占比":
report = perforReportRepository.PerforRatio(hospitalId, isOnlyYear);
break;
case "绩效群体收入":
report = perforReportRepository.PerforGroup(hospitalId, isOnlyYear);
break;
case "医生核算单元人均绩效":
report = perforReportRepository.DoctorAvg(hospitalId, isOnlyYear);
break;
case "护理核算单元人均绩效":
report = perforReportRepository.NurseAvg(hospitalId, isOnlyYear);
break;
}
return report;
}
}
}
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