diff --git a/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeEntity.cs
index a6f182d2d351daa6a2d281b47996dc7a0a1d258f..f003ba5c407a69e0ae8a6c19882d73706afaac86 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,50 +44,55 @@ 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 (dto.Order == 0)
+ {
+ 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);
}
}
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.CodeForeign.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeForeign.cs
index 3ea4f9039978fcfdffa62c27f0b91539e9df4f42..527b09b4aa950174a06d6520d891a52975a61af4 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 d53819aa9abe87b50776363a741c7bf566565849..dc7f917c2771bfa6cc4ee7e673573c4e74220a47 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;
@@ -39,78 +40,55 @@ namespace OSharp.CodeGeneration.Services
{
return ModuleRepository.CheckExistsAsync(predicate, id);
}
-
+
///
- /// 添加代码模块信息信息
+ /// 更新代码模块信息信息
///
- /// 要添加的代码模块信息
+ /// 包含更新信息的代码模块信息DTO信息
/// 业务操作结果
- public async Task CreateCodeModules(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))
+ 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}”的模块信息已存在");
}
- int count = await ModuleRepository.InsertAsync(module);
- if (count > 0)
+ if (dto.Order == 0)
{
- names.Add(module.Name);
+ dto.Order = ModuleRepository.Query(m => m.ProjectId == dto.ProjectId).Count() + 1;
}
- }
-
- await UnitOfWork.CommitAsync();
- return names.Count > 0
- ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”创建成功")
- : OperationResult.NoChanged;
- }
-
- ///
- /// 更新代码模块信息信息
- ///
- /// 包含更新信息的代码模块信息
- /// 业务操作结果
- public async Task UpdateCodeModules(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)
+ int count;
+ if (dto.Id == default)
{
- return new OperationResult(OperationResultType.Error, $"编号为“{module.ProjectId}”的项目信息不存在");
+ CodeModule module = dto.MapTo();
+ count = await ModuleRepository.InsertAsync(module);
}
-
- if (await CheckCodeModuleExists(m => m.Name == module.Name && m.ProjectId == module.ProjectId, module.Id))
+ else
{
- return new OperationResult(OperationResultType.Error, $"项目“{project.Name}”中名称为“{module.Name}”的模块信息已存在");
+ CodeModule module = await ModuleRepository.GetAsync(dto.Id);
+ module = dto.MapTo(module);
+ count = await ModuleRepository.UpdateAsync(module);
}
-
- CodeModule existing = await ModuleRepository.GetAsync(module.Id);
- existing = module.MapTo(existing);
- int count = await ModuleRepository.UpdateAsync(existing);
if (count > 0)
{
- names.Add(module.Name);
+ names.Add(dto.Name);
}
}
await UnitOfWork.CommitAsync();
return names.Count > 0
- ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”更新成功")
+ ? new OperationResult(OperationResultType.Success, $"模块“{names.ExpandAndToString()}”保存成功")
: OperationResult.NoChanged;
}
@@ -149,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 c77e72801735105bfac5b26883ba45964db11913..b28ae47193169e44ef7e8e25e73c21ab6fb7848e 100644
--- a/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs
+++ b/src/OSharp.CodeGeneration/Services/DataService.CodeProject.cs
@@ -4,11 +4,13 @@ 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;
using OSharp.Extensions;
using OSharp.Json;
+using OSharp.Mapping;
namespace OSharp.CodeGeneration.Services
@@ -43,11 +45,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;
}
@@ -61,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)
{
@@ -95,24 +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}”的项目信息已存在");
}
- int count = await ProjectRepository.UpdateAsync(project);
+ 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);
}
}
@@ -157,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 9b778dce10e8201f85d246ba3ee544b40a4c6840..2643f53c4ff0f5bc5dff19fab3fdb83f7d3b4fc0 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,51 +40,56 @@ 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 (dto.Order == 0)
+ {
+ 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);
}
}
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.CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/DataService.CodeTemplate.cs
index e153b0bca8e91fa2a8ee6046320027badc7e8529..806dde74acc44df72d8082cb57a450964ef72725 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 0000000000000000000000000000000000000000..1e5d2a2fb8eda6014c5a4e52e6c31f764f0eec10
--- /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 0000000000000000000000000000000000000000..7e1c5369657d2cbb300725a30341d9154c6de2e2
--- /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 0000000000000000000000000000000000000000..8094d6282ab6f8376a545421120c23bf7502242d
--- /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 0000000000000000000000000000000000000000..3819ecde08546e10617b9f2aa558c4ada9cc0184
--- /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 0000000000000000000000000000000000000000..f12913cf304f5657975a32d12cfc2102bb82786a
--- /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 0000000000000000000000000000000000000000..1ab9972105eee5cf53705106f4e05ced25bc214d
--- /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/CodeEntity.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeEntity.cs
index 2b884d9690346bb66b20b45b38d0b9070c4087b6..c7608d5831e2b1cbac31a020576b3b8473f3c470 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 e3e7773fb52ff9ad2d767f1ec7d197099e9739fb..835a0366ef1b557bd73d28e003f558d2f1cfb849 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/Entities/CodeTemplate.cs b/src/OSharp.CodeGeneration/Services/Entities/CodeTemplate.cs
index f3e1f3628cabd3c84e6d91fb06356f74974f796c..83bb8030a436e342d1b58f542be06635c2f3b5f2 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 d6499ac1ff86fca1ec54a48a4eae4db0cf7ed6d7..225cfbb441288ab538bd2868c5934aadd836f2f2 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 代码模块信息业务
///
@@ -82,30 +83,23 @@ namespace OSharp.CodeGeneration.Services
/// 更新的代码模块信息编号
/// 代码模块信息是否存在
Task CheckCodeModuleExists(Expression> predicate, Guid id = default);
-
- ///
- /// 添加代码模块信息信息
- ///
- /// 要添加的代码模块信息
- /// 业务操作结果
- Task CreateCodeModules(params CodeModule[] modules);
-
+
///
/// 更新代码模块信息信息
///
- /// 包含更新信息的代码模块信息
+ /// 包含更新信息的代码模块信息DTO信息
/// 业务操作结果
- Task UpdateCodeModules(params CodeModule[] modules);
-
+ Task UpdateCodeModules(params CodeModuleInputDto[] dtos);
+
///
/// 删除代码模块信息信息
///
/// 要删除的代码模块信息编号
/// 业务操作结果
Task DeleteCodeModules(params Guid[] ids);
-
+
#endregion
-
+
#region 代码实体信息业务
///
@@ -120,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);
///
/// 删除代码实体信息信息
@@ -136,7 +130,7 @@ namespace OSharp.CodeGeneration.Services
Task DeleteCodeEntities(params Guid[] ids);
#endregion
-
+
#region 实体属性信息业务
///
@@ -155,9 +149,9 @@ namespace OSharp.CodeGeneration.Services
///
/// 更新实体属性信息信息
///
- /// 包含更新信息的实体属性信息
+ /// 包含更新信息的实体属性信息输入DTO
/// 业务操作结果
- Task UpdateCodeProperties(params CodeProperty[] properties);
+ Task UpdateCodeProperties(params CodePropertyInputDto[] dtos);
///
/// 删除实体属性信息信息
@@ -182,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);
+
///
/// 删除实体外键信息信息
///
@@ -219,7 +213,7 @@ namespace OSharp.CodeGeneration.Services
///
/// 包含更新信息的代码模板信息
/// 业务操作结果
- Task UpdateCodeTemplates(params CodeTemplate[] settings);
+ Task UpdateCodeTemplates(params CodeTemplateInputDto[] settings);
///
/// 删除代码模板信息信息
diff --git a/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs b/src/OSharp.CodeGeneration/Services/Seeds/CodeEntitySeedDataInitializer.cs
index fd0bdff65b7233450d9a432d80befd7ce1fd7e14..96a1a9b55643165f227b4bd960f1f41e9aa94938 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 824376d3ced31dc863709c217e02cf0ba8f1166f..f06c8078ef4e32b2bc069bab86406c38ab7d179e 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 70b95319b5cfa545f78a16fbff802eb0ae32aed4..f4ef90fc0f184e231150d0a9584db98be534c62b 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 42f80840e7348d95ef1f9b17bc50d2f54ffb297a..bd9d7bba229111273f1c83a397a9efa3470492be 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/Data/Extensions.cs b/src/OSharp.CodeGenerator/Data/Extensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3d22162861390bc4ee6eb202c2c32ba4b0587467
--- /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 3fc9cd721ca1f6d59ce9c27730271b5e9d92d7d4..0e7421a60a265df248a003f26205ecf2d42240ba 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 1b9fa378d3d74dd692d9979bbe169d092541a607..0269cc5e6fce516e388fc11551428c6174433fa8 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,79 @@
- 实体列表
+ 实体列表
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs
index da5886b64e0129d6946e98c71aec6268005c5b8c..bfc53ecf0f01bf34a7ec209f129508452d89a4c3 100644
--- a/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs
+++ b/src/OSharp.CodeGenerator/Views/Entities/EntityListViewModel.cs
@@ -9,13 +9,16 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
+using System.Threading.Tasks;
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;
@@ -43,18 +46,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 +70,7 @@ namespace OSharp.CodeGenerator.Views.Entities
model.Module = Module;
Entities.Add(model);
}
+
Helper.Output($"模块“{Module.Display}”的实体列表刷新成功,共{Entities.Count}个实体");
}
@@ -84,12 +91,17 @@ namespace OSharp.CodeGenerator.Views.Entities
return;
}
- CodeEntity[] entities = Entities.Select(m => m.ToEntity()).ToArray();
+ for (int i = 0; i < Entities.Count; i++)
+ {
+ Entities[i].Order = i + 1;
+ }
+
+ 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 9da542ac4134e687debf95c92250e420170e11b3..d111d1b15f1bfbd55433421c571e928396bde2ac 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
{
@@ -74,32 +75,8 @@ namespace OSharp.CodeGenerator.Views.Entities
public int Order { get; set; }
- public CodeEntity ToEntity()
- {
- 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 DateTime CreatedTime { get; set; }
+
public void ForeignKey()
{
Helper.Output($"“{Name}” - ForeignKey");
diff --git a/src/OSharp.CodeGenerator/Views/MainMenuView.xaml b/src/OSharp.CodeGenerator/Views/MainMenuView.xaml
index 7407456d723848a1ffe5bbcfbe9a89f3b7f2187c..23662b2b914c7b0e8d3d41a83e5215062d5564bd 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 614a0afd2aac2498ab366a14452d513c9ba2dc12..f000269c24486799e932b847220bd50d7ad82bdd 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 57a85801750e02c393e536ebdfbde984de4da9ac..a8c9248dc40202b22361b4a3a57520e881819fc9 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 0000000000000000000000000000000000000000..bf0365067a96b5f274eda955f3bb4a5e1de2821d
--- /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 e2a1566c5c936dd0c976b0d3aa33b3b6e5127c53..d83f86a752dc1edd07d03792a1db6cd981de496a 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 0000000000000000000000000000000000000000..39844a75b9c970015bf580e6067f3af793874db2
--- /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
+
diff --git a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs
index 27e6134cd74e4a924b5665c040fa35d4179110c0..40d38ad9df2c860577fbe12b387c95d7bbb63fd8 100644
--- a/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs
+++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleListViewModel.cs
@@ -9,16 +9,20 @@
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.Dtos;
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 +46,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 +70,7 @@ namespace OSharp.CodeGenerator.Views.Modules
model.Project = Project;
Modules.Add(model);
}
+
Helper.Output($"模块列表刷新成功,共{Modules.Count}个模块");
}
@@ -79,28 +82,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;
+ }
+
+ CodeModuleInputDto[] dtos = Modules.Select(m => m.MapTo()).ToArray();
+ OperationResult result = null;
+ await _provider.ExecuteScopedWorkAsync(async provider =>
+ {
+ IDataContract contract = provider.GetRequiredService();
+ result = await contract.UpdateCodeModules(dtos);
+ });
+ 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 126a247cba8a1d153b4faef5aadb1c586aa61cf6..ffa92e8145706cc0e079307884baf6c68a9ebdc5 100644
--- a/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs
+++ b/src/OSharp.CodeGenerator/Views/Modules/ModuleViewModel.cs
@@ -8,18 +8,14 @@
// -----------------------------------------------------------------------
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.Dtos;
using OSharp.CodeGeneration.Services.Entities;
using OSharp.CodeGenerator.Data;
using OSharp.CodeGenerator.Views.Projects;
@@ -32,7 +28,7 @@ using Stylet;
namespace OSharp.CodeGenerator.Views.Modules
{
- [MapTo(typeof(CodeModule))]
+ [MapTo(typeof(CodeModuleInputDto))]
[MapFrom(typeof(CodeModule))]
public class ModuleViewModel : Screen
{
@@ -55,24 +51,14 @@ namespace OSharp.CodeGenerator.Views.Modules
public int Order { get; set; }
- public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}";
-
- public ProjectViewModel Project { get; set; }
+ public bool IsLocked { get; set; }
- public CodeModule ToModule()
- {
- CodeModule module = this.MapTo();
- return module;
- }
+ public DateTime CreatedTime { get; set; }
- public void Edit()
- {
- ModuleListViewModel model = IoC.Get();
- model.EditingModel = this;
- model.EditTitle = $"模块编辑 - {Name}[{Display}]";
- model.IsShowEdit = true;
- }
+ public string Namespace => $"{(Project == null ? "" : Project.NamespacePrefix + ".")}{Name}";
+ public ProjectViewModel Project { get; set; }
+
public async void Delete()
{
if (MessageBox.Show($"是否删除模块“{Name}[{Display}]”?", "请确认", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)
@@ -95,57 +81,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 e9b85163d64af6874fc6b928c0b1c4428a84d855..7f30f10bea8d2fc84a68ce7e2e2674b2e15230bb 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 a40e42120514c5674f4e088a499c90412e45ddfe..01289e1274a59e8ae947507976781225a5026997 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/ProjectListViewModel.cs b/src/OSharp.CodeGenerator/Views/Projects/ProjectListViewModel.cs
index fd6fcb20f9d00340bb11bb0f4e51936f8d493315..e56c1b160b2f1173112a92292e514a8cccd030b7 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 4cd7f224afbcea8cca10c28aff5ce21f45c48380..1bb86644cb4f314dd9be1d2601f42c48acbd352f 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;
@@ -34,8 +35,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;
@@ -66,9 +67,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}”加载成功";
}
@@ -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/PropertyListView.xaml b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml
index c485b208dd2d8f85556689f270a107aad3ce80b9..a9feddb7a70fc61689cabf075823d7431515b491 100644
--- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml
+++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListView.xaml
@@ -5,70 +5,133 @@
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 ba5eced1f37efbdf01ca7973955d1f4967f2b025..e8f4e9b4bc6878d2218d1ea801daf38627738030 100644
--- a/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs
+++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyListViewModel.cs
@@ -9,25 +9,30 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
+using System.Threading.Tasks;
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;
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 +46,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 +70,7 @@ namespace OSharp.CodeGenerator.Views.Properties
model.Entity = Entity;
Properties.Add(model);
}
+
Helper.Output($"实体“{Entity.Display}”的属性列表刷新成功,共{Properties.Count}个属性");
}
@@ -82,12 +91,17 @@ namespace OSharp.CodeGenerator.Views.Properties
return;
}
- CodeProperty[] properties = Properties.Select(m => m.ToProperty()).ToArray();
+ for (int i = 0; i < Properties.Count; i++)
+ {
+ Properties[i].Order = i + 1;
+ }
+
+ 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 fd1baf8ff65c51b7b70e023925e9059f59558658..ac3d35e62a3943fbfd46cc416cbea1fba0973347 100644
--- a/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs
+++ b/src/OSharp.CodeGenerator/Views/Properties/PropertyViewModel.cs
@@ -7,8 +7,11 @@
// 2020-05-07 1:27
// -----------------------------------------------------------------------
+using System;
+
using FluentValidation;
+using OSharp.CodeGeneration.Services.Dtos;
using OSharp.CodeGeneration.Services.Entities;
using OSharp.CodeGenerator.Data;
using OSharp.CodeGenerator.Views.Entities;
@@ -19,7 +22,7 @@ using Stylet;
namespace OSharp.CodeGenerator.Views.Properties
{
- [MapTo(typeof(CodeProperty))]
+ [MapTo(typeof(CodePropertyInputDto))]
[MapFrom(typeof(CodeProperty))]
public class PropertyViewModel : Screen
{
@@ -33,6 +36,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,12 +80,8 @@ namespace OSharp.CodeGenerator.Views.Properties
public int Order { get; set; }
- public CodeProperty ToProperty()
- {
- CodeProperty property = this.MapTo();
- return property;
- }
-
+ public DateTime CreatedTime { get; set; }
+
public void Up()
{
Helper.Output($"“{Name}” - Up");
diff --git a/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs b/src/OSharp.CodeGenerator/Views/ViewModelLocator.cs
index 7d2565097daf39e178daec2c4f69a58765c8efc5..bb2f0e66fe233d4f397821448467fbfcb5b7efd6 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();
+ }
}
}