using Vo; using Microsoft.AspNetCore.Mvc; using Model; using Services; using Model.Base; using Vo.Admin; using Mapster; using Infrastructure; using Common; using Custom; using LitJson; namespace Controllers.Admin { /// /// AppProjectVersion)Controller /// // [Route("${Router}$")] // [ApiExplorerSettings(GroupName = "AppProjectVersion")] public class AppProjectVersionController : BaseController { private readonly IAppProjectService _AppProjectService; private readonly IAppProjectVersionService _AppProjectVersionService; private readonly IAppProjectPageService _AppProjectPageService; private readonly IAppProjectPageStyleService _AppProjectPageStyleService; private readonly IAppProjectStaticService _AppProjectStaticService; private readonly IAppProjectModuleService _AppProjectModuleService; private readonly IAppProjectParamService _AppProjectParamService; private readonly IAppProjectBottomService _AppProjectBottomService; private readonly IAppModuleService _AppModuleService; private readonly IAppModuleFileService _AppModuleFileService; private readonly IAppModuleAndroidCodeService _AppModuleAndroidCodeService; private readonly IAppModuleIosCodeService _AppModuleIosCodeService; 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) { _AppProjectService = AppProjectService; _AppProjectVersionService = AppProjectVersionService; _AppProjectPageService = AppProjectPageService; _AppProjectPageStyleService = AppProjectPageStyleService; _AppProjectStaticService = AppProjectStaticService; _AppProjectModuleService = AppProjectModuleService; _AppProjectParamService = AppProjectParamService; _AppProjectBottomService = AppProjectBottomService; _AppModuleService = AppModuleService; _AppModuleFileService = AppModuleFileService; _AppModuleAndroidCodeService = AppModuleAndroidCodeService; _AppModuleIosCodeService = AppModuleIosCodeService; } /// 分页参数 /// /// 列表 /// /// 分页对象 /// 参数请求体 /// 列表 [HttpGet] [Route("/v1/omega_source/AppProjectVersion/getAppProjectVersionList")] public IActionResult getAppProjectVersionList([FromQuery] PagerInfo page, [FromQuery] AppProjectVersion param) { var response = _AppProjectVersionService.getAppProjectVersionList(page, param); return SUCCESS(response); } /// /// 详情 /// /// 参数请求体 /// 详情 [HttpGet] [Route("/v1/omega_source/AppProjectVersion/getAppProjectVersionQuery")] public IActionResult getAppProjectVersionQuery([FromQuery] AppProjectVersion param) { var response = _AppProjectVersionService.GetFirst(m => m.id == param.id).Adapt(); return SUCCESS(response); } /// /// 添加 /// /// 参数请求体 /// 添加 [HttpPost] [Route("/v1/omega_source/AppProjectVersion/addAppProjectVersion")] public IActionResult addAppProjectVersion([FromBody] AppProjectVersion param) { var modal = param.Adapt().ToCreate(HttpContext); var response = _AppProjectVersionService.InsertReturnIdentity(modal); // string extractPath = "/AppProject/" + param.appId + "/" + param.id + "/"; // FileHelper.ExtractZip(param.staticFile, extractPath, true); // _AppProjectPageService.getPageList(extractPath, param.appId, response); // _AppProjectStaticService.getStaticFileList(extractPath, param.appId, response); return SUCCESS(response); } /// /// 修改 /// /// 参数请求体 /// 修改 [HttpPut] [Route("/v1/omega_source/AppProjectVersion/updateAppProjectVersion")] public IActionResult updateAppProjectVersion([FromBody] AppProjectVersion param) { var modal = param.Adapt().ToUpdate(HttpContext); var response = _AppProjectVersionService.Update(modal, true); // string extractPath = "/AppProject/" + param.appId + "/" + param.id + "/"; // FileHelper.ExtractZip(param.staticFile, extractPath, true); // _AppProjectPageService.getPageList(extractPath, param.appId, param.id); // _AppProjectStaticService.getStaticFileList(extractPath, param.appId, param.id); return SUCCESS(response); } /// /// 删除 /// /// 参数请求体 /// 删除 [HttpDelete] [Route("/v1/omega_source/AppProjectVersion/deleteAppProjectVersion/{id}")] public IActionResult deleteAppProjectVersion([FromQuery] AppProjectVersion param) { var response = _AppProjectVersionService.Delete(param); return SUCCESS(response); } /// /// 同步已有页面 /// /// 参数请求体 /// 同步已有页面 [HttpGet] [Route("/v1/omega_source/AppProjectVersion/sycnAppProjectPage")] public IActionResult sycnAppProjectPage([FromQuery] AppProjectVersion param) { var ver = _AppProjectVersionService.GetFirst(m => m.id == param.id); var defaultPageType = _AppProjectPageStyleService.GetFirst(m => m.appId == param.appId && m.versionId == param.id) ?? new AppProjectPageStyle(); string dir = _AppProjectVersionService.sycnAppProjectPage(param); _AppProjectPageService.getPageList(dir, ver.appId, param.id, defaultPageType); _AppProjectStaticService.getStaticFileList(dir, ver.appId, param.id); return SUCCESS("ok"); } /// /// 下载 /// /// 参数请求体 /// 下载 [HttpGet] [Route("/v1/omega_source/AppProjectVersion/downloadAppProject")] public IActionResult downloadAppProject([FromQuery] AppProjectVersion param) { var appProjectVersion = _AppProjectVersionService.GetFirst(m => m.id == param.id) ?? new AppProjectVersion(); var appProject = _AppProjectService.GetFirst(m => m.id == appProjectVersion.appId) ?? new AppProject(); var appProjectModules = _AppProjectModuleService.GetList(m => m.appId == appProjectVersion.appId); var appProjectParams = _AppProjectParamService.GetList(m => m.appId == appProjectVersion.appId); var appProjectBottoms = _AppProjectBottomService.GetList(m => m.appId == appProjectVersion.appId); var moduleIds = appProjectModules.Select(m => m.moduleId).ToList(); var appModules = _AppModuleService.GetList(m => moduleIds.Contains(m.id)); var appModulesFiles = _AppModuleFileService.GetList(m => moduleIds.Contains(m.moduleId)); var appProjectPages = _AppProjectPageService.GetList(m => m.appId == appProjectVersion.appId && m.versionId == appProjectVersion.id); MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; Dictionary attach = new(); attach.Add("appKind", appProject.appKind); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); Dictionary pushData = new(); pushData.Add("appProject", JsonMapper.ToJson(appProject)); pushData.Add("appProjectVersion", JsonMapper.ToJson(appProjectVersion)); pushData.Add("appProjectModules", JsonMapper.ToJson(appProjectModules)); pushData.Add("appProjectParams", JsonMapper.ToJson(appProjectParams)); pushData.Add("appProjectPages", JsonMapper.ToJson(appProjectPages)); pushData.Add("appProjectBottoms", JsonMapper.ToJson(appProjectBottoms)); pushData.Add("appModules", JsonMapper.ToJson(appModules)); pushData.Add("appModulesFiles", JsonMapper.ToJson(appModulesFiles)); if (appProject.appKind == "Android") { var appModulesAndroidCode = _AppModuleAndroidCodeService.GetList(m => moduleIds.Contains(m.moduleId)); pushData.Add("appModulesAndroidCode", JsonMapper.ToJson(appModulesAndroidCode)); } else if (appProject.appKind == "ios") { var appModulesIosCode = _AppModuleIosCodeService.GetList(m => moduleIds.Contains(m.moduleId)); pushData.Add("appModulesIosCode", JsonMapper.ToJson(appModulesIosCode)); } string fileName = ""; Dictionary response = new(); if (appProject.appKind == "Android") { fileName = "androidapp" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".zip"; response.Add("downloadUrl", App.OptionsSetting.OssConfigs.Host + "/androidcode/" + fileName); } else if (appProject.appKind == "ios") { fileName = "iosapp" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".zip"; response["downloadUrl"] = App.OptionsSetting.OssConfigs.Host + "/applecode/" + fileName; } pushData.Add("fileName", fileName); makeData.data = pushData; // RabbitMQClient.Instance.Push("MakeAppQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); RedisServer.Cache.LPush("MakeAppQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); return SUCCESS(response); } /// /// 生成进度 /// /// 参数请求体 /// 生成进度 [HttpGet] [Route("/v1/omega_source/AppProjectVersion/getAppMakeProcess")] public IActionResult getAppMakeProcess([FromQuery] AppProjectVersion param) { var step = RedisServer.Cache.Get("ProjectMakeProcess:" + param.id); Dictionary response = new(); response.Add("step", step); return SUCCESS(response); } } }