using Infrastructure; using Infrastructure.Extensions; using OpenAuth.App.Base; using OpenAuth.App.Interface; using OpenAuth.App.SysDatabaseLink.Response; using OpenAuth.Repository; using OpenAuth.Repository.Core; using OpenAuth.Repository.Domain; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OpenAuth.App.BaseApp.Base; namespace OpenAuth.App.SysDatabaseLink { public class SysDatabaseLinkApp : SqlSugarBaseApp { public SysDatabaseLinkApp(ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth) : base(unitWork, repository, auth) { } /// /// 获取树形数据 /// /// public async Task>> LoadDataBaseLinkTree() { var list = await this.Repository.AsQueryable().Where(r => r.DeleteMark == 0).ToListAsync(); List treelist = new List(); Dictionary> dic = new Dictionary>(); TreeModel mynode = new TreeModel(); mynode.id = "hcsystemdb"; mynode.text = "本地数据库"; mynode.value = "hcsystemdb"; mynode.complete = true; mynode.hasChildren = false; treelist.Add(mynode); foreach (var item in list) { TreeModel node = new TreeModel(); node.id = item.DBName; node.text = item.DBAlias; node.value = item.DBName; node.complete = true; node.hasChildren = false; if (!dic.ContainsKey(item.ServerAddress)) { TreeModel pnode = new TreeModel(); pnode.id = item.ServerAddress; pnode.text = item.ServerAddress; pnode.value = "hcServerAddress"; pnode.isexpand = true; pnode.complete = true; pnode.hasChildren = true; pnode.ChildNodes = new List(); treelist.Add(pnode); dic.Add(item.ServerAddress, pnode.ChildNodes); } dic[item.ServerAddress].Add(node); } return new Response> { Result = treelist }; } /// /// 分页获取列表数据 /// /// /// /// /// public async Task>>> LoadDataBaseInfo(string keyword, int pageindex, int pagesize) { //定义且实例化分页数据 RefAsync totalCount = 0; //数据查询并返回 var info = await this.Repository.AsQueryable() .WhereIF(!string.IsNullOrEmpty(keyword), t => t.DBName.Contains(keyword)) .OrderBy(r=>r.DBName) .ToPageListAsync(pageindex, pagesize, totalCount); return new Response>> { Result = new PageInfo> { Items = info, Total = totalCount } }; } /// /// 获取实体数据 /// /// 数据库连接主键 /// public async Task> GetDataBaseForm(string id) { var info = await this.Repository.GetByIdAsync(id); return new Response { Result = info }; } /// /// 添加数据库连接(新增、修改) /// /// 主键值 /// 数据库实体 /// public async Task> SaveBaseLinkEntity(string keyValue, Repository.Domain.SysDatabaseLink baseLink) { /*测试数据库连接串"******";*/ if (!string.IsNullOrEmpty(keyValue) && baseLink.DBConnection == "******") { baseLink.DBConnection = null;// 不更新连接串地址 } else { var testRes = TestConnection(baseLink.DBConnection, baseLink.DBType); if (testRes != "success") { return new Response { Result = false, Message = "字符串连接失败" }; } } var user = _auth.GetCurrentUser().User; using (var uwo = base.UnitWork.CreateContext()) { if (!string.IsNullOrEmpty(keyValue)) { baseLink.DatabaseLinkId = keyValue; baseLink.ModifyDate = DateTime.Now; baseLink.ModifyUserId = user.Id.ToString(); baseLink.ModifyUsername = user.Name; await uwo.SysDatabaseLink.UpdateAsync(baseLink); } else { baseLink.DatabaseLinkId = Guid.NewGuid().ToString(); baseLink.Createdate = DateTime.Now; baseLink.DeleteMark = 0; baseLink.EnabledMark = 1; baseLink.CreateUserId = user.Id.ToString(); baseLink.CreateUsername = user.Name; await uwo.SysDatabaseLink.InsertAsync(baseLink); } var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "操作成功" : "操作失败" }; } } /// /// 删除数据库连接 /// /// 主键 /// public async Task> DeleteBaseLink(string id) { using (var uwo = base.UnitWork.CreateContext()) { await uwo.SysDatabaseLink.DeleteByIdAsync(id); var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "操作成功" : "操作失败" }; } } #region 扩展方法 /// /// 测试数据数据库是否能连接成功 /// /// 连接串 /// 数据库类型 public string TestConnection(string connection, string dbType) { try { this.TestLinkClient(connection, dbType).BeginTran(); this.TestLinkClient(connection, dbType).CommitTran(); return "success"; } catch (Exception ex) { return ex.Message; } } /// /// 测试连接串是否正确 /// /// 连接串 /// 数据库类型 /// 主键 /// public async Task> TestDataBaseLink(string connection, string dbType, string id) { if (!string.IsNullOrEmpty(id) && connection == "******") { Repository.Domain.SysDatabaseLink entity = await this.Repository.GetByIdAsync(id); if (entity != null) { connection = entity.DBConnection; } } string res = TestConnection(connection, dbType); var flag = false; if (res == "success") { flag = true; } return new Response { Result = flag, Message = flag == true ? "连接成功" : "连接失败" }; } #endregion } }