You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

514 lines
17 KiB
C#

5 months ago
using System.Data;
using Infrastructure;
using Infrastructure.Helpers.Excel;
using Infrastructure.Helpers.Excel.Model;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using OpenAuth.App.FormScheme;
using OpenAuth.App.FormScheme.Request;
using OpenAuth.App.FormScheme.Response;
using OpenAuth.App.Request;
using OpenAuth.Repository.Domain;
using SqlSugar;
namespace OpenAuth.WebApi.Controllers
{
/// <summary>
/// 日 期: 2024-03-02
/// 描 述: 表单设计
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class FormSchemeController : ControllerBase
{
private readonly FormSchemeApp _app;
public FormSchemeController(FormSchemeApp app)
{
_app = app;
}
/// <summary>
/// 查询表单分页信息 custmerform/scheme/page
/// </summary>
/// <param name="keyWord">关键字</param>
/// <param name="category">分类</param>
/// <param name="isEnabled">状态1启用0未启用2草稿3全部</param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="type"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<List<FormSchemeInfo>>>> LoadFormPage(string keyWord, string category, int page, int limit, int isEnabled = 3)
{
return await _app.LoadFormPage(keyWord, category, page, limit, isEnabled);
}
/// <summary>
/// 获取表单数据
/// </summary>
/// <param name="schemeId"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<FormScheme>> LoadFormScheme(string schemeId)
{
try
{
return new Response<FormScheme>()
{
Result = await _app.GetScheme(schemeId),
Code = 200,
Message = "获取数据成功"
};
}
catch (Exception e)
{
return new Response<FormScheme>()
{
Result = null,
Code = 500,
Message = "获取数据失败"
};
}
}
/// <summary>
/// 新增自定义表单custmerform/scheme
/// </summary>
/// <param name="entity">模板数据</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<string>> AddForm(FormSchemeReq entity)
{
var result = new Response<string>();
try
{
result = await _app.SaveEntity(string.Empty, entity.Info, entity.Scheme);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 获取自定义表单设计数据custmerform/scheme/{id}
/// </summary>
/// <param name="id">id</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<FormSchemeReq>> GetForm(string id)
{
try
{
FormSchemeReq data = new FormSchemeReq();
data.Info = await _app.GetSchemeInfo(id);
if (data.Info != null)
{
data.Scheme = await _app.GetScheme(data.Info.SchemeId);
}
return new Response<FormSchemeReq>
{
Result = data
};
}
catch (Exception ex)
{
return new Response<FormSchemeReq>
{
Code = 500,
Message = "获取数据失败",
};
}
}
/// <summary>
/// 获取自定义表单基础信息custmerform/scheme/info/{id}
/// </summary>
/// <param name="id">id</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<FormSchemeInfo>> GetSchemeInfoEntity(string id)
{
try
{
var data = await _app.GetSchemeInfo(id);
return new Response<FormSchemeInfo>
{
Result = data
};
}
catch (Exception ex)
{
return new Response<FormSchemeInfo>
{
Code = 500,
Message = "获取数据失败",
};
}
}
/// <summary>
/// 更新自定义表单custmerform/scheme/{id}
/// </summary>
/// <param name="id">id</param>
/// <param name="entity">模板数据</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> UpdateForm(string id, FormSchemeReq entity)
{
var result = new Response<bool>();
try
{
await _app.SaveSchEntity(id, entity.Info, entity.Scheme);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 更新表单模板版本 custmerform/scheme/history/{id}
/// </summary>
/// <param name="id">信息主键</param>
/// <param name="schemeId">模板主键</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> UpdateScheme(string id, string schemeId)
{
var result = new Response<bool>();
try
{
result = await _app.UpdateScheme(id, schemeId);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 启用/停用表单custmerform/scheme/state/{id}
/// </summary>
/// <param name="id">主键</param>
/// <param name="state">状态1启用0禁用</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> UpdateState(string id, int state)
{
var result = new Response<bool>();
try
{
result = await _app.UpdateState(id, state);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 删除自定义表单custmerform/scheme/{id}
/// </summary>
/// <param name="id">id</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteForm(string id)
{
var result = new Response<bool>();
try
{
result = await _app.Delete(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 获取数据源列名custmerform/sql/colnames/{dbCode}
/// </summary>
/// <param name="code">数据源编码</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<List<string>>> GetDataColName(string dbCode, string sql)
{
var result = new Response<List<string>>();
try
{
result.Result = await _app.GetDataColName(dbCode, sql);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 获取自定义表单预览
/// </summary>
/// <param name="id">id</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<FormScheme>> GetPreviewForm(string keyValue)
{
try
{
var scheme = await _app.GetScheme(keyValue);
return new Response<FormScheme>
{
Result = scheme
};
}
catch (Exception ex)
{
return new Response<FormScheme>
{
Code = 500,
Message = "获取数据失败"
};
}
}
/// <summary>
/// 获取自定义表单模板历史数据custmerform/scheme/history/page/{id}
/// </summary>
/// <param name="pagination">分页参数</param>
/// <param name="schemeInfoId">自定义表单信息主键</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<List<FormScheme>>>> GetSchemePageList([FromQuery] PageReq pagination, string schemeInfoId)
{
try
{
return await _app.GetSchemePageList(pagination, schemeInfoId);
}
catch (Exception ex)
{
return new Response<PageInfo<List<FormScheme>>>
{
Code = 500,
Message = "获取数据失败"
};
}
}
/// <summary>
/// 获取表单分页数据custmerform/data/page/{mid}/{id}
/// </summary>
/// <param name="paginationInputDto">分页参数</param>
/// <param name="mid">功能id</param>
/// <param name="id">id数据</param>
/// <param name="queryJson">查询参数</param>
/// <param name="ldparam">桌面跳转参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<PageInfo<DataTable>>> GetFormDataPage(string mid, string id, FormQueryReq query)
{
try
{
//return await _app.GetFormDataPage(mid, query.Ldparam, id, query.PaginationInputDto, query.QueryJson);
return await _app.GetFormDataNewPage(mid, query.Ldparam, id, query.PaginationInputDto, query.QueryJson);
}
catch (Exception ex)
{
return new Response<PageInfo<DataTable>>
{
Code = 500,
Message = ex.Message.ToString()
};
}
}
/// <summary>
/// 获取表单列表数据custmerform/datas/{mid}/{id}
/// </summary>
/// <param name="mid">功能id</param>
/// <param name="id">id数据</param>
/// <param name="queryJson">查询参数</param>
/// <param name="sidx">排序字段</param>
/// <param name="ldparam">桌面跳转参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<DataTable>> GetFormDataList(string mid, string id, FormQueryReq query)
{
try
{
return new Response<DataTable>
{
Result = await _app.GetFormDataList(mid, id, query.QueryJson, query.Sidx)
};
}
catch (Exception ex)
{
return new Response<DataTable>
{
Code = 500,
Message = "获取数据失败"
};
}
}
/// <summary>
/// 获取表单数据 "custmerform/data/{id}"
/// </summary>
/// <param name="id">模板id</param>
/// <param name="key">条件字段</param>
/// <param name="keyValue">条件值</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<Dictionary<string, DataTable>>> GetFormData(string id, string key, string keyValue)
{
var response = new Response<Dictionary<string, DataTable>>();
try
{
response.Result = await _app.GetFormDataNew(id, key, keyValue);
return response;
}
catch (Exception ex)
{
response.Code = 500;
response.Message = ex.Message.ToString();
return response;
}
}
/// <summary>
/// 保存自定义表单数据 custmerform/data
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<JObject>> SaveForm(FormDataReq dto)
{
var result = new Response<JObject>();
try
{
result = await _app.SaveFormDataNew(dto);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message.ToString();
}
return result;
}
/// <summary>
/// 删除表单数据
/// </summary>
/// <param name="id"></param>
/// <param name="key"></param>
/// <param name="keyValue"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<string>> DeleteFormData(string id, string key, string keyValue)
{
var result = new Response<string>();
try
{
result = await _app.DeleteFormData(id, key, keyValue);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = "提交失败";
}
return result;
}
#region 导入
/// <summary>
/// 导入数据
/// </summary>
/// <param name="id"></param>
/// <param name="pkey"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<dynamic>> ImportExcel(string id, string pkey, string path)
{
var result = new Response<dynamic>();
try
{
// 获取excel文件数据暂时只支持单sheet导入后续升级
DataTable dt = ExcelHelper.ExcelImport(path);
var res2 = await _app.ImportTable(id, dt, pkey);
var data = new
{
Success = res2.snum,
Fail = res2.fnum,
data = res2.elist
};
result.Result = data;
return result;
}
catch (Exception ex)
{
result.Result = false;
result.Message = ex.Message.ToString();
return result;
}
}
/// <summary>
/// 下载模板
/// </summary>
/// <param name="keyValue">文件id</param>
/// <returns></returns>
[HttpGet]
public async Task<FileStreamResult> DownTemplateFile(string id)
{
//解析表单
List<ExcelImportFileds> list = new List<ExcelImportFileds>();
Repository.Domain.FormScheme schemeEntity = await _app.GetScheme(id);
FormSchemeNewModel formSchemeModel = schemeEntity.Scheme.ToObject<FormSchemeNewModel>();
FormDbTableInfo mainTable = formSchemeModel.Db.Find(t => t.Type == "main");
foreach (var tab in formSchemeModel.FormInfo.TabList)
{
foreach (var component in tab.Schemas)
{
if (component == null || component.ComponentProps == null || string.IsNullOrEmpty(component.ComponentProps.DataTable))
{
continue;
}
ExcelImportFileds excelImportFileds = new ExcelImportFileds();
excelImportFileds.ColName = component.Label;
excelImportFileds.Name = component.ComponentProps.FieldName;
excelImportFileds.CsType = component.CsType;
excelImportFileds.RelationType = 0;
list.Add(excelImportFileds);
}
}
//设置导出格式
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.FileName = "数据模板.xls";
excelconfig.IsAllSizeColumn = true;
excelconfig.ColumnEntity = new List<ColumnModel>();
//表头
DataTable dt = new DataTable();
foreach (var col in list)
{
if (col.RelationType != 1 && col.RelationType != 4 && col.RelationType != 5 && col.RelationType != 6 && col.RelationType != 7)
{
excelconfig.ColumnEntity.Add(new ColumnModel()
{
Column = col.Name,
ExcelColumn = col.ColName,
Alignment = "center",
});
dt.Columns.Add(col.Name, typeof(string));
}
}
return File(ExcelHelper.ExportMemoryStream(dt, excelconfig), "application/ms-excel", excelconfig.FileName);
}
#endregion
}
}