From 824e1f7b891a0fac7ce0c87d1177811fd0a268e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 3 Apr 2021 17:57:41 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99Start?= =?UTF-8?q?up?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OSharp.CodeGenerator/Data/Startup.cs | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 src/OSharp.CodeGenerator/Data/Startup.cs diff --git a/src/OSharp.CodeGenerator/Data/Startup.cs b/src/OSharp.CodeGenerator/Data/Startup.cs deleted file mode 100644 index bc0e8f9..0000000 --- a/src/OSharp.CodeGenerator/Data/Startup.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; - -namespace OSharp.CodeGenerator.Data -{ - class Startup - { - public void ConfigureServices(IServiceCollection services) - { - } - } -} -- Gitee From 3e1f8d0ee607d294d5a234e0ec719ce287bc37a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 3 Apr 2021 18:01:51 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0mahapps=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OSharp.CodeGenerator/App.xaml | 4 +--- src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/OSharp.CodeGenerator/App.xaml b/src/OSharp.CodeGenerator/App.xaml index 6779d8b..6a88aff 100644 --- a/src/OSharp.CodeGenerator/App.xaml +++ b/src/OSharp.CodeGenerator/App.xaml @@ -1,4 +1,4 @@ - - diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index a4d7f41..c7e83f6 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -9,9 +9,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive -- Gitee From 54b676a2cd470112473281fcde9615515a73a7b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 3 Apr 2021 20:13:30 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...SqliteDesignTimeDefaultDbContextFactory.cs | 26 ---- ...ner.cs => 20210403101318_Init.Designer.cs} | 36 +++++- ...6024343_Init.cs => 20210403101318_Init.cs} | 115 ++++++++++-------- .../DefaultDbContextModelSnapshot.cs | 34 +++++- 4 files changed, 124 insertions(+), 87 deletions(-) delete mode 100644 src/OSharp.CodeGenerator/Data/SqliteDesignTimeDefaultDbContextFactory.cs rename src/OSharp.CodeGenerator/Migrations/{20200826024343_Init.Designer.cs => 20210403101318_Init.Designer.cs} (89%) rename src/OSharp.CodeGenerator/Migrations/{20200826024343_Init.cs => 20210403101318_Init.cs} (52%) diff --git a/src/OSharp.CodeGenerator/Data/SqliteDesignTimeDefaultDbContextFactory.cs b/src/OSharp.CodeGenerator/Data/SqliteDesignTimeDefaultDbContextFactory.cs deleted file mode 100644 index e5d169e..0000000 --- a/src/OSharp.CodeGenerator/Data/SqliteDesignTimeDefaultDbContextFactory.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using Microsoft.Extensions.DependencyInjection; -using OSharp.Entity; - - -namespace OSharp.CodeGenerator.Data -{ - public class SqliteDesignTimeDefaultDbContextFactory : DesignTimeDbContextFactoryBase - { - public SqliteDesignTimeDefaultDbContextFactory() : base(null) - { } - - public SqliteDesignTimeDefaultDbContextFactory(IServiceProvider serviceProvider) - : base(serviceProvider) - { } - - protected override IServiceProvider CreateDesignTimeServiceProvider() - { - IServiceCollection services = new ServiceCollection(); - Startup startup = new Startup(); - startup.ConfigureServices(services); - IServiceProvider provider = services.BuildServiceProvider(); - return provider; - } - } -} diff --git a/src/OSharp.CodeGenerator/Migrations/20200826024343_Init.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.Designer.cs similarity index 89% rename from src/OSharp.CodeGenerator/Migrations/20200826024343_Init.Designer.cs rename to src/OSharp.CodeGenerator/Migrations/20210403101318_Init.Designer.cs index 507b666..8d5a46c 100644 --- a/src/OSharp.CodeGenerator/Migrations/20200826024343_Init.Designer.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.Designer.cs @@ -9,14 +9,14 @@ using OSharp.Entity; namespace OSharp.CodeGenerator.Migrations { [DbContext(typeof(DefaultDbContext))] - [Migration("20200826024343_Init")] + [Migration("20210403101318_Init")] partial class Init { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.1.7"); + .HasAnnotation("ProductVersion", "5.0.4"); modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => { @@ -43,7 +43,7 @@ namespace OSharp.CodeGenerator.Migrations b.HasIndex("TypeName") .IsUnique() - .HasName("ClassFullNameIndex"); + .HasDatabaseName("ClassFullNameIndex"); b.ToTable("Auth_EntityInfo"); }); @@ -90,6 +90,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsLocked") .HasColumnType("INTEGER"); + b.Property("IsSlaveDatabase") + .HasColumnType("INTEGER"); + b.Property("Name") .HasColumnType("TEXT"); @@ -97,7 +100,7 @@ namespace OSharp.CodeGenerator.Migrations b.HasIndex("Area", "Controller", "Action") .IsUnique() - .HasName("AreaControllerActionIndex"); + .HasDatabaseName("AreaControllerActionIndex"); b.ToTable("Auth_Function"); }); @@ -251,6 +254,10 @@ namespace OSharp.CodeGenerator.Migrations b.HasKey("Id"); + b.HasIndex("Key") + .IsUnique() + .HasDatabaseName("KeyIndex"); + b.ToTable("Systems_KeyValue"); }); @@ -261,6 +268,8 @@ namespace OSharp.CodeGenerator.Migrations .HasForeignKey("ModuleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("Module"); }); modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => @@ -270,6 +279,8 @@ namespace OSharp.CodeGenerator.Migrations .HasForeignKey("ProjectId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("Project"); }); modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => @@ -279,6 +290,23 @@ namespace OSharp.CodeGenerator.Migrations .HasForeignKey("EntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + { + b.Navigation("Entities"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => + { + b.Navigation("Modules"); }); #pragma warning restore 612, 618 } diff --git a/src/OSharp.CodeGenerator/Migrations/20200826024343_Init.cs b/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.cs similarity index 52% rename from src/OSharp.CodeGenerator/Migrations/20200826024343_Init.cs rename to src/OSharp.CodeGenerator/Migrations/20210403101318_Init.cs index d3bb02f..b70d96f 100644 --- a/src/OSharp.CodeGenerator/Migrations/20200826024343_Init.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.cs @@ -11,11 +11,11 @@ namespace OSharp.CodeGenerator.Migrations name: "Auth_EntityInfo", columns: table => new { - Id = table.Column(nullable: false), - Name = table.Column(nullable: false), - TypeName = table.Column(nullable: false), - AuditEnabled = table.Column(nullable: false), - PropertyJson = table.Column(nullable: false) + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + TypeName = table.Column(type: "TEXT", nullable: false), + AuditEnabled = table.Column(type: "INTEGER", nullable: false), + PropertyJson = table.Column(type: "TEXT", nullable: false) }, constraints: table => { @@ -26,20 +26,21 @@ namespace OSharp.CodeGenerator.Migrations name: "Auth_Function", columns: table => new { - Id = table.Column(nullable: false), - Name = table.Column(nullable: true), - Area = table.Column(nullable: true), - Controller = table.Column(nullable: true), - Action = table.Column(nullable: true), - IsController = table.Column(nullable: false), - IsAjax = table.Column(nullable: false), - AccessType = table.Column(nullable: false), - IsAccessTypeChanged = table.Column(nullable: false), - AuditOperationEnabled = table.Column(nullable: false), - AuditEntityEnabled = table.Column(nullable: false), - CacheExpirationSeconds = table.Column(nullable: false), - IsCacheSliding = table.Column(nullable: false), - IsLocked = table.Column(nullable: false) + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + Area = table.Column(type: "TEXT", nullable: true), + Controller = table.Column(type: "TEXT", nullable: true), + Action = table.Column(type: "TEXT", nullable: true), + IsController = table.Column(type: "INTEGER", nullable: false), + IsAjax = table.Column(type: "INTEGER", nullable: false), + AccessType = table.Column(type: "INTEGER", nullable: false), + IsAccessTypeChanged = table.Column(type: "INTEGER", nullable: false), + AuditOperationEnabled = table.Column(type: "INTEGER", nullable: false), + AuditEntityEnabled = table.Column(type: "INTEGER", nullable: false), + CacheExpirationSeconds = table.Column(type: "INTEGER", nullable: false), + IsCacheSliding = table.Column(type: "INTEGER", nullable: false), + IsSlaveDatabase = table.Column(type: "INTEGER", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false) }, constraints: table => { @@ -50,13 +51,13 @@ namespace OSharp.CodeGenerator.Migrations name: "CodeGen_CodeProject", columns: table => new { - Id = table.Column(nullable: false), - Name = table.Column(nullable: true), - Company = table.Column(nullable: true), - NamespacePrefix = table.Column(nullable: true), - SiteUrl = table.Column(nullable: true), - Creator = table.Column(nullable: true), - Copyright = table.Column(nullable: true) + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + Company = table.Column(type: "TEXT", nullable: true), + NamespacePrefix = table.Column(type: "TEXT", nullable: true), + SiteUrl = table.Column(type: "TEXT", nullable: true), + Creator = table.Column(type: "TEXT", nullable: true), + Copyright = table.Column(type: "TEXT", nullable: true) }, constraints: table => { @@ -67,11 +68,11 @@ namespace OSharp.CodeGenerator.Migrations name: "Systems_KeyValue", columns: table => new { - Id = table.Column(nullable: false), - ValueJson = table.Column(nullable: true), - ValueType = table.Column(nullable: true), - Key = table.Column(nullable: false), - IsLocked = table.Column(nullable: false) + Id = table.Column(type: "TEXT", nullable: false), + ValueJson = table.Column(type: "TEXT", nullable: true), + ValueType = table.Column(type: "TEXT", nullable: true), + Key = table.Column(type: "TEXT", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false) }, constraints: table => { @@ -82,10 +83,10 @@ namespace OSharp.CodeGenerator.Migrations name: "CodeGen_CodeModule", columns: table => new { - Id = table.Column(nullable: false), - Name = table.Column(nullable: true), - Display = table.Column(nullable: true), - ProjectId = table.Column(nullable: false) + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + Display = table.Column(type: "TEXT", nullable: true), + ProjectId = table.Column(type: "TEXT", nullable: false) }, constraints: table => { @@ -102,12 +103,12 @@ namespace OSharp.CodeGenerator.Migrations name: "CodeGen_CodeEntity", columns: table => new { - Id = table.Column(nullable: false), - Name = table.Column(nullable: true), - Display = table.Column(nullable: true), - PrimaryKeyTypeFullName = table.Column(nullable: true), - IsDataAuth = table.Column(nullable: false), - ModuleId = table.Column(nullable: false) + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + Display = table.Column(type: "TEXT", nullable: true), + PrimaryKeyTypeFullName = table.Column(type: "TEXT", nullable: true), + IsDataAuth = table.Column(type: "INTEGER", nullable: false), + ModuleId = table.Column(type: "TEXT", nullable: false) }, constraints: table => { @@ -124,19 +125,19 @@ namespace OSharp.CodeGenerator.Migrations name: "CodeGen_CodeProperty", columns: table => new { - Id = table.Column(nullable: false), - Name = table.Column(nullable: true), - TypeName = table.Column(nullable: true), - Display = table.Column(nullable: true), - IsRequired = table.Column(nullable: true), - MaxLength = table.Column(nullable: true), - MinLength = table.Column(nullable: true), - IsNullable = table.Column(nullable: false), - IsVirtual = table.Column(nullable: false), - IsForeignKey = table.Column(nullable: false), - IsInputDto = table.Column(nullable: false), - IsOutputDto = table.Column(nullable: false), - EntityId = table.Column(nullable: false) + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + TypeName = table.Column(type: "TEXT", nullable: true), + Display = table.Column(type: "TEXT", nullable: true), + IsRequired = table.Column(type: "INTEGER", nullable: true), + MaxLength = table.Column(type: "INTEGER", nullable: true), + MinLength = table.Column(type: "INTEGER", nullable: true), + IsNullable = table.Column(type: "INTEGER", nullable: false), + IsVirtual = table.Column(type: "INTEGER", nullable: false), + IsForeignKey = table.Column(type: "INTEGER", nullable: false), + IsInputDto = table.Column(type: "INTEGER", nullable: false), + IsOutputDto = table.Column(type: "INTEGER", nullable: false), + EntityId = table.Column(type: "TEXT", nullable: false) }, constraints: table => { @@ -175,6 +176,12 @@ namespace OSharp.CodeGenerator.Migrations name: "IX_CodeGen_CodeProperty_EntityId", table: "CodeGen_CodeProperty", column: "EntityId"); + + migrationBuilder.CreateIndex( + name: "KeyIndex", + table: "Systems_KeyValue", + column: "Key", + unique: true); } protected override void Down(MigrationBuilder migrationBuilder) diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index 3bffb77..3aebf73 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -14,7 +14,7 @@ namespace OSharp.CodeGenerator.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "3.1.7"); + .HasAnnotation("ProductVersion", "5.0.4"); modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => { @@ -41,7 +41,7 @@ namespace OSharp.CodeGenerator.Migrations b.HasIndex("TypeName") .IsUnique() - .HasName("ClassFullNameIndex"); + .HasDatabaseName("ClassFullNameIndex"); b.ToTable("Auth_EntityInfo"); }); @@ -88,6 +88,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsLocked") .HasColumnType("INTEGER"); + b.Property("IsSlaveDatabase") + .HasColumnType("INTEGER"); + b.Property("Name") .HasColumnType("TEXT"); @@ -95,7 +98,7 @@ namespace OSharp.CodeGenerator.Migrations b.HasIndex("Area", "Controller", "Action") .IsUnique() - .HasName("AreaControllerActionIndex"); + .HasDatabaseName("AreaControllerActionIndex"); b.ToTable("Auth_Function"); }); @@ -249,6 +252,10 @@ namespace OSharp.CodeGenerator.Migrations b.HasKey("Id"); + b.HasIndex("Key") + .IsUnique() + .HasDatabaseName("KeyIndex"); + b.ToTable("Systems_KeyValue"); }); @@ -259,6 +266,8 @@ namespace OSharp.CodeGenerator.Migrations .HasForeignKey("ModuleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("Module"); }); modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => @@ -268,6 +277,8 @@ namespace OSharp.CodeGenerator.Migrations .HasForeignKey("ProjectId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("Project"); }); modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => @@ -277,6 +288,23 @@ namespace OSharp.CodeGenerator.Migrations .HasForeignKey("EntityId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + { + b.Navigation("Entities"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => + { + b.Navigation("Modules"); }); #pragma warning restore 612, 618 } -- Gitee From a78ff20cc2f7792f685e6a5f2e338be00e38cde1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 3 Apr 2021 20:18:30 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/Entities/CodeEntity.cs | 5 +++- .../Data/Entities/CodeModule.cs | 4 ++- .../Data/Entities/CodeProject.cs | 16 +++++++---- .../Data/Entities/CodeProperty.cs | 5 +++- .../Data/Entities/KeyValueConfiguration.cs | 27 ------------------- 5 files changed, 22 insertions(+), 35 deletions(-) delete mode 100644 src/OSharp.CodeGeneration/Data/Entities/KeyValueConfiguration.cs diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs index 0140a6a..cc274f6 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs @@ -10,7 +10,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; - +using System.ComponentModel.DataAnnotations; using OSharp.Entity; @@ -26,16 +26,19 @@ namespace OSharp.CodeGeneration.Entities /// /// 获取或设置 类型名称 /// + [Required(), StringLength(200)] public string Name { get; set; } /// /// 获取或设置 类型显示名称 /// + [Required(), StringLength(200)] public string Display { get; set; } /// /// 获取或设置 主键类型全名 /// + [Required(), StringLength(500)] public string PrimaryKeyTypeFullName { get; set; } /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs index 99f25c4..058436d 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs @@ -10,7 +10,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; - +using System.ComponentModel.DataAnnotations; using OSharp.Entity; @@ -26,11 +26,13 @@ namespace OSharp.CodeGeneration.Entities /// /// 获取或设置 模块名称 /// + [Required(), StringLength(200)] public string Name { get; set; } /// /// 获取或设置 模块显示名称 /// + [Required(), StringLength(200)] public string Display { get; set; } /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs index 2f4da41..e603cb7 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs @@ -10,7 +10,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; - +using System.ComponentModel.DataAnnotations; using OSharp.Data; using OSharp.Entity; @@ -32,31 +32,37 @@ namespace OSharp.CodeGeneration.Entities /// /// 获取或设置 项目名称 /// + [Required(), StringLength(200)] public string Name { get; set; } /// - /// 获取或设置 公司 + /// 获取或设置 项目命名空间前缀,通常形如“公司.项目” /// - public string Company { get; set; } + [Required(), StringLength(200)] + public string NamespacePrefix { get; set; } /// - /// 获取或设置 项目命名空间前缀,通常形如“公司.项目” + /// 获取或设置 公司 /// - public string NamespacePrefix { get; set; } + [StringLength(200)] + public string Company { get; set; } /// /// 获取或设置 站点地址 /// + [StringLength(500)] public string SiteUrl { get; set; } /// /// 获取或设置 创建者 /// + [StringLength(200)] public string Creator { get; set; } /// /// 获取或设置 Copyright /// + [StringLength(500)] public string Copyright { get; set; } /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs index 76991c8..e303dc7 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs @@ -9,7 +9,7 @@ using System; using System.ComponentModel; - +using System.ComponentModel.DataAnnotations; using OSharp.Entity; @@ -25,16 +25,19 @@ namespace OSharp.CodeGeneration.Entities /// /// 获取或设置 属性名称 /// + [Required(), StringLength(200)] public string Name { get; set; } /// /// 获取或设置 属性类型名称 /// + [Required(), StringLength(500)] public string TypeName { get; set; } /// /// 获取或设置 显示名称 /// + [Required(), StringLength(200)] public string Display { get; set; } /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/KeyValueConfiguration.cs b/src/OSharp.CodeGeneration/Data/Entities/KeyValueConfiguration.cs deleted file mode 100644 index ab5a80b..0000000 --- a/src/OSharp.CodeGeneration/Data/Entities/KeyValueConfiguration.cs +++ /dev/null @@ -1,27 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) 2014-2020 OSharp. All rights reserved. -// -// http://www.osharp.org -// 郭明锋 -// 2020-05-05 0:00 -// ----------------------------------------------------------------------- - -using System; - -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -using OSharp.Core.Systems; -using OSharp.Entity; - - -namespace OSharp.CodeGeneration.Data.Entities -{ - public class KeyValueConfiguration : EntityTypeConfigurationBase - { - /// 重写以实现实体类型各个属性的数据库配置 - /// 实体类型创建器 - public override void Configure(EntityTypeBuilder builder) - { } - } -} -- Gitee From 07ea1f89610169969fae241da10faa9df6a304fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 3 Apr 2021 20:55:40 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=B1=82=E5=AE=9E=E7=8E=B0=E7=B1=BB=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/DataService.Entity.cs | 12 ++++++++ .../Data/DataService.Module.cs | 12 ++++++++ .../Data/DataService.Project.cs | 12 ++++++++ .../Data/DataService.Property.cs | 12 ++++++++ src/OSharp.CodeGeneration/Data/DataService.cs | 29 +++++++++++++++++++ .../Data/IDataContract.cs | 16 ++++++++++ ...ner.cs => 20210403122046_Init.Designer.cs} | 26 ++++++++++++++++- ...3101318_Init.cs => 20210403122046_Init.cs} | 28 +++++++++--------- .../DefaultDbContextModelSnapshot.cs | 24 +++++++++++++++ 9 files changed, 156 insertions(+), 15 deletions(-) create mode 100644 src/OSharp.CodeGeneration/Data/DataService.Entity.cs create mode 100644 src/OSharp.CodeGeneration/Data/DataService.Module.cs create mode 100644 src/OSharp.CodeGeneration/Data/DataService.Project.cs create mode 100644 src/OSharp.CodeGeneration/Data/DataService.Property.cs create mode 100644 src/OSharp.CodeGeneration/Data/DataService.cs create mode 100644 src/OSharp.CodeGeneration/Data/IDataContract.cs rename src/OSharp.CodeGenerator/Migrations/{20210403101318_Init.Designer.cs => 20210403122046_Init.Designer.cs} (91%) rename src/OSharp.CodeGenerator/Migrations/{20210403101318_Init.cs => 20210403122046_Init.cs} (92%) diff --git a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs b/src/OSharp.CodeGeneration/Data/DataService.Entity.cs new file mode 100644 index 0000000..7a95b17 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/DataService.Entity.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSharp.CodeGeneration.Data +{ + public partial class DataService + { + } +} diff --git a/src/OSharp.CodeGeneration/Data/DataService.Module.cs b/src/OSharp.CodeGeneration/Data/DataService.Module.cs new file mode 100644 index 0000000..7a95b17 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/DataService.Module.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSharp.CodeGeneration.Data +{ + public partial class DataService + { + } +} diff --git a/src/OSharp.CodeGeneration/Data/DataService.Project.cs b/src/OSharp.CodeGeneration/Data/DataService.Project.cs new file mode 100644 index 0000000..7a95b17 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/DataService.Project.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSharp.CodeGeneration.Data +{ + public partial class DataService + { + } +} diff --git a/src/OSharp.CodeGeneration/Data/DataService.Property.cs b/src/OSharp.CodeGeneration/Data/DataService.Property.cs new file mode 100644 index 0000000..7a95b17 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/DataService.Property.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSharp.CodeGeneration.Data +{ + public partial class DataService + { + } +} diff --git a/src/OSharp.CodeGeneration/Data/DataService.cs b/src/OSharp.CodeGeneration/Data/DataService.cs new file mode 100644 index 0000000..9c4ef38 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/DataService.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using OSharp.CodeGeneration.Entities; +using OSharp.Entity; + +namespace OSharp.CodeGeneration.Data +{ + public partial class DataService : IDataContract + { + private readonly IServiceProvider _serviceProvider; + + public DataService(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + protected IRepository PeojectRepository => _serviceProvider.GetService>(); + + protected IRepository ModuleRepository => _serviceProvider.GetService>(); + + protected IRepository EntityRepository => _serviceProvider.GetService>(); + + protected IRepository CodePropertyRepository => _serviceProvider.GetService>(); + } +} diff --git a/src/OSharp.CodeGeneration/Data/IDataContract.cs b/src/OSharp.CodeGeneration/Data/IDataContract.cs new file mode 100644 index 0000000..eedb5c9 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/IDataContract.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSharp.CodeGeneration.Data +{ + /// + /// 数据服务契约 + /// + public interface IDataContract + { + + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs similarity index 91% rename from src/OSharp.CodeGenerator/Migrations/20210403101318_Init.Designer.cs rename to src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs index 8d5a46c..42b02ce 100644 --- a/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.Designer.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.Designer.cs @@ -9,7 +9,7 @@ using OSharp.Entity; namespace OSharp.CodeGenerator.Migrations { [DbContext(typeof(DefaultDbContext))] - [Migration("20210403101318_Init")] + [Migration("20210403122046_Init")] partial class Init { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -112,6 +112,8 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Display") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("IsDataAuth") @@ -121,9 +123,13 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("PrimaryKeyTypeFullName") + .IsRequired() + .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); @@ -140,9 +146,13 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Display") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("ProjectId") @@ -162,21 +172,29 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Company") + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Copyright") + .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("Creator") + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("NamespacePrefix") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("SiteUrl") + .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); @@ -191,6 +209,8 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Display") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("EntityId") @@ -221,9 +241,13 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("INTEGER"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("TypeName") + .IsRequired() + .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); diff --git a/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.cs b/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.cs similarity index 92% rename from src/OSharp.CodeGenerator/Migrations/20210403101318_Init.cs rename to src/OSharp.CodeGenerator/Migrations/20210403122046_Init.cs index b70d96f..f02818b 100644 --- a/src/OSharp.CodeGenerator/Migrations/20210403101318_Init.cs +++ b/src/OSharp.CodeGenerator/Migrations/20210403122046_Init.cs @@ -52,12 +52,12 @@ namespace OSharp.CodeGenerator.Migrations columns: table => new { Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: true), - Company = table.Column(type: "TEXT", nullable: true), - NamespacePrefix = table.Column(type: "TEXT", nullable: true), - SiteUrl = table.Column(type: "TEXT", nullable: true), - Creator = table.Column(type: "TEXT", nullable: true), - Copyright = table.Column(type: "TEXT", nullable: true) + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + NamespacePrefix = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Company = table.Column(type: "TEXT", maxLength: 200, nullable: true), + SiteUrl = table.Column(type: "TEXT", maxLength: 500, nullable: true), + Creator = table.Column(type: "TEXT", maxLength: 200, nullable: true), + Copyright = table.Column(type: "TEXT", maxLength: 500, nullable: true) }, constraints: table => { @@ -84,8 +84,8 @@ namespace OSharp.CodeGenerator.Migrations columns: table => new { Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: true), - Display = table.Column(type: "TEXT", nullable: true), + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Display = table.Column(type: "TEXT", maxLength: 200, nullable: false), ProjectId = table.Column(type: "TEXT", nullable: false) }, constraints: table => @@ -104,9 +104,9 @@ namespace OSharp.CodeGenerator.Migrations columns: table => new { Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: true), - Display = table.Column(type: "TEXT", nullable: true), - PrimaryKeyTypeFullName = table.Column(type: "TEXT", nullable: true), + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Display = table.Column(type: "TEXT", maxLength: 200, nullable: false), + PrimaryKeyTypeFullName = table.Column(type: "TEXT", maxLength: 500, nullable: false), IsDataAuth = table.Column(type: "INTEGER", nullable: false), ModuleId = table.Column(type: "TEXT", nullable: false) }, @@ -126,9 +126,9 @@ namespace OSharp.CodeGenerator.Migrations columns: table => new { Id = table.Column(type: "TEXT", nullable: false), - Name = table.Column(type: "TEXT", nullable: true), - TypeName = table.Column(type: "TEXT", nullable: true), - Display = table.Column(type: "TEXT", nullable: true), + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + TypeName = table.Column(type: "TEXT", maxLength: 500, nullable: false), + Display = table.Column(type: "TEXT", maxLength: 200, nullable: false), IsRequired = table.Column(type: "INTEGER", nullable: true), MaxLength = table.Column(type: "INTEGER", nullable: true), MinLength = table.Column(type: "INTEGER", nullable: true), diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index 3aebf73..9418875 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -110,6 +110,8 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Display") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("IsDataAuth") @@ -119,9 +121,13 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("PrimaryKeyTypeFullName") + .IsRequired() + .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); @@ -138,9 +144,13 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Display") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("ProjectId") @@ -160,21 +170,29 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Company") + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Copyright") + .HasMaxLength(500) .HasColumnType("TEXT"); b.Property("Creator") + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("NamespacePrefix") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("SiteUrl") + .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); @@ -189,6 +207,8 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("TEXT"); b.Property("Display") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("EntityId") @@ -219,9 +239,13 @@ namespace OSharp.CodeGenerator.Migrations .HasColumnType("INTEGER"); b.Property("Name") + .IsRequired() + .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("TypeName") + .IsRequired() + .HasMaxLength(500) .HasColumnType("TEXT"); b.HasKey("Id"); -- Gitee From 1d60351f55be415e7cbb8de480cf0a68bab5ff6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 3 Apr 2021 22:38:12 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/DataService.Project.cs | 22 +++++++++++++++ src/OSharp.CodeGeneration/Data/DataService.cs | 4 ++- .../Data/Entities/CodeProjectConfiguration.cs | 3 ++- .../Data/IDataContract.cs | 27 ++++++++++++++++++- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/OSharp.CodeGeneration/Data/DataService.Project.cs b/src/OSharp.CodeGeneration/Data/DataService.Project.cs index 7a95b17..aa447a5 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Project.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.Project.cs @@ -3,10 +3,32 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using OSharp.CodeGeneration.Entities; +using OSharp.Data; namespace OSharp.CodeGeneration.Data { public partial class DataService { + public async Task CreateProject(CodeProject project) + { + + int count = await this.ProjectRepository.InsertAsync(project); + if (count > 0) + { + + } + throw new NotImplementedException(); + } + + public Task DeleteProject(Guid id) + { + throw new NotImplementedException(); + } + + public Task UpdateProject(CodeProject project) + { + throw new NotImplementedException(); + } } } diff --git a/src/OSharp.CodeGeneration/Data/DataService.cs b/src/OSharp.CodeGeneration/Data/DataService.cs index 9c4ef38..4e50d31 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using OSharp.CodeGeneration.Entities; +using OSharp.Data; using OSharp.Entity; namespace OSharp.CodeGeneration.Data @@ -18,12 +19,13 @@ namespace OSharp.CodeGeneration.Data _serviceProvider = serviceProvider; } - protected IRepository PeojectRepository => _serviceProvider.GetService>(); + protected IRepository ProjectRepository => _serviceProvider.GetService>(); protected IRepository ModuleRepository => _serviceProvider.GetService>(); protected IRepository EntityRepository => _serviceProvider.GetService>(); protected IRepository CodePropertyRepository => _serviceProvider.GetService>(); + } } diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs index 07aaa43..1d28b3b 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs @@ -21,6 +21,7 @@ namespace OSharp.CodeGeneration.Entities /// 重写以实现实体类型各个属性的数据库配置 /// 实体类型创建器 public override void Configure(EntityTypeBuilder builder) - { } + { + } } } diff --git a/src/OSharp.CodeGeneration/Data/IDataContract.cs b/src/OSharp.CodeGeneration/Data/IDataContract.cs index eedb5c9..ee56696 100644 --- a/src/OSharp.CodeGeneration/Data/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Data/IDataContract.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using OSharp.CodeGeneration.Entities; +using OSharp.Data; namespace OSharp.CodeGeneration.Data { @@ -11,6 +13,29 @@ namespace OSharp.CodeGeneration.Data /// public interface IDataContract { - + #region Project + + /// + /// 创建代码工程 + /// + /// 工程信息 + /// 业务操作结果 + Task CreateProject(CodeProject project); + + /// + /// 更新代码工程 + /// + /// 工程信息 + /// 业务操作结果 + Task UpdateProject(CodeProject project); + + /// + /// 删除代码工程 + /// + /// 工程信息 + /// 业务操作结果 + Task DeleteProject(Guid id); + + #endregion } } -- Gitee From 3b94d412ecbd692babce9184265c0fc33c880e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Wed, 7 Apr 2021 01:27:57 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E3=80=81=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OSharp.CodeGenerator.sln.DotSettings | 6 + src/OSharp.CodeGeneration/Data/DataPack.cs | 26 ++ .../Data/DataService.Entity.cs | 138 ++++++- .../Data/DataService.Module.cs | 134 ++++++- .../Data/DataService.Project.cs | 115 +++++- src/OSharp.CodeGeneration/Data/DataService.cs | 2 + .../Data/Entities/CodeEntity.cs | 9 +- .../Data/Entities/CodeModule.cs | 9 +- .../Data/Entities/CodeProject.cs | 6 +- .../Data/Entities/CodeProperty.cs | 10 +- .../Data/IDataContract.cs | 125 +++++- .../OSharp.CodeGeneration.csproj | 12 +- src/OSharp.CodeGenerator/App.xaml | 2 +- .../Data/AutoMapperConfiguration.cs | 45 +++ .../20210404022217_entity.Designer.cs | 359 ++++++++++++++++++ .../Migrations/20210404022217_entity.cs | 91 +++++ .../DefaultDbContextModelSnapshot.cs | 21 + .../OSharp.CodeGenerator.csproj | 2 +- .../Resources/SomeStyles.xaml | 120 ++++++ src/OSharp.CodeGenerator/Startup.cs | 6 +- .../Views/Entities/EntityListView.xaml | 35 ++ .../Views/Entities/EntityListView.xaml.cs | 28 ++ .../Views/Entities/EntityListViewModel.cs | 48 +++ .../Views/{ => Entities}/EntityViewModel.cs | 9 +- .../Views/MainMenuView.xaml | 6 +- .../Views/MainMenuViewModel.cs | 57 +-- src/OSharp.CodeGenerator/Views/MainView.xaml | 25 +- .../Views/MainViewModel.cs | 10 +- .../Views/Modules/ModuleEditView.xaml | 44 +++ .../Views/Modules/ModuleEditView.xaml.cs | 28 ++ .../Views/Modules/ModuleListView.xaml | 59 +++ .../Views/Modules/ModuleListView.xaml.cs | 28 ++ .../Views/Modules/ModuleListViewModel.cs | 103 +++++ .../Views/{ => Modules}/ModuleViewModel.cs | 112 +++++- .../Views/ProjectView.xaml | 68 ---- .../Views/ProjectView.xaml.cs | 25 -- .../Views/Projects/ProjectEditView.xaml | 61 +++ .../Views/Projects/ProjectEditView.xaml.cs | 28 ++ .../Views/Projects/ProjectListView.xaml | 97 +++++ .../Views/Projects/ProjectListView.xaml.cs | 28 ++ .../Views/Projects/ProjectListViewModel.cs | 72 ++++ .../Views/{ => Projects}/ProjectViewModel.cs | 112 ++++-- .../{ => Properties}/PropertyViewModel.cs | 7 +- .../Views/ViewModelLocator.cs | 19 - .../Views/ViewModelPack.cs | 4 + 45 files changed, 2121 insertions(+), 230 deletions(-) create mode 100644 src/OSharp.CodeGeneration/Data/DataPack.cs create mode 100644 src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs create mode 100644 src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs create mode 100644 src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs create mode 100644 src/OSharp.CodeGenerator/Resources/SomeStyles.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml.cs create mode 100644 src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs rename src/OSharp.CodeGenerator/Views/{ => Entities}/EntityViewModel.cs (92%) create mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs create mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml.cs create mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs rename src/OSharp.CodeGenerator/Views/{ => Modules}/ModuleViewModel.cs (32%) delete mode 100644 src/OSharp.CodeGenerator/Views/ProjectView.xaml delete mode 100644 src/OSharp.CodeGenerator/Views/ProjectView.xaml.cs create mode 100644 src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml.cs create mode 100644 src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml create mode 100644 src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml.cs create mode 100644 src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs rename src/OSharp.CodeGenerator/Views/{ => Projects}/ProjectViewModel.cs (44%) rename src/OSharp.CodeGenerator/Views/{ => Properties}/PropertyViewModel.cs (91%) delete mode 100644 src/OSharp.CodeGenerator/Views/ViewModelLocator.cs diff --git a/OSharp.CodeGenerator.sln.DotSettings b/OSharp.CodeGenerator.sln.DotSettings index 768439d..ac50127 100644 --- a/OSharp.CodeGenerator.sln.DotSettings +++ b/OSharp.CodeGenerator.sln.DotSettings @@ -155,10 +155,16 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> C:\Users\Administrator\AppData\Local\JetBrains\Transient\ReSharperPlatformVs15\v08_9a28c652\SolutionCaches + Never + False + Never False False LIVE_MONITOR NOTIFY + True + True + True True True True diff --git a/src/OSharp.CodeGeneration/Data/DataPack.cs b/src/OSharp.CodeGeneration/Data/DataPack.cs new file mode 100644 index 0000000..5873e31 --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/DataPack.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.Core.Packs; + + +namespace OSharp.CodeGeneration.Data +{ + public class DataPack : OsharpPack + { + /// 将模块服务添加到依赖注入服务容器中 + /// 依赖注入服务容器 + /// + public override IServiceCollection AddServices(IServiceCollection services) + { + services.AddScoped(); + + return base.AddServices(services); + } + } +} diff --git a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs b/src/OSharp.CodeGeneration/Data/DataService.Entity.cs index 7a95b17..713a817 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.Entity.cs @@ -1,12 +1,148 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-07 1:20 +// ----------------------------------------------------------------------- + using System; using System.Collections.Generic; using System.Linq; -using System.Text; +using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Entities; +using OSharp.Collections; +using OSharp.Data; +using OSharp.Extensions; + + namespace OSharp.CodeGeneration.Data { public partial class DataService { + #region Implementation of IDataContract + + /// + /// 获取 代码实体信息查询数据集 + /// + public IQueryable CodeEntities => EntityRepository.QueryAsNoTracking(); + + /// + /// 检查代码实体信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的代码实体信息编号 + /// 代码实体信息是否存在 + public Task CheckCodeEntityExists(Expression> predicate, Guid id = default) + { + return EntityRepository.CheckExistsAsync(predicate, id); + } + + /// + /// 添加代码实体信息信息 + /// + /// 要添加的代码实体信息DTO信息 + /// 业务操作结果 + public async Task CreateCodeEntities(params CodeEntity[] entities) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (CodeEntity entity in entities) + { + entity.Validate(); + CodeModule module = await ModuleRepository.GetAsync(entity.ModuleId); + if (module == null) + { + return new OperationResult(OperationResultType.Error, $"编号为“{entity.ModuleId}”的模块信息不存在"); + } + + if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId)) + { + return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); + } + + int count = await EntityRepository.InsertAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”创建成功"); + } + + /// + /// 更新代码实体信息信息 + /// + /// 包含更新信息的代码实体信息DTO信息 + /// 业务操作结果 + public async Task UpdateCodeEntities(params CodeEntity[] entities) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (CodeEntity entity in entities) + { + entity.Validate(); + CodeModule module = await ModuleRepository.GetAsync(entity.ModuleId); + if (module == null) + { + return new OperationResult(OperationResultType.Error, $"编号为“{entity.ModuleId}”的模块信息不存在"); + } + + if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId, entity.Id)) + { + return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); + } + + int count = await EntityRepository.UpdateAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”更新成功"); + } + + /// + /// 删除代码实体信息信息 + /// + /// 要删除的代码实体信息编号 + /// 业务操作结果 + public async Task DeleteCodeEntities(params Guid[] ids) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var id in ids) + { + var entity = EntityRepository.Query(m => m.Id == id).Select(m => new { D = m, PropertyCount = m.Properties.Count() }) + .FirstOrDefault(); + if (entity == null) + { + return null; + } + + if (entity.PropertyCount > 0) + { + return new OperationResult(OperationResultType.Error, $"实体“{entity.D.Name}”包含着 {entity.PropertyCount} 个属性,请先删除下属属性信息"); + } + + int count = await EntityRepository.DeleteAsync(entity.D); + if (count > 0) + { + names.Add(entity.D.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”删除成功"); + } + + #endregion } } diff --git a/src/OSharp.CodeGeneration/Data/DataService.Module.cs b/src/OSharp.CodeGeneration/Data/DataService.Module.cs index 7a95b17..d21e455 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Module.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.Module.cs @@ -1,12 +1,144 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-06 12:49 +// ----------------------------------------------------------------------- + using System; using System.Collections.Generic; using System.Linq; -using System.Text; +using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Entities; +using OSharp.Collections; +using OSharp.Data; +using OSharp.Extensions; + + namespace OSharp.CodeGeneration.Data { public partial class DataService { + /// + /// 获取 代码模块信息查询数据集 + /// + public IQueryable CodeModules => ModuleRepository.QueryAsNoTracking(); + + /// + /// 检查代码模块信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的代码模块信息编号 + /// 代码模块信息是否存在 + public Task CheckCodeModuleExists(Expression> predicate, Guid id = default) + { + return ModuleRepository.CheckExistsAsync(predicate, id); + } + + /// + /// 添加代码模块信息信息 + /// + /// 要添加的代码模块信息 + /// 业务操作结果 + public async Task CreateCodeModules(params CodeModule[] entities) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (CodeModule entity in entities) + { + entity.Validate(); + CodeProject project = await ProjectRepository.GetAsync(entity.ProjectId); + if (project == null) + { + return new OperationResult(OperationResultType.Error, $"编号为“{entity.ProjectId}”的项目信息不存在"); + } + + if (await CheckCodeModuleExists(m => m.Name == entity.Name && m.ProjectId == entity.ProjectId)) + { + return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{entity.Name}”的模块信息已存在"); + } + + int count = await ModuleRepository.InsertAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功"); + } + + /// + /// 更新代码模块信息信息 + /// + /// 包含更新信息的代码模块信息 + /// 业务操作结果 + public async Task UpdateCodeModules(params CodeModule[] entities) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (CodeModule entity in entities) + { + entity.Validate(); + CodeProject project = await ProjectRepository.GetAsync(entity.ProjectId); + if (project == null) + { + return new OperationResult(OperationResultType.Error, $"编号为“{entity.ProjectId}”的项目信息不存在"); + } + + if (await CheckCodeModuleExists(m => m.Name == entity.Name && m.ProjectId == entity.ProjectId, entity.Id)) + { + return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{entity.Name}”的模块信息已存在"); + } + + int count = await ModuleRepository.UpdateAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功"); + } + + /// + /// 删除代码模块信息信息 + /// + /// 要删除的代码模块信息编号 + /// 业务操作结果 + public async Task DeleteCodeModules(params Guid[] ids) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var id in ids) + { + var entity = ModuleRepository.Query(m => m.Id == id).Select(m => new { D = m, EntityCount = m.Entities.Count() }) + .FirstOrDefault(); + if (entity == null) + { + return null; + } + + if (entity.EntityCount > 0) + { + return new OperationResult(OperationResultType.Error, $"模块“{entity.D.Name}”包含着 {entity.EntityCount} 个实体,请先删除下属实体信息"); + } + + int count = await ModuleRepository.DeleteAsync(entity.D); + if (count > 0) + { + names.Add(entity.D.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”删除成功"); + } } } diff --git a/src/OSharp.CodeGeneration/Data/DataService.Project.cs b/src/OSharp.CodeGeneration/Data/DataService.Project.cs index aa447a5..c2230db 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Project.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.Project.cs @@ -1,34 +1,129 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; + using OSharp.CodeGeneration.Entities; +using OSharp.Collections; using OSharp.Data; +using OSharp.Entity; +using OSharp.Extensions; + namespace OSharp.CodeGeneration.Data { public partial class DataService { - public async Task CreateProject(CodeProject project) + #region Implementation of IDataContract + + /// + /// 获取 项目信息查询数据集 + /// + public IQueryable CodeProjects => ProjectRepository.QueryAsNoTracking(); + + /// + /// 检查项目信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的项目信息编号 + /// 项目信息是否存在 + public Task CheckCodeProjectExists(Expression> predicate, Guid id = default) + { + return ProjectRepository.CheckExistsAsync(predicate, id); + } + + /// + /// 添加项目信息信息 + /// + /// 要添加的项目信息 + /// 业务操作结果 + public async Task CreateCodeProjects(params CodeProject[] entities) { - - int count = await this.ProjectRepository.InsertAsync(project); - if (count > 0) + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (CodeProject entity in entities) { - + entity.Validate(); + if (await CheckCodeProjectExists(m => m.Name == entity.Name)) + { + return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的项目信息已存在"); + } + + int count = await ProjectRepository.InsertAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } } - throw new NotImplementedException(); + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”创建成功"); } - public Task DeleteProject(Guid id) + /// + /// 更新项目信息信息 + /// + /// 包含更新信息的项目信息 + /// 业务操作结果 + public async Task UpdateCodeProjects(params CodeProject[] entities) { - throw new NotImplementedException(); + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (CodeProject entity in entities) + { + entity.Validate(); + if (await CheckCodeProjectExists(m => m.Name == entity.Name, entity.Id)) + { + return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的项目信息已存在"); + } + + int count = await ProjectRepository.UpdateAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”更新成功"); } - public Task UpdateProject(CodeProject project) + /// + /// 删除项目信息信息 + /// + /// 要删除的项目信息编号 + /// 业务操作结果 + public async Task DeleteCodeProjects(params Guid[] ids) { - throw new NotImplementedException(); + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var id in ids) + { + var entity = ProjectRepository.Query(m => m.Id == id).Select(m => new { D = m, ModuleCount = m.Modules.Count() }) + .FirstOrDefault(); + if (entity == null) + { + return null; + } + + if (entity.ModuleCount > 0) + { + return new OperationResult(OperationResultType.Error, $"项目“{entity.D.Name}”包含着 {entity.ModuleCount} 个模块,请先删除下属模块信息"); + } + + int count = await ProjectRepository.DeleteAsync(entity.D); + if (count > 0) + { + names.Add(entity.D.Name); + } + } + + await UnitOfWork.CommitAsync(); + return new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”删除成功"); } + + #endregion } } diff --git a/src/OSharp.CodeGeneration/Data/DataService.cs b/src/OSharp.CodeGeneration/Data/DataService.cs index 4e50d31..1e131d0 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.cs @@ -19,6 +19,8 @@ namespace OSharp.CodeGeneration.Data _serviceProvider = serviceProvider; } + protected IUnitOfWork UnitOfWork => _serviceProvider.GetUnitOfWork(); + protected IRepository ProjectRepository => _serviceProvider.GetService>(); protected IRepository ModuleRepository => _serviceProvider.GetService>(); diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs index cc274f6..2636570 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; + using OSharp.Entity; @@ -21,7 +22,7 @@ namespace OSharp.CodeGeneration.Entities /// [Description("代码实体信息")] [TableNamePrefix("CodeGen")] - public class CodeEntity : EntityBase + public class CodeEntity : EntityBase, ILockable { /// /// 获取或设置 类型名称 @@ -46,6 +47,12 @@ namespace OSharp.CodeGeneration.Entities /// public bool IsDataAuth { get; set; } + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + /// /// 获取或设置 所属模块编号 /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs index 058436d..fe6c863 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; + using OSharp.Entity; @@ -21,7 +22,7 @@ namespace OSharp.CodeGeneration.Entities /// [Description("代码模块信息")] [TableNamePrefix("CodeGen")] - public class CodeModule : EntityBase + public class CodeModule : EntityBase, ICreatedTime, ILockable { /// /// 获取或设置 模块名称 @@ -35,6 +36,12 @@ namespace OSharp.CodeGeneration.Entities [Required(), StringLength(200)] public string Display { get; set; } + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + /// /// 获取或设置 所属项目编号 /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs index e603cb7..2921450 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs @@ -22,7 +22,7 @@ namespace OSharp.CodeGeneration.Entities /// [Description("代码项目信息")] [TableNamePrefix("CodeGen")] - public class CodeProject : EntityBase + public class CodeProject : EntityBase, ICreatedTime { public CodeProject() { @@ -65,9 +65,13 @@ namespace OSharp.CodeGeneration.Entities [StringLength(500)] public string Copyright { get; set; } + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + /// /// 获取或设置 模块信息集合 /// public virtual ICollection Modules { get; set; } = new List(); + } } diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs index e303dc7..d5f2006 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs @@ -10,6 +10,7 @@ using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations; + using OSharp.Entity; @@ -20,7 +21,7 @@ namespace OSharp.CodeGeneration.Entities /// [Description("代码实体属性")] [TableNamePrefix("CodeGen")] - public class CodeProperty : EntityBase + public class CodeProperty : EntityBase, ICreatedTime, ILockable { /// /// 获取或设置 属性名称 @@ -80,6 +81,12 @@ namespace OSharp.CodeGeneration.Entities /// public bool IsOutputDto { get; set; } = true; + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + /// /// 获取或设置 实体编号 /// @@ -89,5 +96,6 @@ namespace OSharp.CodeGeneration.Entities /// 获取或设置 所属实体信息 /// public virtual CodeEntity Entity { get; set; } + } } diff --git a/src/OSharp.CodeGeneration/Data/IDataContract.cs b/src/OSharp.CodeGeneration/Data/IDataContract.cs index ee56696..d64f594 100644 --- a/src/OSharp.CodeGeneration/Data/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Data/IDataContract.cs @@ -1,11 +1,22 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-06 12:45 +// ----------------------------------------------------------------------- + using System; -using System.Collections.Generic; using System.Linq; -using System.Text; +using System.Linq.Expressions; +using System.Reflection; using System.Threading.Tasks; + using OSharp.CodeGeneration.Entities; using OSharp.Data; + namespace OSharp.CodeGeneration.Data { /// @@ -13,29 +24,119 @@ namespace OSharp.CodeGeneration.Data /// public interface IDataContract { - #region Project + #region 项目信息业务 + + /// + /// 获取 项目信息查询数据集 + /// + IQueryable CodeProjects { get; } + + /// + /// 检查项目信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的项目信息编号 + /// 项目信息是否存在 + Task CheckCodeProjectExists(Expression> predicate, Guid id = default); + + /// + /// 添加项目信息信息 + /// + /// 要添加的项目信息 + /// 业务操作结果 + Task CreateCodeProjects(params CodeProject[] entities); + + /// + /// 更新项目信息信息 + /// + /// 包含更新信息的项目信息 + /// 业务操作结果 + Task UpdateCodeProjects(params CodeProject[] entities); + + /// + /// 删除项目信息信息 + /// + /// 要删除的项目信息编号 + /// 业务操作结果 + Task DeleteCodeProjects(params Guid[] ids); + + #endregion + + #region 代码模块信息业务 + + /// + /// 获取 代码模块信息查询数据集 + /// + IQueryable CodeModules { get; } + + /// + /// 检查代码模块信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的代码模块信息编号 + /// 代码模块信息是否存在 + Task CheckCodeModuleExists(Expression> predicate, Guid id = default); + + /// + /// 添加代码模块信息信息 + /// + /// 要添加的代码模块信息 + /// 业务操作结果 + Task CreateCodeModules(params CodeModule[] entities); + + /// + /// 更新代码模块信息信息 + /// + /// 包含更新信息的代码模块信息 + /// 业务操作结果 + Task UpdateCodeModules(params CodeModule[] entities); + + /// + /// 删除代码模块信息信息 + /// + /// 要删除的代码模块信息编号 + /// 业务操作结果 + Task DeleteCodeModules(params Guid[] ids); + + #endregion + + #region 代码实体信息业务 /// - /// 创建代码工程 + /// 获取 代码实体信息查询数据集 /// - /// 工程信息 + IQueryable CodeEntities { get; } + + /// + /// 检查代码实体信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的代码实体信息编号 + /// 代码实体信息是否存在 + Task CheckCodeEntityExists(Expression> predicate, Guid id = default); + + /// + /// 添加代码实体信息信息 + /// + /// 要添加的代码实体信息DTO信息 /// 业务操作结果 - Task CreateProject(CodeProject project); + Task CreateCodeEntities(params CodeEntity[] entities); /// - /// 更新代码工程 + /// 更新代码实体信息信息 /// - /// 工程信息 + /// 包含更新信息的代码实体信息DTO信息 /// 业务操作结果 - Task UpdateProject(CodeProject project); + Task UpdateCodeEntities(params CodeEntity[] entities); /// - /// 删除代码工程 + /// 删除代码实体信息信息 /// - /// 工程信息 + /// 要删除的代码实体信息编号 /// 业务操作结果 - Task DeleteProject(Guid id); + Task DeleteCodeEntities(params Guid[] ids); #endregion + } } diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index 8c70e87..aa803cc 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -5,10 +5,16 @@ - - + + - + + + + + + DataService.cs + diff --git a/src/OSharp.CodeGenerator/App.xaml b/src/OSharp.CodeGenerator/App.xaml index 6a88aff..7cadbe9 100644 --- a/src/OSharp.CodeGenerator/App.xaml +++ b/src/OSharp.CodeGenerator/App.xaml @@ -12,13 +12,13 @@ + - diff --git a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs new file mode 100644 index 0000000..75ee643 --- /dev/null +++ b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs @@ -0,0 +1,45 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-06 13:13 +// ----------------------------------------------------------------------- + +using System; +using System.Runtime.Serialization; + +using AutoMapper.Configuration; + +using OSharp.AutoMapper; +using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Views; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Properties; + + +namespace OSharp.CodeGenerator.Data +{ + public class AutoMapperConfiguration : IAutoMapperConfiguration + { + /// 创建对象映射 + /// 映射配置表达 + public void CreateMaps(MapperConfigurationExpression mapper) + { + mapper.CreateMap().ForMember(e => e.ProjectId, opt => opt.MapFrom(vm => vm.Project.Id)) + .ForMember(e => e.Project, opt => opt.Ignore()); + mapper.CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) + .ForMember(vm => vm.Project, opt => opt.Ignore()); + + mapper.CreateMap().ForMember(e => e.ModuleId, opt => opt.MapFrom(vm => vm.Module.Id)) + .ForMember(e => e.Module, opt => opt.Ignore()); + mapper.CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); + + mapper.CreateMap().ForMember(e => e.EntityId, opt => opt.MapFrom(vm => vm.Entity.Id)) + .ForMember(e=>e.Entity, opt=>opt.Ignore()); + mapper.CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs new file mode 100644 index 0000000..57d1de5 --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.Designer.cs @@ -0,0 +1,359 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using OSharp.Entity; + +namespace OSharp.CodeGenerator.Migrations +{ + [DbContext(typeof(DefaultDbContext))] + [Migration("20210404022217_entity")] + partial class entity + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.4"); + + modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AuditEnabled") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PropertyJson") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("TypeName") + .IsUnique() + .HasDatabaseName("ClassFullNameIndex"); + + b.ToTable("Auth_EntityInfo"); + }); + + modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AccessType") + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("TEXT"); + + b.Property("Area") + .HasColumnType("TEXT"); + + b.Property("AuditEntityEnabled") + .HasColumnType("INTEGER"); + + b.Property("AuditOperationEnabled") + .HasColumnType("INTEGER"); + + b.Property("CacheExpirationSeconds") + .HasColumnType("INTEGER"); + + b.Property("Controller") + .HasColumnType("TEXT"); + + b.Property("IsAccessTypeChanged") + .HasColumnType("INTEGER"); + + b.Property("IsAjax") + .HasColumnType("INTEGER"); + + b.Property("IsCacheSliding") + .HasColumnType("INTEGER"); + + b.Property("IsController") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsSlaveDatabase") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Area", "Controller", "Action") + .IsUnique() + .HasDatabaseName("AreaControllerActionIndex"); + + b.ToTable("Auth_Function"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("IsDataAuth") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("ModuleId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("PrimaryKeyTypeFullName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ModuleId"); + + b.ToTable("CodeGen_CodeEntity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("CodeGen_CodeModule"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Company") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Copyright") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Creator") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("NamespacePrefix") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("SiteUrl") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("CodeGen_CodeProject"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("IsForeignKey") + .HasColumnType("INTEGER"); + + b.Property("IsInputDto") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsNullable") + .HasColumnType("INTEGER"); + + b.Property("IsOutputDto") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("IsVirtual") + .HasColumnType("INTEGER"); + + b.Property("MaxLength") + .HasColumnType("INTEGER"); + + b.Property("MinLength") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("TypeName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeProperty"); + }); + + modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Key") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ValueJson") + .HasColumnType("TEXT"); + + b.Property("ValueType") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Key") + .IsUnique() + .HasDatabaseName("KeyIndex"); + + b.ToTable("Systems_KeyValue"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + { + b.HasOne("OSharp.CodeGeneration.Entities.CodeModule", "Module") + .WithMany("Entities") + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Module"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + { + b.HasOne("OSharp.CodeGeneration.Entities.CodeProject", "Project") + .WithMany("Modules") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => + { + b.HasOne("OSharp.CodeGeneration.Entities.CodeEntity", "Entity") + .WithMany("Properties") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + { + b.Navigation("Entities"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => + { + b.Navigation("Modules"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs b/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs new file mode 100644 index 0000000..65032b3 --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210404022217_entity.cs @@ -0,0 +1,91 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace OSharp.CodeGenerator.Migrations +{ + public partial class entity : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "CreatedTime", + table: "CodeGen_CodeProperty", + type: "TEXT", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + migrationBuilder.AddColumn( + name: "IsLocked", + table: "CodeGen_CodeProperty", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "CreatedTime", + table: "CodeGen_CodeProject", + type: "TEXT", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + migrationBuilder.AddColumn( + name: "CreatedTime", + table: "CodeGen_CodeModule", + type: "TEXT", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + migrationBuilder.AddColumn( + name: "IsLocked", + table: "CodeGen_CodeModule", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "CreatedTime", + table: "CodeGen_CodeEntity", + type: "TEXT", + nullable: false, + defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); + + migrationBuilder.AddColumn( + name: "IsLocked", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "CreatedTime", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "IsLocked", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "CreatedTime", + table: "CodeGen_CodeProject"); + + migrationBuilder.DropColumn( + name: "CreatedTime", + table: "CodeGen_CodeModule"); + + migrationBuilder.DropColumn( + name: "IsLocked", + table: "CodeGen_CodeModule"); + + migrationBuilder.DropColumn( + name: "CreatedTime", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "IsLocked", + table: "CodeGen_CodeEntity"); + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index 9418875..48d8ca6 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -109,6 +109,9 @@ namespace OSharp.CodeGenerator.Migrations .ValueGeneratedOnAdd() .HasColumnType("TEXT"); + b.Property("CreatedTime") + .HasColumnType("TEXT"); + b.Property("Display") .IsRequired() .HasMaxLength(200) @@ -117,6 +120,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsDataAuth") .HasColumnType("INTEGER"); + b.Property("IsLocked") + .HasColumnType("INTEGER"); + b.Property("ModuleId") .HasColumnType("TEXT"); @@ -143,11 +149,17 @@ namespace OSharp.CodeGenerator.Migrations .ValueGeneratedOnAdd() .HasColumnType("TEXT"); + b.Property("CreatedTime") + .HasColumnType("TEXT"); + b.Property("Display") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("IsLocked") + .HasColumnType("INTEGER"); + b.Property("Name") .IsRequired() .HasMaxLength(200) @@ -177,6 +189,9 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(500) .HasColumnType("TEXT"); + b.Property("CreatedTime") + .HasColumnType("TEXT"); + b.Property("Creator") .HasMaxLength(200) .HasColumnType("TEXT"); @@ -206,6 +221,9 @@ namespace OSharp.CodeGenerator.Migrations .ValueGeneratedOnAdd() .HasColumnType("TEXT"); + b.Property("CreatedTime") + .HasColumnType("TEXT"); + b.Property("Display") .IsRequired() .HasMaxLength(200) @@ -220,6 +238,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsInputDto") .HasColumnType("INTEGER"); + b.Property("IsLocked") + .HasColumnType("INTEGER"); + b.Property("IsNullable") .HasColumnType("INTEGER"); diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index c7e83f6..d31736a 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -17,7 +17,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/OSharp.CodeGenerator/Resources/SomeStyles.xaml b/src/OSharp.CodeGenerator/Resources/SomeStyles.xaml new file mode 100644 index 0000000..6e9e0c8 --- /dev/null +++ b/src/OSharp.CodeGenerator/Resources/SomeStyles.xaml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Startup.cs b/src/OSharp.CodeGenerator/Startup.cs index 90955df..5868597 100644 --- a/src/OSharp.CodeGenerator/Startup.cs +++ b/src/OSharp.CodeGenerator/Startup.cs @@ -1,4 +1,4 @@ -// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- // // Copyright (c) 2014-2020 OSharp. All rights reserved. // @@ -12,6 +12,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using OSharp.AutoMapper; +using OSharp.CodeGeneration.Data; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views; using OSharp.Log4Net; @@ -27,7 +28,8 @@ namespace OSharp.CodeGenerator .AddPack() .AddPack() .AddPack() - .AddPack(); + .AddPack() + .AddPack(); } public void Configure(IServiceProvider provider) diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml new file mode 100644 index 0000000..345ef0b --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -0,0 +1,35 @@ + + + + + + 实体列表 + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml.cs new file mode 100644 index 0000000..7f0a1a4 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace OSharp.CodeGenerator.Views.Entities +{ + /// + /// EntityListView.xaml 的交互逻辑 + /// + public partial class EntityListView : UserControl + { + public EntityListView() + { + InitializeComponent(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs new file mode 100644 index 0000000..947f57d --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -0,0 +1,48 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-06 19:10 +// ----------------------------------------------------------------------- + +using System; + +using OSharp.CodeGenerator.Views.Modules; + +using Stylet; + + +namespace OSharp.CodeGenerator.Views.Entities +{ + public class EntityListViewModel : Screen + { + private readonly IServiceProvider _provider; + + public EntityListViewModel(IServiceProvider provider) + { + _provider = provider; + } + + public ModuleViewModel Module { get; set; } + + public IObservableCollection Entities { get; } = new BindableCollection(); + + public void Init() + { + + } + + public void New() + { + + } + + #region 实体编辑 + + public string EditTitle { get; set; } = "实体编辑"; + + #endregion + } +} diff --git a/src/OSharp.CodeGenerator/Views/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs similarity index 92% rename from src/OSharp.CodeGenerator/Views/EntityViewModel.cs rename to src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 907a225..b0fecaa 100644 --- a/src/OSharp.CodeGenerator/Views/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -7,17 +7,20 @@ // 2020-05-07 1:11 // ----------------------------------------------------------------------- +using System; + using FluentValidation; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Properties; using OSharp.Mapping; using Stylet; -namespace OSharp.CodeGenerator.Views +namespace OSharp.CodeGenerator.Views.Entities { - [MapTo(typeof(CodeEntity))] public class EntityViewModel : Screen { /// @@ -34,6 +37,8 @@ namespace OSharp.CodeGenerator.Views public IObservableCollection Properties { get; set; } + public Guid Id { get; set; } + public string Name { get; set; } public string Display { get; set; } diff --git a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml index fe3c472..7407456 100644 --- a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml +++ b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml @@ -11,7 +11,7 @@ d:DataContext="{d:DesignInstance local:MainMenuViewModel}" d:DesignHeight="29" d:DesignWidth="400"> - + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs new file mode 100644 index 0000000..e2a1566 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace OSharp.CodeGenerator.Views.Modules +{ + /// + /// ModuleEditView.xaml 的交互逻辑 + /// + public partial class ModuleEditView : UserControl + { + public ModuleEditView() + { + InitializeComponent(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml new file mode 100644 index 0000000..83bfd41 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml @@ -0,0 +1,59 @@ + + + + + + 模块列表 + + + + + + + + + + + + + + + + [] + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml.cs new file mode 100644 index 0000000..de371d3 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace OSharp.CodeGenerator.Views.Modules +{ + /// + /// ModuleListView.xaml 的交互逻辑 + /// + public partial class ModuleListView : UserControl + { + public ModuleListView() + { + InitializeComponent(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs new file mode 100644 index 0000000..60a3475 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -0,0 +1,103 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-06 12:33 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Controls; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Data; +using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.Exceptions; +using OSharp.Mapping; +using OSharp.Wpf.Stylet; + +using Stylet; + + +namespace OSharp.CodeGenerator.Views.Modules +{ + [Singleton] + public class ModuleListViewModel : Screen + { + private readonly IServiceProvider _provider; + + public ModuleListViewModel(IServiceProvider provider) + { + _provider = provider; + } + + public ProjectViewModel Project { get; set; } + + public IObservableCollection Modules { get; } = new BindableCollection(); + + public string EditTitle { get; set; } + + public bool IsShowEdit { get; set; } + + public ModuleViewModel EditingModel { get; set; } + + public void Init() + { + if (Project == null) + { + throw new OsharpException("当前项目为空,请先通过菜单“项目-项目管理”加载项目"); + } + List entities = new List(); + _provider.ExecuteScopedWork(provider => + { + IDataContract contract = provider.GetRequiredService(); + entities = contract.CodeModules.Where(m => m.ProjectId == Project.Id).ToList(); + }); + Modules.Clear(); + foreach (CodeModule entity in entities) + { + ModuleViewModel model = _provider.GetRequiredService(); + model = entity.MapTo(model); + model.Project = Project; + Modules.Add(model); + } + } + + public void New() + { + if (Project == null) + { + throw new OsharpException("当前项目为空,请先通过菜单“项目-项目管理”加载项目"); + } + ModuleViewModel model = IoC.Get(); + model.Project = Project; + EditingModel = model; + EditTitle = $"新增模块,项目:{Project.Name}"; + IsShowEdit = true; + } + + public void Select(SelectionChangedEventArgs e) + { + if (e.AddedItems.Count == 0) + { + return; + } + + ModuleViewModel module = e.AddedItems[0] as ModuleViewModel; + if (module == null) + { + return; + } + + EntityListViewModel list = IoC.Get(); + list.Module = module; + list.Init(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs similarity index 32% rename from src/OSharp.CodeGenerator/Views/ModuleViewModel.cs rename to src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index ebd8898..60f829f 100644 --- a/src/OSharp.CodeGenerator/Views/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -7,38 +7,136 @@ // 2020-05-07 0:17 // ----------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.Windows; + +using AutoMapper; + using FluentValidation; +using Microsoft.Extensions.DependencyInjection; + +using Notifications.Wpf.Core; + +using OSharp.CodeGeneration.Data; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.Data; using OSharp.Mapping; +using OSharp.Wpf.Stylet; using Stylet; -namespace OSharp.CodeGenerator.Views +namespace OSharp.CodeGenerator.Views.Modules { - [MapTo(typeof(CodeModule))] public class ModuleViewModel : Screen { + private readonly IServiceProvider _provider; + /// /// 初始化一个类型的新实例 /// - public ModuleViewModel(IModelValidator validator) : base(validator) + public ModuleViewModel(IModelValidator validator, IServiceProvider provider) : base(validator) { + _provider = provider; Validate(); - Entities = new BindableCollection(); } - public ProjectViewModel Project { get; set; } - - public IObservableCollection Entities { get; set; } + public Guid Id { get; set; } public string Name { get; set; } public string Display { get; set; } + public ProjectViewModel Project { get; set; } + public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; + public void Edit() + { + ModuleListViewModel model = IoC.Get(); + model.EditingModel = this; + model.EditTitle = $"项目编辑 - {Name}[{Display}]"; + model.IsShowEdit = true; + } + + public async void Delete() + { + if (MessageBox.Show($"是否删除模块“{Name}[{Display}]”?", "请确认", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel) + { + return; + } + + OperationResult result = null; + await _provider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = await contract.DeleteCodeModules(Id); + }); + MainViewModel main = IoC.Get(); + if (!result.Succeeded) + { + main.Notify(result.Message, NotificationType.Error); + return; + } + + main.Notify(result.Message, NotificationType.Success); + main.ModuleList.Init(); + } + + public bool CanEditSave => !HasErrors; + + public async void EditSave() + { + MainViewModel main = IoC.Get(); + if (!Validate()) + { + main.Notify("项目信息验证失败", NotificationType.Warning); + return; + } + + CodeModule module = ToModule(); + OperationResult result = null; + await _provider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = module.Id == default + ? await contract.CreateCodeModules(module) + : await contract.UpdateCodeModules(module); + }); + if (!result.Succeeded) + { + main.Notify(result.Message, NotificationType.Error); + return; + } + main.Notify(result.Message, NotificationType.Success); + + ModuleListViewModel list = main.ModuleList; + list.EditingModel = null; + list.IsShowEdit = false; + list.Init(); + } + + public void EditCancel() + { + var list = IoC.Get(); + list.EditingModel = null; + list.IsShowEdit = false; + list.Init(); + } + + /// + /// Called whenever the error state of any properties changes. Calls NotifyOfPropertyChange("HasErrors") by default + /// + /// List of property names which have changed validation state + protected override void OnValidationStateChanged(IEnumerable changedProperties) + { + base.OnValidationStateChanged(changedProperties); + NotifyOfPropertyChange(() => CanEditSave); + } + public CodeModule ToModule() { CodeModule module = this.MapTo(); diff --git a/src/OSharp.CodeGenerator/Views/ProjectView.xaml b/src/OSharp.CodeGenerator/Views/ProjectView.xaml deleted file mode 100644 index 3d6da74..0000000 --- a/src/OSharp.CodeGenerator/Views/ProjectView.xaml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/OSharp.CodeGenerator/Views/ProjectView.xaml.cs b/src/OSharp.CodeGenerator/Views/ProjectView.xaml.cs deleted file mode 100644 index 0c64a25..0000000 --- a/src/OSharp.CodeGenerator/Views/ProjectView.xaml.cs +++ /dev/null @@ -1,25 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) 2014-2020 OSharp. All rights reserved. -// -// http://www.osharp.org -// 郭明锋 -// 2020-05-05 12:38 -// ----------------------------------------------------------------------- - -using OSharp.Wpf.Stylet; - - -namespace OSharp.CodeGenerator.Views -{ - /// - /// ProjectView.xaml 的交互逻辑 - /// - public partial class ProjectView - { - public ProjectView() - { - InitializeComponent(); - } - } -} diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml new file mode 100644 index 0000000..e9b8516 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml.cs new file mode 100644 index 0000000..2f6455a --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace OSharp.CodeGenerator.Views.Projects +{ + /// + /// ProjectEditView.xaml 的交互逻辑 + /// + public partial class ProjectEditView : UserControl + { + public ProjectEditView() + { + InitializeComponent(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml new file mode 100644 index 0000000..a40e421 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml @@ -0,0 +1,97 @@ + + + + + + + 项目列表 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml.cs new file mode 100644 index 0000000..f5c8130 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace OSharp.CodeGenerator.Views.Projects +{ + /// + /// ProjectListView.xaml 的交互逻辑 + /// + public partial class ProjectListView : UserControl + { + public ProjectListView() + { + InitializeComponent(); + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs new file mode 100644 index 0000000..34eaf10 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs @@ -0,0 +1,72 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-04 0:32 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Data; +using OSharp.CodeGeneration.Entities; +using OSharp.Mapping; +using OSharp.Wpf.Stylet; + +using Stylet; + + +namespace OSharp.CodeGenerator.Views.Projects +{ + [Singleton] + public class ProjectListViewModel : Screen + { + private readonly IServiceProvider _provider; + + public ProjectListViewModel(IServiceProvider provider) + { + _provider = provider; + } + + public bool IsShow { get; set; } + + public IObservableCollection Projects { get; } = new BindableCollection(); + + public string EditTitle { get; set; } + + public bool IsShowEdit { get; set; } + + public ProjectViewModel EditingModel { get; set; } + + public void Init() + { + List projects = new List(); + _provider.ExecuteScopedWork(provider => + { + Projects.Clear(); + IDataContract contract = provider.GetRequiredService(); + projects = contract.CodeProjects.ToList(); + }); + foreach (CodeProject project in projects) + { + ProjectViewModel model = _provider.GetRequiredService(); + model = project.MapTo(model); + Projects.Add(model); + } + } + + public void New() + { + ProjectListViewModel model = IoC.Get(); + model.EditingModel = IoC.Get(); + model.EditTitle = "新增项目"; + model.IsShowEdit = true; + } + } + +} diff --git a/src/OSharp.CodeGenerator/Views/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs similarity index 44% rename from src/OSharp.CodeGenerator/Views/ProjectViewModel.cs rename to src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index b96c27c..8db574e 100644 --- a/src/OSharp.CodeGenerator/Views/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -10,49 +10,100 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.IO; +using System.Windows; + +using AutoMapper; using FluentValidation; +using Microsoft.Extensions.DependencyInjection; + using Notifications.Wpf.Core; +using OSharp.CodeGeneration.Data; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.Data; using OSharp.Extensions; -using OSharp.Json; using OSharp.Mapping; using OSharp.Wpf.Stylet; using Stylet; -namespace OSharp.CodeGenerator.Views +namespace OSharp.CodeGenerator.Views.Projects { [MapTo(typeof(CodeProject))] + [MapFrom(typeof(CodeProject))] public class ProjectViewModel : Screen { - public ProjectViewModel(IModelValidator validator) : base(validator) + private readonly IServiceProvider _serviceProvider; + + public ProjectViewModel(IModelValidator validator, IServiceProvider serviceProvider) : base(validator) { + _serviceProvider = serviceProvider; Validate(); - Modules = new BindableCollection(); } + + public Guid Id { get; set; } + + public string Name { get; set; } - public IObservableCollection Modules { get; set; } + public string NamespacePrefix { get; set; } - public string Name { get; set; } = "示例项目"; + public string Company { get; set; } - public string NamespacePrefix { get; set; } = "Liuliu.Demo"; + public string SiteUrl { get; set; } - public string Company { get; set; } = "柳柳软件"; + public string Creator { get; set; } - public string SiteUrl { get; set; } = "https://www.osharp.org"; + public string Copyright { get; set; } - public string Creator { get; set; } = "郭明锋"; + public DateTime CreatedTime { get; set; } + + public void Load() + { + MainViewModel main = IoC.Get(); + main.DisplayName = $"OSharp代码生成器 - {Name}"; + ModuleListViewModel list = IoC.Get(); + list.Project = this; + list.Init(); + main.ProjectList.IsShow = false; + } - public string Copyright { get; set; } = "Copyright OSHARP.ORG @2020"; + public void Edit() + { + ProjectListViewModel model = IoC.Get(); + model.EditingModel = this; + model.EditTitle = $"项目编辑 - {Name}"; + model.IsShowEdit = true; + } + + public async void Delete() + { + if (MessageBox.Show($"是否删除项目“{Name}”?", "请确认", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel) + { + return; + } + OperationResult result = null; + await _serviceProvider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = await contract.DeleteCodeProjects(Id); + }); + MainViewModel main = IoC.Get(); + if (!result.Succeeded) + { + main.Notify(result.Message, NotificationType.Error); + return; + } + main.Notify(result.Message, NotificationType.Success); + main.ProjectList.Init(); + } - public bool CanSaveProject => !HasErrors; + public bool CanEditSave => !HasErrors; - public void SaveProject() + public async void EditSave() { MainViewModel main = IoC.Get(); if (!Validate()) @@ -62,16 +113,33 @@ namespace OSharp.CodeGenerator.Views } CodeProject project = ToProject(); - string json = project.ToJsonString(); - File.WriteAllText("1.txt", json); - main.Notify($"项目“{Name}[{NamespacePrefix}]”保存成功", NotificationType.Success); - main.IsProjectOpen = false; + OperationResult result = null; + await _serviceProvider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = project.Id == default + ? await contract.CreateCodeProjects(project) + : await contract.UpdateCodeProjects(project); + }); + if (!result.Succeeded) + { + main.Notify(result.Message, NotificationType.Error); + return; + } + main.Notify(result.Message, NotificationType.Success); + + ProjectListViewModel list = main.ProjectList; + list.EditingModel = null; + list.IsShowEdit = false; + list.Init(); } - public void CloseProject() + public void EditCancel() { - MainViewModel main = IoC.Get(); - main.IsProjectOpen = false; + var list = IoC.Get(); + list.EditingModel = null; + list.IsShowEdit = false; + list.Init(); } /// @@ -83,7 +151,7 @@ namespace OSharp.CodeGenerator.Views base.OnValidationStateChanged(changedProperties); // Fody 无法编织其他组件,所以我们必须手动提高这个值 - this.NotifyOfPropertyChange(() => CanSaveProject); + this.NotifyOfPropertyChange(() => CanEditSave); } public CodeProject ToProject() diff --git a/src/OSharp.CodeGenerator/Views/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs similarity index 91% rename from src/OSharp.CodeGenerator/Views/PropertyViewModel.cs rename to src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index a5ba292..44e84b0 100644 --- a/src/OSharp.CodeGenerator/Views/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -10,12 +10,13 @@ using FluentValidation; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Views.Entities; using OSharp.Mapping; using Stylet; -namespace OSharp.CodeGenerator.Views +namespace OSharp.CodeGenerator.Views.Properties { [MapTo(typeof(CodeProperty))] public class PropertyViewModel : Screen @@ -23,7 +24,7 @@ namespace OSharp.CodeGenerator.Views /// /// 初始化一个类型的新实例 /// - public PropertyViewModel(IModelValidatorvalidator) : base(validator) + public PropertyViewModel(IModelValidator validator) : base(validator) { Validate(); } @@ -74,7 +75,7 @@ namespace OSharp.CodeGenerator.Views } - public class PropertyViewModelValidator : AbstractValidator + public class PropertyViewModelValidator : AbstractValidator { public PropertyViewModelValidator() { diff --git a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs deleted file mode 100644 index c676997..0000000 --- a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs +++ /dev/null @@ -1,19 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) 2014-2020 OSharp. All rights reserved. -// -// http://www.osharp.org -// 郭明锋 -// 2020-05-05 23:51 -// ----------------------------------------------------------------------- - -using OSharp.Wpf.Stylet; - - -namespace OSharp.CodeGenerator.Views -{ - public class ViewModelLocator - { - public MainViewModel Main => IoC.Get(); - } -} diff --git a/src/OSharp.CodeGenerator/Views/ViewModelPack.cs b/src/OSharp.CodeGenerator/Views/ViewModelPack.cs index 274c688..7ac857d 100644 --- a/src/OSharp.CodeGenerator/Views/ViewModelPack.cs +++ b/src/OSharp.CodeGenerator/Views/ViewModelPack.cs @@ -11,6 +11,8 @@ using System.Reflection; using Microsoft.Extensions.DependencyInjection; +using OSharp.AutoMapper; +using OSharp.CodeGenerator.Data; using OSharp.Core.Packs; using OSharp.Wpf.Stylet; @@ -29,6 +31,8 @@ namespace OSharp.CodeGenerator.Views services.AddViewModels(assembly); services.AddViews(assembly); + services.AddSingleton(); + return services; } } -- Gitee From 0ca4e4355623f8eb9ee32065bd63ee3d84306d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Wed, 7 Apr 2021 13:05:02 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0osharp=E5=88=B05.0.5-pr?= =?UTF-8?q?oview.407?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj | 6 +++--- src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj | 2 +- src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs | 2 ++ src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml | 4 ++-- src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs | 2 ++ 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index aa803cc..6348e2f 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -5,10 +5,10 @@ - - + + - + diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index d31736a..4e3d131 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -17,7 +17,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index b0fecaa..cfff15a 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -21,6 +21,8 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Entities { + [MapTo(typeof(CodeEntity))] + [MapFrom(typeof(CodeEntity))] public class EntityViewModel : Screen { /// diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml index 83bfd41..7c6bdda 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml @@ -34,10 +34,10 @@ - + - + [] diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index 60f829f..52bbed7 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -31,6 +31,8 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Modules { + [MapTo(typeof(CodeModule))] + [MapFrom(typeof(CodeModule))] public class ModuleViewModel : Screen { private readonly IServiceProvider _provider; -- Gitee From 02bc82d679a0838b2332c0d15553b8f323741136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Wed, 7 Apr 2021 19:33:28 +0800 Subject: [PATCH 09/13] =?UTF-8?q?osharp=E6=9B=B4=E6=96=B0=E5=88=B0v5.0.5-p?= =?UTF-8?q?review.407.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OSharp.CodeGeneration.csproj | 6 ++--- src/OSharp.CodeGenerator/Bootstrapper.cs | 16 ++++++++++- .../Data/AutoMapperConfiguration.cs | 17 ++++++------ src/OSharp.CodeGenerator/Data/Helper.cs | 27 +++++++++++++++++++ .../OSharp.CodeGenerator.csproj | 4 +-- .../Views/MainMenuViewModel.cs | 3 +-- .../Views/Modules/ModuleListViewModel.cs | 3 +++ .../Views/Projects/ProjectListViewModel.cs | 6 +++++ .../Views/Projects/ProjectViewModel.cs | 7 ++--- .../Views/Properties/PropertyViewModel.cs | 1 + .../Views/ViewModelPack.cs | 3 ++- 11 files changed, 72 insertions(+), 21 deletions(-) create mode 100644 src/OSharp.CodeGenerator/Data/Helper.cs diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index 6348e2f..8b2df44 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -5,10 +5,10 @@ - - + + - + diff --git a/src/OSharp.CodeGenerator/Bootstrapper.cs b/src/OSharp.CodeGenerator/Bootstrapper.cs index d97bbbf..a71d887 100644 --- a/src/OSharp.CodeGenerator/Bootstrapper.cs +++ b/src/OSharp.CodeGenerator/Bootstrapper.cs @@ -1,4 +1,4 @@ -// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- // // Copyright (c) 2014-2020 OSharp. All rights reserved. // @@ -10,6 +10,8 @@ using Microsoft.Extensions.DependencyInjection; using OSharp.CodeGenerator.Views; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; using OSharp.Wpf.Data; using OSharp.Wpf.Stylet; @@ -33,5 +35,17 @@ namespace OSharp.CodeGenerator MainViewModel main = IoC.Get(); Output.StatusBar = msg => main.StatusBar.Message = msg; } + + /// Called just after the root View has been displayed + protected override void OnLaunch() + { + ProjectListViewModel projectList = IoC.Get(); + ModuleListViewModel moduleList = IoC.Get(); + + if (moduleList.Project == null && !projectList.IsShow) + { + projectList.Show(); + } + } } } diff --git a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs index 75ee643..5b1954a 100644 --- a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs +++ b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs @@ -22,24 +22,23 @@ using OSharp.CodeGenerator.Views.Properties; namespace OSharp.CodeGenerator.Data { - public class AutoMapperConfiguration : IAutoMapperConfiguration + public class AutoMapperConfiguration : AutoMapperTupleBase { /// 创建对象映射 - /// 映射配置表达 - public void CreateMaps(MapperConfigurationExpression mapper) + public override void CreateMap() { - mapper.CreateMap().ForMember(e => e.ProjectId, opt => opt.MapFrom(vm => vm.Project.Id)) + CreateMap().ForMember(e => e.ProjectId, opt => opt.MapFrom(vm => vm.Project.Id)) .ForMember(e => e.Project, opt => opt.Ignore()); - mapper.CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) + CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) .ForMember(vm => vm.Project, opt => opt.Ignore()); - mapper.CreateMap().ForMember(e => e.ModuleId, opt => opt.MapFrom(vm => vm.Module.Id)) + CreateMap().ForMember(e => e.ModuleId, opt => opt.MapFrom(vm => vm.Module.Id)) .ForMember(e => e.Module, opt => opt.Ignore()); - mapper.CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); + CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); - mapper.CreateMap().ForMember(e => e.EntityId, opt => opt.MapFrom(vm => vm.Entity.Id)) + CreateMap().ForMember(e => e.EntityId, opt => opt.MapFrom(vm => vm.Entity.Id)) .ForMember(e=>e.Entity, opt=>opt.Ignore()); - mapper.CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); + CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); } } } diff --git a/src/OSharp.CodeGenerator/Data/Helper.cs b/src/OSharp.CodeGenerator/Data/Helper.cs new file mode 100644 index 0000000..92302f3 --- /dev/null +++ b/src/OSharp.CodeGenerator/Data/Helper.cs @@ -0,0 +1,27 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-07 19:29 +// ----------------------------------------------------------------------- + +using OSharp.CodeGenerator.Views; +using OSharp.Wpf.Stylet; + + +namespace OSharp.CodeGenerator.Data +{ + public static class Helper + { + /// + /// 输出信息到状态栏 + /// + /// 消息 + public static void Output(string message) + { + IoC.Get().Message = message; + } + } +} diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index 4e3d131..4a996a8 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -12,12 +12,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/OSharp.CodeGenerator/Views/MainMenuViewModel.cs b/src/OSharp.CodeGenerator/Views/MainMenuViewModel.cs index 2c7643c..9809c41 100644 --- a/src/OSharp.CodeGenerator/Views/MainMenuViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/MainMenuViewModel.cs @@ -64,8 +64,7 @@ namespace OSharp.CodeGenerator.Views public void Project() { ProjectListViewModel model = IoC.Get(); - model.Init(); - model.IsShow = true; + model.Show(); } public void Module() diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index 60a3475..ac7db26 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -16,6 +16,7 @@ using Microsoft.Extensions.DependencyInjection; using OSharp.CodeGeneration.Data; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Projects; using OSharp.Exceptions; @@ -67,6 +68,7 @@ namespace OSharp.CodeGenerator.Views.Modules model.Project = Project; Modules.Add(model); } + Helper.Output($"模块列表刷新成功,共{Modules.Count}个模块"); } public void New() @@ -98,6 +100,7 @@ namespace OSharp.CodeGenerator.Views.Modules EntityListViewModel list = IoC.Get(); list.Module = module; list.Init(); + Helper.Output($"切换到“{module.Name} [{module.Display}]”模块"); } } } diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs index 34eaf10..1dcfe64 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs @@ -43,6 +43,12 @@ namespace OSharp.CodeGenerator.Views.Projects public ProjectViewModel EditingModel { get; set; } + public void Show() + { + Init(); + IsShow = true; + } + public void Init() { List projects = new List(); diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index 8db574e..e6f049d 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -65,10 +65,11 @@ namespace OSharp.CodeGenerator.Views.Projects { MainViewModel main = IoC.Get(); main.DisplayName = $"OSharp代码生成器 - {Name}"; - ModuleListViewModel list = IoC.Get(); - list.Project = this; - list.Init(); + ModuleListViewModel moduleList = IoC.Get(); + moduleList.Project = this; + moduleList.Init(); main.ProjectList.IsShow = false; + main.StatusBar.Message = $"项目“{Name}”加载成功"; } public void Edit() diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index 44e84b0..3268db1 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -19,6 +19,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Properties { [MapTo(typeof(CodeProperty))] + [MapFrom(typeof(CodeProperty))] public class PropertyViewModel : Screen { /// diff --git a/src/OSharp.CodeGenerator/Views/ViewModelPack.cs b/src/OSharp.CodeGenerator/Views/ViewModelPack.cs index 7ac857d..8c05ed4 100644 --- a/src/OSharp.CodeGenerator/Views/ViewModelPack.cs +++ b/src/OSharp.CodeGenerator/Views/ViewModelPack.cs @@ -14,6 +14,7 @@ using Microsoft.Extensions.DependencyInjection; using OSharp.AutoMapper; using OSharp.CodeGenerator.Data; using OSharp.Core.Packs; +using OSharp.Mapping; using OSharp.Wpf.Stylet; @@ -31,7 +32,7 @@ namespace OSharp.CodeGenerator.Views services.AddViewModels(assembly); services.AddViews(assembly); - services.AddSingleton(); + services.AddSingleton(); return services; } -- Gitee From fcf6885965329ef4caa77ad04baaefc11ec9b3be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Thu, 8 Apr 2021 01:00:14 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/DataService.Entity.cs | 50 ++++--------- .../Data/DataService.Module.cs | 5 +- .../Data/Entities/CodeEntity.cs | 2 + .../Data/Entities/ForeignRelation.cs | 38 ++++++++++ .../Data/IDataContract.cs | 9 +-- src/OSharp.CodeGenerator/App.xaml | 1 + .../Data/AutoMapperConfiguration.cs | 4 + src/OSharp.CodeGenerator/Data/Helper.cs | 35 +++++++++ .../Views/Entities/EntityListView.xaml | 58 ++++++++++++++- .../Views/Entities/EntityListViewModel.cs | 74 +++++++++++++++++-- .../Views/Entities/EntityViewModel.cs | 17 +++-- src/OSharp.CodeGenerator/Views/MainView.xaml | 2 +- .../Views/MainViewModel.cs | 5 +- .../Views/Modules/ModuleListView.xaml | 36 ++++----- .../Views/Modules/ModuleViewModel.cs | 22 +++--- .../Views/Projects/ProjectViewModel.cs | 11 ++- .../Views/ViewModelLocator.cs | 50 +++++++++++++ 17 files changed, 324 insertions(+), 95 deletions(-) create mode 100644 src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs create mode 100644 src/OSharp.CodeGenerator/Views/ViewModelLocator.cs diff --git a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs b/src/OSharp.CodeGeneration/Data/DataService.Entity.cs index 713a817..c328f18 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.Entity.cs @@ -17,6 +17,7 @@ using OSharp.CodeGeneration.Entities; using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Data @@ -40,17 +41,17 @@ namespace OSharp.CodeGeneration.Data { return EntityRepository.CheckExistsAsync(predicate, id); } - + /// - /// 添加代码实体信息信息 + /// 更新代码实体信息信息 /// - /// 要添加的代码实体信息DTO信息 + /// 包含更新信息的代码实体信息DTO信息 /// 业务操作结果 - public async Task CreateCodeEntities(params CodeEntity[] entities) + public async Task UpdateCodeEntities(params CodeEntity[] entities) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeEntity entity in entities) + foreach (var entity in entities) { entity.Validate(); CodeModule module = await ModuleRepository.GetAsync(entity.ModuleId); @@ -59,46 +60,23 @@ namespace OSharp.CodeGeneration.Data return new OperationResult(OperationResultType.Error, $"编号为“{entity.ModuleId}”的模块信息不存在"); } - if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId)) + if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId, entity.Id)) { return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); } - int count = await EntityRepository.InsertAsync(entity); - if (count > 0) + int count; + if (entity.Id == default) { - names.Add(entity.Name); + count = await EntityRepository.InsertAsync(entity); } - } - - await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”创建成功"); - } - - /// - /// 更新代码实体信息信息 - /// - /// 包含更新信息的代码实体信息DTO信息 - /// 业务操作结果 - public async Task UpdateCodeEntities(params CodeEntity[] entities) - { - List names = new List(); - UnitOfWork.EnableTransaction(); - foreach (CodeEntity entity in entities) - { - entity.Validate(); - CodeModule module = await ModuleRepository.GetAsync(entity.ModuleId); - if (module == null) + else { - return new OperationResult(OperationResultType.Error, $"编号为“{entity.ModuleId}”的模块信息不存在"); - } - - if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId, entity.Id)) - { - return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); + CodeEntity entity1 = await EntityRepository.GetAsync(entity.Id); + entity1 = entity.MapTo(entity1); + count = await EntityRepository.UpdateAsync(entity1); } - int count = await EntityRepository.UpdateAsync(entity); if (count > 0) { names.Add(entity.Name); diff --git a/src/OSharp.CodeGeneration/Data/DataService.Module.cs b/src/OSharp.CodeGeneration/Data/DataService.Module.cs index d21e455..a2c43ec 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Module.cs +++ b/src/OSharp.CodeGeneration/Data/DataService.Module.cs @@ -17,6 +17,7 @@ using OSharp.CodeGeneration.Entities; using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Data @@ -96,7 +97,9 @@ namespace OSharp.CodeGeneration.Data return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{entity.Name}”的模块信息已存在"); } - int count = await ModuleRepository.UpdateAsync(entity); + CodeModule entity1 = await ModuleRepository.GetAsync(entity.Id); + entity1 = entity.MapTo(entity1); + int count = await ModuleRepository.UpdateAsync(entity1); if (count > 0) { names.Add(entity.Name); diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs index 2636570..bf71aa6 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs @@ -13,6 +13,7 @@ using System.ComponentModel; using System.ComponentModel.DataAnnotations; using OSharp.Entity; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Entities @@ -22,6 +23,7 @@ namespace OSharp.CodeGeneration.Entities /// [Description("代码实体信息")] [TableNamePrefix("CodeGen")] + [MapTo(typeof(CodeEntity))] public class CodeEntity : EntityBase, ILockable { /// diff --git a/src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs b/src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs new file mode 100644 index 0000000..6def78b --- /dev/null +++ b/src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs @@ -0,0 +1,38 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-07 22:26 +// ----------------------------------------------------------------------- + +namespace OSharp.CodeGeneration.Data.Entities +{ + /// + /// 外键关系 + /// + public enum ForeignRelation + { + /// + /// 多对一 + /// + ManyToOne, + /// + /// 一对多 + /// + OneToMany, + /// + /// 一对一 + /// + OneToOne, + /// + /// 拥有单个子项关系 + /// + OwnsOne, + /// + /// 拥有多个子项关系 + /// + OwnsMany + } +} diff --git a/src/OSharp.CodeGeneration/Data/IDataContract.cs b/src/OSharp.CodeGeneration/Data/IDataContract.cs index d64f594..e56a7c8 100644 --- a/src/OSharp.CodeGeneration/Data/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Data/IDataContract.cs @@ -114,14 +114,7 @@ namespace OSharp.CodeGeneration.Data /// 更新的代码实体信息编号 /// 代码实体信息是否存在 Task CheckCodeEntityExists(Expression> predicate, Guid id = default); - - /// - /// 添加代码实体信息信息 - /// - /// 要添加的代码实体信息DTO信息 - /// 业务操作结果 - Task CreateCodeEntities(params CodeEntity[] entities); - + /// /// 更新代码实体信息信息 /// diff --git a/src/OSharp.CodeGenerator/App.xaml b/src/OSharp.CodeGenerator/App.xaml index 7cadbe9..34cf1ad 100644 --- a/src/OSharp.CodeGenerator/App.xaml +++ b/src/OSharp.CodeGenerator/App.xaml @@ -19,6 +19,7 @@ + diff --git a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs index 5b1954a..68dcb9b 100644 --- a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs +++ b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs @@ -31,14 +31,18 @@ namespace OSharp.CodeGenerator.Data .ForMember(e => e.Project, opt => opt.Ignore()); CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) .ForMember(vm => vm.Project, opt => opt.Ignore()); + CreateMap().ForMember(vm => vm.Namespace, opt => opt.Ignore()) + .ForMember(vm => vm.Project, opt => opt.Ignore()); CreateMap().ForMember(e => e.ModuleId, opt => opt.MapFrom(vm => vm.Module.Id)) .ForMember(e => e.Module, opt => opt.Ignore()); CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); + CreateMap().ForMember(vm => vm.Module, opt => opt.Ignore()); CreateMap().ForMember(e => e.EntityId, opt => opt.MapFrom(vm => vm.Entity.Id)) .ForMember(e=>e.Entity, opt=>opt.Ignore()); CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); + CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); } } } diff --git a/src/OSharp.CodeGenerator/Data/Helper.cs b/src/OSharp.CodeGenerator/Data/Helper.cs index 92302f3..cc3fde5 100644 --- a/src/OSharp.CodeGenerator/Data/Helper.cs +++ b/src/OSharp.CodeGenerator/Data/Helper.cs @@ -7,7 +7,12 @@ // 2021-04-07 19:29 // ----------------------------------------------------------------------- +using System; + +using Notifications.Wpf.Core; + using OSharp.CodeGenerator.Views; +using OSharp.Data; using OSharp.Wpf.Stylet; @@ -23,5 +28,35 @@ namespace OSharp.CodeGenerator.Data { IoC.Get().Message = message; } + + /// + /// 消息提示 + /// + public static void Notify(OperationResult result) + { + NotificationType type; + switch (result.ResultType) + { + case OperationResultType.NoChanged: + type = NotificationType.Information; + break; + case OperationResultType.Success: + type = NotificationType.Success; + break; + default: + type = NotificationType.Error; + break; + } + Notify(result.Message, type); + } + + /// + /// 消息提示 + /// + public static void Notify(string message, NotificationType type, string title = "消息提示") + { + MainViewModel main = IoC.Get(); + main.Notify(message, type, title); + } } } diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index 345ef0b..d4fec14 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -8,7 +8,7 @@ xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Entities" mc:Ignorable="d" - d:DesignHeight="700" d:DesignWidth="1080" + d:DesignHeight="700" d:DesignWidth="1280" d:DataContext="{d:DesignInstance local:EntityListViewModel}"> @@ -16,7 +16,7 @@ 实体列表 - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + [] + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index 52bbed7..ef6e9ab 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -21,6 +21,7 @@ using Notifications.Wpf.Core; using OSharp.CodeGeneration.Data; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Projects; using OSharp.Data; using OSharp.Mapping; @@ -56,6 +57,12 @@ namespace OSharp.CodeGenerator.Views.Modules public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; + public CodeModule ToModule() + { + CodeModule module = this.MapTo(); + return module; + } + public void Edit() { ModuleListViewModel model = IoC.Get(); @@ -78,13 +85,12 @@ namespace OSharp.CodeGenerator.Views.Modules result = await contract.DeleteCodeModules(Id); }); MainViewModel main = IoC.Get(); + Helper.Notify(result); if (!result.Succeeded) { - main.Notify(result.Message, NotificationType.Error); return; } - - main.Notify(result.Message, NotificationType.Success); + main.ModuleList.Init(); } @@ -93,7 +99,7 @@ namespace OSharp.CodeGenerator.Views.Modules public async void EditSave() { MainViewModel main = IoC.Get(); - if (!Validate()) + if (!await ValidateAsync()) { main.Notify("项目信息验证失败", NotificationType.Warning); return; @@ -108,12 +114,11 @@ namespace OSharp.CodeGenerator.Views.Modules ? await contract.CreateCodeModules(module) : await contract.UpdateCodeModules(module); }); + Helper.Notify(result); if (!result.Succeeded) { - main.Notify(result.Message, NotificationType.Error); return; } - main.Notify(result.Message, NotificationType.Success); ModuleListViewModel list = main.ModuleList; list.EditingModel = null; @@ -139,11 +144,6 @@ namespace OSharp.CodeGenerator.Views.Modules NotifyOfPropertyChange(() => CanEditSave); } - public CodeModule ToModule() - { - CodeModule module = this.MapTo(); - return module; - } } diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index e6f049d..43b8ebb 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -22,6 +22,7 @@ using Notifications.Wpf.Core; using OSharp.CodeGeneration.Data; using OSharp.CodeGeneration.Entities; +using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; using OSharp.Data; using OSharp.Extensions; @@ -92,13 +93,12 @@ namespace OSharp.CodeGenerator.Views.Projects IDataContract contract = provider.GetRequiredService(); result = await contract.DeleteCodeProjects(Id); }); - MainViewModel main = IoC.Get(); + Helper.Notify(result); if (!result.Succeeded) { - main.Notify(result.Message, NotificationType.Error); return; } - main.Notify(result.Message, NotificationType.Success); + MainViewModel main = IoC.Get(); main.ProjectList.Init(); } @@ -107,7 +107,7 @@ namespace OSharp.CodeGenerator.Views.Projects public async void EditSave() { MainViewModel main = IoC.Get(); - if (!Validate()) + if (!await ValidateAsync()) { main.Notify("项目信息验证失败", NotificationType.Warning); return; @@ -122,12 +122,11 @@ namespace OSharp.CodeGenerator.Views.Projects ? await contract.CreateCodeProjects(project) : await contract.UpdateCodeProjects(project); }); + Helper.Notify(result); if (!result.Succeeded) { - main.Notify(result.Message, NotificationType.Error); return; } - main.Notify(result.Message, NotificationType.Success); ProjectListViewModel list = main.ProjectList; list.EditingModel = null; diff --git a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs new file mode 100644 index 0000000..39a67b4 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs @@ -0,0 +1,50 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-07 22:24 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.EntityFrameworkCore; + +using OSharp.CodeGeneration.Data.Entities; + + +namespace OSharp.CodeGenerator.Views +{ + public class ViewModelLocator + { + /// + /// 获取 实体主键类型数据源 + /// + public string[] EntityKeys { get; } = + { + typeof(int).FullName, + typeof(Guid).FullName, + typeof(string).FullName, + typeof(long).FullName + }; + + public string[] TypeNames { get; } = + { + typeof(string).FullName, + typeof(int).FullName, + typeof(bool).FullName, + typeof(double).FullName, + typeof(DateTime).FullName, + typeof(Guid).FullName, + typeof(long).FullName, + "ICollection<>" + }; + + public ForeignRelation[] ForeignRelations { get; } = { ForeignRelation.ManyToOne, ForeignRelation.OneToMany, ForeignRelation.OneToOne, ForeignRelation.OwnsOne, ForeignRelation.OwnsMany }; + + public DeleteBehavior?[] DeleteBehaviors { get; } = + { null, DeleteBehavior.ClientSetNull, DeleteBehavior.Restrict, DeleteBehavior.SetNull, DeleteBehavior.Cascade }; + + } +} -- Gitee From 8f6aeb12d53270cf64b40a3f3e0c062842b19e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Thu, 8 Apr 2021 11:12:47 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=B1=9E=E6=80=A7=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/DataService.Property.cs | 12 -- .../OSharp.CodeGeneration.csproj | 2 +- .../{Data => Services}/DataPack.cs | 8 +- .../{Data => Services}/DataService.Entity.cs | 14 ++- .../{Data => Services}/DataService.Module.cs | 16 ++- .../{Data => Services}/DataService.Project.cs | 18 +-- .../Services/DataService.Property.cs | 110 ++++++++++++++++++ .../{Data => Services}/DataService.cs | 14 +-- .../{Data => Services}/Entities/CodeEntity.cs | 2 +- .../Entities/CodeEntityConfiguration.cs | 2 +- .../{Data => Services}/Entities/CodeModule.cs | 2 +- .../Entities/CodeModuleConfiguration.cs | 2 +- .../Entities/CodeProject.cs | 3 +- .../Entities/CodeProjectConfiguration.cs | 2 +- .../Entities/CodeProperty.cs | 2 +- .../Entities/CodePropertyConfiguration.cs | 2 +- .../Entities/ForeignRelation.cs | 2 +- .../{Data => Services}/IDataContract.cs | 36 +++++- .../Data/AutoMapperConfiguration.cs | 2 +- src/OSharp.CodeGenerator/Startup.cs | 2 +- .../Views/Entities/EntityListViewModel.cs | 4 +- .../Views/Entities/EntityViewModel.cs | 2 +- .../Views/Modules/ModuleListViewModel.cs | 4 +- .../Views/Modules/ModuleViewModel.cs | 4 +- .../Views/Projects/ProjectListViewModel.cs | 4 +- .../Views/Projects/ProjectViewModel.cs | 4 +- .../Views/Properties/PropertyViewModel.cs | 2 +- .../Views/ViewModelLocator.cs | 2 +- 28 files changed, 207 insertions(+), 72 deletions(-) delete mode 100644 src/OSharp.CodeGeneration/Data/DataService.Property.cs rename src/OSharp.CodeGeneration/{Data => Services}/DataPack.cs (77%) rename src/OSharp.CodeGeneration/{Data => Services}/DataService.Entity.cs (90%) rename src/OSharp.CodeGeneration/{Data => Services}/DataService.Module.cs (88%) rename src/OSharp.CodeGeneration/{Data => Services}/DataService.Project.cs (85%) create mode 100644 src/OSharp.CodeGeneration/Services/DataService.Property.cs rename src/OSharp.CodeGeneration/{Data => Services}/DataService.cs (70%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeEntity.cs (97%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeEntityConfiguration.cs (95%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeModule.cs (97%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeModuleConfiguration.cs (95%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeProject.cs (97%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeProjectConfiguration.cs (94%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodeProperty.cs (98%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/CodePropertyConfiguration.cs (95%) rename src/OSharp.CodeGeneration/{Data => Services}/Entities/ForeignRelation.cs (95%) rename src/OSharp.CodeGeneration/{Data => Services}/IDataContract.cs (78%) diff --git a/src/OSharp.CodeGeneration/Data/DataService.Property.cs b/src/OSharp.CodeGeneration/Data/DataService.Property.cs deleted file mode 100644 index 7a95b17..0000000 --- a/src/OSharp.CodeGeneration/Data/DataService.Property.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace OSharp.CodeGeneration.Data -{ - public partial class DataService - { - } -} diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index 8b2df44..856f053 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -12,7 +12,7 @@ - + DataService.cs diff --git a/src/OSharp.CodeGeneration/Data/DataPack.cs b/src/OSharp.CodeGeneration/Services/DataPack.cs similarity index 77% rename from src/OSharp.CodeGeneration/Data/DataPack.cs rename to src/OSharp.CodeGeneration/Services/DataPack.cs index 5873e31..0a01300 100644 --- a/src/OSharp.CodeGeneration/Data/DataPack.cs +++ b/src/OSharp.CodeGeneration/Services/DataPack.cs @@ -1,15 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - using Microsoft.Extensions.DependencyInjection; using OSharp.Core.Packs; -namespace OSharp.CodeGeneration.Data +namespace OSharp.CodeGeneration.Services { public class DataPack : OsharpPack { diff --git a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs b/src/OSharp.CodeGeneration/Services/DataService.Entity.cs similarity index 90% rename from src/OSharp.CodeGeneration/Data/DataService.Entity.cs rename to src/OSharp.CodeGeneration/Services/DataService.Entity.cs index c328f18..d8e8e16 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Entity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.Entity.cs @@ -13,14 +13,14 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; using OSharp.Mapping; -namespace OSharp.CodeGeneration.Data +namespace OSharp.CodeGeneration.Services { public partial class DataService { @@ -41,7 +41,7 @@ namespace OSharp.CodeGeneration.Data { return EntityRepository.CheckExistsAsync(predicate, id); } - + /// /// 更新代码实体信息信息 /// @@ -84,7 +84,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”更新成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”更新成功") + : OperationResult.NoChanged; } /// @@ -118,7 +120,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”删除成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”删除成功") + : OperationResult.NoChanged; } #endregion diff --git a/src/OSharp.CodeGeneration/Data/DataService.Module.cs b/src/OSharp.CodeGeneration/Services/DataService.Module.cs similarity index 88% rename from src/OSharp.CodeGeneration/Data/DataService.Module.cs rename to src/OSharp.CodeGeneration/Services/DataService.Module.cs index a2c43ec..4fe7430 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Module.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.Module.cs @@ -13,14 +13,14 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; using OSharp.Mapping; -namespace OSharp.CodeGeneration.Data +namespace OSharp.CodeGeneration.Services { public partial class DataService { @@ -71,7 +71,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功") + : OperationResult.NoChanged; } /// @@ -107,7 +109,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”更新成功") + : OperationResult.NoChanged; } /// @@ -141,7 +145,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”删除成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”删除成功") + : OperationResult.NoChanged; } } } diff --git a/src/OSharp.CodeGeneration/Data/DataService.Project.cs b/src/OSharp.CodeGeneration/Services/DataService.Project.cs similarity index 85% rename from src/OSharp.CodeGeneration/Data/DataService.Project.cs rename to src/OSharp.CodeGeneration/Services/DataService.Project.cs index c2230db..8c5d8cf 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.Project.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.Project.cs @@ -2,17 +2,15 @@ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; -using System.Text; using System.Threading.Tasks; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; -using OSharp.Entity; using OSharp.Extensions; -namespace OSharp.CodeGeneration.Data +namespace OSharp.CodeGeneration.Services { public partial class DataService { @@ -59,7 +57,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”创建成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”创建成功") + : OperationResult.NoChanged; } /// @@ -87,7 +87,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”更新成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”更新成功") + : OperationResult.NoChanged; } /// @@ -121,7 +123,9 @@ namespace OSharp.CodeGeneration.Data } await UnitOfWork.CommitAsync(); - return new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”删除成功"); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”删除成功") + : OperationResult.NoChanged; } #endregion diff --git a/src/OSharp.CodeGeneration/Services/DataService.Property.cs b/src/OSharp.CodeGeneration/Services/DataService.Property.cs new file mode 100644 index 0000000..0373c76 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/DataService.Property.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Collections; +using OSharp.Data; +using OSharp.Extensions; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services +{ + public partial class DataService + { + /// + /// 获取 实体属性信息查询数据集 + /// + public IQueryable CodeProperties => PropertyRepository.QueryAsNoTracking(); + + /// + /// 检查实体属性信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的实体属性信息编号 + /// 实体属性信息是否存在 + public Task CheckCodePropertyExists(Expression> predicate, Guid id = default) + { + return PropertyRepository.CheckExistsAsync(predicate, id); + } + + /// + /// 更新实体属性信息信息 + /// + /// 包含更新信息的实体属性信息DTO信息 + /// 业务操作结果 + public async Task UpdateCodeProperties(params CodeProperty[] entities) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var entity in entities) + { + entity.Validate(); + CodeEntity module = await EntityRepository.GetAsync(entity.EntityId); + if (module == null) + { + return new OperationResult(OperationResultType.Error, $"编号为“{entity.EntityId}”的实体信息不存在"); + } + + if (await CheckCodePropertyExists(m => m.Name == entity.Name && m.EntityId == entity.EntityId, entity.Id)) + { + return new OperationResult(OperationResultType.Error, $"实体“{module.Name}”中名称为“{entity.Name}”的属性信息已存在"); + } + + int count; + if (entity.Id == default) + { + count = await PropertyRepository.InsertAsync(entity); + } + else + { + CodeProperty entity1 = await PropertyRepository.GetAsync(entity.Id); + entity1 = entity.MapTo(entity1); + count = await PropertyRepository.UpdateAsync(entity1); + } + + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"属性“{names.ExpandAndToString()}”更新成功") + : OperationResult.NoChanged; + } + + /// + /// 删除实体属性信息信息 + /// + /// 要删除的实体属性信息编号 + /// 业务操作结果 + public async Task DeleteCodeProperties(params Guid[] ids) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var id in ids) + { + var entity = await PropertyRepository.GetAsync(id); + if (entity == null) + { + continue; + } + int count = await PropertyRepository.DeleteAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"属性“{names.ExpandAndToString()}”删除成功") + : OperationResult.NoChanged; + } + } +} diff --git a/src/OSharp.CodeGeneration/Data/DataService.cs b/src/OSharp.CodeGeneration/Services/DataService.cs similarity index 70% rename from src/OSharp.CodeGeneration/Data/DataService.cs rename to src/OSharp.CodeGeneration/Services/DataService.cs index 1e131d0..195f531 100644 --- a/src/OSharp.CodeGeneration/Data/DataService.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.cs @@ -1,14 +1,12 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; + using Microsoft.Extensions.DependencyInjection; -using OSharp.CodeGeneration.Entities; -using OSharp.Data; + +using OSharp.CodeGeneration.Services.Entities; using OSharp.Entity; -namespace OSharp.CodeGeneration.Data + +namespace OSharp.CodeGeneration.Services { public partial class DataService : IDataContract { @@ -27,7 +25,7 @@ namespace OSharp.CodeGeneration.Data protected IRepository EntityRepository => _serviceProvider.GetService>(); - protected IRepository CodePropertyRepository => _serviceProvider.GetService>(); + protected IRepository PropertyRepository => _serviceProvider.GetService>(); } } diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs similarity index 97% rename from src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs index bf71aa6..98cbce6 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs @@ -16,7 +16,7 @@ using OSharp.Entity; using OSharp.Mapping; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { /// /// 实体类:代码实体信息 diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeEntityConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntityConfiguration.cs similarity index 95% rename from src/OSharp.CodeGeneration/Data/Entities/CodeEntityConfiguration.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeEntityConfiguration.cs index a137c56..09d7b41 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeEntityConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeEntityConfiguration.cs @@ -14,7 +14,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { public class CodeEntityConfiguration : EntityTypeConfigurationBase { diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs similarity index 97% rename from src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs index fe6c863..2844cd9 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs @@ -15,7 +15,7 @@ using System.ComponentModel.DataAnnotations; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { /// /// 实体类:代码模块信息 diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeModuleConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeModuleConfiguration.cs similarity index 95% rename from src/OSharp.CodeGeneration/Data/Entities/CodeModuleConfiguration.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeModuleConfiguration.cs index d40ffc5..57e3922 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeModuleConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeModuleConfiguration.cs @@ -14,7 +14,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { public class CodeModuleConfiguration : EntityTypeConfigurationBase { diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs similarity index 97% rename from src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs index 2921450..6af2f14 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs @@ -11,11 +11,12 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; + using OSharp.Data; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { /// /// 实体类:代码项目信息 diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProjectConfiguration.cs similarity index 94% rename from src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeProjectConfiguration.cs index 1d28b3b..bc24e2e 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProjectConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProjectConfiguration.cs @@ -14,7 +14,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { public class CodeProjectConfiguration : EntityTypeConfigurationBase { diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs similarity index 98% rename from src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs index d5f2006..0d2f12e 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs @@ -14,7 +14,7 @@ using System.ComponentModel.DataAnnotations; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { /// /// 实体类:代码实体属性信息 diff --git a/src/OSharp.CodeGeneration/Data/Entities/CodePropertyConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodePropertyConfiguration.cs similarity index 95% rename from src/OSharp.CodeGeneration/Data/Entities/CodePropertyConfiguration.cs rename to src/OSharp.CodeGeneration/Services/Entities/CodePropertyConfiguration.cs index 30083b8..7b354fc 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/CodePropertyConfiguration.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodePropertyConfiguration.cs @@ -14,7 +14,7 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; using OSharp.Entity; -namespace OSharp.CodeGeneration.Entities +namespace OSharp.CodeGeneration.Services.Entities { public class CodePropertyConfiguration : EntityTypeConfigurationBase { diff --git a/src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs b/src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs similarity index 95% rename from src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs rename to src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs index 6def78b..3a7ac17 100644 --- a/src/OSharp.CodeGeneration/Data/Entities/ForeignRelation.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs @@ -7,7 +7,7 @@ // 2021-04-07 22:26 // ----------------------------------------------------------------------- -namespace OSharp.CodeGeneration.Data.Entities +namespace OSharp.CodeGeneration.Services.Entities { /// /// 外键关系 diff --git a/src/OSharp.CodeGeneration/Data/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs similarity index 78% rename from src/OSharp.CodeGeneration/Data/IDataContract.cs rename to src/OSharp.CodeGeneration/Services/IDataContract.cs index e56a7c8..53db177 100644 --- a/src/OSharp.CodeGeneration/Data/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -10,14 +10,13 @@ using System; using System.Linq; using System.Linq.Expressions; -using System.Reflection; using System.Threading.Tasks; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.Data; -namespace OSharp.CodeGeneration.Data +namespace OSharp.CodeGeneration.Services { /// /// 数据服务契约 @@ -131,5 +130,36 @@ namespace OSharp.CodeGeneration.Data #endregion + #region 实体属性信息业务 + + /// + /// 获取 实体属性信息查询数据集 + /// + IQueryable CodeProperties { get; } + + /// + /// 检查实体属性信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的实体属性信息编号 + /// 实体属性信息是否存在 + Task CheckCodePropertyExists(Expression> predicate, Guid id = default); + + /// + /// 更新实体属性信息信息 + /// + /// 包含更新信息的实体属性信息DTO信息 + /// 业务操作结果 + Task UpdateCodeProperties(params CodeProperty[] entities); + + /// + /// 删除实体属性信息信息 + /// + /// 要删除的实体属性信息编号 + /// 业务操作结果 + Task DeleteCodeProperties(params Guid[] ids); + + #endregion + } } diff --git a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs index 68dcb9b..42f8084 100644 --- a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs +++ b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs @@ -13,7 +13,7 @@ using System.Runtime.Serialization; using AutoMapper.Configuration; using OSharp.AutoMapper; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Views; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Modules; diff --git a/src/OSharp.CodeGenerator/Startup.cs b/src/OSharp.CodeGenerator/Startup.cs index 5868597..e227703 100644 --- a/src/OSharp.CodeGenerator/Startup.cs +++ b/src/OSharp.CodeGenerator/Startup.cs @@ -12,7 +12,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using OSharp.AutoMapper; -using OSharp.CodeGeneration.Data; +using OSharp.CodeGeneration.Services; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views; using OSharp.Log4Net; diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs index 43ca100..f37cd81 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -15,8 +15,8 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; -using OSharp.CodeGeneration.Data; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; using OSharp.Data; diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 8bc5b91..2174038 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -11,7 +11,7 @@ using System; using FluentValidation; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Views.Modules; using OSharp.CodeGenerator.Views.Properties; using OSharp.Mapping; diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index ac7db26..7f3e801 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -14,8 +14,8 @@ using System.Windows.Controls; using Microsoft.Extensions.DependencyInjection; -using OSharp.CodeGeneration.Data; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Projects; diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index ef6e9ab..98dfbcd 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -19,8 +19,8 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; -using OSharp.CodeGeneration.Data; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Projects; using OSharp.Data; diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs index 1dcfe64..fd6fcb2 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs @@ -13,8 +13,8 @@ using System.Linq; using Microsoft.Extensions.DependencyInjection; -using OSharp.CodeGeneration.Data; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; using OSharp.Mapping; using OSharp.Wpf.Stylet; diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index 43b8ebb..4cd7f22 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -20,8 +20,8 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; -using OSharp.CodeGeneration.Data; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; using OSharp.Data; diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index 3268db1..0e77d85 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -9,7 +9,7 @@ using FluentValidation; -using OSharp.CodeGeneration.Entities; +using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Views.Entities; using OSharp.Mapping; diff --git a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs index 39a67b4..7d25650 100644 --- a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs +++ b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs @@ -11,7 +11,7 @@ using System; using Microsoft.EntityFrameworkCore; -using OSharp.CodeGeneration.Data.Entities; +using OSharp.CodeGeneration.Services.Entities; namespace OSharp.CodeGenerator.Views -- Gitee From 45a197c2c5c2b1684d1a7e99bff9e2a4150a2e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Thu, 8 Apr 2021 14:36:30 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Order=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OSharp.CodeGeneration.csproj | 10 +- .../Services/Entities/CodeEntity.cs | 50 +++ .../Services/Entities/CodeModule.cs | 5 + .../Services/Entities/CodeProperty.cs | 54 ++- .../20210408061345_AddOrder.Designer.cs | 415 ++++++++++++++++++ .../Migrations/20210408061345_AddOrder.cs | 241 ++++++++++ .../DefaultDbContextModelSnapshot.cs | 86 +++- .../OSharp.CodeGenerator.csproj | 2 +- .../Views/Entities/EntityListView.xaml | 21 +- .../Views/Entities/EntityListViewModel.cs | 2 +- .../Views/Entities/EntityViewModel.cs | 27 ++ .../Views/Modules/ModuleListViewModel.cs | 2 +- .../Views/Modules/ModuleViewModel.cs | 6 +- .../Views/Properties/PropertyListViewModel.cs | 26 ++ .../Views/Properties/PropertyViewModel.cs | 9 +- 15 files changed, 920 insertions(+), 36 deletions(-) create mode 100644 src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs create mode 100644 src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs create mode 100644 src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index 856f053..8e9c766 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -5,10 +5,10 @@ - - + + - + @@ -17,4 +17,8 @@ + + + + diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs index 98cbce6..73692a9 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs @@ -44,11 +44,61 @@ namespace OSharp.CodeGeneration.Services.Entities [Required(), StringLength(500)] public string PrimaryKeyTypeFullName { get; set; } + /// + /// 获取或设置 是否可列表 + /// + public bool Listable { get; set; } + + /// + /// 获取或设置 是否可添加 + /// + public bool Addable { get; set; } + + /// + /// 获取或设置 是否可更新 + /// + public bool Updatable { get; set; } + + /// + /// 获取或设置 是否可删除 + /// + public bool Deletable { get; set; } + /// /// 获取或设置 是否数据权限控制 /// public bool IsDataAuth { get; set; } + /// + /// 获取或设置 是否有创建时间 + /// + public bool HasCreatedTime { get; set; } + + /// + /// 获取或设置 是否有锁定 + /// + public bool HasLocked { get; set; } + + /// + /// 获取或设置 是否有软删除 + /// + public bool HasSoftDeleted { get; set; } + + /// + /// 获取或设置 是否有创建审计 + /// + public bool HasCreationAudited { get; set; } + + /// + /// 获取或设置 是否有更新审计 + /// + public bool HasUpdateAudited { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + /// 获取或设置 创建时间 public DateTime CreatedTime { get; set; } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs index 2844cd9..2ba80b8 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeModule.cs @@ -36,6 +36,11 @@ namespace OSharp.CodeGeneration.Services.Entities [Required(), StringLength(200)] public string Display { get; set; } + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + /// 获取或设置 创建时间 public DateTime CreatedTime { get; set; } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs index 0d2f12e..8937317 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProperty.cs @@ -29,6 +29,12 @@ namespace OSharp.CodeGeneration.Services.Entities [Required(), StringLength(200)] public string Name { get; set; } + /// + /// 获取或设置 显示名称 + /// + [StringLength(200)] + public string Display { get; set; } + /// /// 获取或设置 属性类型名称 /// @@ -36,26 +42,35 @@ namespace OSharp.CodeGeneration.Services.Entities public string TypeName { get; set; } /// - /// 获取或设置 显示名称 + /// 获取或设置 是否可更新 /// - [Required(), StringLength(200)] - public string Display { get; set; } + public bool Updatable { get; set; } /// - /// 获取或设置 是否必须 + /// 获取或设置 是否可排序 /// - public bool? IsRequired { get; set; } + public bool Sortable { get; set; } /// - /// 获取或设置 最大长度 + /// 获取或设置 是否可筛选 /// - public int? MaxLength { get; set; } + public bool Filterable { get; set; } + + /// + /// 获取或设置 是否必须 + /// + public bool? IsRequired { get; set; } /// /// 获取或设置 最小长度 /// public int? MinLength { get; set; } + /// + /// 获取或设置 最大长度 + /// + public int? MaxLength { get; set; } + /// /// 获取或设置 是否值类型可空 /// @@ -71,6 +86,21 @@ namespace OSharp.CodeGeneration.Services.Entities /// public bool IsForeignKey { get; set; } + /// + /// 获取或设置 是否导航属性 + /// + public bool IsNavigation { get; set; } + + /// + /// 获取或设置 关联实体 + /// + public string RelateEntity { get; set; } + + /// + /// 获取或设置 数据权限标识 + /// + public string DataAuthFlag { get; set; } + /// /// 获取或设置 是否包含在输入Dto /// @@ -81,6 +111,16 @@ namespace OSharp.CodeGeneration.Services.Entities /// public bool IsOutputDto { get; set; } = true; + /// + /// 获取或设置 默认值 + /// + public string DefaultValue { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + /// 获取或设置 创建时间 public DateTime CreatedTime { get; set; } diff --git a/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs new file mode 100644 index 0000000..cd17eba --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.Designer.cs @@ -0,0 +1,415 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using OSharp.Entity; + +namespace OSharp.CodeGenerator.Migrations +{ + [DbContext(typeof(DefaultDbContext))] + [Migration("20210408061345_AddOrder")] + partial class AddOrder + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.5"); + + modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AuditEnabled") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PropertyJson") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("TypeName") + .IsUnique() + .HasDatabaseName("ClassFullNameIndex"); + + b.ToTable("Auth_EntityInfo"); + }); + + modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AccessType") + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("TEXT"); + + b.Property("Area") + .HasColumnType("TEXT"); + + b.Property("AuditEntityEnabled") + .HasColumnType("INTEGER"); + + b.Property("AuditOperationEnabled") + .HasColumnType("INTEGER"); + + b.Property("CacheExpirationSeconds") + .HasColumnType("INTEGER"); + + b.Property("Controller") + .HasColumnType("TEXT"); + + b.Property("IsAccessTypeChanged") + .HasColumnType("INTEGER"); + + b.Property("IsAjax") + .HasColumnType("INTEGER"); + + b.Property("IsCacheSliding") + .HasColumnType("INTEGER"); + + b.Property("IsController") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsSlaveDatabase") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Area", "Controller", "Action") + .IsUnique() + .HasDatabaseName("AreaControllerActionIndex"); + + b.ToTable("Auth_Function"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Addable") + .HasColumnType("INTEGER"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Deletable") + .HasColumnType("INTEGER"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("HasCreatedTime") + .HasColumnType("INTEGER"); + + b.Property("HasCreationAudited") + .HasColumnType("INTEGER"); + + b.Property("HasLocked") + .HasColumnType("INTEGER"); + + b.Property("HasSoftDeleted") + .HasColumnType("INTEGER"); + + b.Property("HasUpdateAudited") + .HasColumnType("INTEGER"); + + b.Property("IsDataAuth") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Listable") + .HasColumnType("INTEGER"); + + b.Property("ModuleId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("PrimaryKeyTypeFullName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("Updatable") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ModuleId"); + + b.ToTable("CodeGen_CodeEntity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("CodeGen_CodeModule"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Company") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Copyright") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Creator") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("NamespacePrefix") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("SiteUrl") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("CodeGen_CodeProject"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("DataAuthFlag") + .HasColumnType("TEXT"); + + b.Property("DefaultValue") + .HasColumnType("TEXT"); + + b.Property("Display") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("Filterable") + .HasColumnType("INTEGER"); + + b.Property("IsForeignKey") + .HasColumnType("INTEGER"); + + b.Property("IsInputDto") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsNavigation") + .HasColumnType("INTEGER"); + + b.Property("IsNullable") + .HasColumnType("INTEGER"); + + b.Property("IsOutputDto") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("IsVirtual") + .HasColumnType("INTEGER"); + + b.Property("MaxLength") + .HasColumnType("INTEGER"); + + b.Property("MinLength") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("RelateEntity") + .HasColumnType("TEXT"); + + b.Property("Sortable") + .HasColumnType("INTEGER"); + + b.Property("TypeName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("Updatable") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeProperty"); + }); + + modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Key") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ValueJson") + .HasColumnType("TEXT"); + + b.Property("ValueType") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Key") + .IsUnique() + .HasDatabaseName("KeyIndex"); + + b.ToTable("Systems_KeyValue"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeModule", "Module") + .WithMany("Entities") + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Module"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany("Modules") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") + .WithMany("Properties") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.Navigation("Entities"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => + { + b.Navigation("Modules"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs b/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs new file mode 100644 index 0000000..9eade27 --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210408061345_AddOrder.cs @@ -0,0 +1,241 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace OSharp.CodeGenerator.Migrations +{ + public partial class AddOrder : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Display", + table: "CodeGen_CodeProperty", + type: "TEXT", + maxLength: 200, + nullable: true, + oldClrType: typeof(string), + oldType: "TEXT", + oldMaxLength: 200); + + migrationBuilder.AddColumn( + name: "DataAuthFlag", + table: "CodeGen_CodeProperty", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "DefaultValue", + table: "CodeGen_CodeProperty", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "Filterable", + table: "CodeGen_CodeProperty", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsNavigation", + table: "CodeGen_CodeProperty", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Order", + table: "CodeGen_CodeProperty", + type: "INTEGER", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "RelateEntity", + table: "CodeGen_CodeProperty", + type: "TEXT", + nullable: true); + + migrationBuilder.AddColumn( + name: "Sortable", + table: "CodeGen_CodeProperty", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Updatable", + table: "CodeGen_CodeProperty", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Order", + table: "CodeGen_CodeModule", + type: "INTEGER", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "Addable", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Deletable", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "HasCreatedTime", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "HasCreationAudited", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "HasLocked", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "HasSoftDeleted", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "HasUpdateAudited", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Listable", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "Order", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "Updatable", + table: "CodeGen_CodeEntity", + type: "INTEGER", + nullable: false, + defaultValue: false); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DataAuthFlag", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "DefaultValue", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "Filterable", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "IsNavigation", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "Order", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "RelateEntity", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "Sortable", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "Updatable", + table: "CodeGen_CodeProperty"); + + migrationBuilder.DropColumn( + name: "Order", + table: "CodeGen_CodeModule"); + + migrationBuilder.DropColumn( + name: "Addable", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "Deletable", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "HasCreatedTime", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "HasCreationAudited", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "HasLocked", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "HasSoftDeleted", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "HasUpdateAudited", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "Listable", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "Order", + table: "CodeGen_CodeEntity"); + + migrationBuilder.DropColumn( + name: "Updatable", + table: "CodeGen_CodeEntity"); + + migrationBuilder.AlterColumn( + name: "Display", + table: "CodeGen_CodeProperty", + type: "TEXT", + maxLength: 200, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "TEXT", + oldMaxLength: 200, + oldNullable: true); + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index 48d8ca6..bcd602f 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -14,7 +14,7 @@ namespace OSharp.CodeGenerator.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "5.0.4"); + .HasAnnotation("ProductVersion", "5.0.5"); modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => { @@ -103,26 +103,50 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("Auth_Function"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("TEXT"); + b.Property("Addable") + .HasColumnType("INTEGER"); + b.Property("CreatedTime") .HasColumnType("TEXT"); + b.Property("Deletable") + .HasColumnType("INTEGER"); + b.Property("Display") .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("HasCreatedTime") + .HasColumnType("INTEGER"); + + b.Property("HasCreationAudited") + .HasColumnType("INTEGER"); + + b.Property("HasLocked") + .HasColumnType("INTEGER"); + + b.Property("HasSoftDeleted") + .HasColumnType("INTEGER"); + + b.Property("HasUpdateAudited") + .HasColumnType("INTEGER"); + b.Property("IsDataAuth") .HasColumnType("INTEGER"); b.Property("IsLocked") .HasColumnType("INTEGER"); + b.Property("Listable") + .HasColumnType("INTEGER"); + b.Property("ModuleId") .HasColumnType("TEXT"); @@ -131,11 +155,17 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("Order") + .HasColumnType("INTEGER"); + b.Property("PrimaryKeyTypeFullName") .IsRequired() .HasMaxLength(500) .HasColumnType("TEXT"); + b.Property("Updatable") + .HasColumnType("INTEGER"); + b.HasKey("Id"); b.HasIndex("ModuleId"); @@ -143,7 +173,7 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeEntity"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -165,6 +195,9 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("Order") + .HasColumnType("INTEGER"); + b.Property("ProjectId") .HasColumnType("TEXT"); @@ -175,7 +208,7 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeModule"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -215,7 +248,7 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeProject"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -224,14 +257,22 @@ namespace OSharp.CodeGenerator.Migrations b.Property("CreatedTime") .HasColumnType("TEXT"); + b.Property("DataAuthFlag") + .HasColumnType("TEXT"); + + b.Property("DefaultValue") + .HasColumnType("TEXT"); + b.Property("Display") - .IsRequired() .HasMaxLength(200) .HasColumnType("TEXT"); b.Property("EntityId") .HasColumnType("TEXT"); + b.Property("Filterable") + .HasColumnType("INTEGER"); + b.Property("IsForeignKey") .HasColumnType("INTEGER"); @@ -241,6 +282,9 @@ namespace OSharp.CodeGenerator.Migrations b.Property("IsLocked") .HasColumnType("INTEGER"); + b.Property("IsNavigation") + .HasColumnType("INTEGER"); + b.Property("IsNullable") .HasColumnType("INTEGER"); @@ -264,11 +308,23 @@ namespace OSharp.CodeGenerator.Migrations .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("RelateEntity") + .HasColumnType("TEXT"); + + b.Property("Sortable") + .HasColumnType("INTEGER"); + b.Property("TypeName") .IsRequired() .HasMaxLength(500) .HasColumnType("TEXT"); + b.Property("Updatable") + .HasColumnType("INTEGER"); + b.HasKey("Id"); b.HasIndex("EntityId"); @@ -304,9 +360,9 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("Systems_KeyValue"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => { - b.HasOne("OSharp.CodeGeneration.Entities.CodeModule", "Module") + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeModule", "Module") .WithMany("Entities") .HasForeignKey("ModuleId") .OnDelete(DeleteBehavior.Cascade) @@ -315,9 +371,9 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Module"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => { - b.HasOne("OSharp.CodeGeneration.Entities.CodeProject", "Project") + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") .WithMany("Modules") .HasForeignKey("ProjectId") .OnDelete(DeleteBehavior.Cascade) @@ -326,9 +382,9 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Project"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProperty", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => { - b.HasOne("OSharp.CodeGeneration.Entities.CodeEntity", "Entity") + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") .WithMany("Properties") .HasForeignKey("EntityId") .OnDelete(DeleteBehavior.Cascade) @@ -337,17 +393,17 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Entity"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeEntity", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => { b.Navigation("Properties"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeModule", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => { b.Navigation("Entities"); }); - modelBuilder.Entity("OSharp.CodeGeneration.Entities.CodeProject", b => + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => { b.Navigation("Modules"); }); diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index 4a996a8..7d3fa49 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -17,7 +17,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index d4fec14..858813a 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -38,12 +38,12 @@ + SelectionMode="Single" RowDetailsVisibilityMode="Collapsed" CanUserDeleteRows="False"> - + @@ -71,11 +71,24 @@ - + - + + + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs index f37cd81..da5886b 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -54,7 +54,7 @@ namespace OSharp.CodeGenerator.Views.Entities _provider.ExecuteScopedWork(provider => { IDataContract contract = provider.GetRequiredService(); - entities = contract.CodeEntities.Where(m => m.ModuleId == Module.Id).ToList(); + entities = contract.CodeEntities.Where(m => m.ModuleId == Module.Id).OrderBy(m => m.Order).ToList(); }); Entities.Clear(); foreach (CodeEntity entity in entities) diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 2174038..de83ac9 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -12,6 +12,7 @@ using System; using FluentValidation; using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; using OSharp.CodeGenerator.Views.Properties; using OSharp.Mapping; @@ -67,15 +68,41 @@ namespace OSharp.CodeGenerator.Views.Entities public bool HasUpdateAudited { get; set; } + public int Order { get; set; } + public CodeEntity ToEntity() { CodeEntity entity = this.MapTo(); return entity; } + public void Expanded() + { + Helper.Output($"“{Name}” - Expanded"); + } + + public void Collapsed() + { + Helper.Output($"“{Name}” - Collapsed"); + } + public void ForeignKey() { + Helper.Output($"“{Name}” - ForeignKey"); + } + + public void Up() + { + Helper.Output($"“{Name}” - Up"); + } + public void Down() + { + Helper.Output($"“{Name}” - Down"); + } + public void Delete() + { + Helper.Output($"“{Name}” - Delete"); } } diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index 7f3e801..27e6134 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -58,7 +58,7 @@ namespace OSharp.CodeGenerator.Views.Modules _provider.ExecuteScopedWork(provider => { IDataContract contract = provider.GetRequiredService(); - entities = contract.CodeModules.Where(m => m.ProjectId == Project.Id).ToList(); + entities = contract.CodeModules.Where(m => m.ProjectId == Project.Id).OrderBy(m => m.Order).ToList(); }); Modules.Clear(); foreach (CodeModule entity in entities) diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index 98dfbcd..126a247 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -53,10 +53,12 @@ namespace OSharp.CodeGenerator.Views.Modules public string Display { get; set; } - public ProjectViewModel Project { get; set; } + public int Order { get; set; } public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; + public ProjectViewModel Project { get; set; } + public CodeModule ToModule() { CodeModule module = this.MapTo(); @@ -67,7 +69,7 @@ namespace OSharp.CodeGenerator.Views.Modules { ModuleListViewModel model = IoC.Get(); model.EditingModel = this; - model.EditTitle = $"项目编辑 - {Name}[{Display}]"; + model.EditTitle = $"模块编辑 - {Name}[{Display}]"; model.IsShowEdit = true; } diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs new file mode 100644 index 0000000..d999257 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs @@ -0,0 +1,26 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 13:44 +// ----------------------------------------------------------------------- + +using System; + +using Stylet; + + +namespace OSharp.CodeGenerator.Views.Properties +{ + public class PropertyListViewModel : Screen + { + private readonly IServiceProvider _provider; + + public PropertyListViewModel(IServiceProvider provider) + { + _provider = provider; + } + } +} diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index 0e77d85..ad20820 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -54,6 +54,8 @@ namespace OSharp.CodeGenerator.Views.Properties public bool IsNullable { get; set; } + public bool IsVirtual { get; set; } + public bool IsForeignKey { get; set; } public bool IsNavigation { get; set; } @@ -68,6 +70,8 @@ namespace OSharp.CodeGenerator.Views.Properties public string DefaultValue { get; set; } + public int Order { get; set; } + public CodeProperty ToProperty() { CodeProperty property = this.MapTo(); @@ -81,8 +85,9 @@ namespace OSharp.CodeGenerator.Views.Properties public PropertyViewModelValidator() { RuleFor(m => m.Name) - .NotEmpty().WithMessage("实体类名称不能为空") - .Matches("^[a-zA-Z_\u2E80-\u9FFF][0-9a-zA-Z_\u2E80-\u9FFF]*$").WithMessage("实体名称不符合标识符命名规则,只能是字母、数值、下划线、汉字,并且不能以数值开关"); + .NotEmpty().WithMessage("属性名称不能为空") + .Matches("^[a-zA-Z_\u2E80-\u9FFF][0-9a-zA-Z_\u2E80-\u9FFF]*$").WithMessage("属性名称不符合标识符命名规则,只能是字母、数值、下划线、汉字,并且不能以数值开关"); + RuleFor(m => m.TypeName).NotEmpty().WithMessage("属性类型名不能为空"); } } } -- Gitee From 62819efca15a29d5c09a1e0e40090690ea1e2156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Fri, 9 Apr 2021 00:18:41 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E5=A4=96=E9=94=AE=E5=92=8C=E4=BB=A3=E7=A0=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E3=80=81=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OSharp.CodeGenerator.sln | 9 +- OSharp.CodeGenerator.sln.DotSettings | 1 + .../OSharp.CodeConsoles.csproj | 12 + src/OSharp.CodeConsoles/Program.cs | 147 +++++ .../Generates/CodeFile.cs | 41 ++ .../Generates/GenCodeConfig.cs | 102 ++++ .../Generates/GenerateManager.cs | 40 ++ .../Generates/GeneratePack.cs | 33 ++ .../Generates/ICodeGenerator.cs | 51 ++ .../Generates/IGenerateManager.cs | 26 + .../Generates/MetadataType.cs | 23 + .../Generates/RazorCodeGenerator.cs | 141 +++++ .../OSharp.CodeGeneration.csproj | 11 +- ...ce.Entity.cs => DataService.CodeEntity.cs} | 10 +- .../Services/DataService.CodeForeign.cs | 119 +++++ ...ce.Module.cs => DataService.CodeModule.cs} | 56 +- ....Project.cs => DataService.CodeProject.cs} | 48 +- ...roperty.cs => DataService.CodeProperty.cs} | 50 +- .../Services/DataService.CodeSetting.cs | 120 +++++ .../Services/DataService.cs | 3 + .../Services/Entities/CodeForeign.cs | 72 +++ .../Entities/CodeForeignConfiguration.cs | 28 + .../Services/Entities/CodeSetting.cs | 103 ++++ .../Entities/CodeSettingConfiguration.cs | 26 + .../Services/Entities/ForeignRelation.cs | 4 + .../Services/IDataContract.cs | 86 ++- .../Templates/TestTemplate.cshtml | 17 + src/OSharp.CodeGeneration/Utils/TypeHelper.cs | 81 +++ .../20210408161331_SettingForeign.Designer.cs | 504 ++++++++++++++++++ .../20210408161331_SettingForeign.cs | 69 +++ .../DefaultDbContextModelSnapshot.cs | 89 ++++ .../OSharp.CodeGenerator.csproj | 1 + .../osharp-code-generator.db | Bin 0 -> 110592 bytes 33 files changed, 2027 insertions(+), 96 deletions(-) create mode 100644 src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj create mode 100644 src/OSharp.CodeConsoles/Program.cs create mode 100644 src/OSharp.CodeGeneration/Generates/CodeFile.cs create mode 100644 src/OSharp.CodeGeneration/Generates/GenCodeConfig.cs create mode 100644 src/OSharp.CodeGeneration/Generates/GenerateManager.cs create mode 100644 src/OSharp.CodeGeneration/Generates/GeneratePack.cs create mode 100644 src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs create mode 100644 src/OSharp.CodeGeneration/Generates/IGenerateManager.cs create mode 100644 src/OSharp.CodeGeneration/Generates/MetadataType.cs create mode 100644 src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs rename src/OSharp.CodeGeneration/Services/{DataService.Entity.cs => DataService.CodeEntity.cs} (95%) create mode 100644 src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs rename src/OSharp.CodeGeneration/Services/{DataService.Module.cs => DataService.CodeModule.cs} (75%) rename src/OSharp.CodeGeneration/Services/{DataService.Project.cs => DataService.CodeProject.cs} (77%) rename src/OSharp.CodeGeneration/Services/{DataService.Property.cs => DataService.CodeProperty.cs} (67%) create mode 100644 src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs create mode 100644 src/OSharp.CodeGeneration/Services/Entities/CodeForeign.cs create mode 100644 src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs create mode 100644 src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs create mode 100644 src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs create mode 100644 src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml create mode 100644 src/OSharp.CodeGeneration/Utils/TypeHelper.cs create mode 100644 src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs create mode 100644 src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs create mode 100644 src/OSharp.CodeGenerator/osharp-code-generator.db diff --git a/OSharp.CodeGenerator.sln b/OSharp.CodeGenerator.sln index ef756fb..0fa0464 100644 --- a/OSharp.CodeGenerator.sln +++ b/OSharp.CodeGenerator.sln @@ -12,7 +12,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{87C5555B-87C EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OSharp.CodeGenerator", "src\OSharp.CodeGenerator\OSharp.CodeGenerator.csproj", "{5AF55A1E-7A19-4886-B4B0-D840694AA997}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSharp.CodeGeneration", "src\OSharp.CodeGeneration\OSharp.CodeGeneration.csproj", "{B05EB364-E7CA-4EB5-93EA-3FD33BCAAFAA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OSharp.CodeGeneration", "src\OSharp.CodeGeneration\OSharp.CodeGeneration.csproj", "{B05EB364-E7CA-4EB5-93EA-3FD33BCAAFAA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OSharp.CodeConsoles", "src\OSharp.CodeConsoles\OSharp.CodeConsoles.csproj", "{13784656-5A4F-4083-919C-F64471F8CFBF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -28,6 +30,10 @@ Global {B05EB364-E7CA-4EB5-93EA-3FD33BCAAFAA}.Debug|Any CPU.Build.0 = Debug|Any CPU {B05EB364-E7CA-4EB5-93EA-3FD33BCAAFAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {B05EB364-E7CA-4EB5-93EA-3FD33BCAAFAA}.Release|Any CPU.Build.0 = Release|Any CPU + {13784656-5A4F-4083-919C-F64471F8CFBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13784656-5A4F-4083-919C-F64471F8CFBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13784656-5A4F-4083-919C-F64471F8CFBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13784656-5A4F-4083-919C-F64471F8CFBF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -35,6 +41,7 @@ Global GlobalSection(NestedProjects) = preSolution {5AF55A1E-7A19-4886-B4B0-D840694AA997} = {87C5555B-87C3-46FE-9BF0-ACA575890EC6} {B05EB364-E7CA-4EB5-93EA-3FD33BCAAFAA} = {87C5555B-87C3-46FE-9BF0-ACA575890EC6} + {13784656-5A4F-4083-919C-F64471F8CFBF} = {87C5555B-87C3-46FE-9BF0-ACA575890EC6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {AFCE6A5E-D5ED-4BAA-8CCF-45A229EF3405} diff --git a/OSharp.CodeGenerator.sln.DotSettings b/OSharp.CodeGenerator.sln.DotSettings index ac50127..0462b99 100644 --- a/OSharp.CodeGenerator.sln.DotSettings +++ b/OSharp.CodeGenerator.sln.DotSettings @@ -4161,6 +4161,7 @@ finally True True True + True True True True diff --git a/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj b/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj new file mode 100644 index 0000000..5071d8d --- /dev/null +++ b/src/OSharp.CodeConsoles/OSharp.CodeConsoles.csproj @@ -0,0 +1,12 @@ + + + + Exe + net5.0 + + + + + + + diff --git a/src/OSharp.CodeConsoles/Program.cs b/src/OSharp.CodeConsoles/Program.cs new file mode 100644 index 0000000..6a9251c --- /dev/null +++ b/src/OSharp.CodeConsoles/Program.cs @@ -0,0 +1,147 @@ +using System; +using System.Diagnostics; + +using MiniRazor; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGeneration.Templates; + + +namespace OSharp.CodeConsoles +{ + class Program + { + static void Main(string[] args) + { + bool exit = false; + while (true) + { + try + { + Console.WriteLine(@"请输入命令:0; 退出程序,功能命令:1 - n"); + string input = Console.ReadLine(); + if (input == null) + { + continue; + } + + Stopwatch watch = Stopwatch.StartNew(); + switch (input.ToLower()) + { + case "0": + exit = true; + break; + case "1": + Method01(); + break; + case "2": + Method02(); + break; + case "3": + Method03(); + break; + case "4": + Method04(); + break; + case "5": + Method05(); + break; + case "6": + Method06(); + break; + case "7": + Method07(); + break; + case "8": + Method08(); + break; + case "9": + Method09(); + break; + case "10": + Method10(); + break; + case "11": + Method11(); + break; + } + + watch.Stop(); + Console.WriteLine($"执行完成,耗时:{watch.Elapsed}\n"); + if (exit) + { + break; + } + } + catch (Exception e) + { + Console.WriteLine(e); + } + } + } + + private static async void Method01() + { + var model = new CodeModule { Name = "Infos" }; + await TestTemplate.RenderAsync(Console.Out, model); + ITemplate tmp = new TestTemplate(); + tmp.Model = model; + tmp.Output = Console.Out; + await tmp.ExecuteAsync(); + } + + private static async void Method02() + { + // Compile the template into an in-memory assembly + TemplateDescriptor template = Razor.Compile("

