From 0fc176a6783597c6e3c885a76f0466d271091538 Mon Sep 17 00:00:00 2001 From: zhangbin <460190368@qq.com> Date: Thu, 10 Apr 2025 16:08:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E5=B1=82=E6=A0=91=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=92=8C=E5=AF=BC=E5=87=BA=E6=97=B6=E5=80=99=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplicationManagementApp.cs | 128 +++++++++++++++++- .../DataMaintenance/Request/TableDataReq.cs | 26 ++++ .../ApplicationDataController.cs | 40 +++++- 3 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 OpenAuth.App/ServiceApp/DataMaintenance/Request/TableDataReq.cs diff --git a/OpenAuth.App/ServiceApp/DataMaintenance/ApplicationManagementApp.cs b/OpenAuth.App/ServiceApp/DataMaintenance/ApplicationManagementApp.cs index 9004fb7..de27b2f 100644 --- a/OpenAuth.App/ServiceApp/DataMaintenance/ApplicationManagementApp.cs +++ b/OpenAuth.App/ServiceApp/DataMaintenance/ApplicationManagementApp.cs @@ -1,19 +1,24 @@ using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.Wordprocessing; using Infrastructure; using OpenAuth.App.Base.Tree; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.Request; +using OpenAuth.App.ServiceApp.DataMaintenance.Request; using OpenAuth.Repository; using OpenAuth.Repository.Core; using OpenAuth.Repository.Domain.DataMaintenance; using SqlSugar; using System; +using System.Collections; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using Yitter.IdGenerator; +using static NPOI.HSSF.UserModel.HeaderFooter; namespace OpenAuth.App.ServiceApp.DataMaintenance { @@ -34,7 +39,7 @@ namespace OpenAuth.App.ServiceApp.DataMaintenance /// /// /// - public async Task>> GetApplicationList(string name) + public async Task>> GetApplicationList(string name, int isCatalogue) { using (var db = UnitWork.CreateContext()) { @@ -68,6 +73,11 @@ namespace OpenAuth.App.ServiceApp.DataMaintenance { baseQuery = baseQuery.Where(a => a.ApplicationName.Contains(name)); } + //服务过滤 + if (isCatalogue != 0) + { + baseQuery = baseQuery.Where(a => a.IsServer == 0); + } // 执行查询并构建树形结构 var query = await baseQuery.Select().ToListAsync(); @@ -131,5 +141,121 @@ namespace OpenAuth.App.ServiceApp.DataMaintenance }; return result; } + //获取数据库表名及注释 + public async Task> GetGeomTableList(PageReq req) + { + using (var db = UnitWork.CreateContext()) + { + var query = await db.Db.Ado.GetDataTableAsync(@" + SELECT t.""table_name"", pg_catalog.obj_description(c.oid) AS table_comment + FROM information_schema.tables t JOIN pg_catalog.pg_class c ON c.relname = t.""table_name"" + WHERE t.table_schema = 'public' AND EXISTS ( SELECT 1 + FROM information_schema.columns col + WHERE col.""table_name"" = t.""table_name"" + AND col.table_schema = t.table_schema + AND col.data_type = 'USER-DEFINED' + AND col.udt_name = 'geometry');"); + + return new Response() + { + Result = query, + }; + } + } + //查询一张表里的所有数据 + public async Task>>> GetDataList(TableDataReq tableDataReq) + { + using (var db = UnitWork.CreateContext()) + { + StringBuilder stringBuilder = new StringBuilder(); + RefAsync totalNumber = 0; + var query = db.Db.Queryable().AS(tableDataReq.TableName);//没实体一样 + // 构建过滤条件 + foreach (var filter in tableDataReq.Filter) + { + // 判断字段类型 + if (filter.Type == "int") + { + query.Where(BuildIntCondition(filter.Field, filter.Operator, filter.Value)); + } + else + { + query.Where(BuildStringCondition(filter.Field, filter.Operator, filter.Value)); + } + } + var fields = string.Join(",", tableDataReq.Field.Select(f => $"\"{f}\"")); + var dataList = await query.Select(fields).ToPageListAsync(tableDataReq.page, tableDataReq.limit, totalNumber); + return new Response>> + { + Result = new PageInfo> { Items = dataList, Total = totalNumber } + }; + } + } + //拼接int类型的条件 + private static string BuildIntCondition(string column, string operators, string value) + { + if (operators == "大于") + { + return $"\"{column}\" > {value}"; + } + else if (operators == "小于") + { + return $"\"{column}\" < {value}"; + } + else if (operators == "大于等于") + { + return $"\"{column}\" > {value}"; + } + else if (operators == "小于等于") + { + return $"\"{column}\" > {value}"; + } + else if (operators == "介于") + { + var range = value.Split(','); + if (int.TryParse(range[0], out int lower) && int.TryParse(range[1], out int upper)) + { + return $"\"{column}\" BETWEEN {lower} AND {upper}"; + } + else + { + throw new ArgumentException("无效的范围值"); + } + } + else + { + return $"\"{column}\" = {value}"; + } + } + //拼接string类型的条件 + private static string BuildStringCondition(string column, string operators, string value) + { + if (operators.StartsWith("包含")) + { + return $"\"{column}\" LIKE '%{value}%'"; + } + else if (operators.StartsWith("不包含")) + { + return $"\"{column}\" NOT LIKE '%{value}%'"; + } + else if (operators.StartsWith("以开头")) + { + return $"\"{column}\" LIKE '{value}%'"; + } + else if (operators.StartsWith("以结尾")) + { + return $"\"{column}\" LIKE '%{value}'"; + } + else + { + return $"\"{column}\" = '{value}'"; + } + } + + #region 导出数据 + //导出Excel + + + #endregion } } diff --git a/OpenAuth.App/ServiceApp/DataMaintenance/Request/TableDataReq.cs b/OpenAuth.App/ServiceApp/DataMaintenance/Request/TableDataReq.cs new file mode 100644 index 0000000..36d14f2 --- /dev/null +++ b/OpenAuth.App/ServiceApp/DataMaintenance/Request/TableDataReq.cs @@ -0,0 +1,26 @@ +using OpenAuth.App.BaseApp.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenAuth.App.ServiceApp.DataMaintenance.Request +{ + public class TableDataReq : PageReq + { + //表名 + public string TableName { get; set; } + //过滤条件 + public List Filter { get; set; } + //需要查询的字段 + public List Field { get; set; } + } + public class Filter + { + public string Field { get; set; } = string.Empty; + public string Value { get; set; } = string.Empty; + public string Operator { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; + } +} diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/DataMaintenance/ApplicationDataController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/DataMaintenance/ApplicationDataController.cs index 2cb8b68..d4f0993 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/DataMaintenance/ApplicationDataController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/DataMaintenance/ApplicationDataController.cs @@ -1,9 +1,12 @@ using Infrastructure; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using OpenAuth.App.BaseApp.Base; using OpenAuth.App.ServiceApp.DataMaintenance; +using OpenAuth.App.ServiceApp.DataMaintenance.Request; using OpenAuth.Repository.Domain.DataMaintenance; using OpenAuth.WebApi.Model.CustomAttribute; +using System.Data; namespace OpenAuth.WebApi.Controllers.ServiceControllers.DataMaintenance { @@ -24,11 +27,13 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.DataMaintenance /// /// 查询应用列表 /// + /// 目录或服务名称 + /// 是否只查询目录 /// [HttpGet] - public async Task>> GetApplicationList(string name) + public async Task>> GetApplicationList(string name, int isCatalogue) { - return await _app.GetApplicationList(name); + return await _app.GetApplicationList(name, isCatalogue); } /// /// 添加应用 @@ -57,5 +62,36 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers.DataMaintenance { return await _app.Delete(id); } + /// + /// 获取数据库表名及注释 + /// + /// + /// + [HttpPost] + public async Task> GetGeomTableList(PageReq req) + { + return await _app.GetGeomTableList(req); + } + /// + /// 查询数据 + /// + /// + /// + [HttpPost] + [AllowAnonymous] + public async Task>>> GetDataList(TableDataReq tableDataReq) + { + var result = new Response>>(); + try + { + result = await _app.GetDataList(tableDataReq); + } + catch (Exception ex) + { + result.Code = 500; + result.Message = ex.Message; + } + return result; + } } }