From 5959bae57b9f32fc844cf8dd84c9ba8d7292ae9d Mon Sep 17 00:00:00 2001 From: owenchen Date: Tue, 12 May 2026 10:32:46 +0800 Subject: [PATCH] ow --- CloudBuilder.CodeGenerator.sln | 25 + .../17.14.1641.39856/CodeChunks.db | Bin 0 -> 176128 bytes .../17.14.1641.39856/SemanticSymbols.db | Bin 0 -> 151552 bytes .../DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 183101 bytes .../v17/.futdcache.v2 | Bin 0 -> 134 bytes .../.vs/CloudBuilder.CodeGenerator/v17/.suo | Bin 0 -> 4608 bytes ...cloudbuilder.codegenerator.metadata.v9.bin | Bin 0 -> 1216 bytes ...cloudbuilder.codegenerator.projects.v9.bin | Bin 0 -> 26824 bytes .../cloudbuilder.codegenerator.strings.v9.bin | Bin 0 -> 128699 bytes .../CloudBuilder.CodeGenerator.csproj | 69 +++ .../CloudBuilder.CodeGenerator.csproj.user | 23 + .../Config/ToolInitConfig.cs | 95 ++++ .../Config/tool-init-config.xml | 354 ++++++++++++ .../ConfigUserControl.Designer.cs | 527 ++++++++++++++++++ .../ConfigUserControl.cs | 255 +++++++++ .../ConfigUserControl.resx | 123 ++++ CloudBuilder.CodeGenerator/Data/ClassInfo.cs | 86 +++ CloudBuilder.CodeGenerator/Data/ModelData.cs | 28 + CloudBuilder.CodeGenerator/Data/SysTable.cs | 14 + .../Entity/CodeGeneratorRegistEntity.auto.cs | 39 ++ .../Entity/SysTableSchemaViewEntity.auto.cs | 134 +++++ .../MainFunctionView.Designer.cs | 90 +++ .../MainFunctionView.cs | 103 ++++ .../MainFunctionView.resx | 123 ++++ .../OperationUserControl.Designer.cs | 178 ++++++ .../OperationUserControl.cs | 286 ++++++++++ .../OperationUserControl.resx | 120 ++++ .../OutputUserControl.Designer.cs | 93 ++++ .../OutputUserControl.cs | 21 + .../OutputUserControl.resx | 120 ++++ CloudBuilder.CodeGenerator/Program.cs | 29 + .../Properties/Resources.Designer.cs | 63 +++ .../Properties/Resources.resx | 120 ++++ .../TableControl.Designer.cs | 418 ++++++++++++++ CloudBuilder.CodeGenerator/TableControl.cs | 191 +++++++ CloudBuilder.CodeGenerator/TableControl.resx | 129 +++++ .../TemplateUserControl.Designer.cs | 168 ++++++ .../TemplateUserControl.cs | 37 ++ .../TemplateUserControl.resx | 120 ++++ .../Utility/RazorEngineHelper.cs | 302 ++++++++++ CloudBuilder.CodeGenerator/appsettings.json | 23 + CodeGenerator.sln | 25 + .../17.14.1641.39856/CodeChunks.db | Bin 0 -> 81920 bytes .../17.14.1641.39856/SemanticSymbols.db | Bin 0 -> 53248 bytes .../DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 169720 bytes .../.vs/CodeGenerator/v17/.futdcache.v2 | Bin 0 -> 108 bytes CodeGenerator/.vs/CodeGenerator/v17/.suo | Bin 0 -> 4608 bytes .../codegenerator.metadata.v9.bin | Bin 0 -> 1185 bytes .../codegenerator.projects.v9.bin | Bin 0 -> 26457 bytes .../codegenerator.strings.v9.bin | Bin 0 -> 123866 bytes CodeGenerator/CodeGenerator.csproj | 50 ++ CodeGenerator/Config/tool-init-config.xml | 300 ++++++++++ CodeGenerator/Program.cs | 180 ++++++ CodeGenerator/Properties/launchSettings.json | 8 + CodeGenerator/appsettings.json | 83 +++ Lib/CloudBuilder.Core.dll | Bin 0 -> 224768 bytes 56 files changed, 5152 insertions(+) create mode 100644 CloudBuilder.CodeGenerator.sln create mode 100644 CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/CopilotIndices/17.14.1641.39856/CodeChunks.db create mode 100644 CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/CopilotIndices/17.14.1641.39856/SemanticSymbols.db create mode 100644 CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/DesignTimeBuild/.dtbcache.v2 create mode 100644 CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/v17/.futdcache.v2 create mode 100644 CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/v17/.suo create mode 100644 CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.metadata.v9.bin create mode 100644 CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.projects.v9.bin create mode 100644 CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.strings.v9.bin create mode 100644 CloudBuilder.CodeGenerator/CloudBuilder.CodeGenerator.csproj create mode 100644 CloudBuilder.CodeGenerator/CloudBuilder.CodeGenerator.csproj.user create mode 100644 CloudBuilder.CodeGenerator/Config/ToolInitConfig.cs create mode 100644 CloudBuilder.CodeGenerator/Config/tool-init-config.xml create mode 100644 CloudBuilder.CodeGenerator/ConfigUserControl.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/ConfigUserControl.cs create mode 100644 CloudBuilder.CodeGenerator/ConfigUserControl.resx create mode 100644 CloudBuilder.CodeGenerator/Data/ClassInfo.cs create mode 100644 CloudBuilder.CodeGenerator/Data/ModelData.cs create mode 100644 CloudBuilder.CodeGenerator/Data/SysTable.cs create mode 100644 CloudBuilder.CodeGenerator/Entity/CodeGeneratorRegistEntity.auto.cs create mode 100644 CloudBuilder.CodeGenerator/Entity/SysTableSchemaViewEntity.auto.cs create mode 100644 CloudBuilder.CodeGenerator/MainFunctionView.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/MainFunctionView.cs create mode 100644 CloudBuilder.CodeGenerator/MainFunctionView.resx create mode 100644 CloudBuilder.CodeGenerator/OperationUserControl.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/OperationUserControl.cs create mode 100644 CloudBuilder.CodeGenerator/OperationUserControl.resx create mode 100644 CloudBuilder.CodeGenerator/OutputUserControl.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/OutputUserControl.cs create mode 100644 CloudBuilder.CodeGenerator/OutputUserControl.resx create mode 100644 CloudBuilder.CodeGenerator/Program.cs create mode 100644 CloudBuilder.CodeGenerator/Properties/Resources.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/Properties/Resources.resx create mode 100644 CloudBuilder.CodeGenerator/TableControl.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/TableControl.cs create mode 100644 CloudBuilder.CodeGenerator/TableControl.resx create mode 100644 CloudBuilder.CodeGenerator/TemplateUserControl.Designer.cs create mode 100644 CloudBuilder.CodeGenerator/TemplateUserControl.cs create mode 100644 CloudBuilder.CodeGenerator/TemplateUserControl.resx create mode 100644 CloudBuilder.CodeGenerator/Utility/RazorEngineHelper.cs create mode 100644 CloudBuilder.CodeGenerator/appsettings.json create mode 100644 CodeGenerator.sln create mode 100644 CodeGenerator/.vs/CodeGenerator/CopilotIndices/17.14.1641.39856/CodeChunks.db create mode 100644 CodeGenerator/.vs/CodeGenerator/CopilotIndices/17.14.1641.39856/SemanticSymbols.db create mode 100644 CodeGenerator/.vs/CodeGenerator/DesignTimeBuild/.dtbcache.v2 create mode 100644 CodeGenerator/.vs/CodeGenerator/v17/.futdcache.v2 create mode 100644 CodeGenerator/.vs/CodeGenerator/v17/.suo create mode 100644 CodeGenerator/.vs/ProjectEvaluation/codegenerator.metadata.v9.bin create mode 100644 CodeGenerator/.vs/ProjectEvaluation/codegenerator.projects.v9.bin create mode 100644 CodeGenerator/.vs/ProjectEvaluation/codegenerator.strings.v9.bin create mode 100644 CodeGenerator/CodeGenerator.csproj create mode 100644 CodeGenerator/Config/tool-init-config.xml create mode 100644 CodeGenerator/Program.cs create mode 100644 CodeGenerator/Properties/launchSettings.json create mode 100644 CodeGenerator/appsettings.json create mode 100644 Lib/CloudBuilder.Core.dll diff --git a/CloudBuilder.CodeGenerator.sln b/CloudBuilder.CodeGenerator.sln new file mode 100644 index 0000000..6b874df --- /dev/null +++ b/CloudBuilder.CodeGenerator.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.37111.16 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CloudBuilder.CodeGenerator", "CloudBuilder.CodeGenerator\CloudBuilder.CodeGenerator.csproj", "{A905410A-CD69-B6DB-264C-5796F8D57CE7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A905410A-CD69-B6DB-264C-5796F8D57CE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A905410A-CD69-B6DB-264C-5796F8D57CE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A905410A-CD69-B6DB-264C-5796F8D57CE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A905410A-CD69-B6DB-264C-5796F8D57CE7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {467DD073-1E3D-4419-B580-A5A324C45BDE} + EndGlobalSection +EndGlobal diff --git a/CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/CopilotIndices/17.14.1641.39856/CodeChunks.db b/CloudBuilder.CodeGenerator/.vs/CloudBuilder.CodeGenerator/CopilotIndices/17.14.1641.39856/CodeChunks.db new file mode 100644 index 0000000000000000000000000000000000000000..3b0f44cc1c1102f9802fd1d437824b2e42878ccc GIT binary patch literal 176128 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 $f4Y*`|(M1u2WiLo+jEi^=luo8~PixQv`91g`w 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

ivNCgm=)}=3VPu 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 literal 0 HcmV?d00001 diff --git a/CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.metadata.v9.bin b/CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.metadata.v9.bin new file mode 100644 index 0000000000000000000000000000000000000000..17da98aaf2c50ad134697be99f4ede360a0350ab GIT binary patch literal 1216 zcmYjQX-HL35I)y2d>lMG0R)39Ew)U3XM`HL3?q2)9O66A)-F@%%igVO3DmGBOi~R@M%^ zt=+MI&rWEV9qi3+`}Niv->jq%voG+K<;y7zw?UV-6he}M)o(lWRSx~jI@DKBp|VY% zz!g(qey1`{mSTvjP&=+y+f$)#0iu&`x?>W275eFfuov1cISjKgfVcxjbVTc8ASKb< zLk2rhLqTl0@Ua?^&J?bNH!Ui851SD7P?%jPT-TMUCRcP=14HxeN`>qq%xnGCg51!F zJJK4YTx^yHg~H$Us?C#vZ=Xkx(ufd%l>8?@l|WwT%?e0wfi6i-Z!JDuhm?i!3*o`{ z3iWj!PQ)9Lw;{4D%EC(SrVpY%AgTgrs7~o1_eIruMBNASZK_Tl5Z^!{EMQ@9ss(4^ zN1==-LCiz(zs7({t<3daZ!Vk6P%78nf=O+Zf+At_q3gr>{bk2x$iXp3cR#{1w57`5H zF;8FvE_jrX31w?_@bR#dDi%SHd8N{BmMUsH z50}pA1IGaAYdJX9jDAxDpiww8gYi^nSNVikgQ%?l=F+ule{Vqb!f9oEEY6S)KcXT0 zC{m1uNDTiH(f=Hf>-Nv44B>&oBlD_cSuo)?61SDOtHj+T3q}kEn&RT39E9>aGh)GmDG!o(2wmc#NSl$iAcY}?Q@)k*Z74+` PZKr$(<&h}uq)XC&KXefr literal 0 HcmV?d00001 diff --git a/CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.projects.v9.bin b/CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.projects.v9.bin new file mode 100644 index 0000000000000000000000000000000000000000..5e8c0f1d97dca8830d16853a01aa27edfc83bfa1 GIT binary patch literal 26824 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 literal 0 HcmV?d00001 diff --git a/CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.strings.v9.bin b/CloudBuilder.CodeGenerator/.vs/ProjectEvaluation/cloudbuilder.codegenerator.strings.v9.bin new file mode 100644 index 0000000000000000000000000000000000000000..f225d955371a0d344fed456294dea4349dc86cd5 GIT binary patch literal 128699 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 + + + WinExe + net8.0-windows + enable + true + enable + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\Lib\CloudBuilder.Core.dll + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/CloudBuilder.CodeGenerator.csproj.user b/CloudBuilder.CodeGenerator/CloudBuilder.CodeGenerator.csproj.user new file mode 100644 index 0000000..96c9fcc --- /dev/null +++ b/CloudBuilder.CodeGenerator/CloudBuilder.CodeGenerator.csproj.user @@ -0,0 +1,23 @@ + + + + + UserControl + + + Form + + + UserControl + + + UserControl + + + UserControl + + + UserControl + + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/Config/ToolInitConfig.cs b/CloudBuilder.CodeGenerator/Config/ToolInitConfig.cs new file mode 100644 index 0000000..63f004f --- /dev/null +++ b/CloudBuilder.CodeGenerator/Config/ToolInitConfig.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CloudBuilder.CodeGenerator.Config +{ + public class ToolInitConfig + { + private static ToolInitConfig instance = null; + private static string filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config\\tool-init-config.xml"); + private static ToolInitConfig Load() + { + if (!System.IO.File.Exists(filename)) + { + throw new ValidationException("ToolInitConfig config file not found"); + } + + StringReader textReader = new StringReader(System.IO.File.ReadAllText(filename, Encoding.UTF8)); + XmlSerializer serializer = new XmlSerializer(typeof(ToolInitConfig)); + return (ToolInitConfig)serializer.Deserialize(textReader); + } + + public static void ClearInstance() + { + instance = null; + } + + public static ToolInitConfig GetInstance() + { + if (instance == null) + { + instance = Load(); + } + return instance; + } + + public string TemplatePath { get; set; } + public string CurrentAssembly { get; set; } + + public string Using { get; set; } + + public NamespaceObject[] NamespaceObjects { get; set; } + + public AssemblyReference[] AssemblyReferences { get; set; } + + public string[] ExculdePropertyTypes { get; set; } + + public static void Save(ToolInitConfig toolInitConfig) + { + XmlSerializer xmlSerializer = new XmlSerializer(typeof(ToolInitConfig)); + string xml = null; + + using (MemoryStream stream = new MemoryStream()) + { + StreamWriter writer = new StreamWriter(stream, Encoding.UTF8); + xmlSerializer.Serialize((TextWriter)writer, toolInitConfig); + stream.Seek(0L, SeekOrigin.Begin); + StreamReader reader = new StreamReader(stream, Encoding.UTF8); + xml = reader.ReadToEnd(); + } + + StreamWriter sw = new StreamWriter(filename, false); + sw.WriteLine(xml); + sw.Close(); + sw.Dispose(); + } + } + + public class AssemblyReference + { + public string AssemblyFileName { get; set; } + } + + public class NamespaceObject + { + public const string OUT_FILE_PATH = "OutFilePath"; + public const string ASSEMBLY = "Assembly"; + public const string NAMESPACE = "Namespace"; + + public string TemplateType { get; set; } + public string TemplateFileName { get; set; } + public string OutFilePath { get; set; } + public string Assembly { get; set; } + public string Namespace { get; set; } + + public string FileNameSuffix { get; set; } + + public string FileNamePrefix { get; set; } + + } +} diff --git a/CloudBuilder.CodeGenerator/Config/tool-init-config.xml b/CloudBuilder.CodeGenerator/Config/tool-init-config.xml new file mode 100644 index 0000000..d721b56 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Config/tool-init-config.xml @@ -0,0 +1,354 @@ + + + D:\NET8\Templates + CloudBuilder.Hr + @using CloudBuilder.CodeGenerator.Config; + @using CloudBuilder.CodeGenerator.Data; + @using CloudBuilder.CodeGenerator.Entity; + @using CloudBuilder.Core.Application.Builders; + @using CloudBuilder.Core.DatabaseAccessor.Entity; + @using CloudBuilder.Core.DependencyInjection.Form; + @using CloudBuilder.Core.Extensions; + @using CloudBuilder.Core.Utility; + @using Microsoft.Extensions.DependencyInjection; + @using System.Data; + @using System; + @using System.Reflection; + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Entity + CloudBuilder.Master + CloudBuilder.Master + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Entity + CloudBuilder.Master + CloudBuilder.Master + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Service + CloudBuilder.Master + CloudBuilder.Master + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Policy + CloudBuilder.Master + CloudBuilder.Master + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Entity + CloudBuilder.Master + CloudBuilder.Master + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\SearchCriteria + CloudBuilder.Master + CloudBuilder.Master + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master.Service + CloudBuilder.Master + CloudBuilder.Master + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Master + CloudBuilder.Master + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Master + CloudBuilder.Master.Service + CloudBuilder.Web.Entry.Controllers.Master + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\master + CloudBuilder.Master.Service + CloudBuilder.Web.Entry.Controllers.Master + .ts + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Entity + CloudBuilder.Security + CloudBuilder.Security + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Entity + CloudBuilder.Security + CloudBuilder.Security + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Service + CloudBuilder.Security + CloudBuilder.Security + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Policy + CloudBuilder.Security + CloudBuilder.Security + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Entity + CloudBuilder.Security + CloudBuilder.Security + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\SearchCriteria + CloudBuilder.Security + CloudBuilder.Security + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security.Service + CloudBuilder.Security + CloudBuilder.Security + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Security + CloudBuilder.Security + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Security + CloudBuilder.Security.Service + CloudBuilder.Web.Entry.Controllers.Security + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\security + CloudBuilder.Security.Service + CloudBuilder.Web.Entry.Controllers.Security + .ts + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Entity + CloudBuilder.Hr + CloudBuilder.Hr + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Entity + CloudBuilder.Hr + CloudBuilder.Hr + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Service + CloudBuilder.Hr + CloudBuilder.Hr + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Policy + CloudBuilder.Hr + CloudBuilder.Hr + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Entity + CloudBuilder.Hr + CloudBuilder.Hr + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\SearchCriteria + CloudBuilder.Hr + CloudBuilder.Hr + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr.Service + CloudBuilder.Hr + CloudBuilder.Hr + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Hr + CloudBuilder.Hr + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Hr + CloudBuilder.Hr.Service + CloudBuilder.Web.Entry.Controllers.Hr + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\hr + CloudBuilder.Hr.Service + CloudBuilder.Web.Entry.Controllers.Hr + .ts + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel\Entity + CloudBuilder.Novel + CloudBuilder.Novel + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel\Entity + CloudBuilder.Novel + CloudBuilder.Novel + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel\Service + CloudBuilder.Novel + CloudBuilder.Novel + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel\Policy + CloudBuilder.Novel + CloudBuilder.Novel + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel\Entity + CloudBuilder.Novel + CloudBuilder.Novel + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel\SearchCriteria + CloudBuilder.Novel + CloudBuilder.Novel + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Novel.Service + CloudBuilder.Novel + CloudBuilder.Novel + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Novel + CloudBuilder.Novel + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Novel + CloudBuilder.Novel.Service + CloudBuilder.Web.Entry.Controllers.Novel + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\Novel + CloudBuilder.Novel.Service + CloudBuilder.Web.Entry.Controllers.Novel + .ts + + + + + D:\NET8\CloudBuilder\CloudBuilder.Security.Service\bin\Debug\net8.0\CloudBuilder.Security.Service.dll + + + D:\NET8\CloudBuilder\CloudBuilder.Security\bin\Debug\net8.0\CloudBuilder.Security.dll + + + + Dictionary + + diff --git a/CloudBuilder.CodeGenerator/ConfigUserControl.Designer.cs b/CloudBuilder.CodeGenerator/ConfigUserControl.Designer.cs new file mode 100644 index 0000000..afee2bf --- /dev/null +++ b/CloudBuilder.CodeGenerator/ConfigUserControl.Designer.cs @@ -0,0 +1,527 @@ +namespace CloudBuilder.CodeGenerator +{ + partial class ConfigUserControl + { + ///

