VsCodeController.cs 6.5 KB

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