Commit 3deb2184 by 纪旭 韦

sql优化

parent ad4e9676
......@@ -289,8 +289,17 @@ public ApiResponse GetAllComputeView([FromBody] BeginEndTime request)
if (string.IsNullOrEmpty(request.BeginTime) || !DateTime.TryParse(request.BeginTime, out _) ||
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out _))
throw new PerformanceException("请输入正确的时间");
var datas = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", request);
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", request);
var list = new QueryComputeByDateGetPage
{
Data = datas.Skip(request.PageSize * (request.CurrentPage - 1)).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
};
return new ApiResponse(ResponseType.OK, "ok", list);
}
......@@ -312,10 +321,10 @@ public IActionResult AllComputeViewDownload([FromBody] BeginEndTime request)
request.PageSize = 0;
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp", request);
if (null == list || null == list.Data)
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list.Data, "/report/wholehospital_grant", "全院绩效发放", bdate, edate.AddMonths(1));
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list, "/report/wholehospital_grant", "全院绩效发放", bdate, edate.AddMonths(1));
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
......@@ -361,7 +370,7 @@ public IActionResult WholeHospitalGrantSummaryDownload([FromBody] HospitalGrantS
throw new PerformanceException("请输入正确的时间");
var (a,list) = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp", request);
var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp", request);
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
......@@ -402,7 +411,17 @@ public ApiResponse GethosdataView([FromBody] BeginEndTime request)
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out _))
throw new PerformanceException("请输入正确的时间");
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", request);
var datas = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", request);
var list = new QueryComputeByDateGetPage
{
Data = datas.Skip(request.PageSize * (request.CurrentPage - 1)).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
};
return new ApiResponse(ResponseType.OK, "ok", list);
}
......@@ -427,10 +446,10 @@ public IActionResult GethosdataViewDown([FromBody] BeginEndTime request)
request.PageSize = 0;
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_dept", request);
if (null == list || null == list.Data)
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list.Data, "/report/wholehospital_accounting_grant", "全院核算绩效发放", bdate, edate.AddMonths(1));
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list, "/report/wholehospital_accounting_grant", "全院核算绩效发放", bdate, edate.AddMonths(1));
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
......@@ -477,7 +496,7 @@ public IActionResult WholeHospitalAccountingGrantSummaryDownload([FromBody] Hosp
throw new PerformanceException("请输入正确的时间");
var (a,list) = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_dept", request);
var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_dept", request);
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
......@@ -519,8 +538,17 @@ public ApiResponse AllComputeViewByPM([FromBody] BeginEndTime request)
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out _))
throw new PerformanceException("请输入正确的时间");
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", request);
var datas = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", request);
var list = new QueryComputeByDateGetPage
{
Data = datas.Skip(request.PageSize * (request.CurrentPage - 1)).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
};
return new ApiResponse(ResponseType.OK, "ok", list);
}
......@@ -542,10 +570,10 @@ public IActionResult AllComputeByPMViewDownLoad([FromBody] BeginEndTime request)
request.PageSize = 0;
var list = _computeService.GetAllComputeViewByDate("view_allot_sign_emp_finance", request);
if (null == list || null == list.Data)
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list.Data, "/report/wholehospital_finance_grant", "财务全院绩效发放", bdate, edate.AddMonths(1));
var filepath = downloadService.AllComputerViewReportByDate(request.HospitalId, list, "/report/wholehospital_finance_grant", "财务全院绩效发放", bdate, edate.AddMonths(1));
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
......@@ -592,7 +620,7 @@ public IActionResult WholeHospitalFinanceGrantSummaryDownload([FromBody] Hospita
throw new PerformanceException("请输入正确的时间");
var (a, list) = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp_finance", request);
var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp_finance", request);
if (null == list)
throw new PerformanceException("当前绩效记录不存在");
......
......@@ -403,23 +403,28 @@ public List<dynamic> QueryCompute(int allotId, string viewName)
return DapperQuery<dynamic>(sql, new { allotId })?.ToList();
}
public List<dynamic> QueryComputeByDate(string viewName, DateTime beginTime, DateTime endTime,params string[] item)
public List<dynamic> QueryComputeByDate(string viewName, BeginEndTime request)
{
var sql = $@"SELECT * FROM {viewName}
where STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') >= @beginTime
and STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') < @endTime";
if (item != null && item.Length != 0 && !(item.Length > 0 && item[0] == ""))
sql = $@"SELECT {string.Join(",", item)} FROM {viewName}
where STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') >= @beginTime
and STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') < @endTime";
if (request.Search != null && request.Search.Any(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)))
{
var where = request.Search.Where(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)).Select(t => $"{t.Title} like '%{t.Value}%'");
sql += " and " + string.Join(" and ", where);
}
return DapperQuery<dynamic>(sql, new { beginTime = beginTime.ToString("yyyy-MM-dd"), endTime = endTime.ToString("yyyy-MM-dd") }).ToList();
if (!string.IsNullOrEmpty(request.SortBy))
sql += $" order by {request.SortBy} ";
return DapperQuery<dynamic>(sql, new { beginTime = request.BeginTime, endTime = request.EndTime }).ToList();
}
public (int count, List<dynamic> data) QueryComputeByDateAndTotal(string viewName, HospitalGrantSummary request)
public List<dynamic> QueryComputeByDateAndTotal(string viewName, HospitalGrantSummary request)
{
if (!new string[] { "view_allot_sign_dept", "view_allot_sign_emp", "view_allot_sign_emp_finance" }.Contains(viewName)) return (0, new List<dynamic>());
if (!new string[] { "view_allot_sign_dept", "view_allot_sign_emp", "view_allot_sign_emp_finance" }.Contains(viewName)) return new List<dynamic>();
var sql = $@" SELECT * FROM {viewName} where STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') >= @beginTime
and STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') < @endTime and hospitalid = {request.HospitalId}";
......@@ -451,18 +456,7 @@ public List<dynamic> QueryComputeByDate(string viewName, DateTime beginTime, Dat
sql = $"select {string.Join(",", request.GroupBy)}, {string.Join(",", request.SumBy.Select(t => $"sum({t}) {t}"))} from ({sql}) tab group by {string.Join(",", request.GroupBy)}";
if (request.CurrentPage != 0 && request.PageSize != 0)
sql = $@" select count(1) count from ({sql}) tab;
select * from ({sql}) tab limit {request.PageSize} offset {(request.CurrentPage - 1)};";
else
sql = $@" select 0 as count;{sql}";
var queryMulti = context.Database.GetDbConnection().QueryMultiple(sql, new { beginTime = request.BeginTime, endTime = request.EndTime },commandTimeout : 60*5);
var count = queryMulti.ReadFirstOrDefault<int>();
var data = queryMulti.Read<dynamic>()?.ToList();
return (count, data);
return DapperQuery<dynamic>(sql, new { beginTime = request.BeginTime, endTime = request.EndTime }).ToList();
}
public (List<dynamic> list, int count) QueryComputePageData(string query, object param = null)
......
......@@ -2082,14 +2082,16 @@ public List<dynamic> GetAllComputeView(int hospitalId, int AllotId, string viewN
return reportRepository.QueryCompute(AllotId, viewName);
}
public List<dynamic> GetAllComputeViewByDate(string viewName, DateTime beginTime, DateTime endTime)
public List<dynamic> GetAllComputeViewByDate(string viewName, BeginEndTime request)
{
return reportRepository.QueryComputeByDate(viewName, beginTime, endTime);
request.EndTime = Convert.ToDateTime(request.EndTime).AddMonths(1).ToString();
return reportRepository.QueryComputeByDate(viewName, request);
}
public (int count, List<dynamic> data) GetAllComputeViewByDateAndTotal(string viewName, HospitalGrantSummary request)
public List<dynamic> GetAllComputeViewByDateAndTotal(string viewName, HospitalGrantSummary request)
{
request.EndTime = Convert.ToDateTime(request.EndTime).AddMonths(1).ToString();
return reportRepository.QueryComputeByDateAndTotal(viewName, request);
}
......@@ -2101,61 +2103,22 @@ public QueryComputeByDateGetPage GetPerformanceSummary(HospitalGrantSummary requ
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate))
throw new PerformanceException("请输入正确的时间");
request.EndTime = Convert.ToDateTime(request.EndTime).AddMonths(1).ToString();
var (TotalCount, datas) = reportRepository.QueryComputeByDateAndTotal(ViewName, request);
var datas = reportRepository.QueryComputeByDateAndTotal(ViewName, request);
if (null == datas)
throw new PerformanceException("当前绩效记录不存在");
var list = new QueryComputeByDateGetPage
{
Data = datas,
TotalData = SumDatas(reportRepository.QueryComputeByDate(ViewName, Convert.ToDateTime(request.BeginTime), Convert.ToDateTime(request.EndTime), request.GroupBy.Union(request.SumBy).ToArray())),
TotalCount = TotalCount,
TotalPages = (int)Math.Ceiling((double)TotalCount / request.PageSize),
Data = datas.Skip(request.PageSize * (request.CurrentPage - 1)).Take(request.PageSize).ToList(),
TotalData = SumDatas(datas),
TotalCount = datas.Count(),
TotalPages = (int)Math.Ceiling((double)datas.Count() / request.PageSize),
CurrentPage = request.CurrentPage,
PageSize = request.PageSize
};
return list;
}
public QueryComputeByDateGetPage GetAllComputeViewByDate(string viewName, BeginEndTime request)
{
var sql = $@"select * from {viewName}
where str_to_date(concat(year, '-', month, '-01'), '%Y-%m-%d') >= '{request.BeginTime}-01'
and str_to_date(concat(year, '-', month, '-01'), '%Y-%m-%d') < '{request.EndTime}-01'
and hospitalid = {request.HospitalId}";
if (request.Search != null && request.Search.Any(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)))
{
var where = request.Search.Where(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)).Select(t => $"{t.Title} like '%{t.Value}%'");
sql += " and " + string.Join(" and ", where);
}
if (!string.IsNullOrEmpty(request.SortBy))
sql += $" order by {request.SortBy} ";
string query = sql + @"; select 0 as total;";
if (request.PageSize > 0 && request.CurrentPage > 0)
{
query = $@"
select * from ({sql}) tab limit {request.PageSize} offset {(request.CurrentPage - 1) * request.PageSize};
select count(1) total from ({sql}) tab;";
}
var (list, count) = reportRepository.QueryComputePageData(query);
return new QueryComputeByDateGetPage
{
Data = list,
TotalData = SumDatas(reportRepository.QueryComputeByDate(viewName,Convert.ToDateTime(request.BeginTime), Convert.ToDateTime(request.EndTime))),
TotalCount = count,
TotalPages = (int)Math.Ceiling((double)list.Count() / request.PageSize),
CurrentPage = request.CurrentPage,
PageSize = request.PageSize
};
}
/// <summary>
/// 合计数据
/// </summary>
......
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