VsCodeController.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. [HttpGet("/v1/omega_make/vscode/versionList")]
  64. public IActionResult versionList([FromQuery] VersionDto para)
  65. {
  66. List<VersionVo> list = new List<VersionVo>();
  67. VersionForProject ver = versionForProjectService.GetFirst(m => m.databaseId == para.serverId) ?? new VersionForProject();
  68. var versions = versionsService.GetList(m => m.serverId == para.serverId).OrderByDescending(m => m.versionId).ToList();
  69. foreach(var version in versions)
  70. {
  71. VersionVo item = new VersionVo();
  72. item.versionId = version.versionId;
  73. item.batchNo = version.versionNo;
  74. if(version.versionNo.StartsWith("java")) item.verNo = ver.javaVersion;
  75. if(version.versionNo.StartsWith("net")) item.verNo = ver.netVersion;
  76. if(version.versionNo.StartsWith("vue")) item.verNo = ver.frontendVersion;
  77. if(version.versionNo.StartsWith("py")) item.verNo = ver.pythonVersion;
  78. item.createTime = version.createTime == null ? "" : version.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  79. list.Add(item);
  80. }
  81. return SUCCESS(list);
  82. }
  83. [HttpPost("/v1/omega_make/vscode/addVersion")]
  84. public IActionResult addVersion([FromBody] AddVersionDto para)
  85. {
  86. MakeHelper.Instance.addVersion(para.projectId, para.serverId, para.userId, para.versionNo ?? "");
  87. return SUCCESS("ok");
  88. }
  89. /// <summary>
  90. /// vscode项目文件列表
  91. /// </summary>
  92. /// <param name="param"></param>
  93. /// <returns></returns>
  94. [HttpGet("/v1/omega_make/vscode/files")]
  95. public IActionResult files([FromQuery] FileDto para)
  96. {
  97. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  98. if(tokenModel == null)
  99. {
  100. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  101. }
  102. Versions version = versionsService.GetFirst(m => m.versionId == para.versionId) ?? new Versions();
  103. VersionForProject ver = versionForProjectService.GetFirst(m => m.databaseId == version.serverId) ?? new VersionForProject();
  104. int verNo = 1;
  105. if(version.versionNo.StartsWith("java")) verNo = ver.javaVersion;
  106. if(version.versionNo.StartsWith("net")) verNo = ver.netVersion;
  107. if(version.versionNo.StartsWith("vue")) verNo = ver.frontendVersion;
  108. if(version.versionNo.StartsWith("py")) verNo = ver.pythonVersion;
  109. List<FileVo> list = GetFileList(para.versionId, verNo, 0);
  110. return SUCCESS(list);
  111. }
  112. public List<FileVo> GetFileList(int versionId, int verNo, int parentFileId = 0)
  113. {
  114. List<FileVo> list = new List<FileVo>();
  115. var files = makeFilesService.GetList(m => m.versionId == versionId && m.parentFileId == parentFileId);
  116. foreach(var file in files)
  117. {
  118. FileVo item = new FileVo();
  119. item.fileId = file.fileId;
  120. item.versionId = file.versionId;
  121. item.fileVersionNo = file.fileVersionNo;
  122. item.verNo = verNo;
  123. item.fileName = file.fileName.TrimEnd('/');
  124. item.createTime = file.createTime == null ? "" : file.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  125. item.downloadPath = !string.IsNullOrEmpty(file.downloadPath) ? OssHelper.Instance.SourceHost + file.downloadPath : null;
  126. item.localPath = file.fileType == "path" ? null : file.localPath;
  127. List<FileVo> Children = GetFileList(versionId, verNo, file.fileId);
  128. if(Children.Count > 0)
  129. {
  130. item.children = Children;
  131. }
  132. bool op = true;
  133. if(string.IsNullOrEmpty(file.localPath) && Children.Count <= 0)
  134. {
  135. op = false;
  136. }
  137. if(op) list.Add(item);
  138. }
  139. return list;
  140. }
  141. /// <summary>
  142. /// vscode项目所有文件列表(包含无效文件)
  143. /// </summary>
  144. /// <param name="param"></param>
  145. /// <returns></returns>
  146. [HttpGet("/v1/omega_make/vscode/filesForAll")]
  147. public IActionResult filesForAll([FromQuery] FileDto para)
  148. {
  149. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  150. if(tokenModel == null)
  151. {
  152. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  153. }
  154. List<FileVo> list = GetFileList(para.versionId, 0);
  155. return SUCCESS(list);
  156. }
  157. /// <summary>
  158. /// vscode项目文件内容
  159. /// </summary>
  160. /// <param name="param"></param>
  161. /// <returns></returns>
  162. [HttpPost("/v1/omega_make/vscode/getFile")]
  163. public IActionResult getFile([FromBody] GetFileDto para)
  164. {
  165. TokenModel tokenModel = JwtUtil.GetLoginUser(HttpContext);
  166. if(tokenModel == null)
  167. {
  168. return ToResponse(ResultCode.BAD_REQUEST, "用户未登录");
  169. }
  170. var item = makeFilesService.GetFirst(m => m.fileId == para.fileId) ?? new MakeFiles();
  171. // CheckCode.Transfer(para.fileContent, item.DownloadPath, item.FileType); //检查代码增量
  172. GetFileVo data = new GetFileVo();
  173. data.fileId = item.fileId;
  174. data.downloadPath = OssHelper.Instance.SourceHost + item.downloadPath.TrimStart('/');
  175. data.localPath = item.localPath;
  176. return SUCCESS(data);
  177. }
  178. /// <summary>
  179. /// 生成文件
  180. /// </summary>
  181. /// <param name="param"></param>
  182. /// <returns></returns>
  183. [HttpPost("/v1/omega_make/vscode/makeFile")]
  184. public IActionResult makeFile([FromBody] MakeFileDto para)
  185. {
  186. string requestId = HttpUtility.UrlDecode(para.content);
  187. string content = RedisServer.Cache.Get("MakeData:" + requestId);
  188. string res = MakeHelper.Instance.DoQueue(content, false);
  189. return SUCCESS(res);
  190. }
  191. }
  192. }