using NCC.Common.Configuration; using NCC.Common.Core.Manager; using NCC.Common.Enum; using NCC.Common.Extension; using NCC.Common.Helper; using NCC.Common.Model.NPOI; using NCC.DataEncryption; using NCC.Dependency; using NCC.DynamicApiController; using NCC.FriendlyException; using NCC.JsonSerialization; using NCC.System.Entitys.Model.Permission.User; using NCC.System.Interfaces.Common; using NCC.VisualDev.Entitys; using NCC.VisualDev.Entitys.Dto.VisualDevModelData; using NCC.VisualDev.Entitys.Entity; using NCC.VisualDev.Entitys.Model.VisualDevModelData; using NCC.VisualDev.Interfaces; using NCC.VisualDev.Run.Interfaces; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Threading.Tasks; using Yitter.IdGenerator; namespace NCC.VisualDev { /// /// 可视化开发APP基础 /// [ApiDescriptionSettings(Tag = "VisualDev", Name = "App", Order = 175)] [Route("api/visualdev/OnlineDev/[controller]")] public class VisualdevModelAppService : IDynamicApiController, ITransient { private readonly IVisualDevService _visualDevService; private readonly IRunService _runService; private readonly IUserManager _userManager; private readonly IFileService _fileService; /// /// 初始化一个类型的新实例 /// public VisualdevModelAppService(IVisualDevService visualDevService, IRunService runService, IUserManager userManager, IFileService fileService) { _visualDevService = visualDevService; _runService = runService; _userManager = userManager; _fileService = fileService; } #region Get /// /// 获取列表表单配置JSON /// /// 主键id /// [HttpGet("{modelId}/Config")] public async Task GetData(string modelId) { var data = await _visualDevService.GetInfoById(modelId); return data.Adapt(); } /// /// 获取列表配置JSON /// /// 主键id /// [HttpGet("{modelId}/ColumnData")] public async Task GetColumnData(string modelId) { var data = await _visualDevService.GetInfoById(modelId); return new { columnData = data.ColumnData }; } /// /// 获取列表配置JSON /// /// 主键id /// [HttpGet("{modelId}/FormData")] public async Task GetFormData(string modelId) { var data = await _visualDevService.GetInfoById(modelId); return new { formData = data.FormData }; } /// /// 获取列表配置JSON /// /// 主键id /// [HttpGet("{modelId}/FlowTemplate")] public async Task GetFlowTemplate(string modelId) { var data = await _visualDevService.GetInfoById(modelId); return new { flowTemplateJson = data.FlowTemplateJson }; } /// /// 获取数据信息 /// /// /// /// [HttpGet("{modelId}/{id}")] public async Task GetInfo(string id, string modelId) { //模板实体 var templateEntity = await _visualDevService.GetInfoById(modelId); //有表 if (!string.IsNullOrEmpty(templateEntity.Tables) && !"[]".Equals(templateEntity.Tables)) { return new { id = id, data = await _runService.GetHaveTableInfo(id, templateEntity) }; } //无表 var entity = await _runService.GetInfo(id); string data = await _runService.GetIsNoTableInfo(templateEntity, entity.Data); return new { id = entity.Id, data = data }; } /// /// 获取详情 /// /// /// /// [HttpGet("{modelId}/{id}/DataChange")] public async Task GetDetails(string id, string modelId) { //模板实体 var templateEntity = await _visualDevService.GetInfoById(modelId); //有表 if (!string.IsNullOrEmpty(templateEntity.Tables) && !"[]".Equals(templateEntity.Tables)) { return new { id = id, data = await _runService.GetHaveTableInfoDetails(id, templateEntity) }; } //无表 var entity = await _runService.GetInfo(id); string data = await _runService.GetIsNoTableInfoDetails(templateEntity, entity); return new { id = entity.Id, data = data }; } #endregion #region Post /// /// 功能导出 /// /// /// [HttpPost("{modelId}/Actions/ExportData")] public async Task ActionsExportData(string modelId) { //模板实体 var templateEntity = await _visualDevService.GetInfoById(modelId); var jsonStr = templateEntity.Serialize(); return _fileService.Export(jsonStr, templateEntity.FullName); } /// /// 导入 /// /// /// [HttpPost("Model/Actions/ImportData")] public async Task ActionsActionsImport(IFormFile file) { var josn = _fileService.Import(file); var templateEntity = josn.Deserialize(); if (templateEntity == null || templateEntity.Type.IsNullOrEmpty()) throw NCCException.Oh(ErrorCode.D3006); else if (templateEntity.Type != 2) throw NCCException.Oh(ErrorCode.D3009); if (!string.IsNullOrEmpty(templateEntity.Id) && await _visualDevService.GetDataExists(templateEntity.Id)) throw NCCException.Oh(ErrorCode.D1400); if (await _visualDevService.GetDataExists(templateEntity.EnCode, templateEntity.FullName)) throw NCCException.Oh(ErrorCode.D1400); await _visualDevService.CreateImportData(templateEntity); } /// /// 获取数据列表 /// /// 主键id /// 分页查询条件 /// [HttpPost("{modelId}/List")] public async Task List(string modelId, [FromBody] VisualDevModelListQueryInput input) { var templateEntity = await _visualDevService.GetInfoById(modelId); var realList = await _runService.GetListResult(templateEntity, input); return realList; } /// /// 创建数据 /// /// /// /// [HttpPost("{modelId}")] public async Task Create(string modelId, [FromBody] VisualDevModelDataCrInput visualdevModelDataCrForm) { var templateEntity = await _visualDevService.GetInfoById(modelId); await _runService.Create(templateEntity, visualdevModelDataCrForm); } /// /// 修改数据 /// /// /// /// /// [HttpPut("{modelId}/{id}")] public async Task Update(string modelId, string id, [FromBody] VisualDevModelDataUpInput visualdevModelDataUpForm) { var templateEntity = await _visualDevService.GetInfoById(modelId); await _runService.Update(id, templateEntity, visualdevModelDataUpForm); } /// /// 删除数据 /// /// /// /// [HttpDelete("{modelId}/{id}")] public async Task Delete(string id, string modelId) { var templateEntity = await _visualDevService.GetInfoById(modelId); if (!string.IsNullOrEmpty(templateEntity.Tables) && !"[]".Equals(templateEntity.Tables)) { await _runService.DelHaveTableInfo(id, templateEntity); } else { await _runService.DelIsNoTableInfo(id, templateEntity); } } /// /// 批量删除 /// /// /// [HttpPost("batchDelete/{modelId}")] public async Task BatchDelete(string modelId, [FromBody] VisualDevModelDataBatchDelInput input) { var templateEntity = await _visualDevService.GetInfoById(modelId); if (!string.IsNullOrEmpty(templateEntity.Tables) && !"[]".Equals(templateEntity.Tables)) { await _runService.BatchDelHaveTableData(input.ids, templateEntity); } else { await _runService.BatchDelIsNoTableData(input.ids, templateEntity); } } /// /// 导出 /// /// [HttpPost("{modelId}/Actions/Export")] public async Task Export(string modelId, [FromBody] VisualDevModelListQueryInput input) { var userInfo = await _userManager.GetUserInfo(); var templateEntity = await _visualDevService.GetInfoById(modelId); List list = new List(); var pageList = await _runService.GetListResult(templateEntity, input); List> realList = pageList.list.ToObeject>>(); var output = ExcelCreateModel(templateEntity.FormData, realList, input.selectKey, userInfo); return output; } #endregion #region PublicMethod public VisualDevModelDataExportOutput ExcelCreateModel(string formData, List> realList, List keys, UserInfo userInfo) { List templateList = new List(); VisualDevModelDataExportOutput output = new VisualDevModelDataExportOutput(); FormDataModel formDataModel = TemplateKeywordsHelper.ReplaceKeywords(formData).ToObject(); var modelList = _runService.TemplateDataConversion(formDataModel.fields); List columnList = new List(); try { ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = YitIdHelper.NextId().ToString() + ".xls"; excelconfig.HeadFont = "微软雅黑"; excelconfig.HeadPoint = 10; excelconfig.IsAllSizeColumn = true; excelconfig.ColumnModel = new List(); foreach (var item in keys) { var excelColumn = modelList.Find(t => t.__vModel__ == item); if (excelColumn != null) { excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = item, ExcelColumn = excelColumn.__config__.label }); columnList.Add(excelColumn.__config__.label); ; } } var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; ExcelExportHelper>.Export(realList, excelconfig, addPath, columnList); output.name = excelconfig.FileName; output.url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(excelconfig.FileName, "NCC"); return output; } catch (Exception) { throw; } } #endregion } }