From 401b717fc2993bab3b53fb2269cc8f73a3c44d7e Mon Sep 17 00:00:00 2001 From: "DEVICE8\\12494" Date: Thu, 30 Mar 2023 09:43:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=BC=82=E6=AD=A5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=97=B6=EF=BC=8C=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- system/Tnb.Systems/System/DbLinkService.cs | 566 ++++++++++----------- 1 file changed, 283 insertions(+), 283 deletions(-) diff --git a/system/Tnb.Systems/System/DbLinkService.cs b/system/Tnb.Systems/System/DbLinkService.cs index 2ac46374..60fc9d88 100644 --- a/system/Tnb.Systems/System/DbLinkService.cs +++ b/system/Tnb.Systems/System/DbLinkService.cs @@ -28,303 +28,303 @@ namespace JNPF.Systems; [Route("api/system/[controller]")] public class DbLinkService : IDbLinkService, IDynamicApiController, ITransient { - /// - /// 服务基础仓储. - /// - private readonly ISqlSugarRepository _repository; + /// + /// 服务基础仓储. + /// + private readonly ISqlSugarRepository _repository; - /// - /// 数据字典服务. - /// - private readonly IDictionaryDataService _dictionaryDataService; + /// + /// 数据字典服务. + /// + private readonly IDictionaryDataService _dictionaryDataService; - /// - /// 数据库管理. - /// - private readonly IDataBaseManager _dataBaseManager; + /// + /// 数据库管理. + /// + private readonly IDataBaseManager _dataBaseManager; - private readonly IMemoryCache _memCache; + private readonly IMemoryCache _memCache; - /// - /// 初始化一个类型的新实例. - /// - public DbLinkService( - ISqlSugarRepository repository, - IDictionaryDataService dictionaryDataService, - IDataBaseManager dataBaseManager, - IMemoryCache memCache) - { - _repository = repository; - _dictionaryDataService = dictionaryDataService; - _dataBaseManager = dataBaseManager; - _memCache = memCache; - } - - #region GET - - /// - /// 列表. - /// - /// - [HttpGet("")] - public async Task GetList([FromQuery] DbLinkListInput input) - { - var list = await _repository.AsSugarClient().Queryable( - (a, b, c) => new JoinQueryInfos(JoinType.Left, a.CreatorUserId == b.Id, JoinType.Left, a.LastModifyUserId == c.Id)) - .Where((a, b, c) => a.DeleteMark == null) - .WhereIF(input.dbType.IsNotEmptyOrNull(), (a, b, c) => a.DbType == input.dbType) - .WhereIF(input.keyword.IsNotEmptyOrNull(), (a, b, c) => a.FullName.Contains(input.keyword)) - .Select((a, b, c) => new DbLinkListOutput() - { - id = a.Id, - creatorTime = a.CreatorTime, - creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account), - dbType = a.DbType, - enabledMark = a.EnabledMark, - fullName = a.FullName, - host = a.Host, - lastModifyTime = a.LastModifyTime, - lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account), - port = a.Port.ToString(), - sortCode = a.SortCode - }).Distinct().MergeTable().OrderBy((a) => a.sortCode).OrderBy((a) => a.creatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize); - return PageResult.SqlSugarPageResult(list); - } - - /// - /// 下拉框列表. - /// - /// - [HttpGet("Selector")] - public async Task GetSelector([FromQuery] string type) - { - var data = (await GetList()).Adapt>(); - - // 数据库分类 - var dbTypeList = (await _dictionaryDataService.GetList("dbType")).FindAll(x => x.EnabledMark == 1); - var output = new List(); - if (type.IsNullOrEmpty()) + /// + /// 初始化一个类型的新实例. + /// + public DbLinkService( + ISqlSugarRepository repository, + IDictionaryDataService dictionaryDataService, + IDataBaseManager dataBaseManager, + IMemoryCache memCache) { - output.Add(new DbLinkSelectorOutput() - { - id = "-2", - parentId = "0", - fullName = "", - num = data.FindAll(x => x.parentId == null).Count - }); - var defaultDBType = App.GetConfig("ConnectionStrings", true).DBType; - if (defaultDBType.Equals("Kdbndp")) - { - defaultDBType = "KingbaseES"; - } - if (defaultDBType.Equals("Dm")) - { - defaultDBType = "DM8"; - } - output.Add(new DbLinkSelectorOutput() - { - id = "0", - parentId = "-2", - fullName = "默认数据库", - dbType = defaultDBType, - num = 1 - }); + _repository = repository; + _dictionaryDataService = dictionaryDataService; + _dataBaseManager = dataBaseManager; + _memCache = memCache; } - output.Add(new DbLinkSelectorOutput() - { - id = "-1", - parentId = "0", - fullName = "未分类", - num = data.FindAll(x => x.parentId == null).Count - }); + #region GET - foreach (var item in dbTypeList) + /// + /// 列表. + /// + /// + [HttpGet("")] + public async Task GetList([FromQuery] DbLinkListInput input) { - var index = data.FindAll(x => x.dbType.Equals(item.EnCode)).Count; - if (index > 0) - { + var list = await _repository.AsSugarClient().Queryable( + (a, b, c) => new JoinQueryInfos(JoinType.Left, a.CreatorUserId == b.Id, JoinType.Left, a.LastModifyUserId == c.Id)) + .Where((a, b, c) => a.DeleteMark == null) + .WhereIF(input.dbType.IsNotEmptyOrNull(), (a, b, c) => a.DbType == input.dbType) + .WhereIF(input.keyword.IsNotEmptyOrNull(), (a, b, c) => a.FullName.Contains(input.keyword)) + .Select((a, b, c) => new DbLinkListOutput() + { + id = a.Id, + creatorTime = a.CreatorTime, + creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account), + dbType = a.DbType, + enabledMark = a.EnabledMark, + fullName = a.FullName, + host = a.Host, + lastModifyTime = a.LastModifyTime, + lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account), + port = a.Port.ToString(), + sortCode = a.SortCode + }).Distinct().MergeTable().OrderBy((a) => a.sortCode).OrderBy((a) => a.creatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize); + return PageResult.SqlSugarPageResult(list); + } + + /// + /// 下拉框列表. + /// + /// + [HttpGet("Selector")] + public async Task GetSelector([FromQuery] string type) + { + var data = (await GetList()).Adapt>(); + + // 数据库分类 + var dbTypeList = (await _dictionaryDataService.GetList("dbType")).FindAll(x => x.EnabledMark == 1); + var output = new List(); + if (type.IsNullOrEmpty()) + { + output.Add(new DbLinkSelectorOutput() + { + id = "-2", + parentId = "0", + fullName = "", + num = data.FindAll(x => x.parentId == null).Count + }); + var defaultDBType = App.GetConfig("ConnectionStrings", true).DBType; + if (defaultDBType.Equals("Kdbndp")) + { + defaultDBType = "KingbaseES"; + } + if (defaultDBType.Equals("Dm")) + { + defaultDBType = "DM8"; + } + output.Add(new DbLinkSelectorOutput() + { + id = "0", + parentId = "-2", + fullName = "默认数据库", + dbType = defaultDBType, + num = 1 + }); + } + output.Add(new DbLinkSelectorOutput() { - id = item.Id, - fullName = item.FullName + id = "-1", + parentId = "0", + fullName = "未分类", + num = data.FindAll(x => x.parentId == null).Count }); - } - } - return new { list = output.Union(data).ToList().ToTree() }; - } - - /// - /// 信息. - /// - /// 主键值. - /// - [HttpGet("{id}")] - public async Task GetInfo_Api(string id) - { - var data = await GetInfo(id); - var oracleParam = data.OracleParam?.ToObject(); - var output = data.Adapt(); - if (oracleParam.IsNotEmptyOrNull() && oracleParam.oracleExtend) - { - output.oracleService = oracleParam.oracleService; - output.oracleExtend = oracleParam.oracleExtend; - output.oracleLinkType = oracleParam.oracleLinkType; - output.oracleRole = oracleParam.oracleRole; - } - - return output; - } - #endregion - - #region POST - - /// - /// 删除. - /// - /// 主键值. - /// - [HttpDelete("{id}")] - public async Task Delete(string id) - { - var entity = await GetInfo(id); - _ = entity ?? throw Oops.Oh(ErrorCode.COM1005); - var isOk = await _repository.AsUpdateable(entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync(); - if (!isOk) - throw Oops.Oh(ErrorCode.COM1002); - } - - /// - /// 创建. - /// - /// 实体对象. - /// - [HttpPost("")] - public async Task Create_Api([FromBody] DbLinkCrInput input) - { - if (await _repository.IsAnyAsync(x => x.FullName == input.fullName && x.DeleteMark == null)) - throw Oops.Oh(ErrorCode.COM1004); - var entity = input.Adapt(); - if (input.oracleExtend) - { - entity.OracleParam = new OracleParamModel() - { - oracleExtend = input.oracleExtend, - oracleRole = input.oracleRole, - oracleLinkType = input.oracleLinkType, - oracleService = input.oracleService - }.ToJsonString(); - } - - var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync(); - if (isOk < 1) - throw Oops.Oh(ErrorCode.COM1000); - } - - /// - /// 编辑. - /// - /// 主键值. - /// 实体对象. - /// - [HttpPut("{id}")] - public async Task Update_Api(string id, [FromBody] DbLinkUpInput input) - { - if (await _repository.IsAnyAsync(x => x.Id != id && x.FullName == input.fullName && x.DeleteMark == null)) - throw Oops.Oh(ErrorCode.COM1004); - var entity = input.Adapt(); - if (input.oracleExtend) - { - entity.OracleParam = new OracleParamModel() - { - oracleExtend = input.oracleExtend, - oracleRole = input.oracleRole, - oracleLinkType = input.oracleLinkType, - oracleService = input.oracleService - }.ToJsonString(); - } - - var isOk = await _repository.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandHasChangeAsync(); - if (!isOk) - throw Oops.Oh(ErrorCode.COM1001); - } - - /// - /// 测试连接. - /// - /// 实体对象. - [HttpPost("Actions/Test")] - public void TestDbConnection([FromBody] DbLinkActionsTestInput input) - { - var entity = input.Adapt(); - entity.Id = input.id.Equals("0") ? SnowflakeIdHelper.NextId() : input.id; - if (input.oracleExtend) - { - entity.OracleParam = new OracleParamModel() - { - oracleExtend = input.oracleExtend, - oracleRole = input.oracleRole, - oracleLinkType = input.oracleLinkType, - oracleService = input.oracleService - }.ToJsonString(); - } - - if (!_dataBaseManager.IsConnection(entity)) - throw Oops.Oh(ErrorCode.D1507); - } - - #endregion - - #region PublicMethod - - /// - /// 列表. - /// - /// - [NonAction] - public async Task> GetList() - { - return await _repository.AsSugarClient().Queryable( - (a, b, c, d, e) => new JoinQueryInfos( - JoinType.Left, a.CreatorUserId == b.Id, - JoinType.Left, a.LastModifyUserId == c.Id, - JoinType.Left, a.DbType == d.EnCode && d.DeleteMark == null, - JoinType.Left, d.DictionaryTypeId == e.Id && e.EnCode == "dbType")) - .Where((a, b, c) => a.DeleteMark == null) - .OrderBy((a, b, c) => a.SortCode).OrderBy((a, b, c) => a.CreatorTime, OrderByType.Desc). - Select((a, b, c, d) => new DbLinkListOutput() + foreach (var item in dbTypeList) + { + var index = data.FindAll(x => x.dbType.Equals(item.EnCode)).Count; + if (index > 0) { - id = a.Id, - parentId = d.Id == null ? "-1" : d.Id, - creatorTime = a.CreatorTime, - creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account), - dbType = a.DbType, - enabledMark = a.EnabledMark, - fullName = a.FullName, - host = a.Host, - lastModifyTime = a.LastModifyTime, - lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account), - port = SqlFunc.ToString(a.Port), - sortCode = a.SortCode - }).Distinct().ToListAsync(); - } + output.Add(new DbLinkSelectorOutput() + { + id = item.Id, + fullName = item.FullName + }); + } + } - /// - /// 信息. - /// - /// 主键值. - /// - [NonAction] - public async Task GetInfo(string id) - { - var model = await _memCache.GetOrCreateAsync($"DbLink_{id}", async entry => + return new { list = output.Union(data).ToList().ToTree() }; + } + + /// + /// 信息. + /// + /// 主键值. + /// + [HttpGet("{id}")] + public async Task GetInfo_Api(string id) { - //entry.AbsoluteExpiration = DateTime.Now.AddMinutes(60); - entry.SlidingExpiration = TimeSpan.FromSeconds(60); - return await _repository.GetFirstAsync(m => m.Id == id && m.DeleteMark == null); - }); - return model; - } - #endregion + var data = await GetInfo(id); + var oracleParam = data.OracleParam?.ToObject(); + var output = data.Adapt(); + if (oracleParam.IsNotEmptyOrNull() && oracleParam.oracleExtend) + { + output.oracleService = oracleParam.oracleService; + output.oracleExtend = oracleParam.oracleExtend; + output.oracleLinkType = oracleParam.oracleLinkType; + output.oracleRole = oracleParam.oracleRole; + } + + return output; + } + #endregion + + #region POST + + /// + /// 删除. + /// + /// 主键值. + /// + [HttpDelete("{id}")] + public async Task Delete(string id) + { + var entity = await GetInfo(id); + _ = entity ?? throw Oops.Oh(ErrorCode.COM1005); + var isOk = await _repository.AsUpdateable(entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync(); + if (!isOk) + throw Oops.Oh(ErrorCode.COM1002); + } + + /// + /// 创建. + /// + /// 实体对象. + /// + [HttpPost("")] + public async Task Create_Api([FromBody] DbLinkCrInput input) + { + if (await _repository.IsAnyAsync(x => x.FullName == input.fullName && x.DeleteMark == null)) + throw Oops.Oh(ErrorCode.COM1004); + var entity = input.Adapt(); + if (input.oracleExtend) + { + entity.OracleParam = new OracleParamModel() + { + oracleExtend = input.oracleExtend, + oracleRole = input.oracleRole, + oracleLinkType = input.oracleLinkType, + oracleService = input.oracleService + }.ToJsonString(); + } + + var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync(); + if (isOk < 1) + throw Oops.Oh(ErrorCode.COM1000); + } + + /// + /// 编辑. + /// + /// 主键值. + /// 实体对象. + /// + [HttpPut("{id}")] + public async Task Update_Api(string id, [FromBody] DbLinkUpInput input) + { + if (await _repository.IsAnyAsync(x => x.Id != id && x.FullName == input.fullName && x.DeleteMark == null)) + throw Oops.Oh(ErrorCode.COM1004); + var entity = input.Adapt(); + if (input.oracleExtend) + { + entity.OracleParam = new OracleParamModel() + { + oracleExtend = input.oracleExtend, + oracleRole = input.oracleRole, + oracleLinkType = input.oracleLinkType, + oracleService = input.oracleService + }.ToJsonString(); + } + + var isOk = await _repository.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandHasChangeAsync(); + if (!isOk) + throw Oops.Oh(ErrorCode.COM1001); + } + + /// + /// 测试连接. + /// + /// 实体对象. + [HttpPost("Actions/Test")] + public void TestDbConnection([FromBody] DbLinkActionsTestInput input) + { + var entity = input.Adapt(); + entity.Id = input.id.Equals("0") ? SnowflakeIdHelper.NextId() : input.id; + if (input.oracleExtend) + { + entity.OracleParam = new OracleParamModel() + { + oracleExtend = input.oracleExtend, + oracleRole = input.oracleRole, + oracleLinkType = input.oracleLinkType, + oracleService = input.oracleService + }.ToJsonString(); + } + + if (!_dataBaseManager.IsConnection(entity)) + throw Oops.Oh(ErrorCode.D1507); + } + + #endregion + + #region PublicMethod + + /// + /// 列表. + /// + /// + [NonAction] + public async Task> GetList() + { + return await _repository.AsSugarClient().Queryable( + (a, b, c, d, e) => new JoinQueryInfos( + JoinType.Left, a.CreatorUserId == b.Id, + JoinType.Left, a.LastModifyUserId == c.Id, + JoinType.Left, a.DbType == d.EnCode && d.DeleteMark == null, + JoinType.Left, d.DictionaryTypeId == e.Id && e.EnCode == "dbType")) + .Where((a, b, c) => a.DeleteMark == null) + .OrderBy((a, b, c) => a.SortCode).OrderBy((a, b, c) => a.CreatorTime, OrderByType.Desc). + Select((a, b, c, d) => new DbLinkListOutput() + { + id = a.Id, + parentId = d.Id == null ? "-1" : d.Id, + creatorTime = a.CreatorTime, + creatorUser = SqlFunc.MergeString(b.RealName, "/", b.Account), + dbType = a.DbType, + enabledMark = a.EnabledMark, + fullName = a.FullName, + host = a.Host, + lastModifyTime = a.LastModifyTime, + lastModifyUser = SqlFunc.MergeString(c.RealName, "/", c.Account), + port = SqlFunc.ToString(a.Port), + sortCode = a.SortCode + }).Distinct().ToListAsync(); + } + + /// + /// 信息. + /// + /// 主键值. + /// + [NonAction] + public async Task GetInfo(string id) + { + var model = await _memCache.GetOrCreateAsync($"DbLink_{id}", async entry => + { + //entry.AbsoluteExpiration = DateTime.Now.AddMinutes(60); + //entry.SlidingExpiration = TimeSpan.FromSeconds(-1); + return await _repository.AsSugarClient().CopyNew().Queryable().FirstAsync(m => m.Id == id && m.DeleteMark == null); + }); + return model; + } + #endregion } \ No newline at end of file