Commit 4cecffe9 by wyc

自定义表接口修改

parent 13115d59
...@@ -912,6 +912,7 @@ public ApiResponse CopyDropDown() ...@@ -912,6 +912,7 @@ public ApiResponse CopyDropDown()
return new ApiResponse(ResponseType.OK, result); return new ApiResponse(ResponseType.OK, result);
} }
#region 自定义表
/// <summary> /// <summary>
/// 自定义表Heads表头 /// 自定义表Heads表头
/// </summary> /// </summary>
...@@ -946,7 +947,7 @@ public ApiResponse GetCustomList([FromBody] CustomPagingRequest request) ...@@ -946,7 +947,7 @@ public ApiResponse GetCustomList([FromBody] CustomPagingRequest request)
} }
/// <summary> /// <summary>
/// 保存自定义表数据 /// 自定义表(保存数据)
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
...@@ -965,7 +966,7 @@ public ApiResponse BatchSaveCustom([FromBody] SaveCustomData request) ...@@ -965,7 +966,7 @@ public ApiResponse BatchSaveCustom([FromBody] SaveCustomData request)
} }
/// <summary> /// <summary>
/// 自定义表数据(加载上月) /// 自定义表(加载上月)
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
...@@ -984,7 +985,7 @@ public ApiResponse CustomNewcopy([FromBody] CustomNewcopyData request) ...@@ -984,7 +985,7 @@ public ApiResponse CustomNewcopy([FromBody] CustomNewcopyData request)
} }
/// <summary> /// <summary>
/// 自定义表导出 /// 自定义表(下载)
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
...@@ -1010,5 +1011,8 @@ public IActionResult CustomDownload([FromBody] CustomPagingRequest request) ...@@ -1010,5 +1011,8 @@ public IActionResult CustomDownload([FromBody] CustomPagingRequest request)
var memi = provider.Mappings[".xlsx"]; var memi = provider.Mappings[".xlsx"];
return File(memoryStream, memi, Path.GetFileName(fileInfo.Name)); return File(memoryStream, memi, Path.GetFileName(fileInfo.Name));
} }
#endregion
} }
} }
\ No newline at end of file
...@@ -1519,21 +1519,21 @@ ...@@ -1519,21 +1519,21 @@
</member> </member>
<member name="M:Performance.Api.Controllers.ConfigController.BatchSaveCustom(Performance.DtoModels.SaveCustomData)"> <member name="M:Performance.Api.Controllers.ConfigController.BatchSaveCustom(Performance.DtoModels.SaveCustomData)">
<summary> <summary>
保存自定义表数据 自定义表(保存数据)
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.ConfigController.CustomNewcopy(Performance.DtoModels.CustomNewcopyData)"> <member name="M:Performance.Api.Controllers.ConfigController.CustomNewcopy(Performance.DtoModels.CustomNewcopyData)">
<summary> <summary>
自定义表数据(加载上月) 自定义表(加载上月)
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.ConfigController.CustomDownload(Performance.DtoModels.CustomPagingRequest)"> <member name="M:Performance.Api.Controllers.ConfigController.CustomDownload(Performance.DtoModels.CustomPagingRequest)">
<summary> <summary>
自定义表导出 自定义表(下载)
</summary> </summary>
<param name="request"></param> <param name="request"></param>
<returns></returns> <returns></returns>
......
...@@ -298,5 +298,11 @@ public enum Format ...@@ -298,5 +298,11 @@ public enum Format
三位小数百分比, 三位小数百分比,
四位小数百分比, 四位小数百分比,
} }
public enum CustomTableLimitation
{
通过核算单元或者核算组别进行限制 = 0,
无限制 = 1,
}
} }
} }
using Dapper; using AngleSharp.Dom;
using Dapper;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels; using Performance.EntityModels;
...@@ -8,6 +9,7 @@ ...@@ -8,6 +9,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using static Performance.DtoModels.ManagementDept;
namespace Performance.Repository namespace Performance.Repository
{ {
...@@ -498,28 +500,28 @@ public List<dynamic> QueryComputeByDateAndTotal(string viewName, HospitalGrantSu ...@@ -498,28 +500,28 @@ public List<dynamic> QueryComputeByDateAndTotal(string viewName, HospitalGrantSu
/// <param name="accountingUnit"></param> /// <param name="accountingUnit"></param>
/// <param name="unitType"></param> /// <param name="unitType"></param>
/// <returns></returns> /// <returns></returns>
public List<dynamic> QueryCustom(string tableName, int allotId, string accountingUnit, string[] unitType) //public List<dynamic> QueryCustom(string tableName, int allotId, string accountingUnit, string[] unitType)
{ //{
string querySql = $@"select * from {tableName} where allotid = @allotid "; // string querySql = $@"select * from {tableName} where allotid = @allotid ";
if (string.IsNullOrEmpty(accountingUnit) && unitType==null) // if (string.IsNullOrEmpty(accountingUnit) && unitType == null)
return DapperQuery<dynamic>(querySql, new { allotId }, commandTimeout: 60 * 10)?.ToList(); // return DapperQuery<dynamic>(querySql, new { allotId }, commandTimeout: 60 * 10)?.ToList();
if (!string.IsNullOrEmpty(accountingUnit)) // if (!string.IsNullOrEmpty(accountingUnit))
querySql += " and accountingunit = @accountingunit"; // querySql += " and accountingunit = @accountingunit";
if (unitType != null && unitType.Any()) // if (unitType != null && unitType.Any())
querySql += " and unittype in @unittype"; // querySql += " and unittype in @unittype";
querySql += " order by unittype,accountingunit"; // querySql += " order by unittype,accountingunit";
var result = DapperQuery<dynamic>(querySql, new { allotId, accountingUnit, unitType }, commandTimeout: 60 * 10)?.ToList(); // var result = DapperQuery<dynamic>(querySql, new { allotId, accountingUnit, unitType }, commandTimeout: 60 * 10)?.ToList();
return result; // return result;
} //}
/// <summary> /// <summary>
/// 科室 /// 自定义表(科室二次分配)
/// </summary> /// </summary>
/// <param name="tableName"></param> /// <param name="tableName"></param>
/// <param name="allotId"></param> /// <param name="allotId"></param>
...@@ -528,72 +530,132 @@ public List<dynamic> QueryCustom(string tableName, int allotId, string accountin ...@@ -528,72 +530,132 @@ public List<dynamic> QueryCustom(string tableName, int allotId, string accountin
/// <param name="pageIndex"></param> /// <param name="pageIndex"></param>
/// <param name="pageSize"></param> /// <param name="pageSize"></param>
/// <returns></returns> /// <returns></returns>
public CustonPagingData QueryCustom(string tableName, int allotId, string accountingUnit, string[] unitType, int pageIndex = 1, int pageSize = 20, bool isView = false) public CustonPagingData QueryCustom(string accountingUnit, string[] unitType, CustomPagingRequest request, List<string> columns)
{
string dataQuery;
string countQuery;
if (isView)
{ {
dataQuery = $@"SELECT * FROM {tableName} WHERE AllotId = @AllotId and `核算单元` = @accountingUnit and `核算单元类型` in @unitType order by `核算单元类型`,`核算单元` LIMIT {(pageIndex - 1) * pageSize},{pageSize} "; var result = new CustonPagingData();
countQuery = $@"SELECT COUNT(*) FROM {tableName} WHERE AllotId = @AllotId and `核算单元` = @accountingUnit and `核算单元类型` in @unitType "; string sql, Query;
} //添加查询条件
if (string.IsNullOrEmpty(request.QuerySearch))
Query = " 1=1 ";
else else
{ {
dataQuery = $@"SELECT * FROM {tableName} WHERE AllotId = @AllotId and AccountingUnit = @accountingUnit and UnitType in @unitType order by UnitType,AccountingUnit LIMIT {(pageIndex - 1) * pageSize},{pageSize} "; var column = "";
countQuery = $@"SELECT COUNT(*) FROM {tableName} WHERE AllotId = @AllotId and AccountingUnit = @accountingUnit and UnitType in @unitType "; foreach (var item in columns)
}
var result = new CustonPagingData
{ {
DataList = DapperQuery<dynamic>(dataQuery, new { allotId, unitType, accountingUnit }, commandTimeout: 60 * 10)?.ToList(), if (string.IsNullOrEmpty(column))
TotalCount = DapperQuery<int>(countQuery, new { allotId, unitType, accountingUnit }, commandTimeout: 60 * 10)?.FirstOrDefault() ?? 0, column = $@"{item} like '%{request.QuerySearch}%'";
}; else
column = $@"{column} OR {item} like '%{request.QuerySearch}%'";
}
Query = column;
}
//查询数据
if (string.IsNullOrEmpty(request.QuerySearch))
sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId and AccountingUnit = @accountingUnit and UnitType in @unitType order by UnitType,AccountingUnit LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} ";
else
sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId and AccountingUnit = @accountingUnit and UnitType in @unitType AND({Query}) order by UnitType,AccountingUnit LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} ";
result.DataList = DapperQuery<dynamic>(sql, new { request.AllotId, unitType, accountingUnit }, commandTimeout: 60 * 10)?.ToList();
//查询总条数
sql = $@"SELECT COUNT(*) FROM {request.TableName} WHERE AllotId = @AllotId AND({Query}) ";
result.TotalCount = DapperQuery<int>(sql, new { request.AllotId, unitType, accountingUnit }, commandTimeout: 60 * 10)?.FirstOrDefault() ?? 0;
return result; return result;
#region
//string dataQuery, countQuery;
//if (isView)
//{
// dataQuery = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId and `核算单元` = @accountingUnit and `核算单元类型` in @unitType order by `核算单元类型`,`核算单元` LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} ";
// countQuery = $@"SELECT COUNT(*) FROM {request.TableName} WHERE AllotId = @AllotId and `核算单元` = @accountingUnit and `核算单元类型` in @unitType ";
//}
//else
//{
// dataQuery = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId and AccountingUnit = @accountingUnit and UnitType in @unitType order by UnitType,AccountingUnit LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} ";
// countQuery = $@"SELECT COUNT(*) FROM {request.TableName} WHERE AllotId = @AllotId and AccountingUnit = @accountingUnit and UnitType in @unitType ";
//}
//var result = new CustonPagingData
//{
// DataList = DapperQuery<dynamic>(dataQuery, new { request.AllotId, unitType, accountingUnit }, commandTimeout: 60 * 10)?.ToList(),
// TotalCount = DapperQuery<int>(countQuery, new { request.AllotId, unitType, accountingUnit }, commandTimeout: 60 * 10)?.FirstOrDefault() ?? 0,
//};
//return result;
#endregion
} }
/// <summary> /// <summary>
/// 管理员 /// 自定义表(管理员)
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
/// <param name="IsHead"></param> /// <param name="IsHead"></param>
/// <returns></returns> /// <returns></returns>
public CustonPagingData QueryCustom(CustomPagingRequest request, bool IsHead, bool isView) public CustonPagingData QueryCustom(CustomPagingRequest request, List<string> columns)
{ {
var result = new CustonPagingData(); var result = new CustonPagingData();
string sql, Query; string sql, Query;
//添加查询条件
if (string.IsNullOrEmpty(request.QuerySearch)) if (string.IsNullOrEmpty(request.QuerySearch))
Query = " and 1=1 "; Query = " 1=1 ";
else else
Query = isView {
? $@" and (`核算单元` like '%{request.QuerySearch}%' or `核算单元类型` like '%{request.QuerySearch}%') " var column = "";
: $@" and (AccountingUnit like '%{request.QuerySearch}%' or UnitType like '%{request.QuerySearch}%') "; foreach (var item in columns)
{
string order = isView ? "`核算单元类型`,`核算单元`" : "UnitType,AccountingUnit"; if (string.IsNullOrEmpty(column))
if (IsHead) column = $@"{item} like '%{request.QuerySearch}%'";
sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId ";
else else
sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId {Query} order by {order} LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} "; column = $@"{column} OR {item} like '%{request.QuerySearch}%'";
}
Query = column;
}
//查询数据
if (string.IsNullOrEmpty(request.QuerySearch))
sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize}";
else
sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId AND({Query})LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} ";
result.DataList = DapperQuery<dynamic>(sql, new { request.AllotId }, commandTimeout: 60 * 10)?.ToList(); result.DataList = DapperQuery<dynamic>(sql, new { request.AllotId }, commandTimeout: 60 * 10)?.ToList();
//查询总条数
sql = $@"SELECT COUNT(*) FROM {request.TableName} WHERE AllotId = @AllotId {Query} "; sql = $@"SELECT COUNT(*) FROM {request.TableName} WHERE AllotId = @AllotId AND({Query}) ";
result.TotalCount = DapperQuery<int>(sql, new { request.AllotId }, commandTimeout: 60 * 10)?.FirstOrDefault() ?? 0; result.TotalCount = DapperQuery<int>(sql, new { request.AllotId }, commandTimeout: 60 * 10)?.FirstOrDefault() ?? 0;
return result; return result;
#region
// var result = new CustonPagingData();
// string sql, Query;
// if (string.IsNullOrEmpty(request.QuerySearch))
// {
// Query = " and 1=1 ";
// }
// else
// {
// Query = isView
//? $@" and (`核算单元` like '%{request.QuerySearch}%' or `核算单元类型` like '%{request.QuerySearch}%') "
//: $@" and (AccountingUnit like '%{request.QuerySearch}%' or UnitType like '%{request.QuerySearch}%') ";
// }
// string order = isView ? "`核算单元类型`,`核算单元`" : "UnitType,AccountingUnit";
// if (IsHead)
// sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId ";
// else
// sql = $@"SELECT * FROM {request.TableName} WHERE AllotId = @AllotId {Query} order by {order} LIMIT {(request.PageIndex - 1) * request.PageSize},{request.PageSize} ";
// result.DataList = DapperQuery<dynamic>(sql, new { request.AllotId }, commandTimeout: 60 * 10)?.ToList();
// sql = $@"SELECT COUNT(*) FROM {request.TableName} WHERE AllotId = @AllotId {Query} ";
// result.TotalCount = DapperQuery<int>(sql, new { request.AllotId }, commandTimeout: 60 * 10)?.FirstOrDefault() ?? 0;
// return result;
#endregion
} }
public bool QueryIsAllotId(string tableName, int limit) public bool QueryIsAllotId(string tableName, int limit)
{ {
string[] columns; string[] columns = limit == (int)CustomTableLimitation.无限制 ? columns = new string[] { "allotid" } : columns = new string[] { "allotid", "accountingunit", "unittype" };
if (limit == 1)
{
columns = new string[] { "allotid" };
}
else
{
columns = new string[] { "allotid", "accountingunit", "unittype" };
}
var database = context.Database.GetDbConnection().Database; var database = context.Database.GetDbConnection().Database;
var sql = $@"SELECT column_name FROM information_schema.COLUMNS s var sql = $@"SELECT column_name FROM information_schema.COLUMNS s
WHERE table_name = @table_name AND TABLE_SCHEMA = @database AND lower(column_name) in @columns;"; WHERE table_name = @table_name AND TABLE_SCHEMA = @database AND lower(column_name) in @columns;";
......
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Linq.Expressions; using System.Linq.Expressions;
using System.Reflection.PortableExecutable;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using static Performance.DtoModels.ManagementDept;
namespace Performance.Services namespace Performance.Services
{ {
...@@ -1353,7 +1355,7 @@ public HandsonTableBase QueryHandsCustom(CustomPagingRequest request) ...@@ -1353,7 +1355,7 @@ public HandsonTableBase QueryHandsCustom(CustomPagingRequest request)
ColHeaders = new List<string>(), ColHeaders = new List<string>(),
}; };
var jsonData = JsonHelper.Serialize(_perforReport.QueryCustom(request, true, false).DataList); var jsonData = JsonHelper.Serialize(_perforReport.QueryCustom(request, dicCustom.Select(w => w.Name).ToList()).DataList);
var data = JsonHelper.Deserialize<List<Dictionary<string, string>>>(jsonData); var data = JsonHelper.Deserialize<List<Dictionary<string, string>>>(jsonData);
var headDic = new List<Dictionary<string, object>>(); var headDic = new List<Dictionary<string, object>>();
...@@ -1479,6 +1481,12 @@ public ApiResponse CustomNewcopy(CustomNewcopyData request) ...@@ -1479,6 +1481,12 @@ public ApiResponse CustomNewcopy(CustomNewcopyData request)
_perallotRepository.ProcCustomTableNewcopy(request.TableName, request.AllotId, prevAllotId); _perallotRepository.ProcCustomTableNewcopy(request.TableName, request.AllotId, prevAllotId);
return new ApiResponse(ResponseType.OK); return new ApiResponse(ResponseType.OK);
} }
/// <summary>
/// 自定义表显示
/// </summary>
/// <param name="userId"></param>
/// <param name="request"></param>
/// <returns></returns>
public ApiResponse QueryCustom(int userId, CustomPagingRequest request) public ApiResponse QueryCustom(int userId, CustomPagingRequest request)
{ {
var heads = _perforReport.QueryCustomColumn(request.TableName); var heads = _perforReport.QueryCustomColumn(request.TableName);
...@@ -1507,18 +1515,22 @@ public ApiResponse QueryCustom(int userId, CustomPagingRequest request) ...@@ -1507,18 +1515,22 @@ public ApiResponse QueryCustom(int userId, CustomPagingRequest request)
{ {
Heads = headList.ToList() Heads = headList.ToList()
}; };
if (request.Limit == 1)
List<string> columns = result.Heads.Select(t => t.Column).Distinct().ToList();
if (request.Limit == (int)CustomTableLimitation.无限制)
{ {
request.QuerySearch = null; result.Datas = _perforReport.QueryCustom(request, columns);
result.Datas = _perforReport.QueryCustom(request, true, isView);
} }
else else
{ {
var unitTypes = UnitTypeUtil.GetMaps(roleType); var unitTypes = UnitTypeUtil.GetMaps(roleType);
if (unitTypes.Any()) if (unitTypes.Any())
result.Datas = _perforReport.QueryCustom(request.TableName, request.AllotId, user?.Department ?? "", unitTypes, request.PageIndex, request.PageSize, isView); result.Datas = _perforReport.QueryCustom( user?.Department ?? "", unitTypes, request, columns);
else else
result.Datas = _perforReport.QueryCustom(request, false, isView); {
result.Datas = _perforReport.QueryCustom(request, columns);
}
} }
...@@ -1567,6 +1579,8 @@ public string CustomDownloadFile(int userId, CustomPagingRequest request, per_al ...@@ -1567,6 +1579,8 @@ public string CustomDownloadFile(int userId, CustomPagingRequest request, per_al
string filepath = Path.Combine(dpath, filename); string filepath = Path.Combine(dpath, filename);
FileStream stream = new FileStream(filepath, FileMode.Create); FileStream stream = new FileStream(filepath, FileMode.Create);
var customResponses = (CustomResponse)QueryCustom(userId, request).Data;
var user = _userService.GetUser(userId); var user = _userService.GetUser(userId);
var roleType = _roleService.GetUserRole(userId)?.FirstOrDefault()?.Type ?? 0; var roleType = _roleService.GetUserRole(userId)?.FirstOrDefault()?.Type ?? 0;
...@@ -1574,17 +1588,17 @@ public string CustomDownloadFile(int userId, CustomPagingRequest request, per_al ...@@ -1574,17 +1588,17 @@ public string CustomDownloadFile(int userId, CustomPagingRequest request, per_al
if (heads != null && heads.Any(w => string.IsNullOrEmpty(w.Comment))) if (heads != null && heads.Any(w => string.IsNullOrEmpty(w.Comment)))
heads.RemoveAll(w => string.IsNullOrEmpty(w.Comment)); heads.RemoveAll(w => string.IsNullOrEmpty(w.Comment));
var data = new List<dynamic>(); var data = customResponses.Datas.DataList;
if (request.Limit == 1) //if (request.Limit == (int)CustomTableLimitation.无限制)
{ //{
request.QuerySearch = null; // request.QuerySearch = null;
data = _perforReport.QueryCustom(request.TableName, request.AllotId, null, null) ?? new List<dynamic>(); // data = _perforReport.QueryCustom(request.TableName, request.AllotId, null, null) ?? new List<dynamic>();
} //}
else //else
{ //{
var unitTypes = UnitTypeUtil.GetMaps(roleType); // var unitTypes = UnitTypeUtil.GetMaps(roleType);
data = _perforReport.QueryCustom(request.TableName, request.AllotId, user?.Department ?? "", unitTypes) ?? new List<dynamic>(); // data = _perforReport.QueryCustom(request.TableName, request.AllotId, user?.Department ?? "", unitTypes) ?? new List<dynamic>();
} //}
try try
......
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