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}});
+ }
+}
+