Hello, @Model.Name!

"); + + // Render the template to string + var output = await template.RenderAsync(new CodeModule { Name = "World" }); + } + + private static void Method03() + { + throw new NotImplementedException(); + } + + private static void Method04() + { + throw new NotImplementedException(); + } + + private static void Method05() + { + throw new NotImplementedException(); + } + + private static void Method06() + { + throw new NotImplementedException(); + } + + private static void Method07() + { + throw new NotImplementedException(); + } + + private static void Method08() + { + throw new NotImplementedException(); + } + + private static void Method09() + { + throw new NotImplementedException(); + } + + private static void Method10() + { + throw new NotImplementedException(); + } + + private static void Method11() + { + throw new NotImplementedException(); + } + } +} diff --git a/src/OSharp.CodeGeneration/Generates/CodeFile.cs b/src/OSharp.CodeGeneration/Generates/CodeFile.cs new file mode 100644 index 0000000..b7f11ec --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/CodeFile.cs @@ -0,0 +1,41 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using OSharp.Extensions; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 表示代码文件信息 + /// + public class CodeFile + { + private string _sourceCode; + + /// + /// 获取或设置 代码配置 + /// + public GenCodeConfig CodeConfig { get; set; } + + /// + /// 获取或设置 源代码字符串 + /// + public string SourceCode + { + get => _sourceCode; + set => _sourceCode = value.ToHtmlDecode(); + } + + /// + /// 获取或设置 代码输出文件 + /// + public string FileName { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Generates/GenCodeConfig.cs b/src/OSharp.CodeGeneration/Generates/GenCodeConfig.cs new file mode 100644 index 0000000..415f888 --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/GenCodeConfig.cs @@ -0,0 +1,102 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using System; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Extensions; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 代码配置 + /// + public class GenCodeConfig + { + /// + /// 获取或设置 配置名称 + /// + public string Name { get; set; } + + /// + /// 获取或设置 元数据类型 + /// + public MetadataType MetadataType { get; set; } + + /// + /// 获取或设置 模板文件,默认内置,也可以由用户自定义加载 + /// + public string TemplateFile { get; set; } + + /// + /// 获取或设置 模板类型,内置模板使用 + /// + public Type TemplateType { get; set; } + + /// + /// 获取或设置 排序 + /// + public int Order { get; set; } + + /// + /// 获取或设置 代码输出文件名格式 + /// + public string OutputFileFormat { get; set; } + + /// + /// 获取或设置 是否只生成一次 + /// + public bool IsOnce { get; set; } + + /// + /// 获取或设置 系统类型 + /// + public bool IsSystem { get; set; } + + /// + /// 获取或设置 是否启用 + /// + public bool IsEnabled { get; set; } = true; + + /// + /// 获取项目代码输出文件名 + /// + public string GetCodeFileName(CodeProject project) + { + string fileName = OutputFileFormat.Replace("{Project.NamespacePrefix}", project.NamespacePrefix) + .Replace("{Project.Name:Lower}", project.Name.UpperToLowerAndSplit()) + .Replace("{Project.Name}", project.Name); + return fileName; + } + + /// + /// 获取项目代码输出文件名 + /// + public string GetCodeFileName(CodeModule module) + { + string fileName = OutputFileFormat.Replace("{Project.NamespacePrefix}", module.Project.NamespacePrefix) + .Replace("{Module.Name:Lower}", module.Name.UpperToLowerAndSplit()) + .Replace("{Module.Name}", module.Name); + return fileName; + } + + /// + /// 获取项目代码输出文件名 + /// + public string GetCodeFileName(CodeEntity entity) + { + string fileName = OutputFileFormat.Replace("{Project.NamespacePrefix}", entity.Module.Project.NamespacePrefix) + .Replace("{Module.Name:Lower}", entity.Module.Name.UpperToLowerAndSplit()) + .Replace("{Entity.Name:Lower}", entity.Name.UpperToLowerAndSplit()) + .Replace("{Module.Name}", entity.Module.Name).Replace("{Entity.Name}", entity.Name); + return fileName; + } + } +} diff --git a/src/OSharp.CodeGeneration/Generates/GenerateManager.cs b/src/OSharp.CodeGeneration/Generates/GenerateManager.cs new file mode 100644 index 0000000..13b8b33 --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/GenerateManager.cs @@ -0,0 +1,40 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using System; +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 代码生成管理器 + /// + public class GenerateManager : IGenerateManager + { + private readonly IServiceProvider _provider; + + public GenerateManager(IServiceProvider provider) + { + _provider = provider; + } + + /// + /// 开始生成代码 + /// + /// + public Task Start() + { + throw new NotImplementedException(); + } + + } +} diff --git a/src/OSharp.CodeGeneration/Generates/GeneratePack.cs b/src/OSharp.CodeGeneration/Generates/GeneratePack.cs new file mode 100644 index 0000000..29455e4 --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/GeneratePack.cs @@ -0,0 +1,33 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.Core.Packs; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 代码生成模块 + /// + public class GeneratePack : OsharpPack + { + /// 将模块服务添加到依赖注入服务容器中 + /// 依赖注入服务容器 + /// + public override IServiceCollection AddServices(IServiceCollection services) + { + services.AddScoped(); + services.AddSingleton(); + + return base.AddServices(services); + } + } +} diff --git a/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs b/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs new file mode 100644 index 0000000..ad2f1b3 --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/ICodeGenerator.cs @@ -0,0 +1,51 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 定义代码生成器 + /// + public interface ICodeGenerator + { + /// + /// 生成项目所有代码 + /// + /// 要处理的代码配置集合 + /// 代码项目信息 + /// 输出的代码文件信息集合 + Task GenerateCodes(GenCodeConfig[] codeConfigs, CodeProject project); + + /// + /// 生成项目元数据相关代码 + /// 代码配置 + /// 项目元数据 + /// + Task GenerateCode(GenCodeConfig codeConfig, CodeProject project); + + /// + /// 生成模块元数据相关代码 + /// 代码配置 + /// 模块元数据 + /// + Task GenerateCode(GenCodeConfig codeConfig, CodeModule module); + + /// + /// 生成实体元数据相关代码 + /// 代码配置 + /// 实体元数据 + /// + Task GenerateCode(GenCodeConfig codeConfig, CodeEntity entity); + } +} diff --git a/src/OSharp.CodeGeneration/Generates/IGenerateManager.cs b/src/OSharp.CodeGeneration/Generates/IGenerateManager.cs new file mode 100644 index 0000000..6061c7d --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/IGenerateManager.cs @@ -0,0 +1,26 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using System.Threading.Tasks; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 定义代码生成管理器 + /// + public interface IGenerateManager + { + /// + /// 开始生成代码 + /// + /// + Task Start(); + } +} diff --git a/src/OSharp.CodeGeneration/Generates/MetadataType.cs b/src/OSharp.CodeGeneration/Generates/MetadataType.cs new file mode 100644 index 0000000..f27122b --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/MetadataType.cs @@ -0,0 +1,23 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// 表示生成代码需要的元数据类型,有实体和模块 + /// + public enum MetadataType + { + Entity, + + Module, + + Project + } +} diff --git a/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs b/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs new file mode 100644 index 0000000..b87e169 --- /dev/null +++ b/src/OSharp.CodeGeneration/Generates/RazorCodeGenerator.cs @@ -0,0 +1,141 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 21:39 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using MiniRazor; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Exceptions; + + +namespace OSharp.CodeGeneration.Generates +{ + /// + /// Razor代码生成器 + /// + public class RazorCodeGenerator : ICodeGenerator + { + /// + /// 生成项目所有代码 + /// + /// 要处理的代码配置集合 + /// 代码项目信息 + /// 输出的代码文件信息集合 + public async Task GenerateCodes(GenCodeConfig[] codeConfigs, CodeProject project) + { + List codeFiles = new List(); + CodeModule[] modules = project.Modules.ToArray(); + CodeEntity[] entities = modules.SelectMany(m => m.Entities).ToArray(); + + foreach (GenCodeConfig codeConfig in codeConfigs.Where(m => m.MetadataType == MetadataType.Entity)) + { + foreach (CodeEntity entity in entities) + { + codeFiles.Add(await GenerateCode(codeConfig, entity)); + } + } + + foreach (GenCodeConfig codeConfig in codeConfigs.Where(m => m.MetadataType == MetadataType.Module)) + { + foreach (CodeModule module in modules) + { + codeFiles.Add(await GenerateCode(codeConfig, module)); + } + } + + foreach (GenCodeConfig codeConfig in codeConfigs.Where(m => m.MetadataType == MetadataType.Project)) + { + codeFiles.Add(await GenerateCode(codeConfig, project)); + } + + return codeFiles.OrderBy(m => m.FileName).ToArray(); + } + + /// + /// 生成项目元数据相关代码 + /// 代码配置 + /// 项目元数据 + /// + public Task GenerateCode(GenCodeConfig codeConfig, CodeProject project) + { + string fileName = codeConfig.GetCodeFileName(project); + return GenerateCodeCore(codeConfig, project, fileName); + } + + /// + /// 生成模块元数据相关代码 + /// 代码配置 + /// 模块元数据 + /// + public Task GenerateCode(GenCodeConfig codeConfig, CodeModule module) + { + string fileName = codeConfig.GetCodeFileName(module); + return GenerateCodeCore(codeConfig, module, fileName); + } + + /// + /// 生成实体元数据相关代码 + /// 代码配置 + /// 实体元数据 + /// + public Task GenerateCode(GenCodeConfig codeConfig, CodeEntity entity) + { + string fileName = codeConfig.GetCodeFileName(entity); + return GenerateCodeCore(codeConfig, entity, fileName); + } + + /// + /// 生成代码 + /// + /// 代码配置 + /// 代码数据模型 + /// 代码输出文件 + /// + protected virtual async Task GenerateCodeCore(GenCodeConfig codeConfig, object model, string fileName) + { + StringBuilder sb = new StringBuilder(); + await using TextWriter writer = new StringWriter(sb); + if (codeConfig.TemplateType == null) + { + if (codeConfig.TemplateFile == null || !File.Exists(codeConfig.TemplateFile)) + { + throw new OsharpException($"代码配置“{codeConfig.Name}”的模板文件“{codeConfig.TemplateFile}”不存在"); + } + + string templateSource = await File.ReadAllTextAsync(codeConfig.TemplateFile); + TemplateDescriptor descriptor = Razor.Compile(templateSource); + await descriptor.RenderAsync(writer, model); + } + else + { + ITemplate template = (ITemplate)(Activator.CreateInstance(codeConfig.TemplateType) + ?? throw new OsharpException($"代码配置“{codeConfig.Name}”的模板类型实例化失败")); + template.Model = model; + template.Output = writer; + await template.ExecuteAsync(); + } + + string codeSource = sb.ToString(); + + CodeFile codeFile = new CodeFile() + { + CodeConfig = codeConfig, + SourceCode = codeSource, + FileName = fileName + }; + return codeFile; + } + } +} diff --git a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj index 8e9c766..e7d8057 100644 --- a/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj +++ b/src/OSharp.CodeGeneration/OSharp.CodeGeneration.csproj @@ -1,14 +1,14 @@ - net5.0-windows + net5.0 + - @@ -18,7 +18,12 @@ - + + + + <_Parameter1>OSharp.CodeConsoles + + diff --git a/src/OSharp.CodeGeneration/Services/DataService.Entity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs similarity index 95% rename from src/OSharp.CodeGeneration/Services/DataService.Entity.cs rename to src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index d8e8e16..a6f182d 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.Entity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -24,8 +24,6 @@ namespace OSharp.CodeGeneration.Services { public partial class DataService { - #region Implementation of IDataContract - /// /// 获取 代码实体信息查询数据集 /// @@ -72,9 +70,9 @@ namespace OSharp.CodeGeneration.Services } else { - CodeEntity entity1 = await EntityRepository.GetAsync(entity.Id); - entity1 = entity.MapTo(entity1); - count = await EntityRepository.UpdateAsync(entity1); + CodeEntity existing = await EntityRepository.GetAsync(entity.Id); + existing = entity.MapTo(existing); + count = await EntityRepository.UpdateAsync(existing); } if (count > 0) @@ -124,7 +122,5 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”删除成功") : OperationResult.NoChanged; } - - #endregion } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs new file mode 100644 index 0000000..3ea4f90 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs @@ -0,0 +1,119 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 23:22 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Collections; +using OSharp.Data; +using OSharp.Extensions; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services +{ + public partial class DataService + { + /// + /// 获取 实体外键信息查询数据集 + /// + public IQueryable CodeForeigns => ForeignRepository.QueryAsNoTracking(); + + /// + /// 检查实体外键信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的实体外键信息编号 + /// 实体外键信息是否存在 + public Task CheckCodeForeignExists(Expression> predicate, Guid id = default) + { + return ForeignRepository.CheckExistsAsync(predicate, id); + } + + /// + /// 更新实体外键信息信息 + /// + /// 包含更新信息的实体外键信息 + /// 业务操作结果 + public async Task UpdateCodeForeigns(params CodeForeign[] foreigns) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var foreign in foreigns) + { + foreign.Validate(); + CodeEntity entity = await EntityRepository.GetAsync(foreign.EntityId); + if (entity == null) + { + return new OperationResult(OperationResultType.Error, $"编号为“{foreign.EntityId}”的实体信息不存在"); + } + if (await CheckCodeForeignExists(m => m.SelfNavigation == foreign.SelfNavigation && m.EntityId == foreign.EntityId, entity.Id)) + { + return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{foreign.SelfNavigation}”的外键信息已存在"); + } + + int count; + if (foreign.Id == default) + { + count = await ForeignRepository.InsertAsync(foreign); + } + else + { + CodeForeign existing = await ForeignRepository.GetAsync(foreign.Id); + existing = foreign.MapTo(existing); + count = await ForeignRepository.UpdateAsync(existing); + } + + if (count > 0) + { + names.Add($"{entity.Name}-{foreign.SelfNavigation}"); + } + } + + await UnitOfWork.CommitAsync(); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"导航属性“{names.ExpandAndToString()}”更新成功") + : OperationResult.NoChanged; + } + + /// + /// 删除实体外键信息信息 + /// + /// 要删除的实体外键信息编号 + /// 业务操作结果 + public async Task DeleteCodeForeigns(params Guid[] ids) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var id in ids) + { + var entity = ForeignRepository.Query(m => m.Id == id).Select(m => new { D = m, EntityName = m.Entity.Name }).FirstOrDefault(); + if (entity == null) + { + continue; + } + + int count = await ForeignRepository.DeleteAsync(entity.D); + if (count > 0) + { + names.Add($"{entity.EntityName}-{entity.D.SelfNavigation}"); + } + } + + await UnitOfWork.CommitAsync(); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"实体外键“{names.ExpandAndToString()}”删除成功") + : OperationResult.NoChanged; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/DataService.Module.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs similarity index 75% rename from src/OSharp.CodeGeneration/Services/DataService.Module.cs rename to src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index 4fe7430..d53819a 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.Module.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -43,30 +43,30 @@ namespace OSharp.CodeGeneration.Services /// /// 添加代码模块信息信息 /// - /// 要添加的代码模块信息 + /// 要添加的代码模块信息 /// 业务操作结果 - public async Task CreateCodeModules(params CodeModule[] entities) + public async Task CreateCodeModules(params CodeModule[] modules) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeModule entity in entities) + foreach (CodeModule module in modules) { - entity.Validate(); - CodeProject project = await ProjectRepository.GetAsync(entity.ProjectId); + module.Validate(); + CodeProject project = await ProjectRepository.GetAsync(module.ProjectId); if (project == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{entity.ProjectId}”的项目信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在"); } - if (await CheckCodeModuleExists(m => m.Name == entity.Name && m.ProjectId == entity.ProjectId)) + if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId)) { - return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{entity.Name}”的模块信息已存在"); + return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); } - int count = await ModuleRepository.InsertAsync(entity); + int count = await ModuleRepository.InsertAsync(module); if (count > 0) { - names.Add(entity.Name); + names.Add(module.Name); } } @@ -79,32 +79,32 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码模块信息信息 /// - /// 包含更新信息的代码模块信息 + /// 包含更新信息的代码模块信息 /// 业务操作结果 - public async Task UpdateCodeModules(params CodeModule[] entities) + public async Task UpdateCodeModules(params CodeModule[] modules) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeModule entity in entities) + foreach (CodeModule module in modules) { - entity.Validate(); - CodeProject project = await ProjectRepository.GetAsync(entity.ProjectId); + module.Validate(); + CodeProject project = await ProjectRepository.GetAsync(module.ProjectId); if (project == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{entity.ProjectId}”的项目信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在"); } - if (await CheckCodeModuleExists(m => m.Name == entity.Name && m.ProjectId == entity.ProjectId, entity.Id)) + if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId, module.Id)) { - return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{entity.Name}”的模块信息已存在"); + return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); } - CodeModule entity1 = await ModuleRepository.GetAsync(entity.Id); - entity1 = entity.MapTo(entity1); - int count = await ModuleRepository.UpdateAsync(entity1); + CodeModule existing = await ModuleRepository.GetAsync(module.Id); + existing = module.MapTo(existing); + int count = await ModuleRepository.UpdateAsync(existing); if (count > 0) { - names.Add(entity.Name); + names.Add(module.Name); } } @@ -125,22 +125,22 @@ namespace OSharp.CodeGeneration.Services UnitOfWork.EnableTransaction(); foreach (var id in ids) { - var entity = ModuleRepository.Query(m => m.Id == id).Select(m => new { D = m, EntityCount = m.Entities.Count() }) + var module = ModuleRepository.Query(m => m.Id == id).Select(m => new { D = m, EntityCount = m.Entities.Count() }) .FirstOrDefault(); - if (entity == null) + if (module == null) { return null; } - if (entity.EntityCount > 0) + if (module.EntityCount > 0) { - return new OperationResult(OperationResultType.Error, $"模块“{entity.D.Name}”包含着 {entity.EntityCount} 个实体,请先删除下属实体信息"); + return new OperationResult(OperationResultType.Error, $"模块“{module.D.Name}”包含着 {module.EntityCount} 个实体,请先删除下属实体信息"); } - int count = await ModuleRepository.DeleteAsync(entity.D); + int count = await ModuleRepository.DeleteAsync(module.D); if (count > 0) { - names.Add(entity.D.Name); + names.Add(module.D.Name); } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.Project.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs similarity index 77% rename from src/OSharp.CodeGeneration/Services/DataService.Project.cs rename to src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index 8c5d8cf..2ba894d 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.Project.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -14,8 +14,6 @@ namespace OSharp.CodeGeneration.Services { public partial class DataService { - #region Implementation of IDataContract - /// /// 获取 项目信息查询数据集 /// @@ -35,24 +33,24 @@ namespace OSharp.CodeGeneration.Services /// /// 添加项目信息信息 /// - /// 要添加的项目信息 + /// 要添加的项目信息 /// 业务操作结果 - public async Task CreateCodeProjects(params CodeProject[] entities) + public async Task CreateCodeProjects(params CodeProject[] projects) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeProject entity in entities) + foreach (CodeProject project in projects) { - entity.Validate(); - if (await CheckCodeProjectExists(m => m.Name == entity.Name)) + project.Validate(); + if (await CheckCodeProjectExists(m => m.Name == project.Name)) { - return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的项目信息已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); } - int count = await ProjectRepository.InsertAsync(entity); + int count = await ProjectRepository.InsertAsync(project); if (count > 0) { - names.Add(entity.Name); + names.Add(project.Name); } } @@ -65,24 +63,24 @@ namespace OSharp.CodeGeneration.Services /// /// 更新项目信息信息 /// - /// 包含更新信息的项目信息 + /// 包含更新信息的项目信息 /// 业务操作结果 - public async Task UpdateCodeProjects(params CodeProject[] entities) + public async Task UpdateCodeProjects(params CodeProject[] projects) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeProject entity in entities) + foreach (CodeProject project in projects) { - entity.Validate(); - if (await CheckCodeProjectExists(m => m.Name == entity.Name, entity.Id)) + project.Validate(); + if (await CheckCodeProjectExists(m => m.Name == project.Name, project.Id)) { - return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的项目信息已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); } - int count = await ProjectRepository.UpdateAsync(entity); + int count = await ProjectRepository.UpdateAsync(project); if (count > 0) { - names.Add(entity.Name); + names.Add(project.Name); } } @@ -103,22 +101,22 @@ namespace OSharp.CodeGeneration.Services UnitOfWork.EnableTransaction(); foreach (var id in ids) { - var entity = ProjectRepository.Query(m => m.Id == id).Select(m => new { D = m, ModuleCount = m.Modules.Count() }) + var project = ProjectRepository.Query(m => m.Id == id).Select(m => new { D = m, ModuleCount = m.Modules.Count() }) .FirstOrDefault(); - if (entity == null) + if (project == null) { return null; } - if (entity.ModuleCount > 0) + if (project.ModuleCount > 0) { - return new OperationResult(OperationResultType.Error, $"项目“{entity.D.Name}”包含着 {entity.ModuleCount} 个模块,请先删除下属模块信息"); + return new OperationResult(OperationResultType.Error, $"项目“{project.D.Name}”包含着 {project.ModuleCount} 个模块,请先删除下属模块信息"); } - int count = await ProjectRepository.DeleteAsync(entity.D); + int count = await ProjectRepository.DeleteAsync(project.D); if (count > 0) { - names.Add(entity.D.Name); + names.Add(project.D.Name); } } @@ -127,7 +125,5 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”删除成功") : OperationResult.NoChanged; } - - #endregion } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.Property.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs similarity index 67% rename from src/OSharp.CodeGeneration/Services/DataService.Property.cs rename to src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 0373c76..9b778dc 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.Property.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -1,3 +1,12 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 23:10 +// ----------------------------------------------------------------------- + using System; using System.Collections.Generic; using System.Linq; @@ -26,7 +35,7 @@ namespace OSharp.CodeGeneration.Services /// 检查谓语表达式 /// 更新的实体属性信息编号 /// 实体属性信息是否存在 - public Task CheckCodePropertyExists(Expression> predicate, Guid id = default) + public Task CheckCodePropertyExists(Expression> predicate, Guid id = default) { return PropertyRepository.CheckExistsAsync(predicate, id); } @@ -34,41 +43,41 @@ namespace OSharp.CodeGeneration.Services /// /// 更新实体属性信息信息 /// - /// 包含更新信息的实体属性信息DTO信息 + /// 包含更新信息的实体属性信息 /// 业务操作结果 - public async Task UpdateCodeProperties(params CodeProperty[] entities) + public async Task UpdateCodeProperties(params CodeProperty[] properties) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var entity in entities) + foreach (var property in properties) { - entity.Validate(); - CodeEntity module = await EntityRepository.GetAsync(entity.EntityId); - if (module == null) + property.Validate(); + CodeEntity entity = await EntityRepository.GetAsync(property.EntityId); + if (entity == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{entity.EntityId}”的实体信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{property.EntityId}”的实体信息不存在"); } - if (await CheckCodePropertyExists(m => m.Name == entity.Name && m.EntityId == entity.EntityId, entity.Id)) + if (await CheckCodePropertyExists(m => m.Name == property.Name && m.EntityId == property.EntityId, property.Id)) { - return new OperationResult(OperationResultType.Error, $"实体“{module.Name}”中名称为“{entity.Name}”的属性信息已存在"); + return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{property.Name}”的属性信息已存在"); } int count; - if (entity.Id == default) + if (property.Id == default) { - count = await PropertyRepository.InsertAsync(entity); + count = await PropertyRepository.InsertAsync(property); } else { - CodeProperty entity1 = await PropertyRepository.GetAsync(entity.Id); - entity1 = entity.MapTo(entity1); - count = await PropertyRepository.UpdateAsync(entity1); + CodeProperty existing = await PropertyRepository.GetAsync(property.Id); + existing = property.MapTo(existing); + count = await PropertyRepository.UpdateAsync(existing); } if (count > 0) { - names.Add(entity.Name); + names.Add(property.Name); } } @@ -89,15 +98,16 @@ namespace OSharp.CodeGeneration.Services UnitOfWork.EnableTransaction(); foreach (var id in ids) { - var entity = await PropertyRepository.GetAsync(id); - if (entity == null) + var property = await PropertyRepository.GetAsync(id); + if (property == null) { continue; } - int count = await PropertyRepository.DeleteAsync(entity); + + int count = await PropertyRepository.DeleteAsync(property); if (count > 0) { - names.Add(entity.Name); + names.Add(property.Name); } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs new file mode 100644 index 0000000..62d09ee --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeSetting.cs @@ -0,0 +1,120 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 22:45 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Collections; +using OSharp.Data; +using OSharp.Exceptions; +using OSharp.Extensions; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services +{ + public partial class DataService + { + /// + /// 获取 代码设置信息查询数据集 + /// + public IQueryable CodeSettings => SettingRepository.QueryAsNoTracking(); + + /// + /// 检查代码设置信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的代码设置信息编号 + /// 代码设置信息是否存在 + public Task CheckCodeSettingExists(Expression> predicate, Guid id = default) + { + return SettingRepository.CheckExistsAsync(predicate, id); + } + + /// + /// 更新代码设置信息信息 + /// + /// 包含更新信息的代码设置信息 + /// 业务操作结果 + public async Task UpdateCodeSettings(params CodeSetting[] entities) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var entity in entities) + { + entity.Validate(); + if (await CheckCodeSettingExists(m=>m.Name == entity.Name, entity.Id)) + { + return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的代码设置已存在"); + } + + int count; + if (entity.Id == default) + { + count = await SettingRepository.InsertAsync(entity); + } + else + { + CodeSetting entity1 = await SettingRepository.GetAsync(entity.Id); + entity1 = entity.MapTo(entity1); + count = await SettingRepository.UpdateAsync(entity1); + } + + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"代码设置“{names.ExpandAndToString()}”更新成功") + : OperationResult.NoChanged; + } + + /// + /// 删除代码设置信息信息 + /// + /// 要删除的代码设置信息编号 + /// 业务操作结果 + public async Task DeleteCodeSettings(params Guid[] ids) + { + List names = new List(); + UnitOfWork.EnableTransaction(); + foreach (var id in ids) + { + var entity = await SettingRepository.GetAsync(id); + if (entity == null) + { + continue; + } + + if (entity.IsSystem) + { + throw new OsharpException($"代码设置“{entity.Name}”是系统设置,不能删除"); + } + + int count = await SettingRepository.DeleteAsync(entity); + if (count > 0) + { + names.Add(entity.Name); + } + } + + await UnitOfWork.CommitAsync(); + return names.Count > 0 + ? new OperationResult(OperationResultType.Success, $"代码设置“{names.ExpandAndToString()}”删除成功") + : OperationResult.NoChanged; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/DataService.cs b/src/OSharp.CodeGeneration/Services/DataService.cs index 195f531..4060cd8 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.cs @@ -27,5 +27,8 @@ namespace OSharp.CodeGeneration.Services protected IRepository PropertyRepository => _serviceProvider.GetService>(); + protected IRepository SettingRepository => _serviceProvider.GetService>(); + + protected IRepository ForeignRepository => _serviceProvider.GetService>(); } } diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeForeign.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeForeign.cs new file mode 100644 index 0000000..2c6cb06 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeForeign.cs @@ -0,0 +1,72 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 23:11 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel; + +using Microsoft.EntityFrameworkCore; + +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Entities +{ + /// + /// 实体类:外键信息 + /// + [Description("实体外键")] + [TableNamePrefix("CodeGen")] + public class CodeForeign : EntityBase + { + /// + /// 获取或设置 己方导航属性 + /// + public string SelfNavigation { get; set; } + + /// + /// 获取或设置 己方外键属性 + /// + public string SelfForeignKey { get; set; } + + /// + /// 获取或设置 对方实体 + /// + public string OtherEntity { get; set; } + + /// + /// 获取或设置 对方导航属性 + /// + public string OtherNavigation { get; set; } + + /// + /// 获取或设置 是否必须 + /// + public bool IsRequired { get; set; } + + /// + /// 获取或设置 关系数据删除行为 + /// + public DeleteBehavior? DeleteBehavior { get; set; } + + /// + /// 获取或设置 外键关系 + /// + public ForeignRelation ForeignRelation { get; set; } + + /// + /// 获取或设置 实体编号 + /// + public Guid EntityId { get; set; } + + /// + /// 获取或设置 所属实体信息 + /// + public virtual CodeEntity Entity { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs new file mode 100644 index 0000000..0d63935 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeForeignConfiguration.cs @@ -0,0 +1,28 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 23:13 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Entities +{ + public class CodeForeignConfiguration : EntityTypeConfigurationBase + { + /// 重写以实现实体类型各个属性的数据库配置 + /// 实体类型创建器 + public override void Configure(EntityTypeBuilder builder) + { + + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs new file mode 100644 index 0000000..815282c --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeSetting.cs @@ -0,0 +1,103 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 22:30 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Generates; +using OSharp.Entity; +using OSharp.Extensions; + + +namespace OSharp.CodeGeneration.Services.Entities +{ + /// + /// 实体类:代码设置 + /// + [Description("代码设置")] + [TableNamePrefix("CodeGen")] + public class CodeSetting : EntityBase, ILockable + { + /// + /// 获取或设置 配置名称 + /// + [Required, StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 元数据类型 + /// + public MetadataType MetadataType { get; set; } + + /// + /// 获取或设置 模板文件,默认内置,也可以由用户自定义加载 + /// + [Required, StringLength(500)] + public string TemplateFile { get; set; } + + /// + /// 获取或设置 排序 + /// + public int Order { get; set; } + + /// + /// 获取或设置 代码输出文件名格式 + /// + [Required, StringLength(300)] + public string OutputFileFormat { get; set; } + + /// + /// 获取或设置 是否只生成一次 + /// + public bool IsOnce { get; set; } + + /// + /// 获取或设置 系统类型 + /// + public bool IsSystem { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取项目代码输出文件名 + /// + public string GetCodeFileName(CodeProject project) + { + string fileName = OutputFileFormat.Replace("{Project.NamespacePrefix}", project.NamespacePrefix) + .Replace("{Project.Name:Lower}", project.Name.UpperToLowerAndSplit()) + .Replace("{Project.Name}", project.Name); + return fileName; + } + + /// + /// 获取项目代码输出文件名 + /// + public string GetCodeFileName(CodeModule module) + { + string fileName = OutputFileFormat.Replace("{Project.NamespacePrefix}", module.Project.NamespacePrefix) + .Replace("{Module.Name:Lower}", module.Name.UpperToLowerAndSplit()) + .Replace("{Module.Name}", module.Name); + return fileName; + } + + /// + /// 获取项目代码输出文件名 + /// + public string GetCodeFileName(CodeEntity entity) + { + string fileName = OutputFileFormat.Replace("{Project.NamespacePrefix}", entity.Module.Project.NamespacePrefix) + .Replace("{Module.Name:Lower}", entity.Module.Name.UpperToLowerAndSplit()) + .Replace("{Entity.Name:Lower}", entity.Name.UpperToLowerAndSplit()) + .Replace("{Module.Name}", entity.Module.Name).Replace("{Entity.Name}", entity.Name); + return fileName; + } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs new file mode 100644 index 0000000..a42c521 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeSettingConfiguration.cs @@ -0,0 +1,26 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 22:31 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Entities +{ + public class CodeSettingConfiguration : EntityTypeConfigurationBase + { + /// 重写以实现实体类型各个属性的数据库配置 + /// 实体类型创建器 + public override void Configure(EntityTypeBuilder builder) + { } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs b/src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs index 3a7ac17..20c3a3d 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/ForeignRelation.cs @@ -18,18 +18,22 @@ namespace OSharp.CodeGeneration.Services.Entities /// 多对一 ///
ManyToOne, + /// /// 一对多 /// OneToMany, + /// /// 一对一 /// OneToOne, + /// /// 拥有单个子项关系 /// OwnsOne, + /// /// 拥有多个子项关系 /// diff --git a/src/OSharp.CodeGeneration/Services/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs index 53db177..4568028 100644 --- a/src/OSharp.CodeGeneration/Services/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -41,16 +41,16 @@ namespace OSharp.CodeGeneration.Services /// /// 添加项目信息信息 /// - /// 要添加的项目信息 + /// 要添加的项目信息 /// 业务操作结果 - Task CreateCodeProjects(params CodeProject[] entities); + Task CreateCodeProjects(params CodeProject[] projects); /// /// 更新项目信息信息 /// - /// 包含更新信息的项目信息 + /// 包含更新信息的项目信息 /// 业务操作结果 - Task UpdateCodeProjects(params CodeProject[] entities); + Task UpdateCodeProjects(params CodeProject[] projects); /// /// 删除项目信息信息 @@ -79,16 +79,16 @@ namespace OSharp.CodeGeneration.Services /// /// 添加代码模块信息信息 /// - /// 要添加的代码模块信息 + /// 要添加的代码模块信息 /// 业务操作结果 - Task CreateCodeModules(params CodeModule[] entities); + Task CreateCodeModules(params CodeModule[] modules); /// /// 更新代码模块信息信息 /// - /// 包含更新信息的代码模块信息 + /// 包含更新信息的代码模块信息 /// 业务操作结果 - Task UpdateCodeModules(params CodeModule[] entities); + Task UpdateCodeModules(params CodeModule[] modules); /// /// 删除代码模块信息信息 @@ -117,7 +117,7 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码实体信息信息 /// - /// 包含更新信息的代码实体信息DTO信息 + /// 包含更新信息的代码实体信息 /// 业务操作结果 Task UpdateCodeEntities(params CodeEntity[] entities); @@ -148,9 +148,9 @@ namespace OSharp.CodeGeneration.Services /// /// 更新实体属性信息信息 /// - /// 包含更新信息的实体属性信息DTO信息 + /// 包含更新信息的实体属性信息 /// 业务操作结果 - Task UpdateCodeProperties(params CodeProperty[] entities); + Task UpdateCodeProperties(params CodeProperty[] properties); /// /// 删除实体属性信息信息 @@ -161,5 +161,69 @@ namespace OSharp.CodeGeneration.Services #endregion + #region 实体外键信息业务 + + /// + /// 获取 实体外键信息查询数据集 + /// + IQueryable CodeForeigns { get; } + + /// + /// 检查实体外键信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的实体外键信息编号 + /// 实体外键信息是否存在 + Task CheckCodeForeignExists(Expression> predicate, Guid id = default); + + /// + /// 更新实体外键信息信息 + /// + /// 包含更新信息的实体外键信息 + /// 业务操作结果 + Task UpdateCodeForeigns(params CodeForeign[] foreigns); + + /// + /// 删除实体外键信息信息 + /// + /// 要删除的实体外键信息编号 + /// 业务操作结果 + Task DeleteCodeForeigns(params Guid[] ids); + + #endregion + + + #region 代码设置信息业务 + + /// + /// 获取 代码设置信息查询数据集 + /// + IQueryable CodeSettings { get; } + + /// + /// 检查代码设置信息信息是否存在 + /// + /// 检查谓语表达式 + /// 更新的代码设置信息编号 + /// 代码设置信息是否存在 + Task CheckCodeSettingExists(Expression> predicate, Guid id = default); + + /// + /// 更新代码设置信息信息 + /// + /// 包含更新信息的代码设置信息 + /// 业务操作结果 + Task UpdateCodeSettings(params CodeSetting[] settings); + + /// + /// 删除代码设置信息信息 + /// + /// 要删除的代码设置信息编号 + /// 业务操作结果 + Task DeleteCodeSettings(params Guid[] ids); + + #endregion + + } } diff --git a/src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml b/src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml new file mode 100644 index 0000000..b7d8046 --- /dev/null +++ b/src/OSharp.CodeGeneration/Templates/TestTemplate.cshtml @@ -0,0 +1,17 @@ +@inherits TemplateBase +@namespace OSharp.CodeGeneration.Templates + +@using System +@using System.Threading.Tasks +@using Microsoft.AspNetCore.Razor.Language.Intermediate +@using Microsoft.EntityFrameworkCore +@using MiniRazor +@using OSharp.Extensions; +@using OSharp.CodeGeneration.Services.Entities +@{ CodeModule module = Model; } +namespace @(module.Namespace) +{ + public particl interface I@(module.Name)Contract + { + } +} diff --git a/src/OSharp.CodeGeneration/Utils/TypeHelper.cs b/src/OSharp.CodeGeneration/Utils/TypeHelper.cs new file mode 100644 index 0000000..143ae47 --- /dev/null +++ b/src/OSharp.CodeGeneration/Utils/TypeHelper.cs @@ -0,0 +1,81 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-08 19:44 +// ----------------------------------------------------------------------- + +using OSharp.Data; + + +namespace OSharp.CodeGeneration.Utils +{ + /// + /// 类型辅助操作 + /// + public static class TypeHelper + { + public static string GetNamespace(string fullName) + { + int index = fullName.LastIndexOf('.'); + if (index > 0) + { + return fullName.Substring(0, index); + } + + return null; + } + + /// + /// 获取属性表示类型的简单类型,如 System.String 返回 string + /// + public static string ToSingleTypeName(string fullName, bool isNullable = false) + { + Check.NotNull(fullName, nameof(fullName)); + int index = fullName.LastIndexOf('.'); + string name = fullName.Substring(index + 1); + switch (fullName) + { + case "System.Byte": + name = "byte"; + break; + case "System.Int32": + name = "int"; + break; + case "System.Int64": + name = "long"; + break; + case "System.Decimal": + name = "decimal"; + break; + case "System.Single": + name = "float"; + break; + case "System.Double": + name = "double"; + break; + case "System.String": + name = "string"; + break; + case "System.Guid": + name = "Guid"; + break; + case "System.Boolean": + name = "bool"; + break; + case "System.DateTime": + name = "DateTime"; + break; + } + + if (isNullable) + { + name = name + "?"; + } + + return name; + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs b/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs new file mode 100644 index 0000000..2fea93d --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.Designer.cs @@ -0,0 +1,504 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using OSharp.Entity; + +namespace OSharp.CodeGenerator.Migrations +{ + [DbContext(typeof(DefaultDbContext))] + [Migration("20210408161331_SettingForeign")] + partial class SettingForeign + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.5"); + + modelBuilder.Entity("OSharp.Authorization.EntityInfos.EntityInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AuditEnabled") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PropertyJson") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("TypeName") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("TypeName") + .IsUnique() + .HasDatabaseName("ClassFullNameIndex"); + + b.ToTable("Auth_EntityInfo"); + }); + + modelBuilder.Entity("OSharp.Authorization.Functions.Function", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AccessType") + .HasColumnType("INTEGER"); + + b.Property("Action") + .HasColumnType("TEXT"); + + b.Property("Area") + .HasColumnType("TEXT"); + + b.Property("AuditEntityEnabled") + .HasColumnType("INTEGER"); + + b.Property("AuditOperationEnabled") + .HasColumnType("INTEGER"); + + b.Property("CacheExpirationSeconds") + .HasColumnType("INTEGER"); + + b.Property("Controller") + .HasColumnType("TEXT"); + + b.Property("IsAccessTypeChanged") + .HasColumnType("INTEGER"); + + b.Property("IsAjax") + .HasColumnType("INTEGER"); + + b.Property("IsCacheSliding") + .HasColumnType("INTEGER"); + + b.Property("IsController") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsSlaveDatabase") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Area", "Controller", "Action") + .IsUnique() + .HasDatabaseName("AreaControllerActionIndex"); + + b.ToTable("Auth_Function"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Addable") + .HasColumnType("INTEGER"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Deletable") + .HasColumnType("INTEGER"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("HasCreatedTime") + .HasColumnType("INTEGER"); + + b.Property("HasCreationAudited") + .HasColumnType("INTEGER"); + + b.Property("HasLocked") + .HasColumnType("INTEGER"); + + b.Property("HasSoftDeleted") + .HasColumnType("INTEGER"); + + b.Property("HasUpdateAudited") + .HasColumnType("INTEGER"); + + b.Property("IsDataAuth") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Listable") + .HasColumnType("INTEGER"); + + b.Property("ModuleId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("PrimaryKeyTypeFullName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("Updatable") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ModuleId"); + + b.ToTable("CodeGen_CodeEntity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeleteBehavior") + .HasColumnType("INTEGER"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("ForeignRelation") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("OtherEntity") + .HasColumnType("TEXT"); + + b.Property("OtherNavigation") + .HasColumnType("TEXT"); + + b.Property("SelfForeignKey") + .HasColumnType("TEXT"); + + b.Property("SelfNavigation") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeForeign"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Display") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("CodeGen_CodeModule"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Company") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Copyright") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("Creator") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("NamespacePrefix") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("SiteUrl") + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("CodeGen_CodeProject"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedTime") + .HasColumnType("TEXT"); + + b.Property("DataAuthFlag") + .HasColumnType("TEXT"); + + b.Property("DefaultValue") + .HasColumnType("TEXT"); + + b.Property("Display") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("Filterable") + .HasColumnType("INTEGER"); + + b.Property("IsForeignKey") + .HasColumnType("INTEGER"); + + b.Property("IsInputDto") + .HasColumnType("INTEGER"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsNavigation") + .HasColumnType("INTEGER"); + + b.Property("IsNullable") + .HasColumnType("INTEGER"); + + b.Property("IsOutputDto") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("IsVirtual") + .HasColumnType("INTEGER"); + + b.Property("MaxLength") + .HasColumnType("INTEGER"); + + b.Property("MinLength") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("RelateEntity") + .HasColumnType("TEXT"); + + b.Property("Sortable") + .HasColumnType("INTEGER"); + + b.Property("TypeName") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.Property("Updatable") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeProperty"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsOnce") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MetadataType") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("OutputFileFormat") + .IsRequired() + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("TemplateFile") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("CodeGen_CodeSetting"); + }); + + modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("Key") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ValueJson") + .HasColumnType("TEXT"); + + b.Property("ValueType") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("Key") + .IsUnique() + .HasDatabaseName("KeyIndex"); + + b.ToTable("Systems_KeyValue"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeModule", "Module") + .WithMany("Entities") + .HasForeignKey("ModuleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Module"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") + .WithMany("Modules") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProperty", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") + .WithMany("Properties") + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeEntity", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => + { + b.Navigation("Entities"); + }); + + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeProject", b => + { + b.Navigation("Modules"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs b/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs new file mode 100644 index 0000000..c834551 --- /dev/null +++ b/src/OSharp.CodeGenerator/Migrations/20210408161331_SettingForeign.cs @@ -0,0 +1,69 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace OSharp.CodeGenerator.Migrations +{ + public partial class SettingForeign : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "CodeGen_CodeForeign", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + SelfNavigation = table.Column(type: "TEXT", nullable: true), + SelfForeignKey = table.Column(type: "TEXT", nullable: true), + OtherEntity = table.Column(type: "TEXT", nullable: true), + OtherNavigation = table.Column(type: "TEXT", nullable: true), + IsRequired = table.Column(type: "INTEGER", nullable: false), + DeleteBehavior = table.Column(type: "INTEGER", nullable: true), + ForeignRelation = table.Column(type: "INTEGER", nullable: false), + EntityId = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CodeGen_CodeForeign", x => x.Id); + table.ForeignKey( + name: "FK_CodeGen_CodeForeign_CodeGen_CodeEntity_EntityId", + column: x => x.EntityId, + principalTable: "CodeGen_CodeEntity", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "CodeGen_CodeSetting", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", maxLength: 200, nullable: false), + MetadataType = table.Column(type: "INTEGER", nullable: false), + TemplateFile = table.Column(type: "TEXT", maxLength: 500, nullable: false), + Order = table.Column(type: "INTEGER", nullable: false), + OutputFileFormat = table.Column(type: "TEXT", maxLength: 300, nullable: false), + IsOnce = table.Column(type: "INTEGER", nullable: false), + IsSystem = table.Column(type: "INTEGER", nullable: false), + IsLocked = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CodeGen_CodeSetting", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_CodeGen_CodeForeign_EntityId", + table: "CodeGen_CodeForeign", + column: "EntityId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "CodeGen_CodeForeign"); + + migrationBuilder.DropTable( + name: "CodeGen_CodeSetting"); + } + } +} diff --git a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs index bcd602f..26e5557 100644 --- a/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs +++ b/src/OSharp.CodeGenerator/Migrations/DefaultDbContextModelSnapshot.cs @@ -173,6 +173,43 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeEntity"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DeleteBehavior") + .HasColumnType("INTEGER"); + + b.Property("EntityId") + .HasColumnType("TEXT"); + + b.Property("ForeignRelation") + .HasColumnType("INTEGER"); + + b.Property("IsRequired") + .HasColumnType("INTEGER"); + + b.Property("OtherEntity") + .HasColumnType("TEXT"); + + b.Property("OtherNavigation") + .HasColumnType("TEXT"); + + b.Property("SelfForeignKey") + .HasColumnType("TEXT"); + + b.Property("SelfNavigation") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.ToTable("CodeGen_CodeForeign"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => { b.Property("Id") @@ -332,6 +369,47 @@ namespace OSharp.CodeGenerator.Migrations b.ToTable("CodeGen_CodeProperty"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("IsLocked") + .HasColumnType("INTEGER"); + + b.Property("IsOnce") + .HasColumnType("INTEGER"); + + b.Property("IsSystem") + .HasColumnType("INTEGER"); + + b.Property("MetadataType") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("OutputFileFormat") + .IsRequired() + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("TemplateFile") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("CodeGen_CodeSetting"); + }); + modelBuilder.Entity("OSharp.Core.Systems.KeyValue", b => { b.Property("Id") @@ -371,6 +449,17 @@ namespace OSharp.CodeGenerator.Migrations b.Navigation("Module"); }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeForeign", b => + { + b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeEntity", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + modelBuilder.Entity("OSharp.CodeGeneration.Services.Entities.CodeModule", b => { b.HasOne("OSharp.CodeGeneration.Services.Entities.CodeProject", "Project") diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index 7d3fa49..6f71654 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -18,6 +18,7 @@ + diff --git a/src/OSharp.CodeGenerator/osharp-code-generator.db b/src/OSharp.CodeGenerator/osharp-code-generator.db new file mode 100644 index 0000000000000000000000000000000000000000..9d952f8369783353af83157c437988fde208a63b GIT binary patch literal 110592 zcmeI2&u`o28OKE{mTbkclC%la2E{n_;24fGD~{`RMbWAf z{rS9~=g0e!@6)_hl?;*DRkZ`bU{(`n5>r!&HyI|8NKBK@CGxpQK2zj#g?vttkNZct z{}b~)ow&O3M{^)5_r2NdeD3@C-)FwczB&7HMo)h;^X>Ha>CcnjOn;g9I{8V=I8jxP zZ{*VS+8Xt{bwju-izT%qZiotRes5`NSJaGtSlO9UgDtjLrd52a$};(|CVA#^Hp7s= zJlDxHE%r`}snyA6yIN&R^;)ylC~~zHli#{&%@&+B&ulfg&0=GRxykNaaYm{M2V!6> zx2o0eiZRt?N$<)+KcX|IH^lorNfU{rL@0KHZCHZ3gKr9lRZ-b9_9Ln#C9ay&Ydu*u z@p`&DDBKx1{kEhTJwc9ZQc*Qg+EZ?dWE}%BM+V}QZqFziYFwLo&luN;RSe1KkLb=3 z*sH-xxCVV{wMXNJgI4MdmfNVA+GQ^12jz=QgRQU)wpL=Be!H@p5UVonX_2Ydm@->s zi4B&D%~G+l{~JG zScxry*GlY?xo9gHNc|*M;&%RVtwg;iwv8vysx6IAtHj~V!FcD}9MrGZVMVlJoi_2B zoja~(9Vva9wac;(GqY)Wd6{~&VQIG6*A4MN=ZVAI7UZ57{GIV@HCTOuop7{kh(;|L zZs@Aw?q+05b@vgg&h+Y#I&0tXZNzRbPOqx%_kFvcMHd?al}s?jd~r$DVp&!4QX)#tf9R_$i{?0vr6v@ZE`FUccnuYZy*qs)Pt^| z42~Hd#Wcxgw5^ft-By67rlg62p=x0@YPYXRd;5l`jwpnkNzps2Q3?rJ>&Px=y5j8P zEN!Q z$DVCtqRXqP6ur3+Wz0UC;S0W>>4)c&X?kgidSprLApKb4|yEyW@o%I`oO7EB-Aq0;pFI`z;#*6=)A z*_8Hd1K>b`cOa3RB`$Ho4&)i?h7ydv11V8`;KmY_l00ck)1V8`;KmY`u z4S}B}ldsX&R<0FRuCM%Z<(0zf^)D0B3sI6UHxw`h!RC3*IaDC<4wQGfSUbL=1 zt?Elua@DO~EnK^{a{U#aQzXNx%#bxDb6+HK|H}Q1eBloSKmY_l00ck)1V8`;KmY_l z00cnbe}llKwx47$#u8R|0ZDSLUMK1>E(S1VBY_eq<{Q@00@8p2!H?xfB*=9 z00@8p2!H?xOfUiS{vXf(6Rcn?4Fo^{1V8`;KmY_l00ck)1V8`;2m##x!wf(G1V8`; zKmY_l00ck)1V8`;Kw$C-;QoK|b&M5)00@8p2!H?xfB*=900@8p2!H_Y|6v0l00JNY z0w4eaAOHd&00JNY0w6H?1aSX9`8vi5K>!3m00ck)1V8`;KmY_l00ck)_y4c~5C8!X z009sH0T2KI5C8!X009t~d;+-tpL`u-g&+U|AOHd&00JNY0w4eaAOHd&fct;g00@8p z2!H?xfB*=900@8p2!H?xOg;hJ|4+V-u|g040T2KI5C8!X009sH0T2KI5WxLEYybp6 z00ck)1V8`;KmY_l00ck)1SX#V?*AuW$5bgW#3HQ$mr>BX1+c3 zi_FyoH~nSe>*Oa1Hikv+yY%NDwzFxvP@q1&ZwPl~v7~my4N>9EZ&ooRqd!_QUuv+$ z7R$7XZ&g_)KiVMAT+U_~@|Wj2d8WnQX)(1r`D|CKOsQULwi-pQ)?)HoH?4X6^W~YX z2De#k>@YXkoh!~bHQ_)EjO138CA}*P{fOEvO*#;?{!Ovp>UYITPnKhb;`Fj$2*sYU zpJ#}G>;~Hy2<}d|sdjp@II^xQgo7puhS+IIBcd{8wo=@#wwQ&Lm6gJ>^^aLu`IYr= zfpq2cs@i^EB(Q?h4!W+8X2nj&)X|t$WlaJl4eVjqJyB$LLcrsKa{Wu`%T1V8zEXSI5EPUHqy(V4>GjX5Q+XlrC?W$65 zu-rz?G=JuDeo(&1G}sE;U~46|>32H232{2p-4>a8jTlXpB@S9DHcQ1ao6RhKaPhR| zL%|si=aLy;OjzRB}nTHwF^{&tsw={8A zI*iy1O6oyZPzGBC*^b<(-XsxiTa(>>o*FAesw6zv+nBdT?e;ZkZ{P6LWivluBUpTx znN8En%haO{OBKz&ZiojuPd2aHg4`2>zcYR%1glT53y*dU!EecMLsu2gdR=~2ow>t? z)DiLBQs)rh_KM#2NXU94lcJl;R6}o}pU5`JlvnAy{%c_Z@ZGH0%$G z|M!MnnoH5|6rxyq{o9E|h0(GsJCmY!R*y4?{O0XzcmmrF^b0X;?}^ak-$insa}C#1Tv8Q7Q)SsaGK|E8qP2{W3QqU- z3m&zG4pF=(kmwavUu?HUUAO%#stuURY_V)VV6fHM#Y*sq^T(YKajkq+f|pbiVBkM2-udVQUGShuk9 zJX_h6_H5(P-zFz{RqKZqPWcgswi$vRj5%^x3_hAh3>3nhaOw2g#%)p4i5I!vKP1CV zrRew8qsWBL!xut}ljLcB#(bj3{eR4R4OD>u2!H?xfB*=900@8p2!H?xfWU+h$j41McV(Jkmdg5%b43qefmBd^@>K^<;hJ< zH+Vs3y$s_EakZDoz-y-T$g>#UwoOEy#Yf9@nr2z*v-hm`m2pN8SNEd-?PXlk;Y-Z1 z?=HR9H||^8(8L;F28b_H$9;|Nro>cafxML;x$!8AyFyPktP8-fYJYZ)=N`p*^-FFW zLZ_`rvO%sTLepJb(Kx-LYNE8KSXYeE7b2X}?HOf5jk{EcN>&-pRTCaad)7Tk+&DFo zVl+zq=N7vJQ(; zBY7j%Is4Mlx#!dL%>s3_78b6Z#1#@x?My)Lz;+$&6Dt_2gZ)QCwcWx5HJBv7c$9lC zO>;!3LYPptN(Z@}UYYEw3$Zc}*OiI7Tey{*vH+3==$Cnm=wHm7_Xe29#ZvBM*b@4^GCy{r^w? zN&pjp00@8p2!H?xfB*=900@8p2!OydCxGYwXRZPW00JNY0w4eaAOHd&00JNY0w4ea zPm2IWCOS(#XP(xCmeaLAOHd&00JNY0w4eaAOHd&00JQJR0!by|EXZc cBp?6+AOHd&00JNY0w4eaAOHd&@JtE(7ZR1--~a#s literal 0 HcmV?d00001 -- Gitee