using JNPF.Common.Core.Manager;
using JNPF.Common.Dtos.DataBase;
using JNPF.Common.Enums;
using JNPF.Common.Extension;
using JNPF.Common.Filter;
using JNPF.Common.Security;
using JNPF.DependencyInjection;
using JNPF.DynamicApiController;
using JNPF.FriendlyException;
using JNPF.Systems.Entitys.Dto.System.ModuleDataAuthorizeLink;
using JNPF.Systems.Entitys.System;
using JNPF.VisualDev.Engine.Core;
using JNPF.VisualDev.Entitys;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using SqlSugar;
namespace JNPF.Systems;
///
/// 数据权限连接管理
/// 版 本:V3.2
/// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com)
/// 日 期:2021-06-01.
///
[ApiDescriptionSettings(Tag = "System", Name = "ModuleDataAuthorizeLink", Order = 214)]
[Route("api/system/[controller]")]
public class ModuleDataAuthorizeLinkService : IDynamicApiController, ITransient
{
///
/// 服务基础仓储.
///
private readonly ISqlSugarRepository _repository;
///
/// 数据库管理.
///
private readonly IDataBaseManager _dataBaseManager;
///
/// 用户管理器.
///
private readonly IUserManager _userManager;
///
/// 初始化一个类型的新实例.
///
public ModuleDataAuthorizeLinkService(
ISqlSugarRepository repository,
IDataBaseManager dataBaseManager,
IUserManager userManager)
{
_repository = repository;
_dataBaseManager = dataBaseManager;
_userManager = userManager;
}
#region GET
///
/// 代码生成字段列表.
///
/// 连接id.
/// 表名.
/// 分页参数.
///
[HttpGet("{linkId}/Tables/{tableName}/Fields/{menuType}/{dataType}")]
public async Task GetList(string linkId, string tableName, string menuType, string dataType, [FromQuery] PageInputBase input)
{
var link = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.Id == linkId && x.DeleteMark == null);
if (string.IsNullOrEmpty(tableName)) return new PageResult();
var tenantLink = link ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName);
var data = _dataBaseManager.GetFieldList(tenantLink, tableName).Adapt>();
if (input.keyword.IsNotEmptyOrNull())
data = data.FindAll(a => a.field.Contains(input.keyword) || (a.fieldName.IsNotEmptyOrNull() && a.fieldName.Contains(input.keyword))).ToList();
if (menuType == "2" && dataType != "3")
{
data.ForEach(item =>
{
item.field = item.field.ReplaceRegex("^f_", string.Empty).ParseToPascalCase().ToLowerCase();
});
}
var pageList = new SqlSugarPagedList()
{
list = data.Skip((input.currentPage - 1) * input.pageSize).Take(input.pageSize).ToList(),
pagination = new Pagination()
{
CurrentPage = input.currentPage,
PageSize = input.pageSize,
Total = data.Count
}
};
return PageResult.SqlSugarPageResult(pageList);
}
///
/// 信息.
///
///
///
///
[HttpGet("getInfo/{menudId}/{type}")]
public async Task GetInfo_Api(string menudId, string type)
{
var data = await _repository.GetFirstAsync(x => x.ModuleId == menudId && x.Type == type);
return data.Adapt();
}
///
/// 获取表名列表.
///
///
///
///
[HttpGet("getVisualTables/{menuId}/{type}")]
public async Task GetVisualTables(string menuId, string type)
{
var tableOutput = new ModuleDataAuthorizeLinkTableOutput();
var moduleEntity = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.Id == menuId && x.DeleteMark == null);
if (moduleEntity.Type == 3)
{
var visualDevId = moduleEntity.PropertyJson.ToObject()["moduleId"].ToString();
var visualDevEntity = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.Id == visualDevId && x.DeleteMark == null);
var tInfo = new TemplateParsingBase(visualDevEntity);
tableOutput.linkId = visualDevEntity.DbLinkId;
tableOutput.linkTables = tInfo.AllTable.Select(x => x.table).ToList();
}
if (moduleEntity.Type == 2)
{
var data = await _repository.GetFirstAsync(x => x.ModuleId == menuId && x.Type == type);
if (data.IsNotEmptyOrNull())
{
tableOutput.linkId = data.LinkId;
tableOutput.linkTables = data.LinkTables.Split(",").ToList();
}
}
return tableOutput;
}
#endregion
#region POST
///
/// 保存数据.
///
/// 主键值.
///
[HttpPost("saveLinkData")]
public async Task SaveLinkData([FromBody] ModuleDataAuthorizeLinkInfoOutput input)
{
await _repository.DeleteAsync(x => x.ModuleId == input.moduleId && x.Type == input.dataType);
var entity = input.Adapt();
entity.Id = SnowflakeIdHelper.NextId();
entity.Type = input.dataType;
var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
if (isOk < 1)
throw Oops.Oh(ErrorCode.COM1000);
}
#endregion
}