using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Yi.Abp.Tool.Application.Contracts; using Yi.Abp.Tool.Application.Contracts.Dtos; namespace Yi.Abp.Tool.Commands { public class NewCommand : ICommand { private readonly ITemplateGenService _templateGenService; public NewCommand(ITemplateGenService templateGenService) { _templateGenService = templateGenService; } public List CommandStrs => new List() { "new" }; public async Task InvokerAsync(Dictionary options, string[] args) { var id = Guid.NewGuid().ToString("N"); //只有一个new if (args.Length <= 1) { throw new UserFriendlyException("命令错误,new命令后必须添加 名称"); } string name = args[1]; #region 处理生成类型 options.TryGetValue("t", out var templateType); var zipPath = string.Empty; byte[] fileByteArray; if (templateType == "module") { //代表模块生成 fileByteArray = await _templateGenService.CreateModuleAsync(new TemplateGenCreateInputDto { Name = name, }); } else { //代表模块生成 fileByteArray = await _templateGenService.CreateProjectAsync(new TemplateGenCreateInputDto { Name = name, }); } zipPath = $"{id}.zip"; await File.WriteAllBytesAsync(zipPath, fileByteArray); #endregion #region 处理解决方案文件夹 //默认是当前目录 var unzipDirPath = "./"; //如果创建解决方案文件夹 if (options.TryGetValue("csf", out _)) { var moduleName = name.ToLower().Replace(".", "-"); if (Directory.Exists(moduleName)) { throw new UserFriendlyException($"文件夹[{moduleName}]已存在,请删除后重试"); } Directory.CreateDirectory(moduleName); unzipDirPath = moduleName; } #endregion ZipFile.ExtractToDirectory(zipPath, unzipDirPath); //创建压缩包后删除临时目录 File.Delete(zipPath); await Console.Out.WriteLineAsync("恭喜~模块已生成!"); } } }