You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
7.1 KiB
182 lines
7.1 KiB
using Furion;
|
|
using Furion.DependencyInjection;
|
|
using Furion.DynamicApiController;
|
|
using Furion.FriendlyException;
|
|
using Magic.Core;
|
|
using Magic.FlowCenter.Entity;
|
|
using Mapster;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using SqlSugar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Magic.FlowCenter.Service;
|
|
|
|
/// <summary>
|
|
/// 表单管理
|
|
/// </summary>
|
|
[ApiDescriptionSettings("FlowCenter", Name = "FormManage", Order = 100)]
|
|
public class FlcFormManageService : IFlcFormManageService, IDynamicApiController, ITransient
|
|
{
|
|
private readonly SqlSugarRepository<FlcForm> _flcFormRep;
|
|
|
|
public FlcFormManageService(SqlSugarRepository<FlcForm> flcFormRep)
|
|
{
|
|
_flcFormRep = flcFormRep;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 分页查询表单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("/flcForm/page")]
|
|
public async Task<dynamic> QueryFormPageList([FromQuery] PageFlcFormInput input)
|
|
{
|
|
var orgs = await _flcFormRep.AsQueryable()
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name.Trim()))
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Id), u => u.Id == long.Parse(input.Id.Trim()))
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.OrgId), u => u.OrgId == long.Parse(input.OrgId) || u.OrgId == null || u.OrgId == 0)
|
|
.Where(u => u.Status != CommonStatus.DELETED)
|
|
.OrderBy(u => u.Sort)
|
|
.Select<FlcFormOutput>()
|
|
.ToPagedListAsync(input.PageNo, input.PageSize);
|
|
return orgs.XnPagedResult();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取表单列表
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("/flcForm/list")]
|
|
public async Task<List<FlcFormOutput>> GetFormList([FromQuery] FlcFormInput input)
|
|
{
|
|
var dataScopeList = await DataFilterExtensions.GetDataScopeIdList(FilterType.Org);
|
|
var forms = await _flcFormRep.AsQueryable()
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.OrgId), u => u.OrgId == long.Parse(input.OrgId) || u.OrgId == null || u.OrgId == 0)
|
|
.WhereIF(dataScopeList.Any(), u => dataScopeList.Contains(u.OrgId??0)|| u.OrgId == null || u.OrgId == 0)
|
|
.Where(u => u.Status == CommonStatus.ENABLE)
|
|
.OrderBy(u => u.Sort)
|
|
.ToListAsync();
|
|
return forms.Adapt<List<FlcFormOutput>>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 增加表单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/flcForm/add")]
|
|
public async Task AddForm(AddFlcFormInput input)
|
|
{
|
|
var isExist = await _flcFormRep.AnyAsync(u => u.Name == input.Name);
|
|
if (isExist)
|
|
throw Oops.Oh(ErrorCode.D2002);
|
|
|
|
var flcForm = input.Adapt<FlcForm>();
|
|
flcForm.Status = CommonStatus.ENABLE;
|
|
//反射获取这个表单的所有参数和备注,排除主键
|
|
if (flcForm.FrmType == FormType.CUSTOMFORM)
|
|
{
|
|
var dataname = input.WebId.Substring(0, 1).ToUpper() + input.WebId.Substring(1);
|
|
var t = App.Assemblies
|
|
.SelectMany(a => a.GetTypes().Where(t => t.FullName.Contains("Magic.FlowCenter.Entity") && t.FullName.Contains("." + dataname))).First();
|
|
List<string> list = new List<string>();
|
|
List<object> parses = new List<object>();
|
|
dynamic obj = Activator.CreateInstance(t);
|
|
foreach (PropertyInfo info in obj.GetType().GetProperties())
|
|
{
|
|
if (info.Name != "Id")
|
|
{
|
|
list.Add(info.Name);
|
|
parses.Add(new { id = info.Name, name = info.Name });
|
|
}
|
|
}
|
|
flcForm.ContentData = string.Join(',', list);
|
|
flcForm.Fields = list.Count();
|
|
flcForm.ContentParse = parses.ToJsonString();
|
|
}
|
|
await _flcFormRep.InsertAsync(flcForm);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除表单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/flcForm/delete")]
|
|
public async Task DeleteForm(DeleteFlcFormInput input)
|
|
{
|
|
var flcForm = await _flcFormRep.FirstOrDefaultAsync(u => u.Id == long.Parse(input.Id));
|
|
|
|
(flcForm.CreatedUserId ?? 0).CheckDataScope();
|
|
//假删除
|
|
await _flcFormRep.Change<FlcForm>().UpdateAsync(u => u.Id == long.Parse(input.Id),a => new FlcForm
|
|
{
|
|
Status = CommonStatus.DELETED,
|
|
IsDeleted = true,
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新表单
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("/flcForm/edit")]
|
|
public async Task UpdateForm(UpdateFlcFormInput input)
|
|
{
|
|
if (input.Id != "0" && !string.IsNullOrEmpty(input.Id))
|
|
{
|
|
var org = await _flcFormRep.FirstOrDefaultAsync(u => u.Id == long.Parse(input.Id));
|
|
_ = org ?? throw Oops.Oh(ErrorCode.D2000);
|
|
}
|
|
|
|
var flcForm = await _flcFormRep.FirstOrDefaultAsync(u => u.Id == long.Parse(input.Id));
|
|
// 检测数据范围能不能操作这个表单
|
|
(flcForm.CreatedUserId ?? 0).CheckDataScope();
|
|
|
|
var isExist = await _flcFormRep.AnyAsync(u => (u.Name == input.Name) && u.Id != flcForm.Id);
|
|
if (isExist)
|
|
throw Oops.Oh(ErrorCode.D2002);
|
|
flcForm = input.Adapt<FlcForm>();
|
|
//反射获取这个表单的所有参数和备注,排除主键
|
|
if (flcForm.FrmType == FormType.CUSTOMFORM)
|
|
{
|
|
var dataname = input.WebId.Substring(0, 1).ToUpper() + input.WebId.Substring(1);
|
|
var t = App.Assemblies
|
|
.SelectMany(a => a.GetTypes().Where(t => t.FullName.Contains("Magic.FlowCenter.Entity") && t.FullName.Contains("." + dataname))).First();
|
|
List<string> list = new List<string>();
|
|
List<object> parses = new List<object>();
|
|
dynamic obj = Activator.CreateInstance(t);
|
|
foreach (PropertyInfo info in obj.GetType().GetProperties())
|
|
{
|
|
if (info.Name != "Id")
|
|
{
|
|
list.Add(info.Name);
|
|
parses.Add(new { id = info.Name, name = info.Name });
|
|
}
|
|
}
|
|
flcForm.ContentData = string.Join(',', list);
|
|
flcForm.Fields = list.Count();
|
|
flcForm.ContentParse = parses.ToJsonString();
|
|
}
|
|
await _flcFormRep.AsUpdateable(flcForm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取表单信息
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("/flcForm/detail")]
|
|
public async Task<FlcForm> GetForm([FromQuery] QueryFlcFormInput input)
|
|
{
|
|
return await _flcFormRep.FirstOrDefaultAsync(u => u.Id == long.Parse(input.Id));
|
|
}
|
|
}
|