VsCodeController.cs 7.0 KB

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