AppProjectVersionController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. using Vo;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Model;
  4. using Services;
  5. using Model.Base;
  6. using Vo.Admin;
  7. using Mapster;
  8. using Infrastructure;
  9. using Common;
  10. using Custom;
  11. using LitJson;
  12. namespace Controllers.Admin
  13. {
  14. /// <summary>
  15. /// AppProjectVersion)Controller
  16. /// </summary>
  17. // [Route("${Router}$")]
  18. // [ApiExplorerSettings(GroupName = "AppProjectVersion")]
  19. public class AppProjectVersionController : BaseController
  20. {
  21. private readonly IAppProjectService _AppProjectService;
  22. private readonly IAppProjectVersionService _AppProjectVersionService;
  23. private readonly IAppProjectPageService _AppProjectPageService;
  24. private readonly IAppProjectPageStyleService _AppProjectPageStyleService;
  25. private readonly IAppProjectStaticService _AppProjectStaticService;
  26. private readonly IAppProjectModuleService _AppProjectModuleService;
  27. private readonly IAppProjectParamService _AppProjectParamService;
  28. private readonly IAppProjectBottomService _AppProjectBottomService;
  29. private readonly IAppModuleService _AppModuleService;
  30. private readonly IAppModuleFileService _AppModuleFileService;
  31. private readonly IAppModuleAndroidCodeService _AppModuleAndroidCodeService;
  32. private readonly IAppModuleIosCodeService _AppModuleIosCodeService;
  33. public AppProjectVersionController(IAppProjectService AppProjectService, IAppProjectVersionService AppProjectVersionService, IAppProjectPageService AppProjectPageService, IAppProjectPageStyleService AppProjectPageStyleService, IAppProjectStaticService AppProjectStaticService, IAppProjectModuleService AppProjectModuleService, IAppProjectParamService AppProjectParamService, IAppProjectBottomService AppProjectBottomService, IAppModuleService AppModuleService, IAppModuleFileService AppModuleFileService, IAppModuleAndroidCodeService AppModuleAndroidCodeService, IAppModuleIosCodeService AppModuleIosCodeService)
  34. {
  35. _AppProjectService = AppProjectService;
  36. _AppProjectVersionService = AppProjectVersionService;
  37. _AppProjectPageService = AppProjectPageService;
  38. _AppProjectPageStyleService = AppProjectPageStyleService;
  39. _AppProjectStaticService = AppProjectStaticService;
  40. _AppProjectModuleService = AppProjectModuleService;
  41. _AppProjectParamService = AppProjectParamService;
  42. _AppProjectBottomService = AppProjectBottomService;
  43. _AppModuleService = AppModuleService;
  44. _AppModuleFileService = AppModuleFileService;
  45. _AppModuleAndroidCodeService = AppModuleAndroidCodeService;
  46. _AppModuleIosCodeService = AppModuleIosCodeService;
  47. }
  48. /// <param name="page">分页参数</param>
  49. /// <summary>
  50. /// 列表
  51. /// </summary>
  52. /// <param name="page">分页对象</param>
  53. /// <param name="param">参数请求体</param>
  54. /// <returns>列表</returns>
  55. [HttpGet]
  56. [Route("/v1/omega_source/AppProjectVersion/getAppProjectVersionList")]
  57. public IActionResult getAppProjectVersionList([FromQuery] PagerInfo page, [FromQuery] AppProjectVersion param)
  58. {
  59. var response = _AppProjectVersionService.getAppProjectVersionList(page, param);
  60. return SUCCESS(response);
  61. }
  62. /// <summary>
  63. /// 详情
  64. /// </summary>
  65. /// <param name="param">参数请求体</param>
  66. /// <returns>详情</returns>
  67. [HttpGet]
  68. [Route("/v1/omega_source/AppProjectVersion/getAppProjectVersionQuery")]
  69. public IActionResult getAppProjectVersionQuery([FromQuery] AppProjectVersion param)
  70. {
  71. var response = _AppProjectVersionService.GetFirst(m => m.id == param.id).Adapt<GetAppProjectVersionQueryVo>();
  72. return SUCCESS(response);
  73. }
  74. /// <summary>
  75. /// 添加
  76. /// </summary>
  77. /// <param name="param">参数请求体</param>
  78. /// <returns>添加</returns>
  79. [HttpPost]
  80. [Route("/v1/omega_source/AppProjectVersion/addAppProjectVersion")]
  81. public IActionResult addAppProjectVersion([FromBody] AppProjectVersion param)
  82. {
  83. var modal = param.Adapt<AppProjectVersion>().ToCreate(HttpContext);
  84. var response = _AppProjectVersionService.InsertReturnIdentity(modal);
  85. // string extractPath = "/AppProject/" + param.appId + "/" + param.id + "/";
  86. // FileHelper.ExtractZip(param.staticFile, extractPath, true);
  87. // _AppProjectPageService.getPageList(extractPath, param.appId, response);
  88. // _AppProjectStaticService.getStaticFileList(extractPath, param.appId, response);
  89. return SUCCESS(response);
  90. }
  91. /// <summary>
  92. /// 修改
  93. /// </summary>
  94. /// <param name="param">参数请求体</param>
  95. /// <returns>修改</returns>
  96. [HttpPut]
  97. [Route("/v1/omega_source/AppProjectVersion/updateAppProjectVersion")]
  98. public IActionResult updateAppProjectVersion([FromBody] AppProjectVersion param)
  99. {
  100. var modal = param.Adapt<AppProjectVersion>().ToUpdate(HttpContext);
  101. var response = _AppProjectVersionService.Update(modal, true);
  102. // string extractPath = "/AppProject/" + param.appId + "/" + param.id + "/";
  103. // FileHelper.ExtractZip(param.staticFile, extractPath, true);
  104. // _AppProjectPageService.getPageList(extractPath, param.appId, param.id);
  105. // _AppProjectStaticService.getStaticFileList(extractPath, param.appId, param.id);
  106. return SUCCESS(response);
  107. }
  108. /// <summary>
  109. /// 删除
  110. /// </summary>
  111. /// <param name="param">参数请求体</param>
  112. /// <returns>删除</returns>
  113. [HttpDelete]
  114. [Route("/v1/omega_source/AppProjectVersion/deleteAppProjectVersion/{id}")]
  115. public IActionResult deleteAppProjectVersion([FromQuery] AppProjectVersion param)
  116. {
  117. var response = _AppProjectVersionService.Delete(param);
  118. return SUCCESS(response);
  119. }
  120. /// <summary>
  121. /// 同步已有页面
  122. /// </summary>
  123. /// <param name="param">参数请求体</param>
  124. /// <returns>同步已有页面</returns>
  125. [HttpGet]
  126. [Route("/v1/omega_source/AppProjectVersion/sycnAppProjectPage")]
  127. public IActionResult sycnAppProjectPage([FromQuery] AppProjectVersion param)
  128. {
  129. var ver = _AppProjectVersionService.GetFirst(m => m.id == param.id);
  130. var defaultPageType = _AppProjectPageStyleService.GetFirst(m => m.appId == param.appId && m.versionId == param.id) ?? new AppProjectPageStyle();
  131. string dir = _AppProjectVersionService.sycnAppProjectPage(param);
  132. _AppProjectPageService.getPageList(dir, ver.appId, param.id, defaultPageType);
  133. _AppProjectStaticService.getStaticFileList(dir, ver.appId, param.id);
  134. return SUCCESS("ok");
  135. }
  136. /// <summary>
  137. /// 下载
  138. /// </summary>
  139. /// <param name="param">参数请求体</param>
  140. /// <returns>下载</returns>
  141. [HttpGet]
  142. [Route("/v1/omega_source/AppProjectVersion/downloadAppProject")]
  143. public IActionResult downloadAppProject([FromQuery] AppProjectVersion param)
  144. {
  145. var appProjectVersion = _AppProjectVersionService.GetFirst(m => m.id == param.id) ?? new AppProjectVersion();
  146. var appProject = _AppProjectService.GetFirst(m => m.id == appProjectVersion.appId) ?? new AppProject();
  147. var appProjectModules = _AppProjectModuleService.GetList(m => m.appId == appProjectVersion.appId);
  148. var appProjectParams = _AppProjectParamService.GetList(m => m.appId == appProjectVersion.appId);
  149. var appProjectBottoms = _AppProjectBottomService.GetList(m => m.appId == appProjectVersion.appId);
  150. var moduleIds = appProjectModules.Select(m => m.moduleId).ToList();
  151. var appModules = _AppModuleService.GetList(m => moduleIds.Contains(m.id));
  152. var appModulesFiles = _AppModuleFileService.GetList(m => moduleIds.Contains(m.moduleId));
  153. var appProjectPages = _AppProjectPageService.GetList(m => m.appId == appProjectVersion.appId && m.versionId == appProjectVersion.id);
  154. MakeData makeData = new();
  155. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  156. makeData.requestId = requestId;
  157. Dictionary<string, string> attach = new();
  158. attach.Add("appKind", appProject.appKind);
  159. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  160. Dictionary<string, object> pushData = new();
  161. pushData.Add("appProject", JsonMapper.ToJson(appProject));
  162. pushData.Add("appProjectVersion", JsonMapper.ToJson(appProjectVersion));
  163. pushData.Add("appProjectModules", JsonMapper.ToJson(appProjectModules));
  164. pushData.Add("appProjectParams", JsonMapper.ToJson(appProjectParams));
  165. pushData.Add("appProjectPages", JsonMapper.ToJson(appProjectPages));
  166. pushData.Add("appProjectBottoms", JsonMapper.ToJson(appProjectBottoms));
  167. pushData.Add("appModules", JsonMapper.ToJson(appModules));
  168. pushData.Add("appModulesFiles", JsonMapper.ToJson(appModulesFiles));
  169. if (appProject.appKind == "Android")
  170. {
  171. var appModulesAndroidCode = _AppModuleAndroidCodeService.GetList(m => moduleIds.Contains(m.moduleId));
  172. pushData.Add("appModulesAndroidCode", JsonMapper.ToJson(appModulesAndroidCode));
  173. }
  174. else if (appProject.appKind == "ios")
  175. {
  176. var appModulesIosCode = _AppModuleIosCodeService.GetList(m => moduleIds.Contains(m.moduleId));
  177. pushData.Add("appModulesIosCode", JsonMapper.ToJson(appModulesIosCode));
  178. }
  179. string fileName = "";
  180. Dictionary<string, string> response = new();
  181. if (appProject.appKind == "Android")
  182. {
  183. fileName = "androidapp" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".zip";
  184. response.Add("downloadUrl", App.OptionsSetting.OssConfigs.Host + "/androidcode/" + fileName);
  185. }
  186. else if (appProject.appKind == "ios")
  187. {
  188. fileName = "iosapp" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".zip";
  189. response["downloadUrl"] = App.OptionsSetting.OssConfigs.Host + "/applecode/" + fileName;
  190. }
  191. pushData.Add("fileName", fileName);
  192. makeData.data = pushData;
  193. // RabbitMQClient.Instance.Push("MakeAppQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  194. RedisServer.Cache.LPush("MakeAppQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  195. return SUCCESS(response);
  196. }
  197. /// <summary>
  198. /// 生成进度
  199. /// </summary>
  200. /// <param name="param">参数请求体</param>
  201. /// <returns>生成进度</returns>
  202. [HttpGet]
  203. [Route("/v1/omega_source/AppProjectVersion/getAppMakeProcess")]
  204. public IActionResult getAppMakeProcess([FromQuery] AppProjectVersion param)
  205. {
  206. var step = RedisServer.Cache.Get<int>("ProjectMakeProcess:" + param.id);
  207. Dictionary<string, int> response = new();
  208. response.Add("step", step);
  209. return SUCCESS(response);
  210. }
  211. }
  212. }