using Castle.Core.Internal; using ClosedXML.Excel; using DocumentFormat.OpenXml.Drawing; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml.Wordprocessing; using Infrastructure; using Infrastructure.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using NUnit.Framework.Internal.Execution; using OpenAuth.App.Interface; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json.Nodes; using System.Threading.Tasks; namespace OpenAuth.App { public class BasicTableService { ISqlSugarClient client; IAuth auth; public BasicTableService(ISqlSugarClient client,IAuth auth) { this.client = client; this.auth = auth; } /// /// 创建表 /// /// /// [HttpPost] public string CreateTable([FromBody] CreateTableReq req) { string tableName = req.TableName; List tableInfo = req.TableInfos; if(tableName == null||tableInfo.Count==0) { return "数据不能为空"; } string sql = @"CREATE TABLE ""public""." + tableName+"("+ "id varchar(255) COLLATE \"pg_catalog\".\"default\" NOT NULL,"; string explanation = ""; int type = 0; for (int i = 0; i < tableInfo.Count; i++) { TableInfo table = tableInfo[i]; if ("id".Equals(table.Name.ToLower())){ continue; } sql = sql +table.Name+" "+ table.Type; if (!table.Name.IsNullOrEmpty()) { explanation = explanation + "COMMENT ON COLUMN \"public\"." + tableName + "." + table.Name + " Is "+"'"+ table.Explanation+"'"+";" ; } if ("varchar".Equals(table.Name.ToLower())) { sql = sql +"("+255+")"; } if (table.Type.Contains("geom")) { type = 1; } /*if (table.IsNull) { sql = sql+" "+"NOT NUll"; }*/ sql = sql + ","; if (tableInfo.Count-1==i) { sql = sql + "CONSTRAINT "+ tableName +"_pkey PRIMARY KEY (\"id\"));"; } } Console.WriteLine(sql); int count = client.Ado.ExecuteCommand(sql); Console.WriteLine(count); string sql1 = "ALTER TABLE \"public\"." + tableName+ " OWNER TO \"postgres\""; client.Ado.ExecuteCommand(sql1); addExplain(explanation); SysUser user = auth.GetCurrentUser().User; string sql22 = "insert into table_record (\"TableName\",\"Type\",\"ColumnJson\",\"CreateUser\") values('" + tableName+"'," + type+",'"+ String.Join(":",tableInfo.Select( p=> $"{p.Name},{p.Type},{p.Explanation}"))+ "','"+user.Account+"')"; client.Ado.ExecuteCommand(sql22); return "创建成功"; } [HttpPost] public string CreateView([FromBody] CreateViewReq req) { int count = client.Ado.ExecuteCommand(req.sql); return "创建成功"; } [HttpPost] public List UploadExcel(UploadExcelReq req) { using (var workbook = new XLWorkbook(req.file.OpenReadStream())){ string tableName = req.tableName; var wooksheet = workbook.Worksheet(1); IXLRows row = wooksheet.RowsUsed(); List rowCells = row.ToList(); IXLRow row1 = rowCells[0]; IXLCells cells = row1.CellsUsed(); string sqltable = @"CREATE TABLE if not exists ""public""." + "table_relation_record " + "(" + "id varchar(255) COLLATE \"pg_catalog\".\"default\" NOT NULL," + "name varchar(32) COLLATE \"pg_catalog\".\"default\"," + "relation text COLLATE \"pg_catalog\".\"default\","+ " CONSTRAINT \"table_relation_record_pkey\" PRIMARY KEY (\"id\"))\r\n;" + "ALTER TABLE \"public\".\"table_relation_record\" OWNER TO \"postgres\";"; addExplain(sqltable); string sql = @"CREATE TABLE ""public""." + tableName + "(" + "id varchar(255) COLLATE \"pg_catalog\".\"default\" NOT NULL,"; string explanation = ""; List listTableInfo = new List(); int k = 0; JsonObject json = new JsonObject(); foreach (IXLCell cell in row1.CellsUsed()) { if (cell.GetString().IsNullOrEmpty()) { break;} json.Add(cell.GetString(), "cloum" + k); TableInfo tableInfo = new TableInfo(); tableInfo.Name = "cloum" + k; tableInfo.Type = "varchar"; // tableInfo.Length = 255; tableInfo.Explanation = cell.GetString(); listTableInfo.Add(tableInfo); sql = sql + "cloum" + k + " " + "varchar(255),"; explanation = explanation + "COMMENT ON COLUMN \"public\"." + tableName + "." + "cloum" + k + " Is " + "'" + cell.GetString() + "'" + ";"; k++; } Dictionary dict = new Dictionary(); dict.Add("id", Guid.NewGuid()); dict.Add("name", tableName); dict.Add("relation", json.ToJsonString()); client.Insertable(dict).AS("table_relation_record").ExecuteCommand(); sql = sql + "CONSTRAINT " + tableName + "_pkey PRIMARY KEY (\"id\"));"; string sql1 = "ALTER TABLE \"public\"." + tableName + " OWNER TO \"postgres\""; addExplain(sql); addExplain(sql1); addExplain(explanation); var count = wooksheet.RowCount(); List> listmap = new List>(); foreach (IXLRow rowValue in wooksheet.RowsUsed()) { if (rowValue.RowNumber() == 1) { continue; } Dictionary map = new Dictionary(); map.Add("id", Guid.NewGuid()); int g = 0; foreach (IXLCell cell in rowValue.CellsUsed()) { map.Add("cloum" + g, cell.GetString()); g++; } listmap.Add(map); } client.Insertable(listmap).AS(tableName).ExecuteCommand(); return listTableInfo; } } [HttpPost] public string UpdateTable([FromBody] CreateTableReq req) { List infos = req.TableInfos; string sql = ""; foreach (TableInfo info in infos) { if (!info.YuanName.IsNullOrEmpty()) { sql = sql + @"ALTER TABLE ""public""."+req.TableName+"RENAME COLUMN"+info.YuanName + " TO " + info.Name+ ";"; } } if (!sql.IsNullOrEmpty()) { addExplain(sql); } return "创建成功"; } public void addExplain(String sql) { client.Ado.ExecuteCommand(sql); } public bool CheckTableExist(string tableName) { string sql = "SELECT COUNT(*) FROM information_schema.tables WHERE table_name = '" + tableName + "';"; int count = client.Ado.GetInt(sql); if (count > 0) { return true; } else { return false; } } } }