diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Abstract/AbstractTemplateProvider.cs b/Yi.Framework.Net6/Yi.Framework.Template/Abstract/AbstractTemplateProvider.cs index 9c2ca37c..cf35c614 100644 --- a/Yi.Framework.Net6/Yi.Framework.Template/Abstract/AbstractTemplateProvider.cs +++ b/Yi.Framework.Net6/Yi.Framework.Template/Abstract/AbstractTemplateProvider.cs @@ -3,40 +3,33 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Yi.Framework.Common.Helper; namespace Yi.Framework.Template.Abstract { public abstract class AbstractTemplateProvider : ITemplateProvider { - public string BuildPath { get; set; } - public string TemplatePath { get; set; } - public string BakPath { get; set; } - private Dictionary TemplateDic { get; set; } + public virtual string? BuildPath { get; set; } + public string? TemplatePath { get; set; } + public string? BakPath { get; set; } + protected Dictionary TemplateDic { get; set; } = new Dictionary(); - public void Bak() { - - } + public abstract void Bak(); - public virtual void Build() - { - var templateData = GetTemplateData(); - foreach (var ky in TemplateDic) - { - templateData = templateData.Replace(ky.Key, ky.Value); - } - File.WriteAllText(BuildPath, templateData); - } + public abstract void Build(); protected virtual string GetTemplateData() { + if (TemplatePath is null) + { + throw new ArgumentNullException(nameof(TemplatePath)); + } return File.ReadAllText(TemplatePath); } - protected void AddTemplateDic(string oldStr, string newStr) + protected void AddTemplateDic(string oldStr, string newStr) { - TemplateDic=new Dictionary(); + TemplateDic.Add(oldStr, newStr); } } diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ITemplateProvider.cs b/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ITemplateProvider.cs index b57d17be..5ac81801 100644 --- a/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ITemplateProvider.cs +++ b/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ITemplateProvider.cs @@ -11,17 +11,17 @@ namespace Yi.Framework.Template.Abstract /// /// 构建生成路径 /// - string BuildPath { get; set; } + string? BuildPath { get; set; } /// /// 模板文件路径 /// - string TemplatePath { get; set; } + string? TemplatePath { get; set; } /// /// 备份文件路径 /// - string BakPath { get; set; } + string? BakPath { get; set; } /// diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ProgramTemplateProvider.cs b/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ProgramTemplateProvider.cs index 3007f732..68bd7561 100644 --- a/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ProgramTemplateProvider.cs +++ b/Yi.Framework.Net6/Yi.Framework.Template/Abstract/ProgramTemplateProvider.cs @@ -1,12 +1,62 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using System.Threading.Tasks; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Template.Const; -//namespace Yi.Framework.Template.Abstract -//{ -// public abstract ProgramTemplateProvider: AbstractTemplateProvider -// { -// } -//} +namespace Yi.Framework.Template.Abstract +{ + + public abstract class ProgramTemplateProvider : AbstractTemplateProvider + { + public ProgramTemplateProvider(string modelName, string entityName) + { + ModelName = modelName; + EntityName = entityName; + base.AddTemplateDic(TemplateConst.EntityName, EntityName); + base.AddTemplateDic(TemplateConst.ModelName, ModelName); + } + /// + /// 实体名称 + /// + public string EntityName { get; set; } + /// + /// 模块名称 + /// + public string ModelName { get; set; } + + /// + /// 重写构建路径,替换实体名称与模块名称 + /// + public override string? BuildPath + { + get => base.BuildPath; + set + { + value = value!.Replace(TemplateConst.EntityName, EntityName); + value = value.Replace(TemplateConst.ModelName, ModelName); + base.BuildPath = value; + } + } + + public override void Build() + { + if (BuildPath is null) + { + throw new ArgumentNullException(nameof(BuildPath)); + } + var templateData = GetTemplateData(); + foreach (var ky in TemplateDic) + { + templateData = templateData.Replace(ky.Key, ky.Value); + } + File.WriteAllText(BuildPath, templateData); + } + + public override void Bak() + { + throw new NotImplementedException(); + } + } +} diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Const/TemplateConst.cs b/Yi.Framework.Net6/Yi.Framework.Template/Const/TemplateConst.cs new file mode 100644 index 00000000..02a6a6ca --- /dev/null +++ b/Yi.Framework.Net6/Yi.Framework.Template/Const/TemplateConst.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.Framework.Template.Const +{ + public class TemplateConst + { + /// + /// 模块名称 + /// + public const string ModelName = "#ModelName#"; + + /// + /// 实体名称 + /// + public const string EntityName = "#EntityName#"; + } +} diff --git a/Yi.Framework.Net6/Yi.Framework.Template/FileHelper.cs b/Yi.Framework.Net6/Yi.Framework.Template/FileHelper.cs deleted file mode 100644 index 7ae1c0c4..00000000 --- a/Yi.Framework.Net6/Yi.Framework.Template/FileHelper.cs +++ /dev/null @@ -1,490 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; - -namespace Yi.Framework.Common.Helper -{ - public class FileHelper : IDisposable - { - - private bool _alreadyDispose = false; - - - - #region 构造函数 - public FileHelper() - { - // - // TODO: 在此处添加构造函数逻辑 - // - } - ~FileHelper() - { - Dispose(); ; - } - - protected virtual void Dispose(bool isDisposing) - { - if (_alreadyDispose) return; - _alreadyDispose = true; - } - #endregion - - #region IDisposable 成员 - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - #endregion - - #region 取得文件后缀名 - /**************************************** - * 函数名称:GetPostfixStr - * 功能说明:取得文件后缀名 - * 参 数:filename:文件名称 - * 调用示列: - * string filename = "aaa.aspx"; - * string s = EC.FileObj.GetPostfixStr(filename); - *****************************************/ - /// - /// 取后缀名 - /// - /// 文件名 - /// .gif|.html格式 - public static string GetPostfixStr(string filename) - { - int start = filename.LastIndexOf("."); - int length = filename.Length; - string postfix = filename.Substring(start, length - start); - return postfix; - } - #endregion - - #region 根据文件大小获取指定前缀的可用文件名 - /// - /// 根据文件大小获取指定前缀的可用文件名 - /// - /// 文件夹 - /// 文件前缀 - /// 文件大小(1m) - /// 文件后缀(.log) - /// 可用文件名 - //public static string GetAvailableFileWithPrefixOrderSize(string folderPath, string prefix, int size = 1 * 1024 * 1024, string ext = ".log") - //{ - // var allFiles = new DirectoryInfo(folderPath); - // var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d=>d.Name).ToList(); - - // if (selectFiles.Count > 0) - // { - // return selectFiles.FirstOrDefault().FullName; - // } - - // return Path.Combine(folderPath, $@"{prefix}_{DateTime.Now.DateToTimeStamp()}.log"); - //} - //public static string GetAvailableFileNameWithPrefixOrderSize(string _contentRoot, string prefix, int size = 1 * 1024 * 1024, string ext = ".log") - //{ - // var folderPath = Path.Combine(_contentRoot, "Log"); - // if (!Directory.Exists(folderPath)) - // { - // Directory.CreateDirectory(folderPath); - // } - - // var allFiles = new DirectoryInfo(folderPath); - // var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList(); - - // if (selectFiles.Count > 0) - // { - // return selectFiles.FirstOrDefault().Name.Replace(".log",""); - // } - - // return $@"{prefix}_{DateTime.Now.DateToTimeStamp()}"; - //} - #endregion - - #region 写文件 - /**************************************** - * 函数名称:WriteFile - * 功能说明:写文件,会覆盖掉以前的内容 - * 参 数:Path:文件路径,Strings:文本内容 - * 调用示列: - * string Path = Server.MapPath("Default2.aspx"); - * string Strings = "这是我写的内容啊"; - * EC.FileObj.WriteFile(Path,Strings); - *****************************************/ - /// - /// 写文件 - /// - /// 文件路径 - /// 文件内容 - public static void WriteFile(string Path, string Strings) - { - if (!File.Exists(Path)) - { - FileStream f = File.Create(Path); - f.Close(); - } - StreamWriter f2 = new StreamWriter(Path, false, System.Text.Encoding.GetEncoding("gb2312")); - f2.Write(Strings); - f2.Close(); - f2.Dispose(); - } - - /// - /// 写文件 - /// - /// 文件路径 - /// 文件内容 - /// 编码格式 - public static void WriteFile(string Path, string Strings, Encoding encode) - { - if (!File.Exists(Path)) - { - FileStream f = File.Create(Path); - f.Close(); - } - StreamWriter f2 = new StreamWriter(Path, false, encode); - f2.Write(Strings); - f2.Close(); - f2.Dispose(); - } - #endregion - - #region 读文件 - /**************************************** - * 函数名称:ReadFile - * 功能说明:读取文本内容 - * 参 数:Path:文件路径 - * 调用示列: - * string Path = Server.MapPath("Default2.aspx"); - * string s = EC.FileObj.ReadFile(Path); - *****************************************/ - /// - /// 读文件 - /// - /// 文件路径 - /// - public static string ReadFile(string Path) - { - string s = ""; - if (!File.Exists(Path)) - s = "不存在相应的目录"; - else - { - StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312")); - s = f2.ReadToEnd(); - f2.Close(); - f2.Dispose(); - } - - return s; - } - - /// - /// 读文件 - /// - /// 文件路径 - /// 编码格式 - /// - public static string ReadFile(string Path, Encoding encode) - { - string s = ""; - if (!File.Exists(Path)) - s = "不存在相应的目录"; - else - { - StreamReader f2 = new StreamReader(Path, encode); - s = f2.ReadToEnd(); - f2.Close(); - f2.Dispose(); - } - - return s; - } - #endregion - - #region 追加文件 - /**************************************** - * 函数名称:FileAdd - * 功能说明:追加文件内容 - * 参 数:Path:文件路径,strings:内容 - * 调用示列: - * string Path = Server.MapPath("Default2.aspx"); - * string Strings = "新追加内容"; - * EC.FileObj.FileAdd(Path, Strings); - *****************************************/ - /// - /// 追加文件 - /// - /// 文件路径 - /// 内容 - public static void FileAdd(string Path, string strings) - { - StreamWriter sw = File.AppendText(Path); - sw.Write(strings); - sw.Flush(); - sw.Close(); - } - #endregion - - #region 拷贝文件 - /**************************************** - * 函数名称:FileCoppy - * 功能说明:拷贝文件 - * 参 数:OrignFile:原始文件,NewFile:新文件路径 - * 调用示列: - * string orignFile = Server.MapPath("Default2.aspx"); - * string NewFile = Server.MapPath("Default3.aspx"); - * EC.FileObj.FileCoppy(OrignFile, NewFile); - *****************************************/ - /// - /// 拷贝文件 - /// - /// 原始文件 - /// 新文件路径 - public static void FileCoppy(string orignFile, string NewFile) - { - File.Copy(orignFile, NewFile, true); - } - - #endregion - - #region 删除文件 - /**************************************** - * 函数名称:FileDel - * 功能说明:删除文件 - * 参 数:Path:文件路径 - * 调用示列: - * string Path = Server.MapPath("Default3.aspx"); - * EC.FileObj.FileDel(Path); - *****************************************/ - /// - /// 删除文件 - /// - /// 路径 - public static void FileDel(string Path) - { - File.Delete(Path); - } - #endregion - - #region 移动文件 - /**************************************** - * 函数名称:FileMove - * 功能说明:移动文件 - * 参 数:OrignFile:原始路径,NewFile:新文件路径 - * 调用示列: - * string orignFile = Server.MapPath("../说明.txt"); - * string NewFile = Server.MapPath("http://www.cnblogs.com/说明.txt"); - * EC.FileObj.FileMove(OrignFile, NewFile); - *****************************************/ - /// - /// 移动文件 - /// - /// 原始路径 - /// 新路径 - public static void FileMove(string orignFile, string NewFile) - { - File.Move(orignFile, NewFile); - } - #endregion - - #region 在当前目录下创建目录 - /**************************************** - * 函数名称:FolderCreate - * 功能说明:在当前目录下创建目录 - * 参 数:OrignFolder:当前目录,NewFloder:新目录 - * 调用示列: - * string orignFolder = Server.MapPath("test/"); - * string NewFloder = "new"; - * EC.FileObj.FolderCreate(OrignFolder, NewFloder); - *****************************************/ - /// - /// 在当前目录下创建目录 - /// - /// 当前目录 - /// 新目录 - public static void FolderCreate(string orignFolder, string NewFloder) - { - Directory.SetCurrentDirectory(orignFolder); - Directory.CreateDirectory(NewFloder); - } - #endregion - - #region 递归删除文件夹目录及文件 - /**************************************** - * 函数名称:DeleteFolder - * 功能说明:递归删除文件夹目录及文件 - * 参 数:dir:文件夹路径 - * 调用示列: - * string dir = Server.MapPath("test/"); - * EC.FileObj.DeleteFolder(dir); - *****************************************/ - /// - /// 递归删除文件夹目录及文件 - /// - /// - /// - public static void DeleteFolder(string dir) - { - if (Directory.Exists(dir)) //如果存在这个文件夹删除之 - { - foreach (string d in Directory.GetFileSystemEntries(dir)) - { - if (File.Exists(d)) - File.Delete(d); //直接删除其中的文件 - else - DeleteFolder(d); //递归删除子文件夹 - } - Directory.Delete(dir); //删除已空文件夹 - } - - } - #endregion - - #region 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。 - /**************************************** - * 函数名称:CopyDir - * 功能说明:将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。 - * 参 数:srcPath:原始路径,aimPath:目标文件夹 - * 调用示列: - * string srcPath = Server.MapPath("test/"); - * string aimPath = Server.MapPath("test1/"); - * EC.FileObj.CopyDir(srcPath,aimPath); - *****************************************/ - /// - /// 指定文件夹下面的所有内容copy到目标文件夹下面 - /// - /// 原始路径 - /// 目标文件夹 - public static void CopyDir(string srcPath, string aimPath) - { - try - { - // 检查目标目录是否以目录分割字符结束如果不是则添加之 - if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar) - aimPath += Path.DirectorySeparatorChar; - // 判断目标目录是否存在如果不存在则新建之 - if (!Directory.Exists(aimPath)) - Directory.CreateDirectory(aimPath); - // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组 - //如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法 - //string[] fileList = Directory.GetFiles(srcPath); - string[] fileList = Directory.GetFileSystemEntries(srcPath); - //遍历所有的文件和目录 - foreach (string file in fileList) - { - //先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 - - if (Directory.Exists(file)) - CopyDir(file, aimPath + Path.GetFileName(file)); - //否则直接Copy文件 - else - File.Copy(file, aimPath + Path.GetFileName(file), true); - } - - } - catch (Exception ee) - { - throw new Exception(ee.ToString()); - } - } - #endregion - - /// - /// 获取目录下全部文件名 - /// - /// - /// - /// - public static List GetAllFileNames(string path, string pattern = "*") - { - List folder = new DirectoryInfo(path).GetFiles(pattern).ToList(); - - return folder.Select(x => x.Name).ToList(); - } - /// - /// 文件内容替换 - /// - public static string FileContentReplace(string path, string oldStr, string newStr) - { - var content = File.ReadAllText(path); - - if (content.Contains(oldStr)) - { - File.Delete(path); - File.WriteAllText(path, content.Replace(oldStr, newStr)); - } - - return path; - } - /// - /// 文件名称 - /// - public static string FileNameReplace(string path, string oldStr, string newStr) - { - string fileName = Path.GetFileName(path); - if (!fileName.Contains(oldStr)) - { - return path; - } - - string? directoryName = Path.GetDirectoryName(path); - string newFileName = fileName.Replace(oldStr, newStr); - string newPath = Path.Combine(directoryName ?? "", newFileName); - File.Move(path, newPath); - - return newPath; - } - /// - /// 目录名替换 - /// - public static string DirectoryNameReplace(string path, string oldStr, string newStr) - { - string fileName = Path.GetFileName(path); - if (!fileName.Contains(oldStr)) - { - return path; - } - - string? directoryName = Path.GetDirectoryName(path); - string newFileName = fileName.Replace(oldStr, newStr); - string newPath = Path.Combine(directoryName ?? "", newFileName); - Directory.Move(path, newPath); - return newPath; - } - - /// - /// 全部信息递归替换 - /// - /// - /// - /// - public static void AllInfoReplace(string dirPath, string oldStr, string newStr) - { - var path = DirectoryNameReplace(dirPath, oldStr, newStr); - var dirInfo = new DirectoryInfo(path); - var files = dirInfo.GetFiles(); - var dirs = dirInfo.GetDirectories(); - if (files.Length > 0) - { - foreach (var f in files) - { - FileContentReplace(f.FullName, oldStr, newStr); - FileNameReplace(f.FullName, oldStr, newStr); - } - } - if (dirs.Length > 0) - { - foreach (var d in dirs) - { - AllInfoReplace(d.FullName, oldStr, newStr); - } - } - } - } -} diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Program.cs b/Yi.Framework.Net6/Yi.Framework.Template/Program.cs index 8e300ecd..1a8070ef 100644 --- a/Yi.Framework.Net6/Yi.Framework.Template/Program.cs +++ b/Yi.Framework.Net6/Yi.Framework.Template/Program.cs @@ -4,11 +4,17 @@ using Yi.Framework.Template.Provider; TemplateFactory templateFactory = new(); //选择需要生成的模板提供者 + +string modelName = "ERP"; +string entityName = "Test"; + templateFactory.CreateTemplateProviders((option) => { - option.Add(new ServceTemplateProvider()); + option.Add(new ServceTemplateProvider(modelName, entityName)); }); //开始构建模板 -templateFactory.BuildTemplate(); \ No newline at end of file +templateFactory.BuildTemplate(); +Console.WriteLine("Yi.Framework.Template模板生成完成!"); +Console.ReadKey(); \ No newline at end of file diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Provider/ServceTemplateProvider.cs b/Yi.Framework.Net6/Yi.Framework.Template/Provider/ServceTemplateProvider.cs index 5259b5ee..6098e8bc 100644 --- a/Yi.Framework.Net6/Yi.Framework.Template/Provider/ServceTemplateProvider.cs +++ b/Yi.Framework.Net6/Yi.Framework.Template/Provider/ServceTemplateProvider.cs @@ -4,16 +4,17 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Yi.Framework.Template.Abstract; +using Yi.Framework.Template.Const; namespace Yi.Framework.Template.Provider { - public class ServceTemplateProvider : AbstractTemplateProvider + public class ServceTemplateProvider : ProgramTemplateProvider { - public ServceTemplateProvider() + public ServceTemplateProvider(string modelName, string entityName) : base( modelName,entityName) { - BuildPath = "E:\\Yi\\Yi.Framework.Net6\\Yi.Framework.Template\\Code\\ServiceNewTemplate.txt"; - TemplatePath = "E:\\Yi\\Yi.Framework.Net6\\Yi.Framework.Template\\Template\\ServiceTemplate.txt"; - AddTemplateDic("Yi.Framework", "Yi.TTT"); + BuildPath = $@"D:\CC.Yi\CC.Yi\Yi.Framework.Net6\Yi.Framework.Template\Code\{TemplateConst.EntityName}Entity.cs"; + TemplatePath = $@"D:\CC.Yi\CC.Yi\Yi.Framework.Net6\Yi.Framework.Template\Template\ServiceTemplate.txt"; + AddTemplateDic("Yi.Framework", "Yi.Test"); } } } diff --git a/Yi.Framework.Net6/Yi.Framework.Template/Template/ServiceTemplate.txt b/Yi.Framework.Net6/Yi.Framework.Template/Template/ServiceTemplate.txt index c22f11eb..fec61106 100644 --- a/Yi.Framework.Net6/Yi.Framework.Template/Template/ServiceTemplate.txt +++ b/Yi.Framework.Net6/Yi.Framework.Template/Template/ServiceTemplate.txt @@ -6,27 +6,27 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Yi.Framework.Common.Models; -using Yi.Framework.DtoModel.ERP.Supplier; -using Yi.Framework.Interface.ERP; -using Yi.Framework.Model.ERP.Entitys; +using Yi.Framework.DtoModel.#ModelName#.#EntityName#; +using Yi.Framework.Interface.#ModelName#; +using Yi.Framework.Model.#ModelName#.Entitys; using Yi.Framework.Repository; using Yi.Framework.Service.Base.Crud; -namespace Yi.Framework.Service.ERP +namespace Yi.Framework.Service.#ModelName# { - public class SupplierService : CrudAppService, ISupplierService + public class #EntityName#Service : CrudAppService<#EntityName#Entity, #EntityName#GetListOutput, long, #EntityName#CreateUpdateInput>, I#EntityName#Service { - public SupplierService(IRepository repository, IMapper mapper) : base(repository, mapper) + public #EntityName#Service(IRepository<#EntityName#Entity> repository, IMapper mapper) : base(repository, mapper) { } - public async Task>> PageListAsync(SupplierCreateUpdateInput input, PageParModel page) + public async Task>> PageListAsync(#EntityName#CreateUpdateInput input, PageParModel page) { RefAsync totalNumber = 0; var data = await Repository._DbQueryable .WhereIF(input.Code is not null,u=>u.Code.Contains(input.Code)) .WhereIF(input.Name is not null, u => u.Name.Contains(input.Name)) .ToPageListAsync(page.PageNum, page.PageSize, totalNumber); - return new PageModel> { Total = totalNumber.Value, Data = await MapToGetListOutputDtosAsync(data) }; + return new PageModel> { Total = totalNumber.Value, Data = await MapToGetListOutputDtosAsync(data) }; } } }