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);
}
}
}