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