From f0bc1ddae271973eacb3e1f49f7667e255a53875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 18:23:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=8F=9C=E5=8D=95=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=94=B9=E9=80=A0=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DataService.CodeEntity.cs | 2 +- .../Services/DataService.CodeModule.cs | 54 ++--- .../Services/DataService.CodeProject.cs | 6 +- .../Services/DataService.CodeProperty.cs | 2 +- .../Services/IDataContract.cs | 9 +- src/OSharp.CodeGenerator/Data/Extensions.cs | 51 +++++ .../OSharp.CodeGenerator.csproj | 2 +- .../Views/Entities/EntityListView.xaml | 126 ++++++------ .../Views/Entities/EntityListViewModel.cs | 17 +- .../Views/Entities/EntityViewModel.cs | 22 +- .../Views/MainMenuView.xaml | 32 +-- src/OSharp.CodeGenerator/Views/MainView.xaml | 10 +- .../Views/MainViewModel.cs | 7 +- src/OSharp.CodeGenerator/Views/MenuView.xaml | 40 ++++ ...oduleEditView.xaml.cs => MenuView.xaml.cs} | 10 +- .../Views/MenuViewModel.cs | 188 ++++++++++++++++++ .../Views/Modules/ModuleEditView.xaml | 44 ---- .../Views/Modules/ModuleListView.xaml | 64 +++--- .../Views/Modules/ModuleListViewModel.cs | 61 ++++-- .../Views/Modules/ModuleViewModel.cs | 61 +----- .../Views/Projects/ProjectEditView.xaml | 6 +- .../Views/Projects/ProjectListView.xaml | 14 +- .../Views/Projects/ProjectViewModel.cs | 6 +- .../Views/Properties/PropertyListView.xaml | 160 +++++++++------ .../Views/Properties/PropertyListViewModel.cs | 19 +- .../Views/ViewModelLocator.cs | 67 +++++++ 26 files changed, 676 insertions(+), 404 deletions(-) create mode 100644 src/OSharp.CodeGenerator/Data/Extensions.cs create mode 100644 src/OSharp.CodeGenerator/Views/MenuView.xaml rename src/OSharp.CodeGenerator/Views/{Modules/ModuleEditView.xaml.cs => MenuView.xaml.cs} (71%) create mode 100644 src/OSharp.CodeGenerator/Views/MenuViewModel.cs delete mode 100644 src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index a6f182d..9f69987 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -83,7 +83,7 @@ namespace OSharp.CodeGeneration.Services await UnitOfWork.CommitAsync(); return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”更新成功") + ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index d53819a..e6c340e 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -39,43 +39,7 @@ namespace OSharp.CodeGeneration.Services { return ModuleRepository.CheckExistsAsync(predicate, id); } - - /// - /// 添加代码模块信息信息 - /// - /// 要添加的代码模块信息 - /// 业务操作结果 - public async Task CreateCodeModules(params CodeModule[] modules) - { - List names = new List(); - UnitOfWork.EnableTransaction(); - foreach (CodeModule module in modules) - { - module.Validate(); - CodeProject project = await ProjectRepository.GetAsync(module.ProjectId); - if (project == null) - { - return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在"); - } - - if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId)) - { - return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); - } - - int count = await ModuleRepository.InsertAsync(module); - if (count > 0) - { - names.Add(module.Name); - } - } - - await UnitOfWork.CommitAsync(); - return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功") - : OperationResult.NoChanged; - } - + /// /// 更新代码模块信息信息 /// @@ -99,9 +63,17 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); } - CodeModule existing = await ModuleRepository.GetAsync(module.Id); - existing = module.MapTo(existing); - int count = await ModuleRepository.UpdateAsync(existing); + int count; + if (module.Id == default) + { + count = await ModuleRepository.InsertAsync(module); + } + else + { + CodeModule existing = await ModuleRepository.GetAsync(module.Id); + existing = module.MapTo(existing); + count = await ModuleRepository.UpdateAsync(existing); + } if (count > 0) { names.Add(module.Name); @@ -110,7 +82,7 @@ namespace OSharp.CodeGeneration.Services await UnitOfWork.CommitAsync(); return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”更新成功") + ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index c77e728..17573ce 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -43,11 +43,11 @@ namespace OSharp.CodeGeneration.Services projects = json.FromJsonString(); foreach (CodeProject project in projects) { - foreach (CodeModule module in project.Modules) + foreach (CodeModule module in project.Modules.OrderBy(m => m.Order)) { - foreach (CodeEntity entity in module.Entities) + foreach (CodeEntity entity in module.Entities.OrderBy(m => m.Order)) { - foreach (CodeProperty property in entity.Properties) + foreach (CodeProperty property in entity.Properties.OrderBy(m => m.Order)) { property.Entity = entity; } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 9b778dc..2ae4d58 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -83,7 +83,7 @@ namespace OSharp.CodeGeneration.Services await UnitOfWork.CommitAsync(); return names.Count > 0 - ? new OperationResult(OperationResultType.Success, $"属性“{names.ExpandAndToString()}”更新成功") + ? new OperationResult(OperationResultType.Success, $"属性“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } diff --git a/src/OSharp.CodeGeneration/Services/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs index d6499ac..b4e3bf1 100644 --- a/src/OSharp.CodeGeneration/Services/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -82,14 +82,7 @@ namespace OSharp.CodeGeneration.Services /// 更新的代码模块信息编号 /// 代码模块信息是否存在 Task CheckCodeModuleExists(Expression> predicate, Guid id = default); - - /// - /// 添加代码模块信息信息 - /// - /// 要添加的代码模块信息 - /// 业务操作结果 - Task CreateCodeModules(params CodeModule[] modules); - + /// /// 更新代码模块信息信息 /// diff --git a/src/OSharp.CodeGenerator/Data/Extensions.cs b/src/OSharp.CodeGenerator/Data/Extensions.cs new file mode 100644 index 0000000..3d22162 --- /dev/null +++ b/src/OSharp.CodeGenerator/Data/Extensions.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.CodeGenerator.Views.Properties; +using OSharp.Mapping; +using OSharp.Wpf.Stylet; + + +namespace OSharp.CodeGenerator.Data +{ + public static class Extensions + { + public static ProjectViewModel ToViewModel(this CodeProject project) + { + ProjectViewModel model = IoC.Get(); + model = project.MapTo(model); + return model; + } + + public static ModuleViewModel ToViewModel(this CodeModule module, ProjectViewModel projectModel = null) + { + ModuleViewModel model = IoC.Get(); + model = module.MapTo(model); + model.Project = projectModel; + return model; + } + + public static EntityViewModel ToViewModel(this CodeEntity entity, ModuleViewModel moduleModel = null) + { + EntityViewModel model = IoC.Get(); + model = entity.MapTo(model); + model.Module = moduleModel; + return model; + } + + public static PropertyViewModel ToViewModel(this CodeProperty property, EntityViewModel entityModel = null) + { + PropertyViewModel model = IoC.Get(); + model = property.MapTo(model); + model.Entity = entityModel; + return model; + } + } +} diff --git a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj index 3fc9cd7..0e7421a 100644 --- a/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj +++ b/src/OSharp.CodeGenerator/OSharp.CodeGenerator.csproj @@ -1,4 +1,4 @@ - + WinExe diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index 1b9fa37..bfcbef9 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:s="https://github.com/canton7/Stylet" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Entities" xmlns:viewsProperty="clr-namespace:OSharp.CodeGenerator.Views.Properties" mc:Ignorable="d" @@ -15,92 +15,78 @@ - 实体列表 + 实体列表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs index da5886b..ac643fb 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -9,7 +9,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -43,18 +45,21 @@ namespace OSharp.CodeGenerator.Views.Entities public IObservableCollection Entities { get; } = new BindableCollection(); - public void Init() + public bool IsShow { get; set; } + + public async void Init() { if (Module == null) { throw new OsharpException($"当前模块为空,请点击模块列表选择一行"); } - + List entities = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWorkAsync(provider => { IDataContract contract = provider.GetRequiredService(); entities = contract.CodeEntities.Where(m => m.ModuleId == Module.Id).OrderBy(m => m.Order).ToList(); + return Task.CompletedTask; }); Entities.Clear(); foreach (CodeEntity entity in entities) @@ -64,6 +69,7 @@ namespace OSharp.CodeGenerator.Views.Entities model.Module = Module; Entities.Add(model); } + Helper.Output($"模块“{Module.Display}”的实体列表刷新成功,共{Entities.Count}个实体"); } @@ -84,6 +90,11 @@ namespace OSharp.CodeGenerator.Views.Entities return; } + for (int i = 0; i < Entities.Count; i++) + { + Entities[i].Order = i + 1; + } + CodeEntity[] entities = Entities.Select(m => m.ToEntity()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 9da542a..618bd19 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -79,27 +79,7 @@ namespace OSharp.CodeGenerator.Views.Entities CodeEntity entity = this.MapTo(); return entity; } - - public void Expanded(RoutedEventArgs args) - { - Expander expander = args.Source as Expander; - DataGrid grid = expander.TryFindParent(); - if (expander != null) - { - grid?.SetDetailsVisibilityForItem(this, Visibility.Hidden); - } - } - - public void Collapsed(RoutedEventArgs args) - { - Expander expander = args.Source as Expander; - DataGrid grid = expander.TryFindParent(); - if (expander != null) - { - grid?.SetDetailsVisibilityForItem(this, Visibility.Collapsed); - } - } - + public void ForeignKey() { Helper.Output($"“{Name}” - ForeignKey"); diff --git a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml index 7407456..23662b2 100644 --- a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml +++ b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:s="https://github.com/canton7/Stylet" mc:Ignorable="d" d:DataContext="{d:DesignInstance local:MainMenuViewModel}" @@ -14,59 +14,59 @@ diff --git a/src/OSharp.CodeGenerator/Views/MainView.xaml b/src/OSharp.CodeGenerator/Views/MainView.xaml index 614a0af..f000269 100644 --- a/src/OSharp.CodeGenerator/Views/MainView.xaml +++ b/src/OSharp.CodeGenerator/Views/MainView.xaml @@ -9,9 +9,10 @@ xmlns:viewsProjects="clr-namespace:OSharp.CodeGenerator.Views.Projects" xmlns:viewsModules="clr-namespace:OSharp.CodeGenerator.Views.Modules" xmlns:viewsEntities="clr-namespace:OSharp.CodeGenerator.Views.Entities" + xmlns:viewsProperties="clr-namespace:OSharp.CodeGenerator.Views.Properties" xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:mahwin="http://metro.mahapps.com/winfx/xaml/simplechildwindow" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:notify="clr-namespace:Notifications.Wpf.Core.Controls;assembly=Notifications.Wpf.Core" mc:Ignorable="d" d:DataContext="{d:DesignInstance views:MainViewModel}" @@ -34,13 +35,14 @@ - + - + + + - diff --git a/src/OSharp.CodeGenerator/Views/MainViewModel.cs b/src/OSharp.CodeGenerator/Views/MainViewModel.cs index 57a8580..a8c9248 100644 --- a/src/OSharp.CodeGenerator/Views/MainViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/MainViewModel.cs @@ -13,6 +13,7 @@ using Notifications.Wpf.Core.Controls; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Modules; using OSharp.CodeGenerator.Views.Projects; +using OSharp.CodeGenerator.Views.Properties; using OSharp.Wpf.Stylet; using Stylet; @@ -33,17 +34,21 @@ namespace OSharp.CodeGenerator.Views DisplayName = "OSharp代码生成器"; _notificationManager = new NotificationManager(NotificationPosition.BottomRight); } - + public MainMenuViewModel MainMenu { get; set; } = IoC.Get(); public StatusBarViewModel StatusBar { get; set; } = IoC.Get(); public ProjectListViewModel ProjectList { get; set; } = IoC.Get(); + public MenuViewModel Menu { get; set; } = IoC.Get(); + public ModuleListViewModel ModuleList { get; set; } = IoC.Get(); public EntityListViewModel EntityList { get; set; } = IoC.Get(); + public PropertyListViewModel PropertyList { get; set; } = IoC.Get(); + public async void Notify(string message, NotificationType type = NotificationType.Information, string title = "消息提示") { NotificationContent content = new NotificationContent() diff --git a/src/OSharp.CodeGenerator/Views/MenuView.xaml b/src/OSharp.CodeGenerator/Views/MenuView.xaml new file mode 100644 index 0000000..bf03650 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/MenuView.xaml @@ -0,0 +1,40 @@ + + + + + + 导航菜单 + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs b/src/OSharp.CodeGenerator/Views/MenuView.xaml.cs similarity index 71% rename from src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs rename to src/OSharp.CodeGenerator/Views/MenuView.xaml.cs index e2a1566..d83f86a 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml.cs +++ b/src/OSharp.CodeGenerator/Views/MenuView.xaml.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -13,14 +13,14 @@ using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; -namespace OSharp.CodeGenerator.Views.Modules +namespace OSharp.CodeGenerator.Views { /// - /// ModuleEditView.xaml 的交互逻辑 + /// NavView.xaml 的交互逻辑 /// - public partial class ModuleEditView : UserControl + public partial class MenuView : UserControl { - public ModuleEditView() + public MenuView() { InitializeComponent(); } diff --git a/src/OSharp.CodeGenerator/Views/MenuViewModel.cs b/src/OSharp.CodeGenerator/Views/MenuViewModel.cs new file mode 100644 index 0000000..39844a7 --- /dev/null +++ b/src/OSharp.CodeGenerator/Views/MenuViewModel.cs @@ -0,0 +1,188 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 11:52 +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows; +using System.Windows.Controls; + +using JetBrains.Annotations; + +using MahApps.Metro.IconPacks; + +using Microsoft.Extensions.DependencyInjection; + +using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Data; +using OSharp.CodeGenerator.Views.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.CodeGenerator.Views.Properties; +using OSharp.Exceptions; +using OSharp.Wpf.Stylet; + +using Stylet; + + +namespace OSharp.CodeGenerator.Views +{ + [Singleton] + public class MenuViewModel : Screen + { + private readonly IServiceProvider _provider; + + public MenuViewModel(IServiceProvider provider) + { + _provider = provider; + } + + public ProjectViewModel Project { get; set; } + + public IObservableCollection MenuItems { get; set; } = new BindableCollection(); + + public Screen SelectModel { get; set; } + + public void Init() + { + if (Project == null) + { + throw new OsharpException("当前项目为空,请先通过菜单“项目-项目管理”加载项目"); + } + + CodeProject[] projects = null; + _provider.ExecuteScopedWork(provider => + { + IDataContract contract = provider.GetRequiredService(); + projects = contract.GetCodeProject(m => m.Name == Project.Name); + }); + if (projects == null) + { + throw new OsharpException($"名称为“{Project.Name}”的项目信息不存在"); + } + + MenuItems.Clear(); + foreach (CodeProject project in projects) + { + MenuItems.Add(ToMenu(project)); + } + } + + public void Select(RoutedPropertyChangedEventArgs args) + { + if (args.NewValue is not MenuItem item) + { + return; + } + + SelectModel = item.Screen; + MainViewModel main = IoC.Get(); + main.ModuleList.IsShow = SelectModel is ProjectViewModel; + main.EntityList.IsShow = SelectModel is ModuleViewModel; + main.PropertyList.IsShow = SelectModel is EntityViewModel; + switch (SelectModel) + { + case ProjectViewModel project: + ModuleListViewModel list1 = IoC.Get(); + list1.Project = project; + list1.Init(); + break; + case ModuleViewModel module: + EntityListViewModel list2 = IoC.Get(); + list2.Module = module; + list2.Init(); + break; + case EntityViewModel entity: + PropertyListViewModel list3 = IoC.Get(); + list3.Entity = entity; + list3.Init(); + break; + } + } + + private MenuItem ToMenu(CodeProject project) + { + MenuItem projectMenu = _provider.GetRequiredService(); + projectMenu.Id = project.Id; + projectMenu.Text = $"{project.Name}[{project.NamespacePrefix}]"; + projectMenu.Type = MenuItemType.Project; + projectMenu.Icon = PackIconMaterialKind.AlphaPBoxOutline; + ProjectViewModel projectModel = project.ToViewModel(); + projectMenu.Screen = projectModel; + foreach (CodeModule module in project.Modules) + { + MenuItem moduleMenu = _provider.GetRequiredService(); + moduleMenu.Id = module.Id; + moduleMenu.Text = $"{module.Display}[{module.Name}]"; + moduleMenu.Type = MenuItemType.Module; + moduleMenu.Icon = PackIconMaterialKind.AlphaMBoxOutline; + ModuleViewModel moduleModel = module.ToViewModel(projectModel); + moduleMenu.Screen = moduleModel; + foreach (CodeEntity entity in module.Entities) + { + MenuItem entityMenu = _provider.GetRequiredService(); + entityMenu.Id = entity.Id; + entityMenu.Text = $"{entity.Display}[{entity.Name}]"; + entityMenu.Type = MenuItemType.Entity; + entityMenu.Icon = PackIconMaterialKind.AlphaEBoxOutline; + EntityViewModel entityModel = entity.ToViewModel(moduleModel); + entityMenu.Screen = entityModel; + moduleMenu.ItemMenus.Add(entityMenu); + } + projectMenu.ItemMenus.Add(moduleMenu); + } + + return projectMenu; + } + } + + + public class MenuItem : Screen + { + public Guid Id { get; set; } + + /// + /// 获取或设置 显示 + /// + public string Text { get; set; } + + /// + /// 获取或设置 图标 + /// + public PackIconMaterialKind Icon { get; set; } + + /// + /// 获取或设置 节点类型 + /// + public MenuItemType Type { get; set; } + + /// + /// 获取或设置 当前关联视图模型 + /// + public Screen Screen { get; set; } + + /// + /// 获取或设置 子节点集合 + /// + public IObservableCollection ItemMenus { get; set; } = new BindableCollection(); + } + + + public enum MenuItemType + { + Project, + + Module, + + Entity, + + Property + } +} diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml deleted file mode 100644 index 77e65ef..0000000 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleEditView.xaml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml index fcc35c5..cc681a1 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml @@ -5,57 +5,63 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:s="https://github.com/canton7/Stylet" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Modules" mc:Ignorable="d" - d:DesignHeight="700" d:DesignWidth="200" + d:DesignHeight="700" d:DesignWidth="1000" d:DataContext="{d:DesignInstance local:ModuleListViewModel}"> - 模块列表 + 模块列表 + - - - - - - - - - - - - [] - - - + - - - - - - - + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index 27e6134..0bccf71 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -9,16 +9,19 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; -using System.Windows.Controls; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Notifications.Wpf.Core; + using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; -using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Projects; +using OSharp.Data; using OSharp.Exceptions; using OSharp.Mapping; using OSharp.Wpf.Stylet; @@ -42,23 +45,21 @@ namespace OSharp.CodeGenerator.Views.Modules public IObservableCollection Modules { get; } = new BindableCollection(); - public string EditTitle { get; set; } - - public bool IsShowEdit { get; set; } + public bool IsShow { get; set; } = true; - public ModuleViewModel EditingModel { get; set; } - - public void Init() + public async void Init() { if (Project == null) { throw new OsharpException("当前项目为空,请先通过菜单“项目-项目管理”加载项目"); } + List entities = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWorkAsync(provider => { IDataContract contract = provider.GetRequiredService(); entities = contract.CodeModules.Where(m => m.ProjectId == Project.Id).OrderBy(m => m.Order).ToList(); + return Task.CompletedTask; }); Modules.Clear(); foreach (CodeModule entity in entities) @@ -68,6 +69,7 @@ namespace OSharp.CodeGenerator.Views.Modules model.Project = Project; Modules.Add(model); } + Helper.Output($"模块列表刷新成功,共{Modules.Count}个模块"); } @@ -79,28 +81,47 @@ namespace OSharp.CodeGenerator.Views.Modules } ModuleViewModel model = IoC.Get(); model.Project = Project; - EditingModel = model; - EditTitle = $"新增模块,项目:{Project.Name}"; - IsShowEdit = true; + Modules.Add(model); } - public void Select(SelectionChangedEventArgs e) + public bool CanSave => Modules.All(m => !m.HasErrors); + + public async void Save() { - if (e.AddedItems.Count == 0) + if (!CanSave) { + Helper.Notify("模块信息验证失败", NotificationType.Warning); return; } - ModuleViewModel module = e.AddedItems[0] as ModuleViewModel; - if (module == null) + for (int i = 0; i < Modules.Count; i++) + { + Modules[i].Order = i + 1; + } + + CodeModule[] modules = Modules.Select(m => m.ToModule()).ToArray(); + OperationResult result = null; + await _provider.ExecuteScopedWorkAsync(async provider => + { + IDataContract contract = provider.GetRequiredService(); + result = await contract.UpdateCodeModules(modules); + }); + Helper.Notify(result); + if (!result.Succeeded) { return; } + Init(); + } - EntityListViewModel list = IoC.Get(); - list.Module = module; - list.Init(); - Helper.Output($"切换到“{module.Name} [{module.Display}]”模块"); + /// + /// 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(() => CanSave); } } } diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index 126a247..df19c7a 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -64,15 +64,7 @@ namespace OSharp.CodeGenerator.Views.Modules CodeModule module = this.MapTo(); return module; } - - 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) @@ -95,57 +87,6 @@ namespace OSharp.CodeGenerator.Views.Modules main.ModuleList.Init(); } - - public bool CanEditSave => !HasErrors; - - public async void EditSave() - { - MainViewModel main = IoC.Get(); - if (!await ValidateAsync()) - { - 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); - }); - Helper.Notify(result); - if (!result.Succeeded) - { - return; - } - - 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); - } - } diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml index e9b8516..7f30f10 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectEditView.xaml @@ -7,7 +7,7 @@ xmlns:s="https://github.com/canton7/Stylet" xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:mahwin="http://metro.mahapps.com/winfx/xaml/simplechildwindow" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Projects" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" @@ -45,13 +45,13 @@ diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml index a40e421..01289e1 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListView.xaml @@ -7,7 +7,7 @@ xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:s="https://github.com/canton7/Stylet" xmlns:mahwin="http://metro.mahapps.com/winfx/xaml/simplechildwindow" - xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Projects" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" @@ -17,17 +17,17 @@ - 项目列表 + 项目列表 @@ -42,19 +42,19 @@ diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index 4cd7f22..b45552c 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -66,9 +66,9 @@ namespace OSharp.CodeGenerator.Views.Projects { MainViewModel main = IoC.Get(); main.DisplayName = $"OSharp代码生成器 - {Name}"; - ModuleListViewModel moduleList = IoC.Get(); - moduleList.Project = this; - moduleList.Init(); + MenuViewModel menu = IoC.Get(); + menu.Project = this; + menu.Init(); main.ProjectList.IsShow = false; main.StatusBar.Message = $"项目“{Name}”加载成功"; } diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml index c485b20..26cd5d4 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml @@ -5,70 +5,110 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:s="https://github.com/canton7/Stylet" + xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:OSharp.CodeGenerator.Views.Properties" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="1200" d:DataContext="{d:DesignInstance local:PropertyListViewModel}"> - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs index ba5eced..85c7053 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs @@ -9,7 +9,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -22,12 +24,14 @@ using OSharp.CodeGenerator.Views.Entities; using OSharp.Data; using OSharp.Exceptions; using OSharp.Mapping; +using OSharp.Wpf.Stylet; using Stylet; namespace OSharp.CodeGenerator.Views.Properties { + [Singleton] public class PropertyListViewModel : Screen { private readonly IServiceProvider _provider; @@ -41,18 +45,21 @@ namespace OSharp.CodeGenerator.Views.Properties public IObservableCollection Properties { get; set; } = new BindableCollection(); - public void Init() + public bool IsShow { get; set; } + + public async void Init() { if (Entity == null) { throw new OsharpException("当前实体为空,请选择一个实体"); } - + List properties = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWork(provider => { IDataContract contract = provider.GetRequiredService(); properties = contract.CodeProperties.Where(m => m.EntityId == Entity.Id).OrderBy(m => m.Order).ToList(); + return Task.CompletedTask; }); Properties.Clear(); foreach (CodeProperty property in properties) @@ -62,6 +69,7 @@ namespace OSharp.CodeGenerator.Views.Properties model.Entity = Entity; Properties.Add(model); } + Helper.Output($"实体“{Entity.Display}”的属性列表刷新成功,共{Properties.Count}个属性"); } @@ -82,6 +90,11 @@ namespace OSharp.CodeGenerator.Views.Properties return; } + for (int i = 0; i < Properties.Count; i++) + { + Properties[i].Order = i + 1; + } + CodeProperty[] properties = Properties.Select(m => m.ToProperty()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => diff --git a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs index 7d25650..bb2f0e6 100644 --- a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs +++ b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs @@ -8,10 +8,18 @@ // ----------------------------------------------------------------------- using System; +using System.Collections.Generic; +using System.Linq; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using OSharp.CodeGeneration.Generates; +using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; +using OSharp.CodeGenerator.Views.Modules; +using OSharp.CodeGenerator.Views.Projects; +using OSharp.Wpf.Stylet; namespace OSharp.CodeGenerator.Views @@ -46,5 +54,64 @@ namespace OSharp.CodeGenerator.Views public DeleteBehavior?[] DeleteBehaviors { get; } = { null, DeleteBehavior.ClientSetNull, DeleteBehavior.Restrict, DeleteBehavior.SetNull, DeleteBehavior.Cascade }; + public MetadataType[] MetadataTypes { get; } = { MetadataType.Entity, MetadataType.Module, MetadataType.Project }; + + public string[] TemplateFiles { get; } = { "内置" }; + + public string[] DataAuthFlags { get; } = { "UserFlag" }; + + public string[] Entities => GetEntities(); + + private CodeProject _project; + private string[] GetEntities() + { + ProjectViewModel project = IoC.Get().Project; + ModuleListViewModel moduleList = IoC.Get(); + List list = new List() + { + "OSharp.Core.EntityInfos.EntityInfo", + "OSharp.Core.Functions.Function", + "OSharp.Core.Systems.KeyValue" + }; + list.AddRange(new[] + { + "Identity.Entities.LoginLog", + "Identity.Entities.Organization", + "Identity.Entities.Role", + "Identity.Entities.RoleClaim", + "Identity.Entities.User", + "Identity.Entities.UserClaim", + "Identity.Entities.UserDetail", + "Identity.Entities.UserLogin", + "Identity.Entities.UserRole", + "Identity.Entities.UserToken", + "Security.Entities.EntityRole", + "Security.Entities.EntityUser", + "Security.Entities.Module", + "Security.Entities.ModuleFunction", + "Security.Entities.ModuleRole", + "Security.Entities.ModuleUser", + "Systems.Entities.AuditEntity", + "Systems.Entities.AuditOperation", + "Systems.Entities.AuditProperty" + }.Select(m => $"{project.NamespacePrefix}.{m}")); + if (moduleList != null) + { + if (_project == null) + { + IServiceProvider rootProvider = IoC.Get(); + MenuViewModel menu = rootProvider.GetRequiredService(); + rootProvider.ExecuteScopedWork(provider => + { + IDataContract contract = provider.GetRequiredService(); + _project = contract.GetCodeProject(m => m.Name == menu.Project.Name).First(); + }); + } + list.AddRange(_project.Modules.SelectMany(m => m.Entities.Select(n => $"{project.NamespacePrefix}.{m.Name}.Entities.{n.Name}")) + .OrderBy(m => m)); + } + + return list.Distinct().ToArray(); + } } } -- Gitee From e310ba8869e88cf0cfae74bf7543c27e64b3e6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 20:49:47 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E5=B8=A6=E6=9D=A5=E7=9A=84=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DataService.CodeEntity.cs | 4 +++ .../Services/DataService.CodeModule.cs | 4 +++ .../Services/DataService.CodeProject.cs | 5 ++- .../Services/DataService.CodeProperty.cs | 4 +++ .../Services/Entities/CodeEntity.cs | 2 +- .../Services/Entities/CodeProject.cs | 1 + .../Seeds/CodeEntitySeedDataInitializer.cs | 16 +++++----- .../Seeds/CodeModuleSeedDataInitializer.cs | 6 ++-- .../Seeds/CodePropertySeedDataInitializer.cs | 12 +++---- .../Data/AutoMapperConfiguration.cs | 24 +++++++------- .../Views/Entities/EntityListView.xaml | 7 +++-- .../Views/Entities/EntityViewModel.cs | 2 ++ .../Views/Modules/ModuleListView.xaml | 2 ++ .../Views/Modules/ModuleViewModel.cs | 9 +++--- .../Views/Projects/ProjectListViewModel.cs | 6 ++-- .../Views/Projects/ProjectViewModel.cs | 2 +- .../Views/Properties/PropertyListView.xaml | 31 ++++++++++++++++--- .../Views/Properties/PropertyViewModel.cs | 6 ++++ 18 files changed, 98 insertions(+), 45 deletions(-) diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index 9f69987..df91d99 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -63,6 +63,10 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); } + if (entity.Order == 0) + { + entity.Order = EntityRepository.Query(m => m.ModuleId == module.Id).Count() + 1; + } int count; if (entity.Id == default) { diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index e6c340e..2e0f34e 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -63,6 +63,10 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); } + if (module.Order == 0) + { + module.Order = ModuleRepository.Query(m => m.ProjectId == module.ProjectId).Count() + 1; + } int count; if (module.Id == default) { diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index 17573ce..f7e9c89 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -9,6 +9,7 @@ using OSharp.Collections; using OSharp.Data; using OSharp.Extensions; using OSharp.Json; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Services @@ -109,7 +110,9 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); } - int count = await ProjectRepository.UpdateAsync(project); + CodeProject existing = await ProjectRepository.GetAsync(project.Id); + existing = project.MapTo(existing); + int count = await ProjectRepository.UpdateAsync(existing); if (count > 0) { names.Add(project.Name); diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 2ae4d58..67de755 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -63,6 +63,10 @@ namespace OSharp.CodeGeneration.Services return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{property.Name}”的属性信息已存在"); } + if (property.Order == 0) + { + property.Order = PropertyRepository.Query(m => m.EntityId == entity.Id).Count() + 1; + } int count; if (property.Id == default) { diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs index 2b884d9..c7608d5 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs @@ -24,7 +24,7 @@ namespace OSharp.CodeGeneration.Services.Entities [Description("代码实体信息")] [TableNamePrefix("CodeGen")] [MapTo(typeof(CodeEntity))] - public class CodeEntity : EntityBase, ILockable + public class CodeEntity : EntityBase, ILockable, ICreatedTime { /// /// 获取或设置 类型名称 diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs index e3e7773..835a036 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeProject.cs @@ -14,6 +14,7 @@ using System.ComponentModel.DataAnnotations; using OSharp.Data; using OSharp.Entity; +using OSharp.Mapping; namespace OSharp.CodeGeneration.Services.Entities diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs index fd0bdff..96a1a9b 100644 --- a/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs @@ -40,24 +40,24 @@ namespace OSharp.CodeGeneration.Services.Seeds CodeModule module = repository.GetFirst(m => m.Name == "Identity"); List entities = new List() { - new CodeEntity(){Name = "User", Display = "用户", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "Role", Display = "角色", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "UserRole", Display = "用户角色", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "User", Display = "用户", Order = 1, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Role", Display = "角色", Order = 2, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "UserRole", Display = "用户角色", Order = 3, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, }; module = repository.GetFirst(m => m.Name == "Auth"); entities.AddRange(new List() { - new CodeEntity(){Name = "Module", Display = "模块", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "Function", Display = "功能", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, - new CodeEntity(){Name = "EntityInfo", Display = "实体", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, + new CodeEntity(){Name = "Module", Display = "模块", Order = 1, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Function", Display = "功能", Order = 2, PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, + new CodeEntity(){Name = "EntityInfo", Display = "实体", Order = 3, PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id}, }); module = repository.GetFirst(m => m.Name == "Infos"); entities.AddRange(new List() { - new CodeEntity(){Name = "Article", Display = "文章", PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, - new CodeEntity(){Name = "Message", Display = "站内信", PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id} + new CodeEntity(){Name = "Article", Display = "文章", Order = 1, PrimaryKeyTypeFullName = "System.Int32", ModuleId = module.Id}, + new CodeEntity(){Name = "Message", Display = "站内信", Order = 2, PrimaryKeyTypeFullName = "System.Guid", ModuleId = module.Id} }); return entities.ToArray(); diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs index 824376d..f06c807 100644 --- a/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodeModuleSeedDataInitializer.cs @@ -39,9 +39,9 @@ namespace OSharp.CodeGeneration.Services.Seeds CodeProject project = repository.GetFirst(m => m.Name == "示例项目"); return new[] { - new CodeModule(){Name = "Identity", Display = "身份认证", ProjectId = project.Id}, - new CodeModule(){Name = "Auth", Display = "权限授权", ProjectId = project.Id}, - new CodeModule(){Name = "Infos", Display = "信息", ProjectId = project.Id}, + new CodeModule(){Name = "Identity", Display = "身份认证", Order = 1, ProjectId = project.Id}, + new CodeModule(){Name = "Auth", Display = "权限授权", Order = 2, ProjectId = project.Id}, + new CodeModule(){Name = "Infos", Display = "信息", Order = 3, ProjectId = project.Id}, }; } diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs index 70b9531..f4ef90f 100644 --- a/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs +++ b/src/OSharp.CodeGeneration/Services/Seeds/CodePropertySeedDataInitializer.cs @@ -39,12 +39,12 @@ namespace OSharp.CodeGeneration.Services.Seeds CodeEntity entity = repository.GetFirst(m => m.Name == "User"); List properties = new List() { - new CodeProperty(){Name = "UserName", Display = "用户名", TypeName = "System.String", IsRequired = true, MaxLength = 200, EntityId = entity.Id}, - new CodeProperty(){Name = "NickName", Display = "用户昵称", TypeName = "System.String", IsRequired = true, MaxLength = 200, EntityId = entity.Id}, - new CodeProperty(){Name = "Email", Display = "邮箱", TypeName = "System.String", MaxLength = 200, EntityId = entity.Id}, - new CodeProperty(){Name = "EmailConfirmed", Display = "邮箱确认", TypeName = "System.Boolean", EntityId = entity.Id}, - new CodeProperty(){Name = "PhoneNumber", Display = "手机号", TypeName = "System.String", MaxLength = 50, EntityId = entity.Id}, - new CodeProperty(){Name = "PhoneNumberConfirmed", Display = "手机号确认", TypeName = "System.Boolean", EntityId = entity.Id}, + new CodeProperty(){Name = "UserName", Display = "用户名", TypeName = "System.String", Order = 1, IsRequired = true, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "NickName", Display = "用户昵称", TypeName = "System.String", Order = 2, IsRequired = true, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "Email", Display = "邮箱", TypeName = "System.String", Order = 3, MaxLength = 200, EntityId = entity.Id}, + new CodeProperty(){Name = "EmailConfirmed", Display = "邮箱确认", TypeName = "System.Boolean", Order = 4, EntityId = entity.Id}, + new CodeProperty(){Name = "PhoneNumber", Display = "手机号", TypeName = "System.String", Order = 5, MaxLength = 50, EntityId = entity.Id}, + new CodeProperty(){Name = "PhoneNumberConfirmed", Display = "手机号确认", TypeName = "System.Boolean", Order = 6, EntityId = entity.Id}, }; return properties.ToArray(); diff --git a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs index 42f8084..bd9d7bb 100644 --- a/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs +++ b/src/OSharp.CodeGenerator/Data/AutoMapperConfiguration.cs @@ -7,14 +7,8 @@ // 2021-04-06 13:13 // ----------------------------------------------------------------------- -using System; -using System.Runtime.Serialization; - -using AutoMapper.Configuration; - using OSharp.AutoMapper; using OSharp.CodeGeneration.Services.Entities; -using OSharp.CodeGenerator.Views; using OSharp.CodeGenerator.Views.Entities; using OSharp.CodeGenerator.Views.Modules; using OSharp.CodeGenerator.Views.Properties; @@ -27,22 +21,30 @@ namespace OSharp.CodeGenerator.Data /// 创建对象映射 public override void CreateMap() { + CreateMap().ForMember(e => e.Modules, opt => opt.Ignore()) + .ForMember(e => e.ProjectTemplates, opt => opt.Ignore()); + CreateMap().ForMember(e => e.ProjectId, opt => opt.MapFrom(vm => vm.Project.Id)) .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.Namespace, opt => opt.Ignore()) + .ForMember(e => e.Project, opt => opt.Ignore()) + .ForMember(e => e.Entities, 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.Module, opt => opt.Ignore()) + .ForMember(e => e.Properties, opt => opt.Ignore()) + .ForMember(e => e.Foreigns, opt => opt.Ignore()); CreateMap().ForMember(e => e.EntityId, opt => opt.MapFrom(vm => vm.Entity.Id)) - .ForMember(e=>e.Entity, opt=>opt.Ignore()); + .ForMember(e => e.Entity, opt => opt.Ignore()); CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); - CreateMap().ForMember(vm => vm.Entity, opt => opt.Ignore()); + CreateMap().ForMember(e => e.Entity, opt => opt.Ignore()); + + CreateMap().ForMember(e => e.Entity, opt => opt.Ignore()); } } } diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml index bfcbef9..0269cc5 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListView.xaml @@ -40,9 +40,9 @@ - - - + + + @@ -64,6 +64,7 @@ + diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 618bd19..86ddbc6 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -74,6 +74,8 @@ namespace OSharp.CodeGenerator.Views.Entities public int Order { get; set; } + public DateTime CreatedTime { get; set; } + public CodeEntity ToEntity() { CodeEntity entity = this.MapTo(); diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml index cc681a1..8dfff9f 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListView.xaml @@ -42,7 +42,9 @@ + + diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index df19c7a..ca67389 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -8,17 +8,12 @@ // ----------------------------------------------------------------------- using System; -using System.Collections.Generic; using System.Windows; -using AutoMapper; - using FluentValidation; using Microsoft.Extensions.DependencyInjection; -using Notifications.Wpf.Core; - using OSharp.CodeGeneration.Services; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; @@ -55,6 +50,10 @@ namespace OSharp.CodeGenerator.Views.Modules public int Order { get; set; } + public bool IsLocked { get; set; } + + public DateTime CreatedTime { get; set; } + public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; public ProjectViewModel Project { get; set; } diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs index fd6fcb2..e56c1b1 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs @@ -10,6 +10,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; @@ -49,14 +50,15 @@ namespace OSharp.CodeGenerator.Views.Projects IsShow = true; } - public void Init() + public async void Init() { List projects = new List(); - _provider.ExecuteScopedWork(provider => + await _provider.ExecuteScopedWork(provider => { Projects.Clear(); IDataContract contract = provider.GetRequiredService(); projects = contract.CodeProjects.ToList(); + return Task.CompletedTask; }); foreach (CodeProject project in projects) { diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index b45552c..468ab5c 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -34,8 +34,8 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Projects { - [MapTo(typeof(CodeProject))] [MapFrom(typeof(CodeProject))] + [MapTo(typeof(CodeProject))] public class ProjectViewModel : Screen { private readonly IServiceProvider _serviceProvider; diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml index 26cd5d4..a9feddb 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml @@ -59,8 +59,30 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -88,9 +110,10 @@ - - + + + diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index fd1baf8..fe5e6cb 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -7,6 +7,8 @@ // 2020-05-07 1:27 // ----------------------------------------------------------------------- +using System; + using FluentValidation; using OSharp.CodeGeneration.Services.Entities; @@ -33,6 +35,8 @@ namespace OSharp.CodeGenerator.Views.Properties public EntityViewModel Entity { get; set; } + public Guid Id { get; set; } + public string Name { get; set; } public string Display { get; set; } @@ -75,6 +79,8 @@ namespace OSharp.CodeGenerator.Views.Properties public int Order { get; set; } + public DateTime CreatedTime { get; set; } + public CodeProperty ToProperty() { CodeProperty property = this.MapTo(); -- Gitee From e531398879b509a929fcc1bdcc244735d3e849e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=98=8E=E9=94=8B?= Date: Sat, 10 Apr 2021 22:29:54 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B0=86=E6=95=B0=E6=8D=AE=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=B1=82=E6=94=B9=E6=88=90=E8=BE=93=E5=85=A5DTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DataService.CodeEntity.cs | 34 +++-- .../Services/DataService.CodeForeign.cs | 30 ++-- .../Services/DataService.CodeModule.cs | 33 +++-- .../Services/DataService.CodeProject.cs | 36 +++-- .../Services/DataService.CodeProperty.cs | 34 +++-- .../Services/DataService.CodeTemplate.cs | 26 ++-- .../Services/Dtos/CodeEntityInputDto.cs | 109 ++++++++++++++ .../Services/Dtos/CodeForeignInputDto.cs | 68 +++++++++ .../Services/Dtos/CodeModuleInputDto.cs | 51 +++++++ .../Services/Dtos/CodeProjectInputDto.cs | 62 ++++++++ .../Services/Dtos/CodePropertyInputDto.cs | 137 ++++++++++++++++++ .../Services/Dtos/CodeTemplateInputDto.cs | 69 +++++++++ .../Services/Entities/CodeTemplate.cs | 8 +- .../Services/IDataContract.cs | 45 +++--- .../Views/Entities/EntityListViewModel.cs | 5 +- .../Views/Entities/EntityViewModel.cs | 9 +- .../Views/Modules/ModuleListViewModel.cs | 5 +- .../Views/Modules/ModuleViewModel.cs | 9 +- .../Views/Projects/ProjectViewModel.cs | 16 +- .../Views/Properties/PropertyListViewModel.cs | 5 +- .../Views/Properties/PropertyViewModel.cs | 11 +- 21 files changed, 651 insertions(+), 151 deletions(-) create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs create mode 100644 src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs index df91d99..f003ba5 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -43,45 +44,46 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码实体信息信息 /// - /// 包含更新信息的代码实体信息DTO信息 + /// 包含更新信息的代码实体信息DTO信息 /// 业务操作结果 - public async Task UpdateCodeEntities(params CodeEntity[] entities) + public async Task UpdateCodeEntities(params CodeEntityInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var entity in entities) + foreach (var dto in dtos) { - entity.Validate(); - CodeModule module = await ModuleRepository.GetAsync(entity.ModuleId); + dto.Validate(); + CodeModule module = await ModuleRepository.GetAsync(dto.ModuleId); if (module == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{entity.ModuleId}”的模块信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.ModuleId}”的模块信息不存在"); } - if (await CheckCodeEntityExists(m => m.Name == entity.Name && m.ModuleId == entity.ModuleId, entity.Id)) + if (await CheckCodeEntityExists(m => m.Name == dto.Name && m.ModuleId == dto.ModuleId, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{entity.Name}”的实体信息已存在"); + return new OperationResult(OperationResultType.Error, $"模块“{module.Name}”中名称为“{dto.Name}”的实体信息已存在"); } - if (entity.Order == 0) + if (dto.Order == 0) { - entity.Order = EntityRepository.Query(m => m.ModuleId == module.Id).Count() + 1; + dto.Order = EntityRepository.Query(m => m.ModuleId == module.Id).Count() + 1; } int count; - if (entity.Id == default) + if (dto.Id == default) { + CodeEntity entity = dto.MapTo(); count = await EntityRepository.InsertAsync(entity); } else { - CodeEntity existing = await EntityRepository.GetAsync(entity.Id); - existing = entity.MapTo(existing); - count = await EntityRepository.UpdateAsync(existing); + CodeEntity entity = await EntityRepository.GetAsync(dto.Id); + entity = dto.MapTo(entity); + count = await EntityRepository.UpdateAsync(entity); } if (count > 0) { - names.Add(entity.Name); + names.Add(dto.Name); } } @@ -90,7 +92,7 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"实体“{names.ExpandAndToString()}”保存成功") : OperationResult.NoChanged; } - + /// /// 删除代码实体信息信息 /// diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs index 3ea4f90..527b09b 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -39,44 +40,45 @@ namespace OSharp.CodeGeneration.Services { return ForeignRepository.CheckExistsAsync(predicate, id); } - + /// /// 更新实体外键信息信息 /// - /// 包含更新信息的实体外键信息 + /// 包含更新信息的实体外键信息 /// 业务操作结果 - public async Task UpdateCodeForeigns(params CodeForeign[] foreigns) + public async Task UpdateCodeForeigns(params CodeForeignInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var foreign in foreigns) + foreach (var dto in dtos) { - foreign.Validate(); - CodeEntity entity = await EntityRepository.GetAsync(foreign.EntityId); + dto.Validate(); + CodeEntity entity = await EntityRepository.GetAsync(dto.EntityId); if (entity == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{foreign.EntityId}”的实体信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.EntityId}”的实体信息不存在"); } - if (await CheckCodeForeignExists(m => m.SelfNavigation == foreign.SelfNavigation && m.EntityId == foreign.EntityId, entity.Id)) + if (await CheckCodeForeignExists(m => m.SelfNavigation == dto.SelfNavigation && m.EntityId == dto.EntityId, entity.Id)) { - return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{foreign.SelfNavigation}”的外键信息已存在"); + return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{dto.SelfNavigation}”的外键信息已存在"); } int count; - if (foreign.Id == default) + if (dto.Id == default) { + CodeForeign foreign = dto.MapTo(); count = await ForeignRepository.InsertAsync(foreign); } else { - CodeForeign existing = await ForeignRepository.GetAsync(foreign.Id); - existing = foreign.MapTo(existing); - count = await ForeignRepository.UpdateAsync(existing); + CodeForeign foreign = await ForeignRepository.GetAsync(dto.Id); + foreign = dto.MapTo(foreign); + count = await ForeignRepository.UpdateAsync(foreign); } if (count > 0) { - names.Add($"{entity.Name}-{foreign.SelfNavigation}"); + names.Add($"{entity.Name}-{dto.SelfNavigation}"); } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs index 2e0f34e..dc7f917 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeModule.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -43,44 +44,45 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码模块信息信息 /// - /// 包含更新信息的代码模块信息 + /// 包含更新信息的代码模块信息DTO信息 /// 业务操作结果 - public async Task UpdateCodeModules(params CodeModule[] modules) + public async Task UpdateCodeModules(params CodeModuleInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeModule module in modules) + foreach (var dto in dtos) { - module.Validate(); - CodeProject project = await ProjectRepository.GetAsync(module.ProjectId); + dto.Validate(); + CodeProject project = await ProjectRepository.GetAsync(dto.ProjectId); if (project == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.ProjectId}”的项目信息不存在"); } - if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId, module.Id)) + if (await CheckCodeModuleExists(m => m.Name == dto.Name && m.ProjectId == dto.ProjectId, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在"); + return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{dto.Name}”的模块信息已存在"); } - if (module.Order == 0) + if (dto.Order == 0) { - module.Order = ModuleRepository.Query(m => m.ProjectId == module.ProjectId).Count() + 1; + dto.Order = ModuleRepository.Query(m => m.ProjectId == dto.ProjectId).Count() + 1; } int count; - if (module.Id == default) + if (dto.Id == default) { + CodeModule module = dto.MapTo(); count = await ModuleRepository.InsertAsync(module); } else { - CodeModule existing = await ModuleRepository.GetAsync(module.Id); - existing = module.MapTo(existing); - count = await ModuleRepository.UpdateAsync(existing); + CodeModule module = await ModuleRepository.GetAsync(dto.Id); + module = dto.MapTo(module); + count = await ModuleRepository.UpdateAsync(module); } if (count > 0) { - names.Add(module.Name); + names.Add(dto.Name); } } @@ -125,5 +127,6 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”删除成功") : OperationResult.NoChanged; } + } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs index f7e9c89..b28ae47 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -62,24 +63,25 @@ namespace OSharp.CodeGeneration.Services return projects; } - + /// /// 添加项目信息信息 /// - /// 要添加的项目信息 + /// 要添加的项目信息DTO信息 /// 业务操作结果 - public async Task CreateCodeProjects(params CodeProject[] projects) + public async Task CreateCodeProjects(params CodeProjectInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeProject project in projects) + foreach (var dto in dtos) { - project.Validate(); - if (await CheckCodeProjectExists(m => m.Name == project.Name)) + dto.Validate(); + if (await CheckCodeProjectExists(m => m.Name == dto.Name)) { - return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{dto.Name}”的项目信息已存在"); } + CodeProject project = dto.MapTo(); int count = await ProjectRepository.InsertAsync(project); if (count > 0) { @@ -96,26 +98,27 @@ namespace OSharp.CodeGeneration.Services /// /// 更新项目信息信息 /// - /// 包含更新信息的项目信息 + /// 包含更新信息的项目信息DTO信息 /// 业务操作结果 - public async Task UpdateCodeProjects(params CodeProject[] projects) + public async Task UpdateCodeProjects(params CodeProjectInputDto[] dtos) { + List names = new List(); UnitOfWork.EnableTransaction(); - foreach (CodeProject project in projects) + foreach (var dto in dtos) { - project.Validate(); - if (await CheckCodeProjectExists(m => m.Name == project.Name, project.Id)) + dto.Validate(); + if (await CheckCodeProjectExists(m => m.Name == dto.Name, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"名称为“{project.Name}”的项目信息已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{dto.Name}”的项目信息已存在"); } - CodeProject existing = await ProjectRepository.GetAsync(project.Id); - existing = project.MapTo(existing); + CodeProject existing = await ProjectRepository.GetAsync(dto.Id); + existing = dto.MapTo(existing); int count = await ProjectRepository.UpdateAsync(existing); if (count > 0) { - names.Add(project.Name); + names.Add(dto.Name); } } @@ -160,5 +163,6 @@ namespace OSharp.CodeGeneration.Services ? new OperationResult(OperationResultType.Success, $"项目“{names.ExpandAndToString()}”删除成功") : OperationResult.NoChanged; } + } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs index 67de755..2643f53 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProperty.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -39,49 +40,50 @@ namespace OSharp.CodeGeneration.Services { return PropertyRepository.CheckExistsAsync(predicate, id); } - + /// /// 更新实体属性信息信息 /// - /// 包含更新信息的实体属性信息 + /// 包含更新信息的实体属性信息输入DTO /// 业务操作结果 - public async Task UpdateCodeProperties(params CodeProperty[] properties) + public async Task UpdateCodeProperties(params CodePropertyInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var property in properties) + foreach (var dto in dtos) { - property.Validate(); - CodeEntity entity = await EntityRepository.GetAsync(property.EntityId); + dto.Validate(); + CodeEntity entity = await EntityRepository.GetAsync(dto.EntityId); if (entity == null) { - return new OperationResult(OperationResultType.Error, $"编号为“{property.EntityId}”的实体信息不存在"); + return new OperationResult(OperationResultType.Error, $"编号为“{dto.EntityId}”的实体信息不存在"); } - if (await CheckCodePropertyExists(m => m.Name == property.Name && m.EntityId == property.EntityId, property.Id)) + if (await CheckCodePropertyExists(m => m.Name == dto.Name && m.EntityId == dto.EntityId, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{property.Name}”的属性信息已存在"); + return new OperationResult(OperationResultType.Error, $"实体“{entity.Name}”中名称为“{dto.Name}”的属性信息已存在"); } - if (property.Order == 0) + if (dto.Order == 0) { - property.Order = PropertyRepository.Query(m => m.EntityId == entity.Id).Count() + 1; + dto.Order = PropertyRepository.Query(m => m.EntityId == entity.Id).Count() + 1; } int count; - if (property.Id == default) + if (dto.Id == default) { + CodeProperty property = dto.MapTo(); count = await PropertyRepository.InsertAsync(property); } else { - CodeProperty existing = await PropertyRepository.GetAsync(property.Id); - existing = property.MapTo(existing); - count = await PropertyRepository.UpdateAsync(existing); + CodeProperty property = await PropertyRepository.GetAsync(dto.Id); + property = dto.MapTo(property); + count = await PropertyRepository.UpdateAsync(property); } if (count > 0) { - names.Add(property.Name); + names.Add(dto.Name); } } diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs index e153b0b..806dde7 100644 --- a/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs +++ b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Collections; using OSharp.Data; @@ -44,35 +45,36 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码设置信息信息 /// - /// 包含更新信息的代码设置信息 + /// 包含更新信息的代码设置信息 /// 业务操作结果 - public async Task UpdateCodeTemplates(params CodeTemplate[] entities) + public async Task UpdateCodeTemplates(params CodeTemplateInputDto[] dtos) { List names = new List(); UnitOfWork.EnableTransaction(); - foreach (var entity in entities) + foreach (var dto in dtos) { - entity.Validate(); - if (await CheckCodeTemplateExists(m=>m.Name == entity.Name, entity.Id)) + dto.Validate(); + if (await CheckCodeTemplateExists(m=>m.Name == dto.Name, dto.Id)) { - return new OperationResult(OperationResultType.Error, $"名称为“{entity.Name}”的代码设置已存在"); + return new OperationResult(OperationResultType.Error, $"名称为“{dto.Name}”的代码设置已存在"); } int count; - if (entity.Id == default) + if (dto.Id == default) { - count = await TemplateRepository.InsertAsync(entity); + CodeTemplate template = dto.MapTo(); + count = await TemplateRepository.InsertAsync(template); } else { - CodeTemplate entity1 = await TemplateRepository.GetAsync(entity.Id); - entity1 = entity.MapTo(entity1); - count = await TemplateRepository.UpdateAsync(entity1); + CodeTemplate template = await TemplateRepository.GetAsync(dto.Id); + template = dto.MapTo(template); + count = await TemplateRepository.UpdateAsync(template); } if (count > 0) { - names.Add(entity.Name); + names.Add(dto.Name); } } diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs new file mode 100644 index 0000000..1e5d2a2 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeEntityInputDto.cs @@ -0,0 +1,109 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:54 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeEntity))] + public class CodeEntityInputDto : IInputDto + { + /// + /// 获取或设置 编号 + /// + public Guid Id { get; set; } + + /// + /// 获取或设置 类型名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 类型显示名称 + /// + [Required(), StringLength(200)] + public string Display { get; set; } + + /// + /// 获取或设置 主键类型全名 + /// + [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 bool IsLocked { get; set; } + + /// + /// 获取或设置 所属模块编号 + /// + public Guid ModuleId { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs new file mode 100644 index 0000000..7e1c536 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeForeignInputDto.cs @@ -0,0 +1,68 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 22:03 +// ----------------------------------------------------------------------- + +using System; + +using Microsoft.EntityFrameworkCore; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeForeign))] + public class CodeForeignInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 己方导航属性 + /// + 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; } + + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs new file mode 100644 index 0000000..8094d62 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeModuleInputDto.cs @@ -0,0 +1,51 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:47 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeModule))] + public class CodeModuleInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 模块名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 模块显示名称 + /// + [Required(), StringLength(200)] + public string Display { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取或设置 所属项目编号 + /// + public Guid ProjectId { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs new file mode 100644 index 0000000..3819ecd --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeProjectInputDto.cs @@ -0,0 +1,62 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:35 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeProject))] + public class CodeProjectInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 项目名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 项目命名空间前缀,通常形如“公司.项目” + /// + [Required(), StringLength(200)] + 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/Services/Dtos/CodePropertyInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs new file mode 100644 index 0000000..f12913c --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodePropertyInputDto.cs @@ -0,0 +1,137 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 21:59 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Services.Entities; +using OSharp.Entity; +using OSharp.Mapping; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + [MapTo(typeof(CodeProperty))] + public class CodePropertyInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 属性名称 + /// + [Required(), StringLength(200)] + public string Name { get; set; } + + /// + /// 获取或设置 显示名称 + /// + [StringLength(200)] + public string Display { get; set; } + + /// + /// 获取或设置 属性类型名称 + /// + [Required(), StringLength(500)] + public string TypeName { get; set; } + + /// + /// 获取或设置 是否可更新 + /// + public bool Updatable { get; set; } + + /// + /// 获取或设置 是否可排序 + /// + public bool Sortable { get; set; } + + /// + /// 获取或设置 是否可筛选 + /// + public bool Filterable { get; set; } + + /// + /// 获取或设置 是否必须 + /// + public bool? IsRequired { get; set; } + + /// + /// 获取或设置 最小长度 + /// + public int? MinLength { get; set; } + + /// + /// 获取或设置 最大长度 + /// + public int? MaxLength { get; set; } + + /// + /// 获取或设置 是否值类型可空 + /// + public bool IsNullable { get; set; } + + /// + /// 获取或设置 是否只读 + /// + public bool IsReadonly { get; set; } + + /// + /// 获取或设置 是否虚属性 + /// + public bool IsVirtual { get; set; } + + /// + /// 获取或设置 是否外键 + /// + public bool IsForeignKey { get; set; } + + /// + /// 获取或设置 是否导航属性 + /// + public bool IsNavigation { get; set; } + + /// + /// 获取或设置 关联实体 + /// + public string RelateEntity { get; set; } + + /// + /// 获取或设置 数据权限标识 + /// + public string DataAuthFlag { get; set; } + + /// + /// 获取或设置 是否包含在输入Dto + /// + public bool IsInputDto { get; set; } = true; + + /// + /// 获取或设置 是否包含在输出Dto + /// + public bool IsOutputDto { get; set; } = true; + + /// + /// 获取或设置 默认值 + /// + public string DefaultValue { get; set; } + + /// + /// 获取或设置 排序号 + /// + public int Order { get; set; } + + /// 获取或设置 是否锁定当前信息 + public bool IsLocked { get; set; } + + /// + /// 获取或设置 实体编号 + /// + public Guid EntityId { get; set; } + } +} diff --git a/src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs b/src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs new file mode 100644 index 0000000..1ab9972 --- /dev/null +++ b/src/OSharp.CodeGeneration/Services/Dtos/CodeTemplateInputDto.cs @@ -0,0 +1,69 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) 2014-2021 OSharp. All rights reserved. +// +// http://www.osharp.org +// 郭明锋 +// 2021-04-10 22:07 +// ----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; + +using OSharp.CodeGeneration.Generates; +using OSharp.Entity; + + +namespace OSharp.CodeGeneration.Services.Dtos +{ + public class CodeTemplateInputDto : IInputDto + { + /// 获取或设置 主键,唯一标识 + public Guid Id { get; set; } + + /// + /// 获取或设置 配置名称 + /// + [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 DateTime CreatedTime { get; set; } + + } +} diff --git a/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs index f3e1f36..83bb803 100644 --- a/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs +++ b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs @@ -25,7 +25,7 @@ namespace OSharp.CodeGeneration.Services.Entities /// [Description("代码模板")] [TableNamePrefix("CodeGen")] - public class CodeTemplate : EntityBase, ILockable + public class CodeTemplate : EntityBase, ILockable, ICreatedTime { /// /// 获取或设置 配置名称 @@ -68,6 +68,9 @@ namespace OSharp.CodeGeneration.Services.Entities /// 获取或设置 是否锁定当前信息 public bool IsLocked { get; set; } + /// 获取或设置 创建时间 + public DateTime CreatedTime { get; set; } + /// /// 获取或设置 项目模板集合 /// @@ -110,7 +113,7 @@ namespace OSharp.CodeGeneration.Services.Entities case "ng_Alain其他数据": return typeof(ng_AlainOther); default: - return null; + return null; } } @@ -147,5 +150,6 @@ namespace OSharp.CodeGeneration.Services.Entities .Replace("{Module.Name}", entity.Module.Name).Replace("{Entity.Name}", entity.Name); return fileName; } + } } diff --git a/src/OSharp.CodeGeneration/Services/IDataContract.cs b/src/OSharp.CodeGeneration/Services/IDataContract.cs index b4e3bf1..225cfbb 100644 --- a/src/OSharp.CodeGeneration/Services/IDataContract.cs +++ b/src/OSharp.CodeGeneration/Services/IDataContract.cs @@ -12,6 +12,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.Data; @@ -44,20 +45,20 @@ namespace OSharp.CodeGeneration.Services /// 检查谓语表达式 /// 项目信息集合 CodeProject[] GetCodeProject(Expression>predicate); - + /// /// 添加项目信息信息 /// - /// 要添加的项目信息 + /// 要添加的项目信息DTO信息 /// 业务操作结果 - Task CreateCodeProjects(params CodeProject[] projects); + Task CreateCodeProjects(params CodeProjectInputDto[] dtos); /// /// 更新项目信息信息 /// - /// 包含更新信息的项目信息 + /// 包含更新信息的项目信息DTO信息 /// 业务操作结果 - Task UpdateCodeProjects(params CodeProject[] projects); + Task UpdateCodeProjects(params CodeProjectInputDto[] dtos); /// /// 删除项目信息信息 @@ -67,7 +68,7 @@ namespace OSharp.CodeGeneration.Services Task DeleteCodeProjects(params Guid[] ids); #endregion - + #region 代码模块信息业务 /// @@ -86,19 +87,19 @@ namespace OSharp.CodeGeneration.Services /// /// 更新代码模块信息信息 /// - /// 包含更新信息的代码模块信息 + /// 包含更新信息的代码模块信息DTO信息 /// 业务操作结果 - Task UpdateCodeModules(params CodeModule[] modules); - + Task UpdateCodeModules(params CodeModuleInputDto[] dtos); + /// /// 删除代码模块信息信息 /// /// 要删除的代码模块信息编号 /// 业务操作结果 Task DeleteCodeModules(params Guid[] ids); - + #endregion - + #region 代码实体信息业务 /// @@ -113,13 +114,13 @@ namespace OSharp.CodeGeneration.Services /// 更新的代码实体信息编号 /// 代码实体信息是否存在 Task CheckCodeEntityExists(Expression> predicate, Guid id = default); - + /// /// 更新代码实体信息信息 /// - /// 包含更新信息的代码实体信息 + /// 包含更新信息的代码实体信息DTO信息 /// 业务操作结果 - Task UpdateCodeEntities(params CodeEntity[] entities); + Task UpdateCodeEntities(params CodeEntityInputDto[] dtos); /// /// 删除代码实体信息信息 @@ -129,7 +130,7 @@ namespace OSharp.CodeGeneration.Services Task DeleteCodeEntities(params Guid[] ids); #endregion - + #region 实体属性信息业务 /// @@ -148,9 +149,9 @@ namespace OSharp.CodeGeneration.Services /// /// 更新实体属性信息信息 /// - /// 包含更新信息的实体属性信息 + /// 包含更新信息的实体属性信息输入DTO /// 业务操作结果 - Task UpdateCodeProperties(params CodeProperty[] properties); + Task UpdateCodeProperties(params CodePropertyInputDto[] dtos); /// /// 删除实体属性信息信息 @@ -175,14 +176,14 @@ namespace OSharp.CodeGeneration.Services /// 更新的实体外键信息编号 /// 实体外键信息是否存在 Task CheckCodeForeignExists(Expression> predicate, Guid id = default); - + /// /// 更新实体外键信息信息 /// - /// 包含更新信息的实体外键信息 + /// 包含更新信息的实体外键信息输入DTO /// 业务操作结果 - Task UpdateCodeForeigns(params CodeForeign[] foreigns); - + Task UpdateCodeForeigns(params CodeForeignInputDto[] dtos); + /// /// 删除实体外键信息信息 /// @@ -212,7 +213,7 @@ namespace OSharp.CodeGeneration.Services /// /// 包含更新信息的代码模板信息 /// 业务操作结果 - Task UpdateCodeTemplates(params CodeTemplate[] settings); + Task UpdateCodeTemplates(params CodeTemplateInputDto[] settings); /// /// 删除代码模板信息信息 diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs index ac643fb..bfc53ec 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -95,12 +96,12 @@ namespace OSharp.CodeGenerator.Views.Entities Entities[i].Order = i + 1; } - CodeEntity[] entities = Entities.Select(m => m.ToEntity()).ToArray(); + CodeEntityInputDto[] dtos = Entities.Select(m => m.MapTo()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = await contract.UpdateCodeEntities(entities); + result = await contract.UpdateCodeEntities(dtos); }); Helper.Notify(result); if (!result.Succeeded) diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs index 86ddbc6..d111d1b 100644 --- a/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Entities/EntityViewModel.cs @@ -15,6 +15,7 @@ using FluentValidation; using MahApps.Metro.Controls; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -26,7 +27,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Entities { - [MapTo(typeof(CodeEntity))] + [MapTo(typeof(CodeEntityInputDto))] [MapFrom(typeof(CodeEntity))] public class EntityViewModel : Screen { @@ -75,12 +76,6 @@ namespace OSharp.CodeGenerator.Views.Entities public int Order { get; set; } public DateTime CreatedTime { get; set; } - - public CodeEntity ToEntity() - { - CodeEntity entity = this.MapTo(); - return entity; - } public void ForeignKey() { diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs index 0bccf71..40d38ad 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Projects; @@ -99,12 +100,12 @@ namespace OSharp.CodeGenerator.Views.Modules Modules[i].Order = i + 1; } - CodeModule[] modules = Modules.Select(m => m.ToModule()).ToArray(); + CodeModuleInputDto[] dtos = Modules.Select(m => m.MapTo()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = await contract.UpdateCodeModules(modules); + result = await contract.UpdateCodeModules(dtos); }); Helper.Notify(result); if (!result.Succeeded) diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs index ca67389..ffa92e8 100644 --- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs @@ -15,6 +15,7 @@ using FluentValidation; using Microsoft.Extensions.DependencyInjection; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Projects; @@ -27,7 +28,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Modules { - [MapTo(typeof(CodeModule))] + [MapTo(typeof(CodeModuleInputDto))] [MapFrom(typeof(CodeModule))] public class ModuleViewModel : Screen { @@ -57,12 +58,6 @@ namespace OSharp.CodeGenerator.Views.Modules public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}"; public ProjectViewModel Project { get; set; } - - public CodeModule ToModule() - { - CodeModule module = this.MapTo(); - return module; - } public async void Delete() { diff --git a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs index 468ab5c..1bb8664 100644 --- a/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Projects/ProjectViewModel.cs @@ -21,6 +21,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Modules; @@ -113,14 +114,14 @@ namespace OSharp.CodeGenerator.Views.Projects return; } - CodeProject project = ToProject(); + CodeProjectInputDto dto = this.MapTo(); OperationResult result = null; await _serviceProvider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = project.Id == default - ? await contract.CreateCodeProjects(project) - : await contract.UpdateCodeProjects(project); + result = dto.Id == default + ? await contract.CreateCodeProjects(dto) + : await contract.UpdateCodeProjects(dto); }); Helper.Notify(result); if (!result.Succeeded) @@ -153,12 +154,7 @@ namespace OSharp.CodeGenerator.Views.Projects // Fody 无法编织其他组件,所以我们必须手动提高这个值 this.NotifyOfPropertyChange(() => CanEditSave); } - - public CodeProject ToProject() - { - CodeProject project = this.MapTo(); - return project; - } + } diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs index 85c7053..e8f4e9b 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Notifications.Wpf.Core; using OSharp.CodeGeneration.Services; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; @@ -95,12 +96,12 @@ namespace OSharp.CodeGenerator.Views.Properties Properties[i].Order = i + 1; } - CodeProperty[] properties = Properties.Select(m => m.ToProperty()).ToArray(); + CodePropertyInputDto[] dtos = Properties.Select(m => m.MapTo()).ToArray(); OperationResult result = null; await _provider.ExecuteScopedWorkAsync(async provider => { IDataContract contract = provider.GetRequiredService(); - result = await contract.UpdateCodeProperties(properties); + result = await contract.UpdateCodeProperties(dtos); }); Helper.Notify(result); if (!result.Succeeded) diff --git a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs index fe5e6cb..ac3d35e 100644 --- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs +++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs @@ -11,6 +11,7 @@ using System; using FluentValidation; +using OSharp.CodeGeneration.Services.Dtos; using OSharp.CodeGeneration.Services.Entities; using OSharp.CodeGenerator.Data; using OSharp.CodeGenerator.Views.Entities; @@ -21,7 +22,7 @@ using Stylet; namespace OSharp.CodeGenerator.Views.Properties { - [MapTo(typeof(CodeProperty))] + [MapTo(typeof(CodePropertyInputDto))] [MapFrom(typeof(CodeProperty))] public class PropertyViewModel : Screen { @@ -80,13 +81,7 @@ namespace OSharp.CodeGenerator.Views.Properties public int Order { get; set; } public DateTime CreatedTime { get; set; } - - public CodeProperty ToProperty() - { - CodeProperty property = this.MapTo(); - return property; - } - + public void Up() { Helper.Output($"“{Name}” - Up"); -- Gitee