VsCodeController.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using System.Web;
  2. using Attribute;
  3. using Base;
  4. using Common;
  5. using Dto;
  6. using Enums;
  7. using Extensions;
  8. using Filters;
  9. using Infrastructure;
  10. using Infrastructure.Model;
  11. using Mapster;
  12. using Microsoft.AspNetCore.Mvc;
  13. using Middleware;
  14. using Model;
  15. using Model.Base;
  16. using Services;
  17. using Tasks;
  18. using Util;
  19. using Vo;
  20. namespace Controllers.Feign
  21. {
  22. public class VsCodeController : BaseController
  23. {
  24. private readonly IVersionsService versionsService;
  25. private readonly IVersionForProjectService versionForProjectService;
  26. private readonly IMakeFilesService makeFilesService;
  27. public VsCodeController(IVersionsService versionsService, IVersionForProjectService versionForProjectService, IMakeFilesService makeFilesService)
  28. {
  29. this.versionsService = versionsService;
  30. this.versionForProjectService = versionForProjectService;
  31. this.makeFilesService = makeFilesService;
  32. }
  33. /// <summary>
  34. /// vscode项目版本列表
  35. /// </summary>
  36. /// <param name="param"></param>
  37. /// <returns></returns>
  38. [HttpGet("/v1/omega_make/vscode/versions")]
  39. public IActionResult versions([FromQuery] VersionDto para)
  40. {
  41. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  42. if(tokenModel == null)
  43. {
  44. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  45. }
  46. List<VersionVo> list = new List<VersionVo>();
  47. VersionForProject ver = versionForProjectService.GetFirst(m => m.databaseId == para.serverId) ?? new VersionForProject();
  48. var versions = versionsService.GetList(m => m.serverId == para.serverId && m.groupId == tokenModel.userId).OrderByDescending(m => m.versionId).ToList();
  49. foreach(var version in versions)
  50. {
  51. VersionVo item = new VersionVo();
  52. item.versionId = version.versionId;
  53. item.batchNo = version.versionNo;
  54. if(version.versionNo.StartsWith("java")) item.verNo = ver.javaVersion;
  55. if(version.versionNo.StartsWith("net")) item.verNo = ver.netVersion;
  56. if(version.versionNo.StartsWith("vue")) item.verNo = ver.frontendVersion;
  57. if(version.versionNo.StartsWith("py")) item.verNo = ver.pythonVersion;
  58. item.createTime = version.createTime == null ? "" : version.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  59. list.Add(item);
  60. }
  61. return SUCCESS(list);
  62. }
  63. /// <summary>
  64. /// vscode项目文件列表
  65. /// </summary>
  66. /// <param name="param"></param>
  67. /// <returns></returns>
  68. [HttpGet("/v1/omega_make/vscode/files")]
  69. public IActionResult files([FromQuery] FileDto para)
  70. {
  71. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  72. if(tokenModel == null)
  73. {
  74. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  75. }
  76. Versions version = versionsService.GetFirst(m => m.versionId == para.versionId) ?? new Versions();
  77. VersionForProject ver = versionForProjectService.GetFirst(m => m.databaseId == version.serverId) ?? new VersionForProject();
  78. int verNo = 1;
  79. if(version.versionNo.StartsWith("java")) verNo = ver.javaVersion;
  80. if(version.versionNo.StartsWith("net")) verNo = ver.netVersion;
  81. if(version.versionNo.StartsWith("vue")) verNo = ver.frontendVersion;
  82. if(version.versionNo.StartsWith("py")) verNo = ver.pythonVersion;
  83. List<FileVo> list = GetFileList(para.versionId, verNo, 0);
  84. return SUCCESS(list);
  85. }
  86. public List<FileVo> GetFileList(int versionId, int verNo, int parentFileId = 0)
  87. {
  88. List<FileVo> list = new List<FileVo>();
  89. var files = makeFilesService.GetList(m => m.versionId == versionId && m.parentFileId == parentFileId);
  90. foreach(var file in files)
  91. {
  92. FileVo item = new FileVo();
  93. item.fileId = file.fileId;
  94. item.versionId = file.versionId;
  95. item.fileVersionNo = file.fileVersionNo;
  96. item.verNo = verNo;
  97. item.fileName = file.fileName.TrimEnd('/');
  98. item.createTime = file.createTime == null ? "" : file.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  99. item.downloadPath = !string.IsNullOrEmpty(file.downloadPath) ? OssHelper.Instance.SourceHost + file.downloadPath : null;
  100. item.localPath = file.fileType == "path" ? null : file.localPath;
  101. List<FileVo> Children = GetFileList(versionId, verNo, file.fileId);
  102. if(Children.Count > 0)
  103. {
  104. item.children = Children;
  105. }
  106. bool op = true;
  107. if(string.IsNullOrEmpty(file.localPath) && Children.Count <= 0)
  108. {
  109. op = false;
  110. }
  111. if(op) list.Add(item);
  112. }
  113. return list;
  114. }
  115. /// <summary>
  116. /// vscode项目所有文件列表(包含无效文件)
  117. /// </summary>
  118. /// <param name="param"></param>
  119. /// <returns></returns>
  120. [HttpGet("/v1/omega_make/vscode/filesForAll")]
  121. public IActionResult filesForAll([FromQuery] FileDto para)
  122. {
  123. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  124. if(tokenModel == null)
  125. {
  126. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  127. }
  128. List<FileVo> list = GetFileList(para.versionId, 0);
  129. return SUCCESS(list);
  130. }
  131. /// <summary>
  132. /// vscode项目文件内容
  133. /// </summary>
  134. /// <param name="param"></param>
  135. /// <returns></returns>
  136. [HttpPost("/v1/omega_make/vscode/getFile")]
  137. public IActionResult getFile([FromBody] GetFileDto para)
  138. {
  139. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  140. if(tokenModel == null)
  141. {
  142. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  143. }
  144. var item = makeFilesService.GetFirst(m => m.fileId == para.fileId) ?? new MakeFiles();
  145. // CheckCode.Transfer(para.fileContent, item.DownloadPath, item.FileType); //检查代码增量
  146. GetFileVo data = new GetFileVo();
  147. data.fileId = item.fileId;
  148. data.downloadPath = OssHelper.Instance.SourceHost + item.downloadPath.TrimStart('/');
  149. data.localPath = item.localPath;
  150. return SUCCESS(data);
  151. }
  152. /// <summary>
  153. /// 生成文件
  154. /// </summary>
  155. /// <param name="param"></param>
  156. /// <returns></returns>
  157. [HttpPost("/v1/omega_make/vscode/makeFile")]
  158. public IActionResult makeFile([FromBody] MakeFileDto para)
  159. {
  160. string requestId = HttpUtility.UrlDecode(para.content);
  161. string content = RedisServer.Cache.Get("MakeData:" + requestId);
  162. string res = MakeHelper.Instance.DoQueue(content, false);
  163. return SUCCESS(res);
  164. }
  165. }
  166. }