+ /// 設計工具所需的變數。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清除任何使用中的資源。 + /// + /// 如果應該處置受控資源則為 true,否則為 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 元件設計工具產生的程式碼 + + /// + /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改 + /// 這個方法的內容。 + /// + private void InitializeComponent() + { + folderBrowserDialog1 = new FolderBrowserDialog(); + kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + kryptonLabel5 = new Krypton.Toolkit.KryptonLabel(); + kryptonHeader1 = new Krypton.Toolkit.KryptonHeader(); + tableLayoutPanel1 = new TableLayoutPanel(); + outFilePathTxt = new Krypton.Toolkit.KryptonTextBox(); + outFilePathBut = new Krypton.Toolkit.KryptonButton(); + assemblyTxt = new Krypton.Toolkit.KryptonTextBox(); + kryptonLabel8 = new Krypton.Toolkit.KryptonLabel(); + templatePathTxt = new Krypton.Toolkit.KryptonTextBox(); + templatePathBut = new Krypton.Toolkit.KryptonButton(); + templateTypeTxt = new Krypton.Toolkit.KryptonTextBox(); + kryptonLabel9 = new Krypton.Toolkit.KryptonLabel(); + templateFileNameTxt = new Krypton.Toolkit.KryptonTextBox(); + kryptonHeader3 = new Krypton.Toolkit.KryptonHeader(); + kryptonLabel7 = new Krypton.Toolkit.KryptonLabel(); + assemblyComboBox = new Krypton.Toolkit.KryptonComboBox(); + templateTypeCombox = new Krypton.Toolkit.KryptonComboBox(); + kryptonHeader4 = new Krypton.Toolkit.KryptonHeader(); + dbConnTxt = new Krypton.Toolkit.KryptonTextBox(); + kryptonHeader2 = new Krypton.Toolkit.KryptonHeader(); + kryptonHeader6 = new Krypton.Toolkit.KryptonHeader(); + kryptonLabel6 = new Krypton.Toolkit.KryptonLabel(); + usingTxt = new Krypton.Toolkit.KryptonRichTextBox(); + kryptonLabel10 = new Krypton.Toolkit.KryptonLabel(); + fileNameSuffixTxt = new Krypton.Toolkit.KryptonTextBox(); + tableLayoutPanel2 = new TableLayoutPanel(); + saveConfigBut = new Krypton.Toolkit.KryptonButton(); + deleteConfigBut = new Krypton.Toolkit.KryptonButton(); + namespaceTxt = new Krypton.Toolkit.KryptonTextBox(); + kryptonLabel11 = new Krypton.Toolkit.KryptonLabel(); + fileNamePrefixTxt = new Krypton.Toolkit.KryptonTextBox(); + tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)assemblyComboBox).BeginInit(); + ((System.ComponentModel.ISupportInitialize)templateTypeCombox).BeginInit(); + tableLayoutPanel2.SuspendLayout(); + SuspendLayout(); + // + // kryptonLabel1 + // + kryptonLabel1.Location = new Point(4, 45); + kryptonLabel1.Margin = new Padding(4, 6, 4, 4); + kryptonLabel1.Name = "kryptonLabel1"; + kryptonLabel1.Size = new Size(75, 20); + kryptonLabel1.TabIndex = 0; + kryptonLabel1.Values.Text = "模板路径:"; + // + // kryptonLabel2 + // + kryptonLabel2.Location = new Point(4, 272); + kryptonLabel2.Margin = new Padding(4); + kryptonLabel2.Name = "kryptonLabel2"; + kryptonLabel2.Size = new Size(75, 20); + kryptonLabel2.TabIndex = 1; + kryptonLabel2.Values.Text = "输出路径:"; + // + // kryptonLabel3 + // + kryptonLabel3.Location = new Point(4, 303); + kryptonLabel3.Margin = new Padding(4); + kryptonLabel3.Name = "kryptonLabel3"; + kryptonLabel3.Size = new Size(62, 20); + kryptonLabel3.TabIndex = 2; + kryptonLabel3.Values.Text = "程序集:"; + // + // kryptonLabel4 + // + kryptonLabel4.Location = new Point(4, 334); + kryptonLabel4.Margin = new Padding(4); + kryptonLabel4.Name = "kryptonLabel4"; + kryptonLabel4.Size = new Size(75, 20); + kryptonLabel4.TabIndex = 3; + kryptonLabel4.Values.Text = "命名空间:"; + // + // kryptonLabel5 + // + kryptonLabel5.Location = new Point(4, 74); + kryptonLabel5.Margin = new Padding(4); + kryptonLabel5.Name = "kryptonLabel5"; + kryptonLabel5.Size = new Size(88, 20); + kryptonLabel5.TabIndex = 8; + kryptonLabel5.Values.Text = "程序集集合:"; + // + // kryptonHeader1 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader1, 4); + kryptonHeader1.Dock = DockStyle.Fill; + kryptonHeader1.Location = new Point(4, 4); + kryptonHeader1.Margin = new Padding(4); + kryptonHeader1.Name = "kryptonHeader1"; + kryptonHeader1.Size = new Size(792, 31); + kryptonHeader1.TabIndex = 12; + kryptonHeader1.Values.Description = ""; + kryptonHeader1.Values.Heading = "模块化设置"; + kryptonHeader1.Values.Image = null; + // + // tableLayoutPanel1 + // + tableLayoutPanel1.AutoSize = true; + tableLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel1.ColumnCount = 4; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F)); + tableLayoutPanel1.Controls.Add(kryptonLabel2, 0, 10); + tableLayoutPanel1.Controls.Add(kryptonLabel3, 0, 11); + tableLayoutPanel1.Controls.Add(kryptonLabel4, 0, 12); + tableLayoutPanel1.Controls.Add(outFilePathTxt, 1, 10); + tableLayoutPanel1.Controls.Add(outFilePathBut, 2, 10); + tableLayoutPanel1.Controls.Add(assemblyTxt, 1, 11); + tableLayoutPanel1.Controls.Add(kryptonHeader1, 0, 0); + tableLayoutPanel1.Controls.Add(kryptonLabel1, 0, 1); + tableLayoutPanel1.Controls.Add(kryptonLabel8, 0, 6); + tableLayoutPanel1.Controls.Add(templatePathTxt, 1, 1); + tableLayoutPanel1.Controls.Add(templatePathBut, 2, 1); + tableLayoutPanel1.Controls.Add(templateTypeTxt, 1, 6); + tableLayoutPanel1.Controls.Add(kryptonLabel9, 0, 7); + tableLayoutPanel1.Controls.Add(templateFileNameTxt, 1, 7); + tableLayoutPanel1.Controls.Add(kryptonHeader3, 0, 5); + tableLayoutPanel1.Controls.Add(kryptonLabel5, 0, 2); + tableLayoutPanel1.Controls.Add(kryptonLabel7, 0, 4); + tableLayoutPanel1.Controls.Add(assemblyComboBox, 1, 2); + tableLayoutPanel1.Controls.Add(templateTypeCombox, 1, 4); + tableLayoutPanel1.Controls.Add(kryptonHeader4, 0, 3); + tableLayoutPanel1.Controls.Add(dbConnTxt, 1, 21); + tableLayoutPanel1.Controls.Add(kryptonHeader2, 0, 19); + tableLayoutPanel1.Controls.Add(kryptonHeader6, 0, 17); + tableLayoutPanel1.Controls.Add(kryptonLabel6, 0, 21); + tableLayoutPanel1.Controls.Add(usingTxt, 0, 18); + tableLayoutPanel1.Controls.Add(kryptonLabel10, 0, 9); + tableLayoutPanel1.Controls.Add(fileNameSuffixTxt, 1, 9); + tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 1, 15); + tableLayoutPanel1.Controls.Add(namespaceTxt, 1, 12); + tableLayoutPanel1.Controls.Add(kryptonLabel11, 0, 8); + tableLayoutPanel1.Controls.Add(fileNamePrefixTxt, 1, 8); + tableLayoutPanel1.Dock = DockStyle.Fill; + tableLayoutPanel1.Location = new Point(0, 0); + tableLayoutPanel1.Margin = new Padding(4); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 22; + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 8F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 8F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.Size = new Size(800, 600); + tableLayoutPanel1.TabIndex = 1; + // + // outFilePathTxt + // + outFilePathTxt.Location = new Point(100, 272); + outFilePathTxt.Margin = new Padding(4); + outFilePathTxt.Name = "outFilePathTxt"; + outFilePathTxt.Size = new Size(599, 23); + outFilePathTxt.TabIndex = 4; + // + // outFilePathBut + // + outFilePathBut.AutoSize = true; + outFilePathBut.Location = new Point(707, 272); + outFilePathBut.Margin = new Padding(4); + outFilePathBut.Name = "outFilePathBut"; + outFilePathBut.Size = new Size(89, 22); + outFilePathBut.TabIndex = 5; + outFilePathBut.Values.Text = "选择文件夹(...)"; + outFilePathBut.Click += outFilePathBut_Click; + // + // assemblyTxt + // + assemblyTxt.Location = new Point(100, 303); + assemblyTxt.Margin = new Padding(4); + assemblyTxt.Name = "assemblyTxt"; + assemblyTxt.Size = new Size(347, 23); + assemblyTxt.TabIndex = 9; + // + // kryptonLabel8 + // + kryptonLabel8.Location = new Point(4, 148); + kryptonLabel8.Margin = new Padding(4); + kryptonLabel8.Name = "kryptonLabel8"; + kryptonLabel8.Size = new Size(75, 20); + kryptonLabel8.TabIndex = 3; + kryptonLabel8.Values.Text = "模板名称:"; + // + // templatePathTxt + // + templatePathTxt.Location = new Point(100, 43); + templatePathTxt.Margin = new Padding(4); + templatePathTxt.Name = "templatePathTxt"; + templatePathTxt.Size = new Size(599, 23); + templatePathTxt.TabIndex = 4; + // + // templatePathBut + // + templatePathBut.AutoSize = true; + templatePathBut.Location = new Point(707, 43); + templatePathBut.Margin = new Padding(4); + templatePathBut.Name = "templatePathBut"; + templatePathBut.Size = new Size(89, 22); + templatePathBut.TabIndex = 5; + templatePathBut.Values.Text = "选择文件夹(...)"; + templatePathBut.Click += templatePathBut_Click; + // + // templateTypeTxt + // + templateTypeTxt.Location = new Point(100, 148); + templateTypeTxt.Margin = new Padding(4); + templateTypeTxt.Name = "templateTypeTxt"; + templateTypeTxt.Size = new Size(347, 23); + templateTypeTxt.TabIndex = 4; + // + // kryptonLabel9 + // + kryptonLabel9.Location = new Point(4, 179); + kryptonLabel9.Margin = new Padding(4); + kryptonLabel9.Name = "kryptonLabel9"; + kryptonLabel9.Size = new Size(62, 20); + kryptonLabel9.TabIndex = 3; + kryptonLabel9.Values.Text = "文件名:"; + // + // templateFileNameTxt + // + templateFileNameTxt.Location = new Point(100, 179); + templateFileNameTxt.Margin = new Padding(4); + templateFileNameTxt.Name = "templateFileNameTxt"; + templateFileNameTxt.Size = new Size(347, 23); + templateFileNameTxt.TabIndex = 4; + // + // kryptonHeader3 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader3, 3); + kryptonHeader3.Dock = DockStyle.Fill; + kryptonHeader3.Location = new Point(3, 139); + kryptonHeader3.Name = "kryptonHeader3"; + kryptonHeader3.Size = new Size(794, 2); + kryptonHeader3.TabIndex = 14; + kryptonHeader3.Values.Description = ""; + kryptonHeader3.Values.Heading = ""; + kryptonHeader3.Values.Image = null; + // + // kryptonLabel7 + // + kryptonLabel7.Location = new Point(4, 111); + kryptonLabel7.Margin = new Padding(4); + kryptonLabel7.Name = "kryptonLabel7"; + kryptonLabel7.Size = new Size(75, 20); + kryptonLabel7.TabIndex = 3; + kryptonLabel7.Values.Text = "模板名称:"; + // + // assemblyComboBox + // + assemblyComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + assemblyComboBox.DropDownWidth = 362; + assemblyComboBox.IntegralHeight = false; + assemblyComboBox.Location = new Point(100, 74); + assemblyComboBox.Margin = new Padding(4); + assemblyComboBox.Name = "assemblyComboBox"; + assemblyComboBox.Size = new Size(347, 21); + assemblyComboBox.TabIndex = 6; + assemblyComboBox.SelectionChangeCommitted += assemblyComboBox_SelectionChangeCommitted; + // + // templateTypeCombox + // + templateTypeCombox.DropDownStyle = ComboBoxStyle.DropDownList; + templateTypeCombox.DropDownWidth = 362; + templateTypeCombox.IntegralHeight = false; + templateTypeCombox.Location = new Point(100, 111); + templateTypeCombox.Margin = new Padding(4); + templateTypeCombox.Name = "templateTypeCombox"; + templateTypeCombox.Size = new Size(347, 21); + templateTypeCombox.TabIndex = 6; + templateTypeCombox.SelectionChangeCommitted += templateTypeCombox_SelectionChangeCommitted; + // + // kryptonHeader4 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader4, 3); + kryptonHeader4.Dock = DockStyle.Fill; + kryptonHeader4.Location = new Point(3, 102); + kryptonHeader4.Name = "kryptonHeader4"; + kryptonHeader4.Size = new Size(794, 2); + kryptonHeader4.TabIndex = 14; + kryptonHeader4.Values.Description = ""; + kryptonHeader4.Values.Heading = ""; + kryptonHeader4.Values.Image = null; + // + // dbConnTxt + // + tableLayoutPanel1.SetColumnSpan(dbConnTxt, 2); + dbConnTxt.Location = new Point(100, 573); + dbConnTxt.Margin = new Padding(4); + dbConnTxt.Name = "dbConnTxt"; + dbConnTxt.ReadOnly = true; + dbConnTxt.Size = new Size(696, 23); + dbConnTxt.StateCommon.Back.Color1 = Color.Silver; + dbConnTxt.TabIndex = 11; + // + // kryptonHeader2 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader2, 4); + kryptonHeader2.Dock = DockStyle.Fill; + kryptonHeader2.Location = new Point(4, 534); + kryptonHeader2.Margin = new Padding(4); + kryptonHeader2.Name = "kryptonHeader2"; + kryptonHeader2.Size = new Size(792, 31); + kryptonHeader2.TabIndex = 13; + kryptonHeader2.Values.Description = ""; + kryptonHeader2.Values.Heading = "数据库连接设置"; + kryptonHeader2.Values.Image = null; + // + // kryptonHeader6 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader6, 4); + kryptonHeader6.Dock = DockStyle.Fill; + kryptonHeader6.Location = new Point(4, 398); + kryptonHeader6.Margin = new Padding(4); + kryptonHeader6.Name = "kryptonHeader6"; + kryptonHeader6.Size = new Size(792, 31); + kryptonHeader6.TabIndex = 13; + kryptonHeader6.Values.Description = ""; + kryptonHeader6.Values.Heading = "Using设置"; + kryptonHeader6.Values.Image = null; + // + // kryptonLabel6 + // + kryptonLabel6.Location = new Point(4, 573); + kryptonLabel6.Margin = new Padding(4); + kryptonLabel6.Name = "kryptonLabel6"; + kryptonLabel6.Size = new Size(88, 20); + kryptonLabel6.TabIndex = 10; + kryptonLabel6.Values.Text = "数据库连接:"; + // + // usingTxt + // + tableLayoutPanel1.SetColumnSpan(usingTxt, 3); + usingTxt.Dock = DockStyle.Fill; + usingTxt.Location = new Point(3, 436); + usingTxt.Name = "usingTxt"; + usingTxt.Size = new Size(794, 91); + usingTxt.TabIndex = 15; + usingTxt.Text = ""; + // + // kryptonLabel10 + // + kryptonLabel10.Location = new Point(4, 241); + kryptonLabel10.Margin = new Padding(4); + kryptonLabel10.Name = "kryptonLabel10"; + kryptonLabel10.Size = new Size(75, 20); + kryptonLabel10.TabIndex = 3; + kryptonLabel10.Values.Text = "文件后缀:"; + // + // fileNameSuffixTxt + // + fileNameSuffixTxt.Location = new Point(100, 241); + fileNameSuffixTxt.Margin = new Padding(4); + fileNameSuffixTxt.Name = "fileNameSuffixTxt"; + fileNameSuffixTxt.Size = new Size(347, 23); + fileNameSuffixTxt.TabIndex = 4; + // + // tableLayoutPanel2 + // + tableLayoutPanel2.AutoSize = true; + tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel2.ColumnCount = 2; + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel2.Controls.Add(saveConfigBut, 0, 0); + tableLayoutPanel2.Controls.Add(deleteConfigBut, 1, 0); + tableLayoutPanel2.Location = new Point(96, 361); + tableLayoutPanel2.Margin = new Padding(0); + tableLayoutPanel2.Name = "tableLayoutPanel2"; + tableLayoutPanel2.RowCount = 1; + tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); + tableLayoutPanel2.Size = new Size(226, 33); + tableLayoutPanel2.TabIndex = 7; + // + // saveConfigBut + // + saveConfigBut.Location = new Point(4, 4); + saveConfigBut.Margin = new Padding(4); + saveConfigBut.Name = "saveConfigBut"; + saveConfigBut.Size = new Size(105, 25); + saveConfigBut.TabIndex = 0; + saveConfigBut.Values.Text = "保存"; + saveConfigBut.Click += saveConfigBut_Click; + // + // deleteConfigBut + // + deleteConfigBut.Location = new Point(117, 4); + deleteConfigBut.Margin = new Padding(4); + deleteConfigBut.Name = "deleteConfigBut"; + deleteConfigBut.Size = new Size(105, 25); + deleteConfigBut.TabIndex = 1; + deleteConfigBut.Values.Text = "删除"; + deleteConfigBut.Click += deleteConfigBut_Click; + // + // namespaceTxt + // + namespaceTxt.Location = new Point(100, 334); + namespaceTxt.Margin = new Padding(4); + namespaceTxt.Name = "namespaceTxt"; + namespaceTxt.Size = new Size(347, 23); + namespaceTxt.TabIndex = 4; + // + // kryptonLabel11 + // + kryptonLabel11.Location = new Point(4, 210); + kryptonLabel11.Margin = new Padding(4); + kryptonLabel11.Name = "kryptonLabel11"; + kryptonLabel11.Size = new Size(75, 20); + kryptonLabel11.TabIndex = 3; + kryptonLabel11.Values.Text = "文件前缀:"; + // + // fileNamePrefixTxt + // + fileNamePrefixTxt.Location = new Point(100, 210); + fileNamePrefixTxt.Margin = new Padding(4); + fileNamePrefixTxt.Name = "fileNamePrefixTxt"; + fileNamePrefixTxt.Size = new Size(347, 23); + fileNamePrefixTxt.TabIndex = 4; + // + // ConfigUserControl + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(tableLayoutPanel1); + Name = "ConfigUserControl"; + Size = new Size(800, 600); + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)assemblyComboBox).EndInit(); + ((System.ComponentModel.ISupportInitialize)templateTypeCombox).EndInit(); + tableLayoutPanel2.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private FolderBrowserDialog folderBrowserDialog1; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private Krypton.Toolkit.KryptonLabel kryptonLabel2; + private Krypton.Toolkit.KryptonLabel kryptonLabel3; + private Krypton.Toolkit.KryptonLabel kryptonLabel4; + private Krypton.Toolkit.KryptonLabel kryptonLabel5; + private TableLayoutPanel tableLayoutPanel1; + private Krypton.Toolkit.KryptonHeader kryptonHeader1; + private Krypton.Toolkit.KryptonLabel kryptonLabel8; + private Krypton.Toolkit.KryptonLabel kryptonLabel9; + private Krypton.Toolkit.KryptonHeader kryptonHeader3; + private Krypton.Toolkit.KryptonTextBox outFilePathTxt; + private Krypton.Toolkit.KryptonTextBox namespaceTxt; + private Krypton.Toolkit.KryptonButton outFilePathBut; + private TableLayoutPanel tableLayoutPanel2; + private Krypton.Toolkit.KryptonButton saveConfigBut; + private Krypton.Toolkit.KryptonButton deleteConfigBut; + private Krypton.Toolkit.KryptonTextBox assemblyTxt; + public Krypton.Toolkit.KryptonComboBox assemblyComboBox; + private Krypton.Toolkit.KryptonTextBox templatePathTxt; + private Krypton.Toolkit.KryptonButton templatePathBut; + private Krypton.Toolkit.KryptonTextBox templateTypeTxt; + private Krypton.Toolkit.KryptonTextBox templateFileNameTxt; + private Krypton.Toolkit.KryptonLabel kryptonLabel7; + private Krypton.Toolkit.KryptonComboBox templateTypeCombox; + private Krypton.Toolkit.KryptonHeader kryptonHeader4; + private Krypton.Toolkit.KryptonHeader kryptonHeader6; + private Krypton.Toolkit.KryptonTextBox dbConnTxt; + private Krypton.Toolkit.KryptonHeader kryptonHeader2; + private Krypton.Toolkit.KryptonLabel kryptonLabel6; + private Krypton.Toolkit.KryptonRichTextBox usingTxt; + private Krypton.Toolkit.KryptonLabel kryptonLabel10; + private Krypton.Toolkit.KryptonTextBox fileNameSuffixTxt; + private Krypton.Toolkit.KryptonLabel kryptonLabel11; + private Krypton.Toolkit.KryptonTextBox fileNamePrefixTxt; + } +} diff --git a/CloudBuilder.CodeGenerator/ConfigUserControl.cs b/CloudBuilder.CodeGenerator/ConfigUserControl.cs new file mode 100644 index 0000000..c144e0c --- /dev/null +++ b/CloudBuilder.CodeGenerator/ConfigUserControl.cs @@ -0,0 +1,255 @@ +using CloudBuilder.CodeGenerator.Config; +using CloudBuilder.Core.DatabaseAccessor; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.DependencyInjection.Form; +using CloudBuilder.Core.Utility; +using Microsoft.AspNetCore.Connections; +using Microsoft.AspNetCore.Routing.Template; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CloudBuilder.CodeGenerator +{ + public partial class ConfigUserControl : UserControl, IUserControl + { + private readonly IApplicationService app; + private readonly OperationUserControl operationUserControl; + public ToolInitConfig toolInitConfig; + public ConfigUserControl(IApplicationService app, + [FromKeyedServices("OperationUserControl")] OperationUserControl operationUserControl) + { + InitializeComponent(); + this.app = app; + this.operationUserControl = operationUserControl; + InitUserControl(); + } + + public void InitUserControl() + { + dbConnTxt.Text = app.CloudBuilder.CloudBuilderOptions.DbContexts[MasterDbContext.MASTER_DB_CONTEXT].ConnectionString; + + toolInitConfig = ToolInitConfig.GetInstance(); + + app.CloudBuilder.Services.AddSingleton(toolInitConfig); + usingTxt.Text = toolInitConfig.Using; + + assemblyComboBox.DisplayMember = "Text"; + assemblyComboBox.ValueMember = "Value"; + + List l = new List(); + foreach (NamespaceObject nso in toolInitConfig.NamespaceObjects) + { + if (l.Select(x => x.Text).Contains(nso.Assembly)) continue; + l.Add(CreateNewComboBoxItem(nso.Assembly, nso.Assembly)); + } + + DataTable dtbl = DataTableConvertor.ToDataTable(l); + assemblyComboBox.DataSource = dtbl; + + assemblyComboBox.SelectedValue = toolInitConfig.CurrentAssembly; + + templateTypeCombox.DisplayMember = "Text"; + templateTypeCombox.ValueMember = "Value"; + + NamespaceObject namespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == toolInitConfig.CurrentAssembly).FirstOrDefault(); + + l = new List(); + foreach (NamespaceObject nso in toolInitConfig.NamespaceObjects.Where(x => x.Assembly == toolInitConfig.CurrentAssembly).ToArray()) + { + if (l.Select(x => x.Text).Contains(nso.TemplateType)) continue; + l.Add(CreateNewComboBoxItem(nso.TemplateType, nso.TemplateType)); + } + + dtbl = DataTableConvertor.ToDataTable(l); + templateTypeCombox.DataSource = dtbl; + + + templateTypeCombox.SelectedValue = namespaceObject.TemplateType; + + templatePathTxt.Text = toolInitConfig.TemplatePath; + + BindData(namespaceObject); + } + + public string GetTemplateType() + { + return (string)templateTypeCombox.SelectedValue; + } + + public string GetAssembly() + { + return (string)assemblyComboBox.SelectedValue; + } + + private void BindData(NamespaceObject namespaceObject) + { + if (namespaceObject == null) + { + templateTypeCombox.SelectedIndex = -1; + fileNamePrefixTxt.Text = fileNameSuffixTxt.Text = templateTypeTxt.Text = outFilePathTxt.Text = templateFileNameTxt.Text = assemblyTxt.Text = namespaceTxt.Text = null; + return; + } + templateTypeCombox.SelectedValue= namespaceObject.TemplateType; + templateTypeTxt.Text = namespaceObject.TemplateType; + outFilePathTxt.Text = namespaceObject.OutFilePath; + templateFileNameTxt.Text = namespaceObject.TemplateFileName; + fileNameSuffixTxt.Text = namespaceObject.FileNameSuffix; + fileNamePrefixTxt.Text = namespaceObject.FileNamePrefix; + assemblyTxt.Text = namespaceObject.Assembly; + namespaceTxt.Text = namespaceObject.Namespace; + } + + public class ComboBoxItem + { + public string Text { get; set; } + public string Value { get; set; } + } + + + private ComboBoxItem CreateNewComboBoxItem(string text, string value) + { + ComboBoxItem item = new ComboBoxItem(); + item.Text = text; + item.Value = value; + + return item; + } + + private void assemblyComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + if (assemblyComboBox.SelectedValue == null) return; + NamespaceObject namespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == (string)assemblyComboBox.SelectedValue).FirstOrDefault(); + + List l = new List(); + foreach (NamespaceObject nso in toolInitConfig.NamespaceObjects.Where(x => x.Assembly == (string)assemblyComboBox.SelectedValue).ToArray()) + { + if (l.Select(x => x.Text).Contains(nso.TemplateType)) continue; + l.Add(CreateNewComboBoxItem(nso.TemplateType, nso.TemplateType)); + } + + DataTable dtbl = DataTableConvertor.ToDataTable(l); + templateTypeCombox.DataSource = dtbl; + + BindData(namespaceObject); + + ((MainFunctionView)(this.ParentForm)).SetOperationUserControl(assemblyComboBox.SelectedValue); + } + + private void templateTypeCombox_SelectionChangeCommitted(object sender, EventArgs e) + { + if (templateTypeCombox.SelectedValue == null) return; + NamespaceObject namespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == (string)assemblyComboBox.SelectedValue && x.TemplateType == (string)templateTypeCombox.SelectedValue).FirstOrDefault(); + + BindData(namespaceObject); + } + + private void saveConfigBut_Click(object sender, EventArgs e) + { + toolInitConfig.TemplatePath = templatePathTxt.Text.Trim(); + toolInitConfig.CurrentAssembly = assemblyTxt.Text.Trim(); + toolInitConfig.Using = usingTxt.Text.Trim(); + + NamespaceObject namespaceObject = new NamespaceObject(); + namespaceObject.TemplateType = templateTypeTxt.Text.Trim(); + namespaceObject.TemplateFileName = templateFileNameTxt.Text.Trim(); + namespaceObject.FileNameSuffix = fileNameSuffixTxt.Text.Trim(); + namespaceObject.FileNamePrefix = fileNamePrefixTxt.Text.Trim(); + namespaceObject.OutFilePath = outFilePathTxt.Text.Trim(); + + namespaceObject.Assembly = assemblyTxt.Text.Trim(); + namespaceObject.Namespace = namespaceTxt.Text.Trim(); + + + NamespaceObject obj = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == assemblyTxt.Text.Trim()).FirstOrDefault(); + + //如果不存在,插入 + if (obj == null) + { + List l = new List(); + l.Add(namespaceObject); + if (toolInitConfig.NamespaceObjects != null && toolInitConfig.NamespaceObjects.Length > 0) + l.AddRange(toolInitConfig.NamespaceObjects); + toolInitConfig.NamespaceObjects = l.ToArray(); + } + else + { + obj = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == assemblyTxt.Text.Trim() && x.TemplateType == templateTypeTxt.Text.Trim()).FirstOrDefault(); + if (obj == null) + { + List ls = new List(); + ls.AddRange(toolInitConfig.NamespaceObjects); + ls.Add(namespaceObject); + toolInitConfig.NamespaceObjects = ls.OrderBy(x => x.Assembly).ThenBy(x => x.TemplateType).ToArray(); + } + else + { + foreach (NamespaceObject t in toolInitConfig.NamespaceObjects) + { + if (t.Assembly != assemblyTxt.Text.Trim()) continue; + if (t.TemplateType != templateTypeTxt.Text.Trim()) continue; + t.Assembly = namespaceObject.Assembly; + t.Namespace = namespaceObject.Namespace; + t.OutFilePath = namespaceObject.OutFilePath; + t.TemplateType = namespaceObject.TemplateType; + t.TemplateFileName = namespaceObject.TemplateFileName; + t.FileNameSuffix = namespaceObject.FileNameSuffix; + t.FileNamePrefix = namespaceObject.FileNamePrefix; + } + } + } + ToolInitConfig.Save(toolInitConfig); + InitUserControl(); + ((OperationUserControl)operationUserControl).InitUserControl(); + } + + private void deleteConfigBut_Click(object sender, EventArgs e) + { + NamespaceObject obj = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == assemblyTxt.Text.Trim() && x.TemplateType == templateTypeTxt.Text.Trim()).FirstOrDefault(); + + //如果存在,删除,如果只有一个,不能删除 + if (obj != null && toolInitConfig.NamespaceObjects != null && toolInitConfig.NamespaceObjects.Length > 1) + { + toolInitConfig.NamespaceObjects = toolInitConfig.NamespaceObjects.Where(x => !(x.Assembly == obj.Assembly && x.TemplateType == obj.TemplateType)).ToArray(); + + var current = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == assemblyComboBox.Text.Trim()).FirstOrDefault(); + + if (current == null) + { + toolInitConfig.CurrentAssembly = toolInitConfig.NamespaceObjects.FirstOrDefault().Assembly; + } + + ToolInitConfig.Save(toolInitConfig); + + InitUserControl(); + ((OperationUserControl)operationUserControl).InitUserControl(); + } + else + { + MessageBox.Show("最后一个选项不能删除", "提示"); + } + + } + + private void templatePathBut_Click(object sender, EventArgs e) + { + if (folderBrowserDialog1.ShowDialog() != DialogResult.OK) return; + + templatePathTxt.Text = folderBrowserDialog1.SelectedPath; + } + + private void outFilePathBut_Click(object sender, EventArgs e) + { + if (folderBrowserDialog1.ShowDialog() != DialogResult.OK) return; + + outFilePathTxt.Text = folderBrowserDialog1.SelectedPath; + } + } +} diff --git a/CloudBuilder.CodeGenerator/ConfigUserControl.resx b/CloudBuilder.CodeGenerator/ConfigUserControl.resx new file mode 100644 index 0000000..54d100c --- /dev/null +++ b/CloudBuilder.CodeGenerator/ConfigUserControl.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/Data/ClassInfo.cs b/CloudBuilder.CodeGenerator/Data/ClassInfo.cs new file mode 100644 index 0000000..1abbe22 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Data/ClassInfo.cs @@ -0,0 +1,86 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace CloudBuilder.CodeGenerator.Data +{ + public class ClassInfo + { + public string ClassName { get; set; } + public string InterfaceName { get; set; } + public string ImplementTypeName { get; set; } + public string[] Usings { get; set; } + + public bool IsDownload { get; set; } = false; + + public ClassConstructorInfo[] ClassConstructorInfos; + + public ClassMethodInfo[] ClassMethodInfos; + + public ClassPropertyInfo[] ClassProperties; + + public ClassFieldInfo[] ClassFields; + } + + public class ClassFieldInfo + { + public bool IsValueType { get; set; } = false; + public string FieldName { get; set; } + public string FieldTypeName { get; set; } + + public string FieldValue { get; set; } + } + + public class ClassPropertyInfo + { + public bool IsValueType { get; set; } = false; + public string PropertyName { get; set; } + public string PropertyTypeName { get; set; } + } + + public class ClassConstructorInfo + { + public string ConstructorName { get; set; } + public MethodParameter[] Parameters { get; set; } + } + + public class ClassMethodInfo + { + public string MethodName { get; set; } + public string HttpName { get; set; } = "[HttpPost]"; + public string UnitOfWorkName { get; set; } = "[UnitOfWork]"; + public string AuthorizeName { get; set; } = "[AllowAnonymous]"; + public string PermissionOperate { get; set; } = "[PermissionOperate(name: {0}, operate: {1})]"; + public PermissionOperateAttribute PermissionOperateAttribute { get; set; } + public string MethodReturnName { get; set; } + public bool IsValueType { get; set; } = false; + public MethodParameter[] Parameters { get; set; } + } + + public class MethodParameter + { + public bool IsValueType { get; set; } = false; + public string ParameterName { get; set; } + public string ParameterTypeName { get; set; } + + public static bool CheckValueType(Type type) + { + var typeInfo = type.GetTypeInfo(); + if (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + // nullable type, check if the nested type is simple. + return CheckValueType(typeInfo.GetGenericArguments()[0]); + } + return typeInfo.IsPrimitive + || typeInfo.BaseType?.Name == "ValueType" + || typeInfo.IsEnum + || type.Equals(typeof(string)) + || type.Equals(typeof(DateTime)) + || type.Equals(typeof(decimal)); + } + } +} diff --git a/CloudBuilder.CodeGenerator/Data/ModelData.cs b/CloudBuilder.CodeGenerator/Data/ModelData.cs new file mode 100644 index 0000000..0b7b037 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Data/ModelData.cs @@ -0,0 +1,28 @@ +using CloudBuilder.CodeGenerator.Config; +using CloudBuilder.CodeGenerator.Data; +using CloudBuilder.CodeGenerator.Entity; +using System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Linq; +using System.Net.NetworkInformation; +using System.Text; +using System.Threading.Tasks; +using static System.Windows.Forms.LinkLabel; + +namespace CloudBuilder.CodeGenerator.Data +{ + public class ModelData + { + public SysTableSchemaViewEntity[] sysTableSchemas; + public NamespaceObject NamespaceObject; + public ClassInfo[] ClassInfos; + + public ClassInfo ClassInfo; + + public string KeyType; + + public int KeyCount; + } +} + diff --git a/CloudBuilder.CodeGenerator/Data/SysTable.cs b/CloudBuilder.CodeGenerator/Data/SysTable.cs new file mode 100644 index 0000000..1217404 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Data/SysTable.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CloudBuilder.CodeGenerator.Data +{ + public class SysTable + { + public string Selected { get; set; } = null!; + public string TableName { get; set; } = null!; + } +} diff --git a/CloudBuilder.CodeGenerator/Entity/CodeGeneratorRegistEntity.auto.cs b/CloudBuilder.CodeGenerator/Entity/CodeGeneratorRegistEntity.auto.cs new file mode 100644 index 0000000..fd5ae5b --- /dev/null +++ b/CloudBuilder.CodeGenerator/Entity/CodeGeneratorRegistEntity.auto.cs @@ -0,0 +1,39 @@ +using CloudBuilder.Core.DependencyInjection.EFCore; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace CloudBuilder.CodeGenerator.Entity +{ + public partial class CodeGeneratorRegistEntity : IMasterRegistEntityType + { + /// + /// 注入模块内的所有实体类 + /// + /// + public void RegistEntity(ModelBuilder builder) + { + string _assemblyName = Assembly.GetExecutingAssembly().GetName().Name; + //注入所有Entity实体类 + AddEntityType(builder, _assemblyName); + //如果Entity实体类不是单一主键,要单独重写注入 + RegistKeys(builder); + } + + public void AddEntityType(ModelBuilder builder, string _assemblyName) + { + RegistEntityHelper.AddMasterEntityType(builder, _assemblyName); + } + + public void RegistKeys(ModelBuilder builder) + { + //***BEGIN*** + builder.Entity(eb => { eb.HasNoKey(); }); + //***END*** + } + } +} diff --git a/CloudBuilder.CodeGenerator/Entity/SysTableSchemaViewEntity.auto.cs b/CloudBuilder.CodeGenerator/Entity/SysTableSchemaViewEntity.auto.cs new file mode 100644 index 0000000..4fe3633 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Entity/SysTableSchemaViewEntity.auto.cs @@ -0,0 +1,134 @@ +using CloudBuilder.Core.DatabaseAccessor.Entity; +using System.ComponentModel.DataAnnotations.Schema; + +namespace CloudBuilder.CodeGenerator.Entity +{ + [Table("sys_table_schema_view")] + public class SysTableSchemaViewEntity : ViewEntityBase + { + [Column("table_name")] + public string TableName { get; set; } + [Column("field_name")] + public string FieldName { get; set; } + [Column("type_name")] + public string TypeName { get; set; } + [Column("type_of_name")] + public string TypeOfName { get; set; } + [Column("max_length")] + public int MaxLength { get; set; } + [Column("scale")] + public int Scale { get; set; } + [Column("is_null_able")] + public string IsNullAble { get; set; } + [Column("field_default_value")] + public string FieldDefaultValue { get; set; } + [Column("xtype")] + public string Xtype { get; set; } + [Column("find_by")] + public int FindBy { get; set; } + [Column("operation")] + public int Operation { get; set; } + [Column("pk")] + public int Pk { get; set; } + [Column("pk_name")] + public string PkName { get; set; } + [Column("is_identity")] + public int IsIdentity { get; set; } + [Column("colid")] + public int Colid { get; set; } + + + public const string TABLE_NAME = "TableName"; + public const string FIELD_NAME = "FieldName"; + public const string TYPE_NAME = "TypeName"; + public const string TYPE_OF_NAME = "TypeOfName"; + public const string MAX_LENGTH = "MaxLength"; + public const string SCALE = "Scale"; + public const string IS_NULL_ABLE = "IsNullAble"; + public const string FIELD_DEFAULT_VALUE = "FieldDefaultValue"; + public const string XTYPE = "Xtype"; + public const string FIND_BY = "FindBy"; + public const string OPERATION = "operation"; + public const string PK = "Pk"; + public const string PK_NAME = "PkName"; + public const string IS_IDENTITY = "IsIdentity"; + public const string COLID = "Colid"; + + public const string DB_NAME_SYS_TABLE_SCHEMA = "sys_table_schema_view"; + + public const string DB_NAME_FIELDS = "table_name,field_name,type_name,type_of_name,max_length,scale,is_null_able,field_default_value,xtype,find_by,operation,pk,pk_name,is_identity,colid"; + + public const string DB_TABLE_NAME = "table_name"; + public const string DB_FIELD_NAME = "field_name"; + public const string DB_TYPE_NAME = "type_name"; + public const string DB_TYPE_OF_NAME = "type_of_name"; + public const string DB_MAX_LENGTH = "max_length"; + public const string DB_SCALE = "scale"; + public const string DB_IS_NULL_ABLE = "is_null_able"; + public const string DB_FIELD_DEFAULT_VALUE = "field_default_value"; + public const string DB_XTYPE = "xtype"; + public const string DB_FIND_BY = "find_by"; + public const string DB_OPERATION = "operation"; + public const string DB_PK = "pk"; + public const string DB_PK_NAME = "pk_name"; + public const string DB_IS_IDENTITY = "is_identity"; + public const string DB_COLID = "colid"; + + + public static SysTableSchemaViewEntity GetInstance() + { + return new SysTableSchemaViewEntity(); + } + + public SysTableSchemaViewEntity() + : base() + { + } + + public virtual void CopyFrom(SysTableSchemaViewEntity source) + { + CopyFrom(source, true); + } + + public virtual void CopyFrom(SysTableSchemaViewEntity source, bool includeSystemFields) + { + if (source == null) + { + throw new NullReferenceException("Source entity is null."); + } + + this.TableName = source.TableName; + this.FieldName = source.FieldName; + this.TypeName = source.TypeName; + this.TypeOfName = source.TypeOfName; + this.MaxLength = source.MaxLength; + this.Scale = source.Scale; + this.IsNullAble = source.IsNullAble; + this.FieldDefaultValue = source.FieldDefaultValue; + this.Xtype = source.Xtype; + this.FindBy = source.FindBy; + this.Operation = source.Operation; + this.Pk = source.Pk; + this.PkName = source.PkName; + this.IsIdentity = source.IsIdentity; + this.Colid = source.Colid; + + if (includeSystemFields) + { + } + } + + public string GetSelectFrom() + { + return $" select {DB_NAME_FIELDS} from {DB_NAME_SYS_TABLE_SCHEMA} "; + } + + public SysTableSchemaViewEntity Clone() + { + SysTableSchemaViewEntity result = new SysTableSchemaViewEntity(); + result.CopyFrom(this); + + return result; + } + } +} diff --git a/CloudBuilder.CodeGenerator/MainFunctionView.Designer.cs b/CloudBuilder.CodeGenerator/MainFunctionView.Designer.cs new file mode 100644 index 0000000..0ceb66d --- /dev/null +++ b/CloudBuilder.CodeGenerator/MainFunctionView.Designer.cs @@ -0,0 +1,90 @@ +namespace CloudBuilder.CodeGenerator +{ + partial class MainFunctionView + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + kryptonDockingManager = new Krypton.Docking.KryptonDockingManager(); + kryptonDockableWorkspace = new Krypton.Docking.KryptonDockableWorkspace(); + mainPanel = new Krypton.Toolkit.KryptonPanel(); + ((System.ComponentModel.ISupportInitialize)kryptonDockableWorkspace).BeginInit(); + ((System.ComponentModel.ISupportInitialize)mainPanel).BeginInit(); + mainPanel.SuspendLayout(); + SuspendLayout(); + // + // kryptonDockableWorkspace + // + kryptonDockableWorkspace.ActivePage = null; + kryptonDockableWorkspace.AutoHiddenHost = false; + kryptonDockableWorkspace.CompactFlags = Krypton.Workspace.CompactFlags.RemoveEmptyCells | Krypton.Workspace.CompactFlags.RemoveEmptySequences | Krypton.Workspace.CompactFlags.PromoteLeafs; + kryptonDockableWorkspace.ContainerBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelClient; + kryptonDockableWorkspace.Dock = DockStyle.Fill; + kryptonDockableWorkspace.Location = new Point(0, 0); + kryptonDockableWorkspace.Name = "kryptonDockableWorkspace"; + // + // + // + kryptonDockableWorkspace.Root.UniqueName = "9b8557cebb92477fa6d1f0b015e0ff50"; + kryptonDockableWorkspace.Root.WorkspaceControl = kryptonDockableWorkspace; + kryptonDockableWorkspace.SeparatorStyle = Krypton.Toolkit.SeparatorStyle.LowProfile; + kryptonDockableWorkspace.ShowMaximizeButton = false; + kryptonDockableWorkspace.Size = new Size(1008, 761); + kryptonDockableWorkspace.SplitterWidth = 5; + kryptonDockableWorkspace.TabIndex = 0; + kryptonDockableWorkspace.TabStop = true; + // + // mainPanel + // + mainPanel.Controls.Add(kryptonDockableWorkspace); + mainPanel.Dock = DockStyle.Fill; + mainPanel.Location = new Point(0, 0); + mainPanel.Name = "mainPanel"; + mainPanel.Size = new Size(1008, 761); + mainPanel.TabIndex = 1; + // + // MainFunctionView + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1008, 761); + Controls.Add(mainPanel); + Name = "MainFunctionView"; + Text = "代码生成器"; + Load += MainFunctionView_Load; + ((System.ComponentModel.ISupportInitialize)kryptonDockableWorkspace).EndInit(); + ((System.ComponentModel.ISupportInitialize)mainPanel).EndInit(); + mainPanel.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private Krypton.Docking.KryptonDockingManager kryptonDockingManager; + private Krypton.Docking.KryptonDockableWorkspace kryptonDockableWorkspace; + private Krypton.Toolkit.KryptonPanel mainPanel; + } +} \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/MainFunctionView.cs b/CloudBuilder.CodeGenerator/MainFunctionView.cs new file mode 100644 index 0000000..c0f4546 --- /dev/null +++ b/CloudBuilder.CodeGenerator/MainFunctionView.cs @@ -0,0 +1,103 @@ +using CloudBuilder.CodeGenerator.Entity; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.DependencyInjection.Form; +using Krypton.Docking; +using Krypton.Navigator; +using Krypton.Toolkit; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CloudBuilder.CodeGenerator +{ + public partial class MainFunctionView : KryptonForm, IForm + { + public TableControl tableControl; + public ConfigUserControl configUserControl; + private readonly TemplateUserControl templateUserControl; + private readonly OutputUserControl outputUserControl; + private readonly OperationUserControl operationUserControl; + + public void SetConfigUserControl(object? value) + { + configUserControl.assemblyComboBox.SelectedValue = value; + } + + public void SetOperationUserControl(object? value) + { + operationUserControl.assemblyComboBox.SelectedValue = value; + } + + public MainFunctionView( + [FromKeyedServices("TableControl")] TableControl tableControl, + [FromKeyedServices("ConfigUserControl")] ConfigUserControl configUserControl, + [FromKeyedServices("TemplateUserControl")] TemplateUserControl templateUserControl, + [FromKeyedServices("OutputUserControl")] OutputUserControl outputUserControl, + [FromKeyedServices("OperationUserControl")] OperationUserControl operationUserControl) + { + InitializeComponent(); + this.tableControl = tableControl; + this.configUserControl = configUserControl; + this.templateUserControl = templateUserControl; + this.outputUserControl = outputUserControl; + this.operationUserControl = operationUserControl; + } + + + + private void MainFunctionView_Load(object sender, EventArgs e) + { + KryptonDockingWorkspace w = kryptonDockingManager.ManageWorkspace(kryptonDockableWorkspace); + kryptonDockingManager.ManageControl(mainPanel, w); + kryptonDockingManager.ManageFloating(this); + + kryptonDockingManager.AddDockspace("Control", DockingEdge.Right, new KryptonPage[] { NewOperationUserControl() }); + kryptonDockingManager.AddToWorkspace("Workspace", new KryptonPage[] { NewTableControl(), NewConfigUserControl(), NewTemplateUserControl(), NewOutputUserControl() }); + } + + private KryptonPage NewTableControl() + { + return NewOutputControl("数据操作", 1, tableControl); + } + + private KryptonPage NewConfigUserControl() + { + return NewOutputControl("模板设置", 2, configUserControl); + } + + private KryptonPage NewTemplateUserControl() + { + return NewOutputControl("模板內容", 3, templateUserControl); + } + + private KryptonPage NewOutputUserControl() + { + return NewOutputControl("模板生成內容", 4, outputUserControl); + } + + private KryptonPage NewOperationUserControl() + { + return NewOutputControl("模板输出", 4, operationUserControl); + } + + private KryptonPage NewOutputControl(string text, int imageIndex, UserControl userControl) + { + KryptonPage p = new KryptonPage(); + p.TextTitle = p.Text = text; + p.MinimumSize = new Size(200, 250); + + userControl.Dock = DockStyle.Fill; + p.Controls.Add(userControl); + + return p; + } + + } +} diff --git a/CloudBuilder.CodeGenerator/MainFunctionView.resx b/CloudBuilder.CodeGenerator/MainFunctionView.resx new file mode 100644 index 0000000..1f07adb --- /dev/null +++ b/CloudBuilder.CodeGenerator/MainFunctionView.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/OperationUserControl.Designer.cs b/CloudBuilder.CodeGenerator/OperationUserControl.Designer.cs new file mode 100644 index 0000000..024698f --- /dev/null +++ b/CloudBuilder.CodeGenerator/OperationUserControl.Designer.cs @@ -0,0 +1,178 @@ +namespace CloudBuilder.CodeGenerator +{ + partial class OperationUserControl + { + /// + /// 設計工具所需的變數。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清除任何使用中的資源。 + /// + /// 如果應該處置受控資源則為 true,否則為 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 元件設計工具產生的程式碼 + + /// + /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改 + /// 這個方法的內容。 + /// + private void InitializeComponent() + { + assemblyComboBox = new Krypton.Toolkit.KryptonComboBox(); + kryptonHeader1 = new Krypton.Toolkit.KryptonHeader(); + kryptonCheckedListBox1 = new Krypton.Toolkit.KryptonCheckedListBox(); + kryptonHeader2 = new Krypton.Toolkit.KryptonHeader(); + kryptonHeader3 = new Krypton.Toolkit.KryptonHeader(); + templateBut = new Krypton.Toolkit.KryptonButton(); + tableLayoutPanel1 = new TableLayoutPanel(); + outputFileBut = new Krypton.Toolkit.KryptonCheckButton(); + ((System.ComponentModel.ISupportInitialize)assemblyComboBox).BeginInit(); + tableLayoutPanel1.SuspendLayout(); + SuspendLayout(); + // + // assemblyComboBox + // + assemblyComboBox.Dock = DockStyle.Fill; + assemblyComboBox.DropDownStyle = ComboBoxStyle.DropDownList; + assemblyComboBox.DropDownWidth = 362; + assemblyComboBox.IntegralHeight = false; + assemblyComboBox.Location = new Point(4, 43); + assemblyComboBox.Margin = new Padding(4); + assemblyComboBox.Name = "assemblyComboBox"; + assemblyComboBox.Size = new Size(275, 21); + assemblyComboBox.TabIndex = 7; + assemblyComboBox.SelectionChangeCommitted += assemblyComboBox_SelectionChangeCommitted; + assemblyComboBox.SelectedValueChanged += assemblyComboBox_SelectedValueChanged; + // + // kryptonHeader1 + // + kryptonHeader1.Dock = DockStyle.Fill; + kryptonHeader1.Location = new Point(4, 4); + kryptonHeader1.Margin = new Padding(4); + kryptonHeader1.Name = "kryptonHeader1"; + kryptonHeader1.Size = new Size(275, 31); + kryptonHeader1.TabIndex = 0; + kryptonHeader1.Values.Description = ""; + kryptonHeader1.Values.Heading = "当前程序集"; + kryptonHeader1.Values.Image = null; + // + // kryptonCheckedListBox1 + // + kryptonCheckedListBox1.Dock = DockStyle.Fill; + kryptonCheckedListBox1.Location = new Point(4, 111); + kryptonCheckedListBox1.Margin = new Padding(4); + kryptonCheckedListBox1.Name = "kryptonCheckedListBox1"; + kryptonCheckedListBox1.Size = new Size(275, 227); + kryptonCheckedListBox1.TabIndex = 8; + // + // kryptonHeader2 + // + kryptonHeader2.Dock = DockStyle.Fill; + kryptonHeader2.Location = new Point(4, 72); + kryptonHeader2.Margin = new Padding(4); + kryptonHeader2.Name = "kryptonHeader2"; + kryptonHeader2.Size = new Size(275, 31); + kryptonHeader2.TabIndex = 9; + kryptonHeader2.Values.Description = ""; + kryptonHeader2.Values.Heading = "输出项显示"; + kryptonHeader2.Values.Image = null; + // + // kryptonHeader3 + // + kryptonHeader3.Dock = DockStyle.Fill; + kryptonHeader3.Location = new Point(4, 346); + kryptonHeader3.Margin = new Padding(4); + kryptonHeader3.Name = "kryptonHeader3"; + kryptonHeader3.Size = new Size(275, 4); + kryptonHeader3.TabIndex = 10; + kryptonHeader3.Values.Description = ""; + kryptonHeader3.Values.Heading = ""; + kryptonHeader3.Values.Image = null; + // + // templateBut + // + templateBut.Location = new Point(4, 391); + templateBut.Margin = new Padding(4); + templateBut.Name = "templateBut"; + templateBut.Size = new Size(105, 25); + templateBut.TabIndex = 12; + templateBut.Values.Text = "模板生成"; + templateBut.Click += templateBut_Click; + // + // tableLayoutPanel1 + // + tableLayoutPanel1.AutoSize = true; + tableLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel1.ColumnCount = 1; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.Controls.Add(assemblyComboBox, 0, 1); + tableLayoutPanel1.Controls.Add(kryptonHeader1, 0, 0); + tableLayoutPanel1.Controls.Add(kryptonCheckedListBox1, 0, 3); + tableLayoutPanel1.Controls.Add(kryptonHeader2, 0, 2); + tableLayoutPanel1.Controls.Add(kryptonHeader3, 0, 4); + tableLayoutPanel1.Controls.Add(outputFileBut, 0, 7); + tableLayoutPanel1.Controls.Add(templateBut, 0, 8); + tableLayoutPanel1.Dock = DockStyle.Fill; + tableLayoutPanel1.Location = new Point(0, 0); + tableLayoutPanel1.Margin = new Padding(4); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 9; + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.Size = new Size(283, 649); + tableLayoutPanel1.TabIndex = 1; + // + // outputFileBut + // + outputFileBut.Location = new Point(4, 358); + outputFileBut.Margin = new Padding(4); + outputFileBut.Name = "outputFileBut"; + outputFileBut.Size = new Size(105, 25); + outputFileBut.TabIndex = 13; + outputFileBut.Values.Text = "输出文件"; + outputFileBut.Click += outputFileBut_Click; + // + // OperationUserControl + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(tableLayoutPanel1); + MinimumSize = new Size(240, 0); + Name = "OperationUserControl"; + Size = new Size(283, 649); + ((System.ComponentModel.ISupportInitialize)assemblyComboBox).EndInit(); + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + public Krypton.Toolkit.KryptonComboBox assemblyComboBox; + private Krypton.Toolkit.KryptonHeader kryptonHeader1; + private Krypton.Toolkit.KryptonCheckedListBox kryptonCheckedListBox1; + private Krypton.Toolkit.KryptonHeader kryptonHeader2; + private Krypton.Toolkit.KryptonHeader kryptonHeader3; + private Krypton.Toolkit.KryptonButton templateBut; + private TableLayoutPanel tableLayoutPanel1; + private Krypton.Toolkit.KryptonCheckButton outputFileBut; + } +} diff --git a/CloudBuilder.CodeGenerator/OperationUserControl.cs b/CloudBuilder.CodeGenerator/OperationUserControl.cs new file mode 100644 index 0000000..6bcd9ea --- /dev/null +++ b/CloudBuilder.CodeGenerator/OperationUserControl.cs @@ -0,0 +1,286 @@ +using CloudBuilder.CodeGenerator.Config; +using CloudBuilder.CodeGenerator.Data; +using CloudBuilder.CodeGenerator.Utility; +using CloudBuilder.Core.Application.Builders; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.DependencyInjection.Form; +using CloudBuilder.Core.Extensions; +using CloudBuilder.Core.Service; +using CloudBuilder.Core.Utility; +using Krypton.Toolkit; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.VisualStudio.OLE.Interop; +using RazorEngineCore; +using System.Data; +using System.Linq; +using System.Reflection; +using System.Windows.Forms.Design; + +namespace CloudBuilder.CodeGenerator +{ + public partial class OperationUserControl : UserControl, IUserControl + { + private readonly IApplicationService app; + private readonly TableControl tableControl; + private ConfigUserControl configUserControl; + private readonly TemplateUserControl templateUserControl; + private readonly OutputUserControl outputUserControl; + private ToolInitConfig toolInitConfig; + public OperationUserControl(IApplicationService app, + [FromKeyedServices("TableControl")] TableControl tableControl, + [FromKeyedServices("TemplateUserControl")] TemplateUserControl templateUserControl, + [FromKeyedServices("OutputUserControl")] OutputUserControl outputUserControl) + { + InitializeComponent(); + this.app = app; + this.tableControl = tableControl; + + this.templateUserControl = templateUserControl; + this.outputUserControl = outputUserControl; + InitUserControl(); + } + + public void InitUserControl() + { + assemblyComboBox.DisplayMember = "Text"; + assemblyComboBox.ValueMember = "Value"; + + toolInitConfig = ToolInitConfig.GetInstance(); + + List l = new List(); + List types = new List(); + foreach (NamespaceObject nso in toolInitConfig.NamespaceObjects) + { + if (l.Select(x => x.Text).Contains(nso.Assembly)) continue; + l.Add(CreateNewComboBoxItem(nso.Assembly, nso.Assembly)); + } + + DataTable dtbl = DataTableConvertor.ToDataTable(l); + assemblyComboBox.DataSource = dtbl; + assemblyComboBox.SelectedValue = toolInitConfig.CurrentAssembly; + + InitkryptonCheckedListBox1(toolInitConfig.CurrentAssembly); + } + + private void InitkryptonCheckedListBox1(string currentAssembly) + { + if (string.IsNullOrEmpty(currentAssembly)) return; + int i = 0; + kryptonCheckedListBox1.Items.Clear(); + foreach (NamespaceObject nso in toolInitConfig.NamespaceObjects.Where(x => x.Assembly == currentAssembly).ToList()) + { + if (nso.TemplateType.Contains("Entity") && nso.TemplateType != "Entity") continue; + + if (nso.TemplateType.Contains("TypeScript")) continue; + + kryptonCheckedListBox1.Items.Add(CreateNewItem(nso.TemplateType)); + + if (!nso.TemplateType.Contains("Entity")) + { + i++; + continue; + } + + kryptonCheckedListBox1.SetItemCheckState(i++, CheckState.Checked); + } + } + + private void outputFileBut_Click(object sender, EventArgs e) + { + ModelData model = GetModelData(); + if (model.sysTableSchemas == null || model.sysTableSchemas.Length == 0) + { + MessageBox.Show("请选择要生成的数据表", "提示"); + return; + } + + for (var i = 0; i < kryptonCheckedListBox1.Items.Count; i++) + { + if (kryptonCheckedListBox1.GetItemCheckState(i) == CheckState.Checked) + { + KryptonListItem a = (KryptonListItem)kryptonCheckedListBox1.Items[i]; + + WriteAllText(model, a.ShortText); + } + } + + MessageBox.Show("生成成功", "提示"); + } + + private void WriteAllText(ModelData model, string templateType) + { + NamespaceObject namespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.Assembly == assemblyComboBox.Text.Trim() && x.TemplateType == templateType).FirstOrDefault(); + + if (namespaceObject == null) return; + + string fileName = Path.Combine(toolInitConfig.TemplatePath, namespaceObject.TemplateFileName); + if (!File.Exists(fileName)) return; + + if (!Path.Exists(namespaceObject.OutFilePath)) return; + + var tp = File.ReadAllText(fileName); + + string outputFileName = Path.Combine(namespaceObject.OutFilePath, namespaceObject.FileNamePrefix + model.sysTableSchemas[0].TableName.StringToProerty() + namespaceObject.FileNameSuffix); + + if (templateType == "RegistEntity") + { + outputFileName = Path.Combine(namespaceObject.OutFilePath, namespaceObject.Assembly.Replace(".", "") + namespaceObject.FileNameSuffix); + + //文件不存在,先初始化文件 + if (!File.Exists(outputFileName)) File.WriteAllText(outputFileName, RazorEngineHelper.CompiledTemplate(tp, model)); + + string allTxt = File.ReadAllText(outputFileName); + + tp = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, namespaceObject.TemplateFileName.Replace(".cshtml", ".Key.cshtml"))); + var temp = RazorEngineHelper.CompiledTemplate(tp, model); + + if (allTxt.Contains("<" + model.sysTableSchemas[0].TableName.StringToProerty() + "Entity>()")) return; + + int end = allTxt.IndexOf("//***END***", StringComparison.OrdinalIgnoreCase); + + allTxt = allTxt.Substring(0, end) + temp + allTxt.Substring(end, allTxt.Length - end); + + File.WriteAllText(outputFileName, allTxt); + return; + } + else if (templateType == "Permission") + { + outputFileName = Path.Combine(namespaceObject.OutFilePath, namespaceObject.Assembly.Split('.')[namespaceObject.Assembly.Split('.').Length - 1] + namespaceObject.FileNameSuffix); + + //文件存在不覆盖,插入 + if (File.Exists(outputFileName)) + { + string allTxt = File.ReadAllText(outputFileName); + + tp = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, namespaceObject.TemplateFileName)); + var temp = RazorEngineHelper.CompiledTemplate(tp, model); + + if (allTxt.Contains(model.sysTableSchemas[0].TableName.StringToProerty())) return; + + int end = allTxt.IndexOf("//***END***", StringComparison.OrdinalIgnoreCase); + + allTxt = allTxt.Substring(0, end) + temp + allTxt.Substring(end, allTxt.Length - end); + + File.WriteAllText(outputFileName, allTxt); + return; + } + else + { + tp = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, namespaceObject.TemplateFileName.Replace(".cshtml", ".auto.cshtml"))); + var temp = RazorEngineHelper.CompiledTemplate(tp, model); + File.WriteAllText(outputFileName, temp); + } + } + //Entity可以直接輸出,其他要文件不存在才生成 + if (templateType == "Entity" || templateType == "IEntityKey" || !File.Exists(outputFileName)) + File.WriteAllText(outputFileName, RazorEngineHelper.CompiledTemplate(tp, model)); + + if ((model.KeyCount >= 0) && templateType == "Entity") + { + if (model.KeyCount > 1) + WriteAllText(model, "IEntityKey"); + WriteAllText(model, "RegistEntity"); + } + else if (templateType == "Service") + { + WriteAllText(model, "Permission"); + } + } + + private void templateBut_Click(object sender, EventArgs e) + { + try + { + ModelData modelData = GetModelData(); + + ((OutputUserControl)outputUserControl).contextTxt.Text = RazorEngineHelper.CompiledTemplate(((TemplateUserControl)templateUserControl).contextTxt.Text, modelData); + + MessageBox.Show("生成成功", "提示"); + + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "出错"); + } + } + + private ModelData GetModelData() + { + configUserControl = app.ServiceProvider.GetKeyedService("ConfigUserControl"); + ModelData modelData = new ModelData(); + modelData.sysTableSchemas = ((TableControl)tableControl).GetDataSource(); + modelData.NamespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.TemplateType == configUserControl.GetTemplateType() && x.Assembly == configUserControl.GetAssembly()).FirstOrDefault(); + if (modelData.sysTableSchemas != null && modelData.sysTableSchemas.Length > 0) + { + modelData.KeyCount = modelData.sysTableSchemas.Where(x => x.Pk > 0).Count(); + if (modelData.KeyCount == 1) + { + modelData.KeyType = modelData.sysTableSchemas.Where(x => x.Pk > 0).FirstOrDefault().TypeOfName; + } + else if (modelData.KeyCount > 1) + { + modelData.KeyType = $"{modelData.sysTableSchemas[0].TableName.StringToProerty()}EntityKey"; + } + else + { + modelData.KeyType = "string"; + } + } + List assemblies = new List(); + if (toolInitConfig.AssemblyReferences != null) + { + foreach (var reference in toolInitConfig.AssemblyReferences) + { + if (string.IsNullOrEmpty(reference.AssemblyFileName)) continue; + + if (!File.Exists(reference.AssemblyFileName)) continue; + + assemblies.Add(Assembly.LoadFrom(reference.AssemblyFileName)); + } + } + if (configUserControl.GetTemplateType() == "Controller" || configUserControl.GetTemplateType() == "TypeScriptService") + modelData.ClassInfos = RazorEngineHelper.PackIServiceClassInfo(assemblies.Where(x => Path.GetFileNameWithoutExtension(x.ManifestModule.Name) == modelData.NamespaceObject.Assembly).FirstOrDefault()); + else + if (configUserControl.GetTemplateType() == "TypeScript") + modelData.ClassInfos = RazorEngineHelper.PackTypeScriptClassInfo(assemblies.Where(x => Path.GetFileNameWithoutExtension(x.ManifestModule.Name) == modelData.NamespaceObject.Assembly).FirstOrDefault()); + + return modelData; + } + + + public class ComboBoxItem + { + public string Text { get; set; } + public string Value { get; set; } + } + + + private ComboBoxItem CreateNewComboBoxItem(string text, string value) + { + ComboBoxItem item = new ComboBoxItem(); + item.Text = text; + item.Value = value; + + return item; + } + + private object CreateNewItem(string text) + { + KryptonListItem item = new KryptonListItem(); + item.ShortText = text; + + return item; + } + + private void assemblyComboBox_SelectionChangeCommitted(object sender, EventArgs e) + { + ((MainFunctionView)(this.ParentForm)).SetConfigUserControl(assemblyComboBox.SelectedValue); + } + + private void assemblyComboBox_SelectedValueChanged(object sender, EventArgs e) + { + InitkryptonCheckedListBox1((string)assemblyComboBox.SelectedValue); + } + } +} diff --git a/CloudBuilder.CodeGenerator/OperationUserControl.resx b/CloudBuilder.CodeGenerator/OperationUserControl.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CloudBuilder.CodeGenerator/OperationUserControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/OutputUserControl.Designer.cs b/CloudBuilder.CodeGenerator/OutputUserControl.Designer.cs new file mode 100644 index 0000000..d7f6983 --- /dev/null +++ b/CloudBuilder.CodeGenerator/OutputUserControl.Designer.cs @@ -0,0 +1,93 @@ +namespace CloudBuilder.CodeGenerator +{ + partial class OutputUserControl + { + /// + /// 設計工具所需的變數。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清除任何使用中的資源。 + /// + /// 如果應該處置受控資源則為 true,否則為 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 元件設計工具產生的程式碼 + + /// + /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改 + /// 這個方法的內容。 + /// + private void InitializeComponent() + { + tableLayoutPanel1 = new TableLayoutPanel(); + kryptonHeader1 = new Krypton.Toolkit.KryptonHeader(); + contextTxt = new Krypton.Toolkit.KryptonRichTextBox(); + tableLayoutPanel1.SuspendLayout(); + SuspendLayout(); + // + // tableLayoutPanel1 + // + tableLayoutPanel1.ColumnCount = 1; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel1.Controls.Add(kryptonHeader1, 0, 0); + tableLayoutPanel1.Controls.Add(contextTxt, 0, 2); + tableLayoutPanel1.Dock = DockStyle.Fill; + tableLayoutPanel1.Location = new Point(0, 0); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 3; + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel1.Size = new Size(779, 531); + tableLayoutPanel1.TabIndex = 1; + // + // kryptonHeader1 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader1, 4); + kryptonHeader1.Dock = DockStyle.Fill; + kryptonHeader1.Location = new Point(4, 4); + kryptonHeader1.Margin = new Padding(4); + kryptonHeader1.Name = "kryptonHeader1"; + kryptonHeader1.Size = new Size(771, 27); + kryptonHeader1.TabIndex = 13; + kryptonHeader1.Values.Description = ""; + kryptonHeader1.Values.Heading = "模板生成內容"; + kryptonHeader1.Values.Image = null; + // + // contextTxt + // + contextTxt.Dock = DockStyle.Fill; + contextTxt.Location = new Point(3, 38); + contextTxt.Name = "contextTxt"; + contextTxt.Size = new Size(773, 490); + contextTxt.TabIndex = 15; + contextTxt.Text = ""; + // + // OutputUserControl + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(tableLayoutPanel1); + Name = "OutputUserControl"; + Size = new Size(779, 531); + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private TableLayoutPanel tableLayoutPanel1; + private Krypton.Toolkit.KryptonHeader kryptonHeader1; + public Krypton.Toolkit.KryptonRichTextBox contextTxt; + } +} diff --git a/CloudBuilder.CodeGenerator/OutputUserControl.cs b/CloudBuilder.CodeGenerator/OutputUserControl.cs new file mode 100644 index 0000000..84d5161 --- /dev/null +++ b/CloudBuilder.CodeGenerator/OutputUserControl.cs @@ -0,0 +1,21 @@ +using CloudBuilder.Core.DependencyInjection.Form; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CloudBuilder.CodeGenerator +{ + public partial class OutputUserControl : UserControl, IUserControl + { + public OutputUserControl() + { + InitializeComponent(); + } + } +} diff --git a/CloudBuilder.CodeGenerator/OutputUserControl.resx b/CloudBuilder.CodeGenerator/OutputUserControl.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CloudBuilder.CodeGenerator/OutputUserControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/Program.cs b/CloudBuilder.CodeGenerator/Program.cs new file mode 100644 index 0000000..2039e70 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Program.cs @@ -0,0 +1,29 @@ +using CloudBuilder.CodeGenerator; +using Microsoft.Extensions.DependencyInjection; + +namespace WinFormsApp +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + var services = new ServiceCollection(); + + services.Initialize(); + + var serviceProvider = services.BuildServiceProvider(); + + MainFunctionView mainFunctionView = serviceProvider.GetRequiredKeyedService(typeof(MainFunctionView).Name); + + Application.Run(mainFunctionView); + } + } +} \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/Properties/Resources.Designer.cs b/CloudBuilder.CodeGenerator/Properties/Resources.Designer.cs new file mode 100644 index 0000000..79bd763 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 這段程式碼是由工具產生的。 +// 執行階段版本:4.0.30319.42000 +// +// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼, +// 變更將會遺失。 +// +//------------------------------------------------------------------------------ + +namespace CloudBuilder.CodeGenerator.Properties { + using System; + + + /// + /// 用於查詢當地語系化字串等的強類型資源類別。 + /// + // 這個類別是自動產生的,是利用 StronglyTypedResourceBuilder + // 類別透過 ResGen 或 Visual Studio 這類工具。 + // 若要加入或移除成員,請編輯您的 .ResX 檔,然後重新執行 ResGen + // (利用 /str 選項),或重建您的 VS 專案。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 傳回這個類別使用的快取的 ResourceManager 執行個體。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CloudBuilder.CodeGenerator.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 覆寫目前執行緒的 CurrentUICulture 屬性,對象是所有 + /// 使用這個強類型資源類別的資源查閱。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/CloudBuilder.CodeGenerator/Properties/Resources.resx b/CloudBuilder.CodeGenerator/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/TableControl.Designer.cs b/CloudBuilder.CodeGenerator/TableControl.Designer.cs new file mode 100644 index 0000000..949e918 --- /dev/null +++ b/CloudBuilder.CodeGenerator/TableControl.Designer.cs @@ -0,0 +1,418 @@ +namespace CloudBuilder.CodeGenerator +{ + partial class TableControl + { + /// + /// 設計工具所需的變數。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清除任何使用中的資源。 + /// + /// 如果應該處置受控資源則為 true,否則為 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 元件設計工具產生的程式碼 + + /// + /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改 + /// 這個方法的內容。 + /// + private void InitializeComponent() + { + DataGridViewCellStyle dataGridViewCellStyle8 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle9 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle10 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle11 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle12 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle13 = new DataGridViewCellStyle(); + DataGridViewCellStyle dataGridViewCellStyle14 = new DataGridViewCellStyle(); + kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + splitContainer1 = new SplitContainer(); + leftPanel = new TableLayoutPanel(); + tableNameGv = new Krypton.Toolkit.KryptonDataGridView(); + selectedCol = new Krypton.Toolkit.KryptonDataGridViewCheckBoxColumn(); + tableNameCol = new Krypton.Toolkit.KryptonDataGridViewTextBoxColumn(); + tableLayoutPanel3 = new TableLayoutPanel(); + kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + dtTxt = new Krypton.Toolkit.KryptonTextBox(); + dtSearchBut = new Krypton.Toolkit.KryptonButton(); + dtResetBut = new Krypton.Toolkit.KryptonButton(); + loadDbBut = new Krypton.Toolkit.KryptonButton(); + tableLayoutPanel2 = new TableLayoutPanel(); + fieldNameGv = new Krypton.Toolkit.KryptonDataGridView(); + pkCol = new Krypton.Toolkit.KryptonDataGridViewCheckBoxColumn(); + operationCol = new Krypton.Toolkit.KryptonDataGridViewCheckBoxColumn(); + fieldNameCol = new Krypton.Toolkit.KryptonDataGridViewTextBoxColumn(); + typeNameCol = new Krypton.Toolkit.KryptonDataGridViewTextBoxColumn(); + typeOfNameCol = new Krypton.Toolkit.KryptonDataGridViewTextBoxColumn(); + tableLayoutPanel4 = new TableLayoutPanel(); + kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + fieldTxt = new Krypton.Toolkit.KryptonTextBox(); + fieldSearchBut = new Krypton.Toolkit.KryptonButton(); + fieldResetBut = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)kryptonPanel1).BeginInit(); + kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit(); + splitContainer1.Panel1.SuspendLayout(); + splitContainer1.Panel2.SuspendLayout(); + splitContainer1.SuspendLayout(); + leftPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)tableNameGv).BeginInit(); + tableLayoutPanel3.SuspendLayout(); + tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)fieldNameGv).BeginInit(); + tableLayoutPanel4.SuspendLayout(); + SuspendLayout(); + // + // kryptonPanel1 + // + kryptonPanel1.Controls.Add(splitContainer1); + kryptonPanel1.Dock = DockStyle.Fill; + kryptonPanel1.Location = new Point(0, 0); + kryptonPanel1.Name = "kryptonPanel1"; + kryptonPanel1.Size = new Size(1024, 600); + kryptonPanel1.TabIndex = 0; + // + // splitContainer1 + // + splitContainer1.BackColor = Color.Transparent; + splitContainer1.BorderStyle = BorderStyle.FixedSingle; + splitContainer1.Dock = DockStyle.Fill; + splitContainer1.Location = new Point(0, 0); + splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + splitContainer1.Panel1.Controls.Add(leftPanel); + // + // splitContainer1.Panel2 + // + splitContainer1.Panel2.Controls.Add(tableLayoutPanel2); + splitContainer1.Size = new Size(1024, 600); + splitContainer1.SplitterDistance = 512; + splitContainer1.SplitterWidth = 10; + splitContainer1.TabIndex = 0; + // + // leftPanel + // + leftPanel.ColumnCount = 1; + leftPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + leftPanel.Controls.Add(tableNameGv, 0, 1); + leftPanel.Controls.Add(tableLayoutPanel3, 0, 0); + leftPanel.Dock = DockStyle.Fill; + leftPanel.Location = new Point(0, 0); + leftPanel.Name = "leftPanel"; + leftPanel.RowCount = 2; + leftPanel.RowStyles.Add(new RowStyle()); + leftPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); + leftPanel.Size = new Size(510, 598); + leftPanel.TabIndex = 0; + // + // tableNameGv + // + tableNameGv.BorderStyle = BorderStyle.None; + tableNameGv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + tableNameGv.Columns.AddRange(new DataGridViewColumn[] { selectedCol, tableNameCol }); + tableNameGv.Dock = DockStyle.Fill; + tableNameGv.Location = new Point(4, 37); + tableNameGv.Margin = new Padding(4); + tableNameGv.Name = "tableNameGv"; + tableNameGv.RowHeadersVisible = false; + tableNameGv.RowTemplate.Height = 23; + tableNameGv.Size = new Size(502, 557); + tableNameGv.TabIndex = 3; + tableNameGv.CellClick += tableNameGv_CellClick; + // + // selectedCol + // + dataGridViewCellStyle8.Alignment = DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle8.NullValue = false; + selectedCol.DefaultCellStyle = dataGridViewCellStyle8; + selectedCol.FalseValue = "N"; + selectedCol.HeaderText = "选择"; + selectedCol.IndeterminateValue = null; + selectedCol.Name = "selectedCol"; + selectedCol.TrueValue = "Y"; + selectedCol.Width = 50; + // + // tableNameCol + // + tableNameCol.DataPropertyName = "TableName"; + tableNameCol.DefaultCellStyle = dataGridViewCellStyle9; + tableNameCol.HeaderText = "数据表"; + tableNameCol.Name = "tableNameCol"; + tableNameCol.Width = 260; + // + // tableLayoutPanel3 + // + tableLayoutPanel3.AutoSize = true; + tableLayoutPanel3.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel3.ColumnCount = 5; + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel3.Controls.Add(kryptonLabel1, 0, 0); + tableLayoutPanel3.Controls.Add(dtTxt, 1, 0); + tableLayoutPanel3.Controls.Add(dtSearchBut, 2, 0); + tableLayoutPanel3.Controls.Add(dtResetBut, 3, 0); + tableLayoutPanel3.Controls.Add(loadDbBut, 4, 0); + tableLayoutPanel3.Location = new Point(0, 0); + tableLayoutPanel3.Margin = new Padding(0); + tableLayoutPanel3.Name = "tableLayoutPanel3"; + tableLayoutPanel3.RowCount = 1; + tableLayoutPanel3.RowStyles.Add(new RowStyle()); + tableLayoutPanel3.Size = new Size(382, 33); + tableLayoutPanel3.TabIndex = 2; + // + // kryptonLabel1 + // + kryptonLabel1.Location = new Point(4, 6); + kryptonLabel1.Margin = new Padding(4, 6, 4, 4); + kryptonLabel1.Name = "kryptonLabel1"; + kryptonLabel1.Size = new Size(49, 20); + kryptonLabel1.TabIndex = 0; + kryptonLabel1.Values.Text = "表名:"; + // + // dtTxt + // + dtTxt.Dock = DockStyle.Fill; + dtTxt.Location = new Point(61, 6); + dtTxt.Margin = new Padding(4, 6, 4, 4); + dtTxt.Name = "dtTxt"; + dtTxt.Size = new Size(97, 23); + dtTxt.TabIndex = 1; + // + // dtSearchBut + // + dtSearchBut.Location = new Point(166, 4); + dtSearchBut.Margin = new Padding(4); + dtSearchBut.Name = "dtSearchBut"; + dtSearchBut.Size = new Size(58, 25); + dtSearchBut.TabIndex = 2; + dtSearchBut.Values.Text = "查询"; + dtSearchBut.Click += dtSearchBut_Click; + // + // dtResetBut + // + dtResetBut.Location = new Point(232, 4); + dtResetBut.Margin = new Padding(4); + dtResetBut.Name = "dtResetBut"; + dtResetBut.Size = new Size(58, 25); + dtResetBut.TabIndex = 3; + dtResetBut.Values.Text = "重置"; + dtResetBut.Click += dtResetBut_Click; + // + // loadDbBut + // + loadDbBut.Location = new Point(298, 4); + loadDbBut.Margin = new Padding(4); + loadDbBut.Name = "loadDbBut"; + loadDbBut.Size = new Size(80, 25); + loadDbBut.TabIndex = 3; + loadDbBut.Values.Text = "加载数据库"; + loadDbBut.Click += loadDbBut_Click; + // + // tableLayoutPanel2 + // + tableLayoutPanel2.ColumnCount = 1; + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel2.Controls.Add(fieldNameGv, 0, 1); + tableLayoutPanel2.Controls.Add(tableLayoutPanel4, 0, 0); + tableLayoutPanel2.Dock = DockStyle.Fill; + tableLayoutPanel2.Location = new Point(0, 0); + tableLayoutPanel2.Margin = new Padding(4); + tableLayoutPanel2.Name = "tableLayoutPanel2"; + tableLayoutPanel2.RowCount = 2; + tableLayoutPanel2.RowStyles.Add(new RowStyle()); + tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel2.Size = new Size(500, 598); + tableLayoutPanel2.TabIndex = 3; + // + // fieldNameGv + // + fieldNameGv.BorderStyle = BorderStyle.None; + fieldNameGv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + fieldNameGv.Columns.AddRange(new DataGridViewColumn[] { pkCol, operationCol, fieldNameCol, typeNameCol, typeOfNameCol }); + fieldNameGv.Dock = DockStyle.Fill; + fieldNameGv.Location = new Point(4, 37); + fieldNameGv.Margin = new Padding(4); + fieldNameGv.Name = "fieldNameGv"; + fieldNameGv.RowHeadersVisible = false; + fieldNameGv.RowTemplate.Height = 23; + fieldNameGv.Size = new Size(492, 557); + fieldNameGv.TabIndex = 0; + // + // pkCol + // + pkCol.DataPropertyName = "Pk"; + dataGridViewCellStyle10.Alignment = DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.NullValue = false; + pkCol.DefaultCellStyle = dataGridViewCellStyle10; + pkCol.FalseValue = "0"; + pkCol.HeaderText = "主键"; + pkCol.IndeterminateValue = null; + pkCol.Name = "pkCol"; + pkCol.TrueValue = "1"; + pkCol.Width = 60; + // + // operationCol + // + operationCol.DataPropertyName = "Operation"; + dataGridViewCellStyle11.Alignment = DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle11.NullValue = false; + operationCol.DefaultCellStyle = dataGridViewCellStyle11; + operationCol.FalseValue = "0"; + operationCol.HeaderText = "差异"; + operationCol.IndeterminateValue = null; + operationCol.Name = "operationCol"; + operationCol.TrueValue = "1"; + operationCol.Width = 60; + // + // fieldNameCol + // + fieldNameCol.DataPropertyName = "FieldName"; + fieldNameCol.DefaultCellStyle = dataGridViewCellStyle12; + fieldNameCol.HeaderText = "字段名"; + fieldNameCol.Name = "fieldNameCol"; + fieldNameCol.Width = 260; + // + // typeNameCol + // + typeNameCol.DataPropertyName = "TypeName"; + typeNameCol.DefaultCellStyle = dataGridViewCellStyle13; + typeNameCol.HeaderText = "类型"; + typeNameCol.Name = "typeNameCol"; + typeNameCol.Width = 60; + // + // typeOfNameCol + // + typeOfNameCol.DataPropertyName = "TypeOfName"; + typeOfNameCol.DefaultCellStyle = dataGridViewCellStyle14; + typeOfNameCol.HeaderText = "映射"; + typeOfNameCol.Name = "typeOfNameCol"; + typeOfNameCol.Width = 60; + // + // tableLayoutPanel4 + // + tableLayoutPanel4.AutoSize = true; + tableLayoutPanel4.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel4.ColumnCount = 5; + tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel4.Controls.Add(kryptonLabel2, 0, 0); + tableLayoutPanel4.Controls.Add(fieldTxt, 1, 0); + tableLayoutPanel4.Controls.Add(fieldSearchBut, 2, 0); + tableLayoutPanel4.Controls.Add(fieldResetBut, 3, 0); + tableLayoutPanel4.Location = new Point(0, 0); + tableLayoutPanel4.Margin = new Padding(0); + tableLayoutPanel4.Name = "tableLayoutPanel4"; + tableLayoutPanel4.RowCount = 1; + tableLayoutPanel4.RowStyles.Add(new RowStyle()); + tableLayoutPanel4.Size = new Size(340, 33); + tableLayoutPanel4.TabIndex = 1; + // + // kryptonLabel2 + // + kryptonLabel2.Location = new Point(4, 6); + kryptonLabel2.Margin = new Padding(4, 6, 4, 4); + kryptonLabel2.Name = "kryptonLabel2"; + kryptonLabel2.Size = new Size(62, 20); + kryptonLabel2.TabIndex = 0; + kryptonLabel2.Values.Text = "字段名:"; + // + // fieldTxt + // + fieldTxt.Location = new Point(74, 6); + fieldTxt.Margin = new Padding(4, 6, 4, 4); + fieldTxt.Name = "fieldTxt"; + fieldTxt.Size = new Size(130, 23); + fieldTxt.TabIndex = 1; + // + // fieldSearchBut + // + fieldSearchBut.Location = new Point(212, 4); + fieldSearchBut.Margin = new Padding(4); + fieldSearchBut.Name = "fieldSearchBut"; + fieldSearchBut.Size = new Size(58, 25); + fieldSearchBut.TabIndex = 2; + fieldSearchBut.Values.Text = "查询"; + fieldSearchBut.Click += fieldSearchBut_Click; + // + // fieldResetBut + // + fieldResetBut.Location = new Point(278, 4); + fieldResetBut.Margin = new Padding(4); + fieldResetBut.Name = "fieldResetBut"; + fieldResetBut.Size = new Size(58, 25); + fieldResetBut.TabIndex = 3; + fieldResetBut.Values.Text = "重置"; + fieldResetBut.Click += fieldResetBut_Click; + // + // TableControl + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(kryptonPanel1); + Name = "TableControl"; + Size = new Size(1024, 600); + ((System.ComponentModel.ISupportInitialize)kryptonPanel1).EndInit(); + kryptonPanel1.ResumeLayout(false); + splitContainer1.Panel1.ResumeLayout(false); + splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit(); + splitContainer1.ResumeLayout(false); + leftPanel.ResumeLayout(false); + leftPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)tableNameGv).EndInit(); + tableLayoutPanel3.ResumeLayout(false); + tableLayoutPanel3.PerformLayout(); + tableLayoutPanel2.ResumeLayout(false); + tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)fieldNameGv).EndInit(); + tableLayoutPanel4.ResumeLayout(false); + tableLayoutPanel4.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private SplitContainer splitContainer1; + private TableLayoutPanel leftPanel; + private Krypton.Toolkit.KryptonDataGridView tableNameGv; + private TableLayoutPanel tableLayoutPanel3; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private Krypton.Toolkit.KryptonTextBox dtTxt; + private Krypton.Toolkit.KryptonButton dtSearchBut; + private TableLayoutPanel tableLayoutPanel2; + private Krypton.Toolkit.KryptonDataGridView fieldNameGv; + private TableLayoutPanel tableLayoutPanel4; + private Krypton.Toolkit.KryptonLabel kryptonLabel2; + private Krypton.Toolkit.KryptonTextBox fieldTxt; + private Krypton.Toolkit.KryptonButton fieldSearchBut; + private Krypton.Toolkit.KryptonButton fieldResetBut; + private Krypton.Toolkit.KryptonButton loadDbBut; + private Krypton.Toolkit.KryptonDataGridViewCheckBoxColumn selectedCol; + private Krypton.Toolkit.KryptonDataGridViewTextBoxColumn tableNameCol; + private Krypton.Toolkit.KryptonDataGridViewCheckBoxColumn pkCol; + private Krypton.Toolkit.KryptonDataGridViewCheckBoxColumn operationCol; + private Krypton.Toolkit.KryptonDataGridViewTextBoxColumn fieldNameCol; + private Krypton.Toolkit.KryptonDataGridViewTextBoxColumn typeNameCol; + private Krypton.Toolkit.KryptonDataGridViewTextBoxColumn typeOfNameCol; + private Krypton.Toolkit.KryptonButton dtResetBut; + } +} diff --git a/CloudBuilder.CodeGenerator/TableControl.cs b/CloudBuilder.CodeGenerator/TableControl.cs new file mode 100644 index 0000000..06a455b --- /dev/null +++ b/CloudBuilder.CodeGenerator/TableControl.cs @@ -0,0 +1,191 @@ +using CloudBuilder.CodeGenerator.Config; +using CloudBuilder.CodeGenerator.Data; +using CloudBuilder.CodeGenerator.Entity; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.DependencyInjection.Form; +using CloudBuilder.Core.Extensions; +using CloudBuilder.Core.Utility; +using Krypton.Toolkit; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection.Metadata.Ecma335; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CloudBuilder.CodeGenerator +{ + public partial class TableControl : UserControl, IUserControl + { + private readonly IApplicationService service; + private readonly ConfigUserControl configUserControl; + private IRepository repository; + public SysTableSchemaViewEntity[] sysTableSchemas; + public SysTableSchemaViewEntity[] sysTableFields; + private SysTable[] sysTables; + private DataTable sysTableField; + + public TableControl(IApplicationService service) + { + InitializeComponent(); + this.service = service; + tableNameGv.AutoGenerateColumns = false; + fieldNameGv.AutoGenerateColumns = false; + } + + private void loadDbBut_Click(object sender, EventArgs e) + { + LoadData(); + } + + public void LoadData() + { + repository = service.GetRepository>(); + sysTableSchemas = repository.DetachedEntities.ToArray(); + + if (sysTableSchemas == null || sysTableSchemas.Length == 0) return; + + sysTables = sysTableSchemas.Select(x => x.TableName).OrderBy(x => x).Distinct() + .Select(x => new SysTable() { TableName = x, Selected = "N" }).ToArray(); + + tableNameGv.DataSource = sysTables; + } + + public SysTableSchemaViewEntity[] GetDataSource() + { + sysTableField = (DataTable)fieldNameGv.DataSource; + return DataTableConvertor.ConvertToList(sysTableField).Where(x => x.Operation == 0).ToArray(); + + } + + private void tableNameGv_CellClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0) return; + if (e.ColumnIndex != selectedCol.Index) return; + + if (tableNameGv.CurrentRow.Cells[tableNameCol.Name].Value == System.DBNull.Value) return; + + foreach (DataGridViewRow dgrow in tableNameGv.Rows) + { + if (tableNameGv.CurrentRow.Cells[tableNameCol.Name].EditedFormattedValue == dgrow.Cells[tableNameCol.Name].EditedFormattedValue) continue; + + dgrow.Cells[selectedCol.Name].Value = "N"; + } + + sysTableFields = sysTableSchemas.Where(x => x.TableName == (string)tableNameGv.CurrentRow.Cells[tableNameCol.Name].Value).ToArray(); + + sysTableField = DataTableConvertor.ToDataTable(sysTableFields); + fieldNameGv.DataSource = sysTableField; + + SetDataGrivViewCellColor((string)tableNameGv.CurrentRow.Cells[tableNameCol.Name].Value); + } + + private void SetDataGrivViewCellColor(string tableName) + { + ConfigUserControl configUserControl = service.ServiceProvider.GetKeyedService("ConfigUserControl"); + NamespaceObject namespaceObject = configUserControl.toolInitConfig.NamespaceObjects.Where(x => x.Assembly == configUserControl.toolInitConfig.CurrentAssembly + && x.TemplateType == "Entity").FirstOrDefault(); + + if (namespaceObject == null) return; + + string path = Path.Combine(namespaceObject.OutFilePath, tableName.StringToProerty() + namespaceObject.FileNameSuffix); + + //目录先处理对比Entity.cs + if (string.IsNullOrEmpty(path)) return; + + if (!File.Exists(path)) return; + List ents = new List(); + + string[] lines = File.ReadAllLines(path); + SysTableSchemaViewEntity ent; + bool key = false; + foreach (string l in lines) + { + if (l.Contains("[Key]")) + { + key = true; + continue; + } + if (!l.Contains("[Column")) continue; + ent = new SysTableSchemaViewEntity(); + ent.TableName = tableName; + ent.FieldName = l.Split('"')[1];//.Replace("[Column(\"", "").Replace("\")]", "").Trim(); + if (key) ent.Pk = 1; + ents.Add(ent); + key = false; + } + + + if (ents == null || ents.Count == 0) return; + string fileName = null; + + foreach (DataGridViewRow row in fieldNameGv.Rows) + { + row.DefaultCellStyle.BackColor = Color.White; + + fileName = (string)row.Cells[fieldNameCol.Index].Value; + if (string.IsNullOrEmpty(fileName)) continue; + + ent = ents.Where(x => x.FieldName == fileName).FirstOrDefault(); + if (ent == null) + { + row.DefaultCellStyle.BackColor = Color.Pink; + row.Cells[operationCol.Index].Value = 1; + } + else + { + if (ent.Pk > 0 && Convert.ToInt32(row.Cells[pkCol.Index].Value) == 0) + { + row.DefaultCellStyle.BackColor = Color.Red; + } + } + } + } + + private void dtSearchBut_Click(object sender, EventArgs e) + { + if (sysTableSchemas == null) return; + + var sysTable = DataTableConvertor.ToDataTable(sysTables.Where(x => x.TableName.Contains(dtTxt.Text.ToLower().Trim())).ToArray()); + tableNameGv.DataSource = sysTable; + } + + private void dtResetBut_Click(object sender, EventArgs e) + { + if (sysTableSchemas == null) return; + var sysTable = DataTableConvertor.ToDataTable(sysTables); + tableNameGv.DataSource = sysTable; + } + + private void fieldSearchBut_Click(object sender, EventArgs e) + { + if (sysTableSchemas == null) return; + if (sysTableField == null) return; + + sysTableFields = sysTableSchemas.Where(x => x.TableName == (string)tableNameGv.CurrentRow.Cells[tableNameCol.Name].Value + && x.FieldName.StartsWith(fieldTxt.Text.ToLower().Trim())).ToArray(); + + sysTableField = DataTableConvertor.ToDataTable(sysTableFields); + + fieldNameGv.DataSource = sysTableField; + } + + private void fieldResetBut_Click(object sender, EventArgs e) + { + if (sysTableSchemas == null) return; + if (sysTableField == null) return; + sysTableField.Rows.Clear(); + + sysTableFields = sysTableSchemas.Where(x => x.TableName == (string)tableNameGv.CurrentRow.Cells[tableNameCol.Name].Value).ToArray(); + + sysTableField = DataTableConvertor.ToDataTable(sysTableFields); + fieldNameGv.DataSource = sysTableField; + } + } + +} diff --git a/CloudBuilder.CodeGenerator/TableControl.resx b/CloudBuilder.CodeGenerator/TableControl.resx new file mode 100644 index 0000000..ab896ff --- /dev/null +++ b/CloudBuilder.CodeGenerator/TableControl.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/TemplateUserControl.Designer.cs b/CloudBuilder.CodeGenerator/TemplateUserControl.Designer.cs new file mode 100644 index 0000000..2a3b41e --- /dev/null +++ b/CloudBuilder.CodeGenerator/TemplateUserControl.Designer.cs @@ -0,0 +1,168 @@ +namespace CloudBuilder.CodeGenerator +{ + partial class TemplateUserControl + { + /// + /// 設計工具所需的變數。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清除任何使用中的資源。 + /// + /// 如果應該處置受控資源則為 true,否則為 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 元件設計工具產生的程式碼 + + /// + /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改 + /// 這個方法的內容。 + /// + private void InitializeComponent() + { + tableLayoutPanel1 = new TableLayoutPanel(); + kryptonHeader1 = new Krypton.Toolkit.KryptonHeader(); + tableLayoutPanel2 = new TableLayoutPanel(); + templatePathBut = new Krypton.Toolkit.KryptonButton(); + templatePathTxt = new Krypton.Toolkit.KryptonTextBox(); + kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + contextTxt = new Krypton.Toolkit.KryptonRichTextBox(); + saveFileBut = new Krypton.Toolkit.KryptonButton(); + tableLayoutPanel1.SuspendLayout(); + tableLayoutPanel2.SuspendLayout(); + SuspendLayout(); + // + // tableLayoutPanel1 + // + tableLayoutPanel1.ColumnCount = 1; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel1.Controls.Add(kryptonHeader1, 0, 0); + tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 1); + tableLayoutPanel1.Controls.Add(contextTxt, 0, 2); + tableLayoutPanel1.Dock = DockStyle.Fill; + tableLayoutPanel1.Location = new Point(0, 0); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 3; + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 35F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); + tableLayoutPanel1.Size = new Size(800, 600); + tableLayoutPanel1.TabIndex = 0; + // + // kryptonHeader1 + // + tableLayoutPanel1.SetColumnSpan(kryptonHeader1, 4); + kryptonHeader1.Dock = DockStyle.Fill; + kryptonHeader1.Location = new Point(4, 4); + kryptonHeader1.Margin = new Padding(4); + kryptonHeader1.Name = "kryptonHeader1"; + kryptonHeader1.Size = new Size(792, 27); + kryptonHeader1.TabIndex = 13; + kryptonHeader1.Values.Description = ""; + kryptonHeader1.Values.Heading = "模板加載"; + kryptonHeader1.Values.Image = null; + // + // tableLayoutPanel2 + // + tableLayoutPanel2.AutoSize = true; + tableLayoutPanel2.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel2.ColumnCount = 4; + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel2.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel2.Controls.Add(templatePathBut, 0, 0); + tableLayoutPanel2.Controls.Add(templatePathTxt, 0, 0); + tableLayoutPanel2.Controls.Add(kryptonLabel1, 0, 0); + tableLayoutPanel2.Controls.Add(saveFileBut, 3, 0); + tableLayoutPanel2.Dock = DockStyle.Fill; + tableLayoutPanel2.Location = new Point(3, 38); + tableLayoutPanel2.Name = "tableLayoutPanel2"; + tableLayoutPanel2.RowCount = 1; + tableLayoutPanel2.RowStyles.Add(new RowStyle()); + tableLayoutPanel2.Size = new Size(794, 31); + tableLayoutPanel2.TabIndex = 14; + // + // templatePathBut + // + templatePathBut.AutoSize = true; + templatePathBut.Location = new Point(646, 4); + templatePathBut.Margin = new Padding(4); + templatePathBut.Name = "templatePathBut"; + templatePathBut.Size = new Size(76, 22); + templatePathBut.TabIndex = 6; + templatePathBut.Values.Text = "选择文件(...)"; + templatePathBut.Click += templatePathBut_Click; + // + // templatePathTxt + // + templatePathTxt.Dock = DockStyle.Fill; + templatePathTxt.Location = new Point(87, 4); + templatePathTxt.Margin = new Padding(4); + templatePathTxt.Name = "templatePathTxt"; + templatePathTxt.Size = new Size(551, 23); + templatePathTxt.TabIndex = 5; + // + // kryptonLabel1 + // + kryptonLabel1.Location = new Point(4, 6); + kryptonLabel1.Margin = new Padding(4, 6, 4, 4); + kryptonLabel1.Name = "kryptonLabel1"; + kryptonLabel1.Size = new Size(75, 20); + kryptonLabel1.TabIndex = 1; + kryptonLabel1.Values.Text = "模板路径:"; + // + // contextTxt + // + contextTxt.Dock = DockStyle.Fill; + contextTxt.Location = new Point(3, 75); + contextTxt.Name = "contextTxt"; + contextTxt.Size = new Size(794, 522); + contextTxt.TabIndex = 15; + contextTxt.Text = ""; + // + // saveFileBut + // + saveFileBut.AutoSize = true; + saveFileBut.Location = new Point(730, 4); + saveFileBut.Margin = new Padding(4); + saveFileBut.Name = "saveFileBut"; + saveFileBut.Size = new Size(60, 22); + saveFileBut.TabIndex = 6; + saveFileBut.Values.Text = "保存文件"; + saveFileBut.Click += saveFileBut_Click; + // + // TemplateUserControl + // + AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(tableLayoutPanel1); + Name = "TemplateUserControl"; + Size = new Size(800, 600); + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + tableLayoutPanel2.ResumeLayout(false); + tableLayoutPanel2.PerformLayout(); + ResumeLayout(false); + } + + #endregion + + private TableLayoutPanel tableLayoutPanel1; + private Krypton.Toolkit.KryptonHeader kryptonHeader1; + private TableLayoutPanel tableLayoutPanel2; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private Krypton.Toolkit.KryptonTextBox templatePathTxt; + private Krypton.Toolkit.KryptonButton templatePathBut; + public Krypton.Toolkit.KryptonRichTextBox contextTxt; + private Krypton.Toolkit.KryptonButton saveFileBut; + } +} diff --git a/CloudBuilder.CodeGenerator/TemplateUserControl.cs b/CloudBuilder.CodeGenerator/TemplateUserControl.cs new file mode 100644 index 0000000..a125957 --- /dev/null +++ b/CloudBuilder.CodeGenerator/TemplateUserControl.cs @@ -0,0 +1,37 @@ +using CloudBuilder.Core.DependencyInjection.Form; +using Microsoft.AspNetCore.Routing.Template; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CloudBuilder.CodeGenerator +{ + public partial class TemplateUserControl : UserControl, IUserControl + { + public TemplateUserControl() + { + InitializeComponent(); + } + + private void templatePathBut_Click(object sender, EventArgs e) + { + OpenFileDialog ofd = new OpenFileDialog(); + if (DialogResult.OK == ofd.ShowDialog()) + { + templatePathTxt.Text = ofd.FileName; + contextTxt.Text = File.ReadAllText(ofd.FileName); + } + } + + private void saveFileBut_Click(object sender, EventArgs e) + { + File.WriteAllText(templatePathTxt.Text, contextTxt.Text); + } + } +} diff --git a/CloudBuilder.CodeGenerator/TemplateUserControl.resx b/CloudBuilder.CodeGenerator/TemplateUserControl.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CloudBuilder.CodeGenerator/TemplateUserControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CloudBuilder.CodeGenerator/Utility/RazorEngineHelper.cs b/CloudBuilder.CodeGenerator/Utility/RazorEngineHelper.cs new file mode 100644 index 0000000..3627ed6 --- /dev/null +++ b/CloudBuilder.CodeGenerator/Utility/RazorEngineHelper.cs @@ -0,0 +1,302 @@ +using CloudBuilder.CodeGenerator.Config; +using CloudBuilder.CodeGenerator.Data; +using CloudBuilder.Core.Application.Builders; +using CloudBuilder.Core.Authorization; +using CloudBuilder.Core.DatabaseAccessor; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.Extensions; +using CloudBuilder.Core.Service; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using RazorEngineCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace CloudBuilder.CodeGenerator.Utility +{ + public class RazorEngineHelper + { + public static string CompiledTemplate(string template, ModelData model) + { + ToolInitConfig toolInitConfig = ToolInitConfig.GetInstance(); + + IRazorEngine razorEngine = new RazorEngine(); + + List args = new List(); + if (toolInitConfig.AssemblyReferences != null) + { + foreach (var reference in toolInitConfig.AssemblyReferences) + { + if (string.IsNullOrEmpty(reference.AssemblyFileName)) continue; + + if (!File.Exists(reference.AssemblyFileName)) continue; + args.Add(reference.AssemblyFileName); + } + } + + template = toolInitConfig.Using + template; + + try + { + IRazorEngineCompiledTemplate compiledTemplate = razorEngine.Compile(template, builder => + { + //builder.AddAssemblyReferenceByName("System.Security"); // by name + foreach (string arg in args) + { + builder.AddAssemblyReference(Assembly.LoadFrom(arg)); + } + + Assembly[] assemblies = CloudBuilderBuilder.GetAssemblies(); + foreach (Assembly assembly in assemblies) + { + builder.AddAssemblyReference(assembly); + } + + builder.AddAssemblyReference(typeof(System.IO.File)); // by type + //builder.AddAssemblyReference(Assembly.Load("source")); // by reference + }); + + return compiledTemplate.Run(model); + } + catch (Exception ex) + { + throw ex; + } + + return null; + } + + public static ClassInfo[] PackIServiceClassInfo(Assembly assembly) + { + if (assembly == null) return null; + + var baseServiceType = typeof(IService); + + var typeServices = assembly.GetTypes() + .Where(type => type != baseServiceType && type.HasImplementedRawGeneric(baseServiceType)) + .Where(x => x.IsClass).ToList(); + + List classInfos = new List(); + List usings = new List(); + foreach (var implementType in typeServices) + { + ClassInfo classInfo = new ClassInfo(); + classInfo.ClassName = implementType.Name; + classInfo.InterfaceName = implementType.GetInterfaces().FirstOrDefault().Name; + if (!usings.Contains(implementType.GetInterfaces().FirstOrDefault().Namespace)) + { + usings.Add(implementType.GetInterfaces().FirstOrDefault().Namespace); + } + + var tors = implementType.GetConstructors(); + ClassConstructorInfo constructorInfo = new ClassConstructorInfo(); + List parameters = new List(); + foreach (var item in tors) + { + ParameterInfo[] Parameters = item.GetParameters(); + MethodParameter methodParameter; + foreach (var pi in Parameters) + { + methodParameter = new MethodParameter(); + methodParameter.ParameterName = pi.Name; + methodParameter.ParameterTypeName = pi.ParameterType.Name; + + if (!usings.Contains(pi.ParameterType.Namespace)) + { + usings.Add(pi.ParameterType.Namespace); + } + + parameters.Add(methodParameter); + } + } + constructorInfo.Parameters = parameters.ToArray(); + classInfo.ClassConstructorInfos = new ClassConstructorInfo[] { constructorInfo }; + + List classMethodInfos = new List(); + ClassMethodInfo classMethodInfo; + MethodInfo[] infos = implementType.GetMethods(); + foreach (var item in infos) + { + var permissionOperate = item.GetCustomAttribute(); + var allowAnonymous = item.GetCustomAttribute(); + if (permissionOperate == null && allowAnonymous == null) continue; + classMethodInfo = new ClassMethodInfo(); + classMethodInfo.MethodName = item.Name; + var httpGet = item.GetCustomAttribute(); + if (httpGet != null) classMethodInfo.HttpName = "[HttpGet]"; + + if (permissionOperate != null) + { + classMethodInfo.AuthorizeName = null; + classMethodInfo.PermissionOperateAttribute = permissionOperate; + } + else + { + classMethodInfo.PermissionOperate = null; + } + + var unitOfWork = item.GetCustomAttribute(); + if (unitOfWork == null) classMethodInfo.UnitOfWorkName = null; + + classMethodInfo.MethodReturnName = item.ReturnType.Name; + bool isValueType = MethodParameter.CheckValueType(item.ReturnType); + classMethodInfo.IsValueType = isValueType; + + if (!isValueType && !usings.Contains(item.ReturnType.Namespace)) + { + usings.Add(item.ReturnType.Namespace); + } + + + classMethodInfo.MethodReturnName = classMethodInfo.MethodReturnName == "Object" ? "dynamic" : classMethodInfo.MethodReturnName; + + ParameterInfo[] methodParameters = item.GetParameters(); + List methodParameterLs = new List(); + MethodParameter methodParameter; + foreach (var pi in methodParameters) + { + methodParameter = new MethodParameter(); + methodParameter.ParameterName = pi.Name; + methodParameter.ParameterTypeName = pi.ParameterType.Name; + + if (!usings.Contains(pi.ParameterType.Namespace)) + { + usings.Add(pi.ParameterType.Namespace); + } + + methodParameter.IsValueType = MethodParameter.CheckValueType(pi.ParameterType); + if (methodParameter.IsValueType) methodParameter.ParameterTypeName = methodParameter.ParameterTypeName; + methodParameterLs.Add(methodParameter); + } + classMethodInfo.Parameters = methodParameterLs.ToArray(); + classMethodInfos.Add(classMethodInfo); + } + classInfo.ClassMethodInfos = classMethodInfos.ToArray(); + classInfo.Usings = usings.ToArray(); + classInfos.Add(classInfo); + } + + return classInfos.ToArray(); + } + + public static ClassInfo[] PackTypeScriptClassInfo(Assembly assembly) + { + var typeDatas = assembly.GetTypes() + .Where(x => x.GetCustomAttribute() != null) + .Where(x => x.IsClass).ToList(); + + List dataInfos = new List(); + ClassInfo dataInfo; + List classPropertyInfos = new List(); + ClassPropertyInfo classPropertyInfo; + List baseTypes = new List(); + foreach (var implementType in typeDatas) + { + PackClassInfo(dataInfos, implementType); + } + + return dataInfos.ToArray(); + } + + public static void PackClassInfo(List dataInfos, Type implementType) + { + ClassInfo dataInfo = new ClassInfo(); + dataInfo.ClassName = implementType.Name; + + if (implementType.BaseType != typeof(ViewEntityBase) && + implementType.BaseType != typeof(object) + && implementType.BaseType != null && !implementType.BaseType.Name.StartsWith("EntityBase")) + { + dataInfo.ImplementTypeName = implementType.BaseType.Name; + PackClassInfo(dataInfos, implementType.BaseType); + } + + PropertyInfo[] properties = implementType.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); + List baseTypes = new List(); + List classPropertyInfos = new List(); + ClassPropertyInfo classPropertyInfo; + + ToolInitConfig toolInitConfig = ToolInitConfig.GetInstance(); + + foreach (var item in properties) + { + classPropertyInfo = new ClassPropertyInfo(); + classPropertyInfo.PropertyName = item.Name; + + Type type = item.PropertyType; + + bool isContinue = false; + foreach (string exculdePropertyType in toolInitConfig.ExculdePropertyTypes) + { + if (item.PropertyType.Name.Contains(exculdePropertyType)) + { + classPropertyInfo.PropertyTypeName = "any"; + isContinue = true; + break; + } + } + + if (isContinue) + { + classPropertyInfos.Add(classPropertyInfo); + continue; + } + if (item.PropertyType.BaseType != null && item.PropertyType.BaseType.Name == "Array") + { + string typeName = item.PropertyType.FullName.Replace("[]", string.Empty); + type = item.PropertyType.Assembly.GetType(typeName); + classPropertyInfo.IsValueType = MethodParameter.CheckValueType(type); + classPropertyInfo.PropertyTypeName = type.Name + "[]"; + } + else if (item.PropertyType.Name == "List`1") + { + string typeName = item.PropertyType.FullName.Replace("[[", "|").Replace(",", "|").Split('|')[1]; + type = item.PropertyType.Assembly.GetType(typeName); + classPropertyInfo.IsValueType = MethodParameter.CheckValueType(type); + classPropertyInfo.PropertyTypeName = type.Name + "[]"; + } + + else + { + classPropertyInfo.IsValueType = MethodParameter.CheckValueType(item.PropertyType); + classPropertyInfo.PropertyTypeName = item.PropertyType.Name; + } + if (!classPropertyInfo.IsValueType) + { + if (!baseTypes.Contains(type.Name)) + baseTypes.Add(type.Name); + PackClassInfo(dataInfos, type); + } + + classPropertyInfos.Add(classPropertyInfo); + } + dataInfo.ClassProperties = classPropertyInfos.ToArray(); + if (baseTypes.Count > 0) + dataInfo.Usings = baseTypes.ToArray(); + + FieldInfo[] fields = implementType.GetFields(); + List fieldInfos = new List(); + ClassFieldInfo classFieldInfo; + + foreach (var item in fields) + { + if (!item.IsStatic) continue; + bool IsValueType = MethodParameter.CheckValueType(item.FieldType); + if (!IsValueType) continue; + classFieldInfo = new ClassFieldInfo(); + classFieldInfo.IsValueType = IsValueType; + classFieldInfo.FieldName = item.Name; + classFieldInfo.FieldTypeName = item.FieldType.Name; + classFieldInfo.FieldValue = Convert.ToString(item.GetValue(null)); + fieldInfos.Add(classFieldInfo); + } + dataInfo.ClassFields = fieldInfos.ToArray(); + + dataInfos.Add(dataInfo); + } + } +} diff --git a/CloudBuilder.CodeGenerator/appsettings.json b/CloudBuilder.CodeGenerator/appsettings.json new file mode 100644 index 0000000..3e3f7ff --- /dev/null +++ b/CloudBuilder.CodeGenerator/appsettings.json @@ -0,0 +1,23 @@ +{ + "CloudBuilder": { + "DbContexts": { + "MasterDbContext": { + "DbContextTypeName": "MasterDbContext", + "ConnectionString": "Server=localhost\\SQLEXPRESS;Database=Furion_dev;User=sa;Password=owen123456;MultipleActiveResultSets=True;TrustServerCertificate=true", + "DatabaseType": "SqlServer", + "LazyLoadingProxiesEnabled": true, + "AuditEntityEnabled": true, + "AutoMigrationEnabled": true + }, + "SecondaryDbContext": { + "DbContextTypeName": "SecondaryDbContext", + "ConnectionString": "Server=localhost\\SQLEXPRESS;Database=Furion_dev;User=sa;Password=owen123456;MultipleActiveResultSets=True;TrustServerCertificate=true", + "DatabaseType": "SqlServer", + "LazyLoadingProxiesEnabled": true, + "AuditEntityEnabled": true, + "AutoMigrationEnabled": true + } + } + }, + "AllowedHosts": "*" +} diff --git a/CodeGenerator.sln b/CodeGenerator.sln new file mode 100644 index 0000000..26328ca --- /dev/null +++ b/CodeGenerator.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.37111.16 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeGenerator", "CodeGenerator\CodeGenerator.csproj", "{98461068-4E23-136C-C53A-83F0DF4A6EFD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {98461068-4E23-136C-C53A-83F0DF4A6EFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {98461068-4E23-136C-C53A-83F0DF4A6EFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98461068-4E23-136C-C53A-83F0DF4A6EFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {98461068-4E23-136C-C53A-83F0DF4A6EFD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B758090B-1A94-4803-9CDC-A3A611F46C11} + EndGlobalSection +EndGlobal diff --git a/CodeGenerator/.vs/CodeGenerator/CopilotIndices/17.14.1641.39856/CodeChunks.db b/CodeGenerator/.vs/CodeGenerator/CopilotIndices/17.14.1641.39856/CodeChunks.db new file mode 100644 index 0000000000000000000000000000000000000000..b7ed928cdbae211fe40b9049dda5bf667957b9df GIT binary patch literal 81920 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 ZCtrJRFj&pr?&_AgX&TL<-Zogs{{ZE*K9~Ri literal 0 HcmV?d00001 diff --git a/CodeGenerator/.vs/CodeGenerator/DesignTimeBuild/.dtbcache.v2 b/CodeGenerator/.vs/CodeGenerator/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..75b14a3da0744ec3a8ada9adcdd406d9df9b7867 GIT binary patch literal 169720 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 Y^Js*lDIw9M#IRF3v literal 0 HcmV?d00001 diff --git a/CodeGenerator/.vs/ProjectEvaluation/codegenerator.metadata.v9.bin b/CodeGenerator/.vs/ProjectEvaluation/codegenerator.metadata.v9.bin new file mode 100644 index 0000000000000000000000000000000000000000..b279c1f15188ce0f07ad73ed5ece7ccdfab02e21 GIT binary patch literal 1185 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 literal 0 HcmV?d00001 diff --git a/CodeGenerator/.vs/ProjectEvaluation/codegenerator.strings.v9.bin b/CodeGenerator/.vs/ProjectEvaluation/codegenerator.strings.v9.bin new file mode 100644 index 0000000000000000000000000000000000000000..f6d67ebdb3b1feac3ffa53b16d3412fd3ad2e1bd GIT binary patch literal 123866 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 e_p1j7JJovi(NOb7O5+as3CexS`$v literal 0 HcmV?d00001 diff --git a/CodeGenerator/CodeGenerator.csproj b/CodeGenerator/CodeGenerator.csproj new file mode 100644 index 0000000..a1f6658 --- /dev/null +++ b/CodeGenerator/CodeGenerator.csproj @@ -0,0 +1,50 @@ + + + + Exe + net8.0-windows + enable + enable + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + ..\CloudBuilder.CodeGenerator\bin\Debug\net8.0-windows\CloudBuilder.CodeGenerator.dll + + + ..\Lib\CloudBuilder.Core.dll + + + + diff --git a/CodeGenerator/Config/tool-init-config.xml b/CodeGenerator/Config/tool-init-config.xml new file mode 100644 index 0000000..7c8b93c --- /dev/null +++ b/CodeGenerator/Config/tool-init-config.xml @@ -0,0 +1,300 @@ + + + D:\NET8\Templates + CloudBuilder.Hr + @using CloudBuilder.CodeGenerator.Config; + @using CloudBuilder.CodeGenerator.Data; + @using CloudBuilder.CodeGenerator.Entity; + @using CloudBuilder.Core.Application.Builders; + @using CloudBuilder.Core.DatabaseAccessor.Entity; + @using CloudBuilder.Core.DependencyInjection.Form; + @using CloudBuilder.Core.Extensions; + @using CloudBuilder.Core.Utility; + @using Microsoft.Extensions.DependencyInjection; + @using System.Data; + @using System; + @using System.Reflection; + + + Request + Request.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Request\Security + CloudBuilder.Request + CloudBuilder.Request.Security + Request.auto.cs + + + + Request + Request.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Request\Master + CloudBuilder.Request + CloudBuilder.Request.Master + Request.auto.cs + + + + Request + Request.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Request\Hr + CloudBuilder.Request + CloudBuilder.Request.Hr + Request.auto.cs + + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Entity + CloudBuilder.Master + CloudBuilder.Master + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Entity + CloudBuilder.Master + CloudBuilder.Master + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Service + CloudBuilder.Master + CloudBuilder.Master + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Policy + CloudBuilder.Master + CloudBuilder.Master + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\Entity + CloudBuilder.Master + CloudBuilder.Master + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master\SearchCriteria + CloudBuilder.Master + CloudBuilder.Master + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Master.Service + CloudBuilder.Master + CloudBuilder.Master + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Master + CloudBuilder.Master + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Master + CloudBuilder.Master.Service + CloudBuilder.Web.Entry.Controllers.Master + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\master + CloudBuilder.Master.Service + CloudBuilder.Web.Entry.Controllers.Master + .ts + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Entity + CloudBuilder.Security + CloudBuilder.Security + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Entity + CloudBuilder.Security + CloudBuilder.Security + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Service + CloudBuilder.Security + CloudBuilder.Security + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Policy + CloudBuilder.Security + CloudBuilder.Security + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\Entity + CloudBuilder.Security + CloudBuilder.Security + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security\SearchCriteria + CloudBuilder.Security + CloudBuilder.Security + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Security.Service + CloudBuilder.Security + CloudBuilder.Security + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Security + CloudBuilder.Security + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Security + CloudBuilder.Security.Service + CloudBuilder.Web.Entry.Controllers.Security + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\security + CloudBuilder.Security.Service + CloudBuilder.Web.Entry.Controllers.Security + .ts + + + Entity + IEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Entity + CloudBuilder.Hr + CloudBuilder.Hr + Entity.auto.cs + + + IEntityKey + IEntityKey.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Entity + CloudBuilder.Hr + CloudBuilder.Hr + EntityKey.auto.cs + + + IService + IService.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Service + CloudBuilder.Hr + CloudBuilder.Hr + Service.auto.cs + I + + + Permission + Permission.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Policy + CloudBuilder.Hr + CloudBuilder.Hr + PermissionPolicy.auto.cs + + + RegistEntity + RegistEntity.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\Entity + CloudBuilder.Hr + CloudBuilder.Hr + RegistEntity.auto.cs + + + SearchCriteria + SearchCriteria.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr\SearchCriteria + CloudBuilder.Hr + CloudBuilder.Hr + SearchCriteria.auto.cs + + + Service + Service.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Hr.Service + CloudBuilder.Hr + CloudBuilder.Hr + Service.auto.cs + + + TypeScript + TypeScript.cshtml + D:\NET8\Webmaster\src\data\auto + CloudBuilder.Hr + CloudBuilder.Hr + .ts + + + Controller + Controller.cshtml + D:\NET8\CloudBuilder\CloudBuilder.Web.Entry\Controllers\Hr + CloudBuilder.Hr.Service + CloudBuilder.Web.Entry.Controllers.Hr + Controller.auto.cs + + + TypeScriptService + TypeScriptService.cshtml + D:\NET8\Webmaster\src\service\hr + CloudBuilder.Hr.Service + CloudBuilder.Web.Entry.Controllers.Hr + .ts + + + + + D:\NET8\CloudBuilder\CloudBuilder.Security.Service\bin\Debug\net8.0\CloudBuilder.Security.Service.dll + + + D:\NET8\CloudBuilder\CloudBuilder.Security\bin\Debug\net8.0\CloudBuilder.Security.dll + + + + Dictionary + + diff --git a/CodeGenerator/Program.cs b/CodeGenerator/Program.cs new file mode 100644 index 0000000..b06c257 --- /dev/null +++ b/CodeGenerator/Program.cs @@ -0,0 +1,180 @@ +// See https://aka.ms/new-console-template for more information +using CloudBuilder.CodeGenerator.Config; +using CloudBuilder.CodeGenerator.Data; +using CloudBuilder.CodeGenerator.Utility; +using CloudBuilder.Core.Application.Builders; +using CloudBuilder.Core.Authorization; +using CloudBuilder.Core.DatabaseAccessor; +using CloudBuilder.Core.DatabaseAccessor.Entity; +using CloudBuilder.Core.Extensions; +using CloudBuilder.Core.Service; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Connections; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using RazorEngineCore; +using System.Diagnostics; +using System.Reflection; +using static System.Net.Mime.MediaTypeNames; + +public partial class Program +{ + static void Main(string[] args) + { + try + { + Assembly assembly = null; + + if (args != null && args.Length > 0) + { + Console.WriteLine(args[0]); + assembly = Assembly.LoadFrom(args[0]); + } + + if (assembly == null) return; + + ModelData modelData = null; + ToolInitConfig toolInitConfig = ToolInitConfig.GetInstance(); + string template = null; + string outputText = null; + string outputFileName = null; + string logFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log\\log.txt"); + + ClassInfo[] dataInfos = RazorEngineHelper.PackTypeScriptClassInfo(assembly); + + foreach (var item in dataInfos) + { + modelData = new ModelData(); + modelData.ClassInfo = item; + modelData.ClassInfos = new ClassInfo[] { item }; + modelData.NamespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.TemplateType == "TypeScript" && x.Assembly == Path.GetFileNameWithoutExtension(assembly.Location)).FirstOrDefault(); + if (modelData.NamespaceObject == null) continue; + + outputFileName = Path.Combine(modelData.NamespaceObject.OutFilePath, item.ClassName.StringToProtectedProerty() + modelData.NamespaceObject.FileNameSuffix); + if (string.IsNullOrEmpty(outputFileName)) continue; + + template = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, modelData.NamespaceObject.TemplateFileName)); + if (string.IsNullOrEmpty(template)) continue; + + outputText = RazorEngineHelper.CompiledTemplate(template, modelData); + if (string.IsNullOrEmpty(outputText)) continue; + + if (!Directory.Exists(Path.GetDirectoryName(outputFileName))) Directory.CreateDirectory(Path.GetDirectoryName(outputFileName)); + + File.WriteAllText(outputFileName, outputText); + + + if (!Directory.Exists(Path.GetDirectoryName(logFileName))) Directory.CreateDirectory(Path.GetDirectoryName(logFileName)); + using (StreamWriter w = File.AppendText(logFileName)) + { + w.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}]Succeed:" + outputFileName); + } + } + + template = null; + outputText = null; + outputFileName = null; + + ClassInfo[] classInfos = RazorEngineHelper.PackIServiceClassInfo(assembly); + + + foreach (var item in classInfos) + { + //没有要生成公共方法的接口不处理 + if (item.ClassMethodInfos.Length == 0) continue; + + modelData = new ModelData(); + modelData.ClassInfo = item; + + if (item.ClassMethodInfos.Select(x => x.MethodName).Where(x => x.StartsWith("PrintBy")).Count() > 0) + { + modelData.ClassInfo.IsDownload = true; + } + + modelData.ClassInfos = new ClassInfo[] { item }; + + modelData.NamespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.TemplateType == "Controller" && x.Assembly == Path.GetFileNameWithoutExtension(assembly.Location)).FirstOrDefault(); + if (modelData.NamespaceObject == null) continue; + + outputFileName = Path.Combine(modelData.NamespaceObject.OutFilePath, item.ClassName.Replace("Service", "") + modelData.NamespaceObject.FileNameSuffix); + if (string.IsNullOrEmpty(outputFileName)) continue; + + template = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, modelData.NamespaceObject.TemplateFileName)); + if (string.IsNullOrEmpty(template)) continue; + + outputText = RazorEngineHelper.CompiledTemplate(template, modelData); + if (string.IsNullOrEmpty(outputText)) continue; + + if (!Directory.Exists(Path.GetDirectoryName(outputFileName))) Directory.CreateDirectory(Path.GetDirectoryName(outputFileName)); + + File.WriteAllText(outputFileName, outputText); + + + if (!Directory.Exists(Path.GetDirectoryName(logFileName))) Directory.CreateDirectory(Path.GetDirectoryName(logFileName)); + using (StreamWriter w = File.AppendText(logFileName)) + { + w.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}]Succeed:" + outputFileName); + } + //================================CloudBuilder.Security.Service >.Security + modelData.NamespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.TemplateType == "Request" && + Path.GetFileNameWithoutExtension(assembly.Location).Contains(x.Namespace.Replace(x.Assembly, ""))).FirstOrDefault(); + if (modelData.NamespaceObject == null) continue; + + outputFileName = Path.Combine(modelData.NamespaceObject.OutFilePath, item.ClassName.Replace("Service", "") + modelData.NamespaceObject.FileNameSuffix); + if (string.IsNullOrEmpty(outputFileName)) continue; + + template = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, modelData.NamespaceObject.TemplateFileName)); + if (string.IsNullOrEmpty(template)) continue; + + outputText = RazorEngineHelper.CompiledTemplate(template, modelData); + if (string.IsNullOrEmpty(outputText)) continue; + + if (!Directory.Exists(Path.GetDirectoryName(outputFileName))) Directory.CreateDirectory(Path.GetDirectoryName(outputFileName)); + + File.WriteAllText(outputFileName, outputText); + + + if (!Directory.Exists(Path.GetDirectoryName(logFileName))) Directory.CreateDirectory(Path.GetDirectoryName(logFileName)); + using (StreamWriter w = File.AppendText(logFileName)) + { + w.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}]Succeed:" + outputFileName); + } + //================================ + modelData.NamespaceObject = toolInitConfig.NamespaceObjects.Where(x => x.TemplateType == "TypeScriptService" && x.Assembly == Path.GetFileNameWithoutExtension(assembly.Location)).FirstOrDefault(); + if (modelData.NamespaceObject == null) continue; + + outputFileName = Path.Combine(modelData.NamespaceObject.OutFilePath, item.ClassName.StringToProtectedProerty() + modelData.NamespaceObject.FileNameSuffix); + if (string.IsNullOrEmpty(outputFileName)) continue; + + template = File.ReadAllText(Path.Combine(toolInitConfig.TemplatePath, modelData.NamespaceObject.TemplateFileName)); + if (string.IsNullOrEmpty(template)) continue; + + outputText = RazorEngineHelper.CompiledTemplate(template, modelData); + if (string.IsNullOrEmpty(outputText)) continue; + + if (!Directory.Exists(Path.GetDirectoryName(outputFileName))) Directory.CreateDirectory(Path.GetDirectoryName(outputFileName)); + + File.WriteAllText(outputFileName, outputText); + + + if (!Directory.Exists(Path.GetDirectoryName(logFileName))) Directory.CreateDirectory(Path.GetDirectoryName(logFileName)); + using (StreamWriter w = File.AppendText(logFileName)) + { + w.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}]Succeed:" + outputFileName); + } + } + + + + } + catch (Exception ex) + { + string logFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log\\log.txt"); + if (!Directory.Exists(Path.GetDirectoryName(logFileName))) Directory.CreateDirectory(Path.GetDirectoryName(logFileName)); + using (StreamWriter w = File.AppendText(logFileName)) + { + w.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}]Exception:" + ex.Message); + } + } + } +} \ No newline at end of file diff --git a/CodeGenerator/Properties/launchSettings.json b/CodeGenerator/Properties/launchSettings.json new file mode 100644 index 0000000..66bb044 --- /dev/null +++ b/CodeGenerator/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "CodeGenerator": { + "commandName": "Project", + "commandLineArgs": "D:\\NET8\\CloudBuilder\\CloudBuilder.Security.Service\\bin\\Debug\\net8.0\\CloudBuilder.Security.Service.dll" + } + } +} \ No newline at end of file diff --git a/CodeGenerator/appsettings.json b/CodeGenerator/appsettings.json new file mode 100644 index 0000000..4c6f112 --- /dev/null +++ b/CodeGenerator/appsettings.json @@ -0,0 +1,83 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "CloudBuilder": { + "DbContexts": { + "MasterDbContext": { + "DbContextTypeName": "MasterDbContext", + "ConnectionString": "Server=localhost\\SQLEXPRESS;Database=Furion;User=sa;Password=owen123456;MultipleActiveResultSets=True;TrustServerCertificate=true", + "DatabaseType": "SqlServer", + "LazyLoadingProxiesEnabled": true, + "AuditEntityEnabled": true, + "AutoMigrationEnabled": true + }, + "SecondaryDbContext": { + "DbContextTypeName": "SecondaryDbContext", + "ConnectionString": "Server=localhost\\SQLEXPRESS;Database=Furion_dev;User=sa;Password=owen123456;MultipleActiveResultSets=True;TrustServerCertificate=true", + "DatabaseType": "SqlServer", + "LazyLoadingProxiesEnabled": true, + "AuditEntityEnabled": true, + "AutoMigrationEnabled": true + } + }, + "MailSender": { + "Host": "smtp.mxhichina.com", + "Port": 587, + "EnableSsl": true, + "DisplayName": "OSharp邮件发送", + "UserName": "osharpsender@66soft.net", + "Password": "OSharp147963" + }, + "Jwt": { + "Issuer": "Cloud Builder identity", + "Audience": "Cloud Builder", + "Secret": "{8619F7C3-B53C-4B85-99F0-983D351ECD82}", + "AccessExpireMins": 1440, //1天过期 + "RefreshExpireMins": 10080, // 7天 + "IsRefreshAbsoluteExpired": false + }, + "Redis": { + "Configuration": "localhost", + "InstanceName": "CloudBuilder:" + } + }, + "IpRateLimiting": { + "EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each + "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "IpWhitelist": [], //白名单 + "EndpointWhitelist": [], + "ClientWhitelist": [], + "HttpStatusCode": 200, + "QuotaExceededResponse": { + "Content": "{{\"code\":429,\"msg\":\"访问过于频繁,请稍后重试\",\"data\":null}}", + "ContentType": "application/json", + "StatusCode": 200 + }, + "GeneralRules": [ + { + "Endpoint": "*", + "Period": "1s", + "Limit": 5 + }, + { + "Endpoint": "*", + "Period": "1m", + "Limit": 50 + }, + { + "Endpoint": "*", + "Period": "12h", + "Limit": 500 + } + ] + + }, + "AllowedHosts": "*" +} diff --git a/Lib/CloudBuilder.Core.dll b/Lib/CloudBuilder.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..9951b888d8bc0d25b5db715a3d12cf547f626bbc GIT binary patch literal 224768 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 Q(N=Jgrt7)Czd8#1KkbX*WdHyG literal 0 HcmV?d00001