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 }