diff --git a/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj b/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj index e48a7b472..7941a8ebe 100644 --- a/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj +++ b/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj @@ -6,15 +6,23 @@ false default + + Exe - ..\bin + bin + + Always + + + Always + IRaCIS .Core.ServiceAsync.cs TextTemplatingFileGenerator @@ -65,9 +73,11 @@ + + diff --git a/IRaCIS.Core.Test/Program.cs b/IRaCIS.Core.Test/Program.cs new file mode 100644 index 000000000..fcbfbce59 --- /dev/null +++ b/IRaCIS.Core.Test/Program.cs @@ -0,0 +1,124 @@ + +using Fluid; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +partial class Program +{ + static void Main() + { + //发布的目录和项目的目录有区别的 + var rootPath = AppContext.BaseDirectory.Replace(@"\bin\net8.0\", "").Replace(@"\bin\Release\net8.0\", ""); + + var templateFolderPath = Path.Combine(rootPath, "Template"); + var outPutTemplateFolderPath = Path.Combine(rootPath, "TemplateOutPut"); + + #region 生成文件目录准备 + if (!Directory.Exists(outPutTemplateFolderPath)) + { + Directory.CreateDirectory(outPutTemplateFolderPath); + } + var servicePath = Path.Combine(outPutTemplateFolderPath, "Service"); + var iServicePath = Path.Combine(outPutTemplateFolderPath, "IService"); + var entityPath = Path.Combine(outPutTemplateFolderPath, "Entity"); + var dtoPath = Path.Combine(outPutTemplateFolderPath, "DTO"); + + if (!Directory.Exists(servicePath)) + { + Directory.CreateDirectory(servicePath); + } + if (!Directory.Exists(iServicePath)) + { + Directory.CreateDirectory(iServicePath); + } + if (!Directory.Exists(entityPath)) + { + Directory.CreateDirectory(entityPath); + } + if (!Directory.Exists(dtoPath)) + { + Directory.CreateDirectory(dtoPath); + } + #endregion + + + // 要生成的表名数组 + var tableNames = new List { "User", "Product", "Order" }; + + try + { + //便利所有模板文件进行生成操作 + foreach (var templateFilePath in Directory.GetFiles(templateFolderPath)) + { + + var fileName=Path.GetFileNameWithoutExtension(templateFilePath); + + foreach (var tableName in tableNames) + { + var model = new TemplateModel + { + TableName = tableName, + + IsPaged = true + }; + + + var parser = new FluidParser(); + + var source = File.ReadAllText(templateFilePath); + + if (parser.TryParse(source, out var template, out var error)) + { + var context = new TemplateContext(model); + + //Console.WriteLine(template.Render(context)); + + string outputFilePath = Path.Combine(outPutTemplateFolderPath, $"{fileName.Replace("Entity", tableName)}.cs"); + + File.WriteAllText(outputFilePath, template.Render(context)); + } + else + { + Console.WriteLine($"Error: {error}"); + } + + + + } + } + } + catch (Exception ex) + { + + Console.WriteLine($"Error: {ex.Message}"); + } + + + } + + // Model class to pass data to the template + public class TemplateModel + { + public string TableName { get; set; } + + //生成的列表是是分页 还是不分页 + public bool IsPaged { get; set; } + + // 列表视图模型名称 + public string TableNameView => TableName + "View"; + //列表查询模型名称 + public string TableNameQuery => TableName + "Query"; + //添加和编辑模型名称 + public string TableNameAddOrEdit => TableName + "AddOrEdit"; + //删除主键属性名 + public string LowercaseTableNameId => char.ToLower(TableName[0]) + TableName.Substring(1) + "Id"; + + public string LowercaseRepositoryName => $"_{char.ToLower(TableName[0]) + TableName.Substring(1)}Repository" ; + + public string LowercaseQueryableName => $"{char.ToLower(TableName[0]) + TableName.Substring(1)}Queryable"; + + public DateTime DateTimeNow = DateTime.Now; + } +} diff --git a/IRaCIS.Core.Test/Template/EntityService.liquid b/IRaCIS.Core.Test/Template/EntityService.liquid new file mode 100644 index 000000000..f0bce2e1f --- /dev/null +++ b/IRaCIS.Core.Test/Template/EntityService.liquid @@ -0,0 +1,69 @@ + +//-------------------------------------------------------------------- +// 此代码由模板自动生成 byzhouhang 20210918 +// 生成时间 {{DateTimeNow}} +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +using IRaCIS.Core.Domain.Models; +using Microsoft.AspNetCore.Mvc; +using IRaCIS.Core.Application.Interfaces; +using IRaCIS.Core.Application.ViewModel; +namespace IRaCIS.Core.Application.Service +{ + + [ ApiExplorerSettings(GroupName = "Test")] + public class {{TableName}}Service(IRepository<{{TableName}}> {{LowercaseRepositoryName}}): BaseService, I{{TableName}}Service + { + + {% if IsPaged %} + [HttpPost] + public async Task> Get{{TableName}}List({{TableNameQuery}} inQuery) + { + + var {{LowercaseQueryableName}} ={{LowercaseRepositoryName}} + .ProjectTo<{{TableNameView}}>(_mapper.ConfigurationProvider); + + var pageList= await {{LowercaseQueryableName}}.ToPagedListAsync(inQuery); + + return pageList; + } + {% else %} + [HttpPost] + public async Task> Get{{TableName}}List({{TableNameQuery}} inQuery) + { + + + var {{LowercaseQueryableName}} ={{LowercaseRepositoryName}} + .ProjectTo<{{TableNameView}}>(_mapper.ConfigurationProvider); + + return await {{LowercaseQueryableName}}.ToListAsync(); + } + {% endif %} + + + public async Task AddOrUpdate{{TableName}}({{TableName}}AddOrEdit addOrEdit{{TableName}}) + { + // 在此处拷贝automapper 映射 + + CreateMap<{{TableName}}, {{TableNameView}}>(); + CreateMap<{{TableName}},{{TableNameAddOrEdit}}>().ReverseMap(); + + + var entity = await {{LowercaseRepositoryName}}.InsertOrUpdateAsync(addOrEdit{{TableName}}, true); + + return ResponseOutput.Ok(entity.Id.ToString()); + + } + + + [HttpDelete("{{ '{' }}{{LowercaseTableNameId}}:guid{{ '}' }}")] + public async Task Delete{{TableName}}(Guid {{LowercaseTableNameId}}) + { + var success = await _<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Repository.DeleteFromQueryAsync(t => t.Id == {{LowercaseTableNameId}},true); + return ResponseOutput.Ok(); + } + + + } +} + diff --git a/IRaCIS.Core.Test/Template/IEntityService.liquid b/IRaCIS.Core.Test/Template/IEntityService.liquid new file mode 100644 index 000000000..37c1016f9 --- /dev/null +++ b/IRaCIS.Core.Test/Template/IEntityService.liquid @@ -0,0 +1,25 @@ + +//-------------------------------------------------------------------- +// 此代码由模板自动生成 byzhouhang 20210918 +// 生成时间 {{DateTimeNow}} +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +using IRaCIS.Core.Application.ViewModel; +namespace IRaCIS.Core.Application.Interfaces + { + + public interface I{{TableName}}Service + { + + {% if IsPaged %} + Task> Get{{TableName}}List({{TableNameQuery}} inQuery); + {% else %} + Task> Get{{TableName}}List({{TableNameQuery}} inQuery); + {% endif %} + + Task AddOrUpdate{{TableName}}({{TableNameAddOrEdit}} addOrEdit{{TableName}}); + + Task Delete{{TableNameView}}(Guid {{LowercaseTableNameId}}); + } +} +