using System.Web; using Attribute; using Base; using Common; using Dto; using Enums; using Extensions; using Filters; using Infrastructure; using Infrastructure.Model; using Mapster; using Microsoft.AspNetCore.Mvc; using Middleware; using Model; using Model.Base; using Services; using Tasks; using Util; using Vo; namespace Controllers.Feign { public class VsCodeController : BaseController { private readonly IVersionsService versionsService; private readonly IVersionForProjectService versionForProjectService; private readonly IMakeFilesService makeFilesService; public VsCodeController(IVersionsService versionsService, IVersionForProjectService versionForProjectService, IMakeFilesService makeFilesService) { this.versionsService = versionsService; this.versionForProjectService = versionForProjectService; this.makeFilesService = makeFilesService; } /// /// vscode项目版本列表 /// /// /// [HttpGet("/v1/omega_make/vscode/versions")] public IActionResult versions([FromQuery] VersionDto para) { TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext); if(tokenModel == null) { return ToResponse(ResultCode.BAD_REQUEST, "用户未登录"); } List list = new List(); VersionForProject ver = versionForProjectService.GetFirst(m => m.databaseId == para.serverId) ?? new VersionForProject(); var versions = versionsService.GetList(m => m.serverId == para.serverId && m.groupId == tokenModel.userId).OrderByDescending(m => m.versionId).ToList(); foreach(var version in versions) { VersionVo item = new VersionVo(); item.versionId = version.versionId; item.batchNo = version.versionNo; if(version.versionNo.StartsWith("java")) item.verNo = ver.javaVersion; if(version.versionNo.StartsWith("net")) item.verNo = ver.netVersion; if(version.versionNo.StartsWith("vue")) item.verNo = ver.frontendVersion; if(version.versionNo.StartsWith("py")) item.verNo = ver.pythonVersion; item.createTime = version.createTime == null ? "" : version.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); list.Add(item); } return SUCCESS(list); } /// /// vscode项目文件列表 /// /// /// [HttpGet("/v1/omega_make/vscode/files")] public IActionResult files([FromQuery] FileDto para) { TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext); if(tokenModel == null) { return ToResponse(ResultCode.BAD_REQUEST, "用户未登录"); } Versions version = versionsService.GetFirst(m => m.versionId == para.versionId) ?? new Versions(); VersionForProject ver = versionForProjectService.GetFirst(m => m.databaseId == version.serverId) ?? new VersionForProject(); int verNo = 1; if(version.versionNo.StartsWith("java")) verNo = ver.javaVersion; if(version.versionNo.StartsWith("net")) verNo = ver.netVersion; if(version.versionNo.StartsWith("vue")) verNo = ver.frontendVersion; if(version.versionNo.StartsWith("py")) verNo = ver.pythonVersion; List list = GetFileList(para.versionId, verNo, 0); return SUCCESS(list); } public List GetFileList(int versionId, int verNo, int parentFileId = 0) { List list = new List(); var files = makeFilesService.GetList(m => m.versionId == versionId && m.parentFileId == parentFileId); foreach(var file in files) { FileVo item = new FileVo(); item.fileId = file.fileId; item.versionId = file.versionId; item.fileVersionNo = file.fileVersionNo; item.verNo = verNo; item.fileName = file.fileName.TrimEnd('/'); item.createTime = file.createTime == null ? "" : file.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); item.downloadPath = !string.IsNullOrEmpty(file.downloadPath) ? OssHelper.Instance.SourceHost + file.downloadPath : null; item.localPath = file.fileType == "path" ? null : file.localPath; List Children = GetFileList(versionId, verNo, file.fileId); if(Children.Count > 0) { item.children = Children; } bool op = true; if(string.IsNullOrEmpty(file.localPath) && Children.Count <= 0) { op = false; } if(op) list.Add(item); } return list; } /// /// vscode项目所有文件列表(包含无效文件) /// /// /// [HttpGet("/v1/omega_make/vscode/filesForAll")] public IActionResult filesForAll([FromQuery] FileDto para) { TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext); if(tokenModel == null) { return ToResponse(ResultCode.BAD_REQUEST, "用户未登录"); } List list = GetFileList(para.versionId, 0); return SUCCESS(list); } /// /// vscode项目文件内容 /// /// /// [HttpPost("/v1/omega_make/vscode/getFile")] public IActionResult getFile([FromBody] GetFileDto para) { TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext); if(tokenModel == null) { return ToResponse(ResultCode.BAD_REQUEST, "用户未登录"); } var item = makeFilesService.GetFirst(m => m.fileId == para.fileId) ?? new MakeFiles(); // CheckCode.Transfer(para.fileContent, item.DownloadPath, item.FileType); //检查代码增量 GetFileVo data = new GetFileVo(); data.fileId = item.fileId; data.downloadPath = OssHelper.Instance.SourceHost + item.downloadPath.TrimStart('/'); data.localPath = item.localPath; return SUCCESS(data); } /// /// 生成文件 /// /// /// [HttpPost("/v1/omega_make/vscode/makeFile")] public IActionResult makeFile([FromBody] MakeFileDto para) { string requestId = HttpUtility.UrlDecode(para.content); string content = RedisServer.Cache.Get("MakeData:" + requestId); string res = MakeHelper.Instance.DoQueue(content, false); return SUCCESS(res); } } }