Commit 4cecffe9 by wyc

自定义表接口修改

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