Commit 439f4778 by 纪旭 韦

增加汇总,及优化代码

parent d739a710
......@@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using Performance.DtoModels;
using Performance.Infrastructure;
using Performance.Services;
using System;
using System.Collections.Generic;
......@@ -277,35 +278,28 @@ public ApiResponse TableSpecial([FromBody] ConditionRequest request)
#region 发放表视图、下载
/// <summary>
/// 全院绩效发放(视图)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("getAllComputeView/{BeginTime},{EndTime},{CurrentPage},{PageSize}")]
[Route("getAllComputeView")]
[HttpPost]
public ApiResponse GetAllComputeView([FromRoute] BeginEndTime request)
{
try
{
if (Convert.ToDateTime(request.BeginTime) > Convert.ToDateTime(request.EndTime))
{
throw new PerformanceException();
}
}
catch (Exception)
public ApiResponse GetAllComputeView([FromBody] BeginEndTime request)
{
var date = _computeService.performanceImposeDate(request.BeginTime, request.EndTime);
throw new PerformanceException("请输入正确的时间格式");
}
var data = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", request.BeginTime, request.EndTime);
if (null == data)
var datas = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", date.BeginTime, date.EndTime);
if (null == datas)
throw new PerformanceException("当前绩效记录不存在");
var list = new QueryComputeByDateGetPage
{
Data = data.Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize).ToList(),
TotalCount = data.Count(),
TotalPages = (int)Math.Ceiling((double)data.Count() / request.PageSize),
Data = datas.Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize).ToList(),
TotalData = _computeService.SumDatas(datas),
TotalCount = datas.Count(),
TotalPages = (int)Math.Ceiling((double)datas.Count() / request.PageSize),
CurrentPage = request.CurrentPage,
PageSize = request.PageSize
};
......@@ -315,32 +309,22 @@ public ApiResponse GetAllComputeView([FromRoute] BeginEndTime request)
/// <summary>
/// 全院绩效发放(视图)下载
/// </summary>
/// <param name="BeginTime"></param>
/// <param name="EndTime"></param>
/// <param name="HospitalId"></param>
/// <param name="request"></param>
/// <returns></returns>
[Route("getAllComputeViewDown/download/{HospitalId},{BeginTime},{EndTime}")]
[Route("getAllComputeViewDown/download")]
[HttpPost]
public IActionResult AllComputeViewDownload(int HospitalId,string BeginTime,string EndTime)
{
try
{
if (Convert.ToDateTime(BeginTime) > Convert.ToDateTime(EndTime))
{
throw new PerformanceException();
}
}
catch (Exception)
public IActionResult AllComputeViewDownload([FromBody] BeginEndTimeDown request)
{
if (request.HospitalId == 0)
throw new PerformanceException("医院ID不能为空");
throw new PerformanceException("请输入正确的时间格式");
}
var date = _computeService.performanceImposeDate(request.BeginTime, request.EndTime);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", BeginTime, EndTime);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", date.BeginTime, date.EndTime);
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
var filepath = downloadService.AllComputerViewReportByDate(HospitalId, list, "/report/compute", "全院绩效发放");
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list, "/report/wholehospital_grant", "全院绩效发放");
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
......@@ -360,32 +344,22 @@ public IActionResult AllComputeViewDownload(int HospitalId,string BeginTime,stri
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("gethosdataView/{BeginTime},{EndTime},{CurrentPage},{PageSize}")]
[Route("gethosdataView")]
[HttpPost]
public ApiResponse GethosdataView([FromRoute] BeginEndTime request)
{
try
{
if (Convert.ToDateTime(request.BeginTime) > Convert.ToDateTime(request.EndTime))
{
throw new PerformanceException();
}
}
catch (Exception)
public ApiResponse GethosdataView([FromBody] BeginEndTime request)
{
var date = _computeService.performanceImposeDate(request.BeginTime, request.EndTime);
throw new PerformanceException("请输入正确的时间格式");
}
var data = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", request.BeginTime, request.EndTime);
if (null == data)
var datas = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", date.BeginTime, date.EndTime);
if (null == datas)
throw new PerformanceException("当前绩效记录不存在");
var list = new QueryComputeByDateGetPage
{
Data = data.Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize).ToList(),
TotalCount = data.Count(),
TotalPages = (int)Math.Ceiling((double)data.Count() / request.PageSize),
Data = datas.Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize).ToList(),
TotalData = _computeService.SumDatas(datas),
TotalCount = datas.Count(),
TotalPages = (int)Math.Ceiling((double)datas.Count() / request.PageSize),
CurrentPage = request.CurrentPage,
PageSize = request.PageSize
};
......@@ -396,33 +370,22 @@ public ApiResponse GethosdataView([FromRoute] BeginEndTime request)
/// <summary>
/// 全院核算绩效发放(视图) 下载
/// </summary>
/// <param name="BeginTime"></param>
/// <param name="EndTime"></param>
/// <param name="HospitalId"></param>
/// <param name="request"></param>
/// <returns></returns>
[Route("gethosdataView/download/{HospitalId},{BeginTime},{EndTime}")]
[Route("gethosdataView/download")]
[HttpPost]
public IActionResult GethosdataView(int HospitalId, string BeginTime, string EndTime)
public IActionResult GethosdataView([FromBody] BeginEndTimeDown request)
{
if (request.HospitalId == 0)
throw new PerformanceException("医院ID不能为空");
try
{
if (Convert.ToDateTime(BeginTime) > Convert.ToDateTime(EndTime))
{
throw new PerformanceException();
}
}
catch (Exception)
{
throw new PerformanceException("请输入正确的时间格式");
}
var date = _computeService.performanceImposeDate(request.BeginTime, request.EndTime);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", BeginTime, EndTime);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", date.BeginTime, date.EndTime);
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
var filepath = downloadService.AllComputerViewReportByDate(HospitalId, list, "/report/print/compute", "全院核算绩效发放");
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list, "/report/wholehospital_accounting_grant", "全院核算绩效发放");
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
......@@ -442,33 +405,23 @@ public IActionResult GethosdataView(int HospitalId, string BeginTime, string End
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("allcomputeView/personnel/{BeginTime},{EndTime},{CurrentPage},{PageSize}")]
[Route("allcomputeView/personnel")]
[HttpPost]
public ApiResponse AllComputeViewByPM([FromRoute] BeginEndTime request)
{
try
{
if (Convert.ToDateTime(request.BeginTime) > Convert.ToDateTime(request.EndTime))
{
throw new PerformanceException();
}
}
catch (Exception)
public ApiResponse AllComputeViewByPM([FromBody] BeginEndTime request)
{
var date = _computeService.performanceImposeDate(request.BeginTime, request.EndTime);
throw new PerformanceException("请输入正确的时间格式");
}
var datas = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", date.BeginTime, date.EndTime);
var data = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", request.BeginTime, request.EndTime);
if (null == data)
if (null == datas)
throw new PerformanceException("当前绩效记录不存在");
var list = new QueryComputeByDateGetPage
{
Data = data.Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize).ToList(),
TotalCount = data.Count(),
TotalPages = (int)Math.Ceiling((double)data.Count() / request.PageSize),
Data = datas.Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize).ToList(),
TotalData = _computeService.SumDatas(datas),
TotalCount = datas.Count(),
TotalPages = (int)Math.Ceiling((double)datas.Count() / request.PageSize),
CurrentPage = request.CurrentPage,
PageSize = request.PageSize
};
......@@ -478,33 +431,22 @@ public ApiResponse AllComputeViewByPM([FromRoute] BeginEndTime request)
/// <summary>
/// 获取财务全院绩效列表(视图)下载
/// </summary>
/// <param name="BeginTime"></param>
/// <param name="EndTime"></param>
/// <param name="HospitalId"></param>
/// <param name="request"></param>
/// <returns></returns>
[Route("allcomputeView/personnel/download/{HospitalId},{BeginTime},{EndTime}")]
[Route("allcomputeView/personnel/download")]
[HttpPost]
public IActionResult AllComputeByPMViewDownLoad(int HospitalId, string BeginTime, string EndTime)
{
try
{
if (Convert.ToDateTime(BeginTime) > Convert.ToDateTime(EndTime))
{
throw new PerformanceException();
}
}
catch (Exception)
public IActionResult AllComputeByPMViewDownLoad([FromBody] BeginEndTimeDown request)
{
if (request.HospitalId == 0)
throw new PerformanceException("医院ID不能为空");
throw new PerformanceException("请输入正确的时间格式");
}
var date = _computeService.performanceImposeDate(request.BeginTime, request.EndTime);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", BeginTime, EndTime);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", date.BeginTime, date.EndTime);
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
var filepath = downloadService.AllComputerViewReportByDate(HospitalId, list, "/report/wholehospital", "财务全院绩效发放");
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list, "/report/wholehospital_finance_grant", "财务全院绩效发放");
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
......
......@@ -1617,13 +1617,11 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.AllComputeViewDownload(System.Int32,System.String,System.String)">
<member name="M:Performance.Api.Controllers.ReportController.AllComputeViewDownload(Performance.DtoModels.BeginEndTimeDown)">
<summary>
全院绩效发放(视图)下载
</summary>
<param name="BeginTime"></param>
<param name="EndTime"></param>
<param name="HospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GethosdataView(Performance.DtoModels.BeginEndTime)">
......@@ -1633,29 +1631,25 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GethosdataView(System.Int32,System.String,System.String)">
<member name="M:Performance.Api.Controllers.ReportController.GethosdataView(Performance.DtoModels.BeginEndTimeDown)">
<summary>
全院核算绩效发放(视图) 下载
</summary>
<param name="BeginTime"></param>
<param name="EndTime"></param>
<param name="HospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.AllComputeViewByPM(Performance.DtoModels.BeginEndTime)">
<summary>
获取全院绩效列表(人事科
获取财务全院绩效列表(视图
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.AllComputeByPMViewDownLoad(System.Int32,System.String,System.String)">
<member name="M:Performance.Api.Controllers.ReportController.AllComputeByPMViewDownLoad(Performance.DtoModels.BeginEndTimeDown)">
<summary>
全院绩效列表(人事科)下载
获取财务全院绩效列表(视图)下载
</summary>
<param name="BeginTime"></param>
<param name="EndTime"></param>
<param name="HospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportGlobalController.GetAllReportGlobal(System.Int32)">
......
......@@ -58,13 +58,19 @@ public class BeginEndTime
public string EndTime { get; set; } // 2021-08
public int CurrentPage { get; set; }
public int PageSize { get; set; }
}
public class BeginEndTimeDown
{
public string BeginTime { get; set; } // 2021-01
public string EndTime { get; set; } // 2021-08
public int HospitalId { get; set; }
}
public class QueryComputeByDateGetPage
{
public List<dynamic> Data { get; set; }
public Dictionary<string, decimal> TotalData { get; set; }
public int CurrentPage { get; set; }
public int TotalPages { get; set; }
public int PageSize { get; set; }
......
......@@ -2009,9 +2009,9 @@ public List<cof_alias> CustomColumnHeaders(int hospitalId, string route)
{ "/result/wholehospital" , ComputeConfig.AllComputePersonView },
{ "/result/print/compute" , ComputeConfig.AllComputeDepartmentView },
{ "/report/compute" , ComputeConfig.AllComputeViewByDate },
{ "/report/wholehospital" , ComputeConfig.AllComputePersonViewByDate },
{ "/report/print/compute" , ComputeConfig.AllComputeDepartmentViewByDate },
{ "/report/wholehospital_grant" , ComputeConfig.AllComputeViewByDate },
{ "/report/wholehospital_accounting_grant" , ComputeConfig.AllComputeDepartmentViewByDate },
{ "/report/wholehospital_finance_grant" , ComputeConfig.AllComputePersonViewByDate },
};
var init = pairs.ContainsKey(route.ToLower()) ? pairs[route.ToLower()] : new List<cof_alias>();
foreach (var item in init)
......@@ -2075,6 +2075,65 @@ public List<dynamic> GetAllComputeViewByDate(string viewName, string BeginTime,
return reportRepository.QueryComputeByDate(0, viewName, BeginTime, EndTime);
}
/// <summary>
///
/// </summary>
/// <param name="datas"></param>
/// <returns></returns>
public Dictionary<string, decimal> SumDatas(List<dynamic> datas)
{
string[] notSum = new string[] { "hospitalid", "allotid", "year", "month", "jobnumber", "bankcard", "jobtitle", "secondid", "states", "isshowmanage", "batch" };
Dictionary<string, decimal> pairs = new Dictionary<string, decimal>();
foreach (var dt in datas)
{
var row = (IDictionary<string, object>)dt;
foreach (var item in row)
{
if (notSum.Contains(item.Key.ToLower())) continue;
if (decimal.TryParse(item.Value?.ToString(), out decimal v))
{
if (pairs.TryGetValue(item.Key, out decimal sum))
{
sum += v;
pairs[item.Key] = sum;
}
else
{
pairs[item.Key] = v;
}
}
}
}
return pairs;
}
/// <summary>
/// 限制绩效发放输入的时间格式
/// </summary>
/// <param name="BeginTime"></param>
/// <param name="EndTime"></param>
/// <returns></returns>
public BeginEndTime performanceImposeDate(string BeginTime, string EndTime)
{
var Bdate = DateTime.Now;
var Edate = DateTime.Now;
if (string.IsNullOrEmpty(BeginTime) || !DateTime.TryParse(BeginTime, out Bdate) ||
string.IsNullOrEmpty(EndTime) || !DateTime.TryParse(EndTime, out Edate))
throw new PerformanceException("请输入正确的时间");
if (Bdate > Edate)
throw new PerformanceException("开始时间不能大于结束时间");
string beginDate = Bdate.Year + $"-{Bdate.Month.ToString().PadLeft(2, '0')}";
string endDate = Edate.Year + $"-{Edate.Month.ToString().PadLeft(2, '0')}";
return new BeginEndTime
{
BeginTime = beginDate,
EndTime = endDate
};
}
}
public class ComputeConfig
......
......@@ -181,57 +181,7 @@ public string AllComputerViewReport(int allotId, List<dynamic> dynamics, string
{
var allot = perallotRepository.GetEntity(t => t.ID == allotId);
var hospital = perforHospital.GetEntity(t => t.ID == allot.HospitalId);
var alias = perforCofalias.GetEntities(t => t.HospitalId == hospital.ID);
var headList = _computeService.CustomColumnHeaders(hospital.ID, route).Where(w => w.States == 1).ToList();
var dpath = Path.Combine(evn.ContentRootPath, "Files", "PerformanceRelease", $"{allot.HospitalId}");
FileHelper.CreateDirectory(dpath);
string filepath = Path.Combine(dpath, $"{hospital.HosName}-{name}-{DateTime.Now:yyyyMMdd}");
FileHelper.DeleteFile(filepath);
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate))
using (ExcelPackage package = new ExcelPackage(fs))
{
var worksheet = package.Workbook.Worksheets.Add(name);
if (dynamics != null && dynamics.Count() > 0)
{
var headers = ((IDictionary<string, object>)dynamics.ElementAt(0)).Keys;
for (int col = 0; col < headList.Count; col++)
{
worksheet.SetValue(1, col + 1, headList[col].Alias);
}
for (int col = 0; col < headList.Count; col++)
{
for (int row = 0; row < dynamics.Count(); row++)
{
var data = dynamics.ElementAt(row);
var temp = (IDictionary<string, object>)data;
var value = temp[headList[col].Name];
worksheet.Cells[row + 2, col + 1].Value = value;
}
if (col == 0)
worksheet.SetValue(dynamics.Count() + 2, col + 1, "合计");
else
worksheet.Cells[dynamics.Count() + 2, col + 1].Formula = string.Format("SUM({0})", new ExcelAddress(2, col + 1, dynamics.Count() + 1, col + 1).Address);
}
}
worksheet.View.FreezePanes(2, 1);
for (int row = worksheet.Dimension.Start.Row; row <= worksheet.Dimension.End.Row; row++)
{
for (int col = worksheet.Dimension.Start.Column; col <= worksheet.Dimension.End.Column; col++)
{
worksheet.Cells[row, col].Style.Border.BorderAround(ExcelBorderStyle.Thin);
worksheet.Cells[row, col].Style.Numberformat.Format = "#,##0.00";
}
}
package.Save();
}
return filepath;
return AllComputerDown(hospital, dynamics, route, name);
}
/// <summary>
/// 财务、全院绩效发放下载(时间段)
......@@ -243,15 +193,15 @@ public string AllComputerViewReport(int allotId, List<dynamic> dynamics, string
public string AllComputerViewReportByDate(int HospitalId, List<dynamic> dynamics, string route, string name)
{
var hospital = perforHospital.GetEntity(t => t.ID == HospitalId);
var alias = perforCofalias.GetEntities(t => t.HospitalId == hospital.ID);
return AllComputerDown(hospital, dynamics, route, name);
}
public string AllComputerDown(sys_hospital hospital,List<dynamic> dynamics, string route, string name)
{
var headList = _computeService.CustomColumnHeaders(hospital.ID, route).Where(w => w.States == 1).ToList();
var dpath = Path.Combine(evn.ContentRootPath, "Files", "PerformanceRelease", $"{HospitalId}");
var dpath = Path.Combine(evn.ContentRootPath, "Files", "PerformanceRelease", $"{hospital.ID}");
FileHelper.CreateDirectory(dpath);
string filepath = Path.Combine(dpath, $"{hospital.HosName}-{name}-{DateTime.Now:yyyyMMdd}");
FileHelper.DeleteFile(filepath);
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate))
using (ExcelPackage package = new ExcelPackage(fs))
{
......
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