using Attribute; using Model; using Model.Base; using Repository; using Service; using Microsoft.AspNetCore.Mvc; using Vo.Admin; using Dto.Admin; using Custom; using Common; using Infrastructure; using Tasks; namespace Services { /// /// 数据库配置Service业务层处理 /// [AppService(ServiceType = typeof(IDatabaseInfoService), ServiceLifetime = LifeTime.Transient)] public class DatabaseInfoService : BaseService, IDatabaseInfoService { private readonly IDatabaseTableService _DatabaseTableService; private readonly IDatabaseFieldService _DatabaseFieldService; private readonly IDatabaseFieldTabsService _DatabaseFieldTabsService; public DatabaseInfoService(IDatabaseTableService DatabaseTableService, IDatabaseFieldService DatabaseFieldService, IDatabaseFieldTabsService DatabaseFieldTabsService) { _DatabaseTableService = DatabaseTableService; _DatabaseFieldService = DatabaseFieldService; _DatabaseFieldTabsService = DatabaseFieldTabsService; } /// /// 数据库配置-列表 /// /// 参数请求体 /// 分页参数 /// 列表 public PagedInfo getDatabaseInfoList([FromQuery] PagerInfo page, [FromQuery] DatabaseInfo param) { //拼装查询条件 var predicate = Expressionable.Create(); predicate = predicate.AndIF(param.projectId > 0, m => m.projectId == param.projectId); predicate = predicate.AndIF(!string.IsNullOrEmpty(param.dbName), m => m.dbName.Contains(param.dbName)); predicate = predicate.AndIF(!string.IsNullOrEmpty(param.hostAddress), m => m.hostAddress.Contains(param.hostAddress)); var response = Queryable() .Where(predicate.ToExpression()) .OrderByDescending(m => m.id) .ToPage(page); return response; } /// /// 生成SQL脚本 /// /// 参数请求体 /// 生成 public string makeDatabaseInfo([FromBody] MakeDatabaseInfoDto param, List tables, List fields, TokenModel loginUser) { DatabaseInfo databaseInfo = GetById(param.id) ?? new DatabaseInfo(); foreach(DatabaseTable table in tables) { table.fields = fields.Where(m => m.tableId == table.id).ToList(); } Dictionary pushData = new Dictionary(); pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); pushData.Add("author", loginUser.username); pushData.Add("databaseInfo", databaseInfo); pushData.Add("databaseTable", tables); return MakeHelper.Make(pushData, "db", "db", loginUser); } /// /// 数据库配置-根据ID查询列表 /// /// 参数请求体 /// 分页参数 /// 根据ID查询列表 public PagedInfo getDatabaseInfoListByIds([FromQuery] PagerInfo page, [FromQuery] GetDatabaseInfoListByIdsDto param) { //拼装查询条件 var predicate = Expressionable.Create(); if(!string.IsNullOrEmpty(param.dbIdList)) { param.dbIdList = param.dbIdList.Replace("[", "").Replace("]", ""); var dbIdList = Tools.SpitIntArrary(param.dbIdList).ToList(); predicate = predicate.AndIF(dbIdList.Count > 0, m => dbIdList.Contains(m.id)); } var response = Queryable() .Where(predicate.ToExpression()) .OrderByDescending(m => m.id) .ToPage(page); return response; } /// /// 克隆已有库 /// /// 参数请求体 /// 克隆已有库 public void copyDatabaseInfo([FromBody] CopyDatabaseInfoDto param) { List dbIdList = param.sourceDatabaseIdList.ToList(); var sourceDatabaseInfos = GetList(m => dbIdList.Contains(m.id)); if(sourceDatabaseInfos.Count > 0) { foreach(DatabaseInfo sourceDatabaseInfo in sourceDatabaseInfos) { DatabaseInfo newDatabaseInfo = new DatabaseInfo(); newDatabaseInfo.createTime = DateTime.Now; newDatabaseInfo.dbTitle = sourceDatabaseInfo.dbTitle; newDatabaseInfo.dbName = sourceDatabaseInfo.dbName; newDatabaseInfo.serverId = param.targetServiceId; newDatabaseInfo.envId = sourceDatabaseInfo.envId; newDatabaseInfo.hostAddress = sourceDatabaseInfo.hostAddress; newDatabaseInfo.port = sourceDatabaseInfo.port; newDatabaseInfo.username = sourceDatabaseInfo.username; newDatabaseInfo.pwd = sourceDatabaseInfo.pwd; // newDatabaseInfo.projectId = param.targetServiceId; newDatabaseInfo.netPort = sourceDatabaseInfo.netPort; newDatabaseInfo.dbType = sourceDatabaseInfo.dbType; int newDatabaseInfoId = InsertReturnIdentity(newDatabaseInfo); var sourceTables = _DatabaseTableService.GetList(m => m.databaseId == sourceDatabaseInfo.id).ToList(); foreach(DatabaseTable sourceTable in sourceTables) { DatabaseTable newTable = new DatabaseTable(); newTable.databaseId = newDatabaseInfoId; newTable.tableName = sourceTable.tableName; newTable.tableTitle = sourceTable.tableTitle; newTable.createTime = DateTime.Now; int newTableId = _DatabaseTableService.InsertReturnIdentity(newTable); var sourceFieldTabs = _DatabaseFieldTabsService.GetList(m => m.tableId == sourceTable.id).ToList(); if(sourceFieldTabs.Count == 0) { // 如果没有分组,则创建一个默认分组 DatabaseFieldTabs defaultTab = new DatabaseFieldTabs(); defaultTab.tabName = "基本信息"; defaultTab.databaseId = newDatabaseInfoId; defaultTab.tableId = newTableId; defaultTab.createTime = DateTime.Now; int defaultTabId = _DatabaseFieldTabsService.InsertReturnIdentity(defaultTab); var sourceFieldsNoTab = _DatabaseFieldService.GetList(m => m.tableId == sourceTable.id && m.tabId == 0).ToList(); foreach(DatabaseField sourceField in sourceFieldsNoTab) { DatabaseField newField = new DatabaseField(); newField.databaseId = newDatabaseInfoId; newField.tableId = newTableId; newField.tabId = defaultTabId; newField.fieldTitle = sourceField.fieldTitle; newField.fieldName = sourceField.fieldName; newField.fieldType = sourceField.fieldType; newField.fieldLength = sourceField.fieldLength; newField.fieldDefaultValue = sourceField.fieldDefaultValue; newField.fieldDetail = sourceField.fieldDetail; newField.editType = sourceField.editType; newField.validateAttribute = sourceField.validateAttribute; newField.primaryKey = sourceField.primaryKey; newField.autoIncrement = sourceField.autoIncrement; newField.splitFlag = sourceField.splitFlag; newField.showList = sourceField.showList; newField.showQuery = sourceField.showQuery; newField.showEdit = sourceField.showEdit; newField.checkRepeat = sourceField.checkRepeat; newField.exportFlag = sourceField.exportFlag; newField.importFlag = sourceField.importFlag; newField.listEditFlag = sourceField.listEditFlag; newField.listEditPlaceholder = sourceField.listEditPlaceholder; newField.statCondition = sourceField.statCondition; newField.statData = sourceField.statData; newField.linkTableId = sourceField.linkTableId; newField.linkFieldId = sourceField.linkFieldId; newField.apiId = sourceField.apiId; newField.createTime = DateTime.Now; _DatabaseFieldService.Add(newField); } } else { foreach(DatabaseFieldTabs sourceFieldTab in sourceFieldTabs) { DatabaseFieldTabs newFieldTab = new DatabaseFieldTabs(); newFieldTab.tabName = sourceFieldTab.tabName; newFieldTab.databaseId = newDatabaseInfoId; newFieldTab.tableId = newTableId; newFieldTab.createTime = DateTime.Now; int newFieldTabId = _DatabaseFieldTabsService.InsertReturnIdentity(newFieldTab); var sourceFields = _DatabaseFieldService.GetList(m => m.tabId == sourceFieldTab.id).ToList(); foreach(DatabaseField sourceField in sourceFields) { DatabaseField newField = new DatabaseField(); newField.databaseId = newDatabaseInfoId; newField.tableId = newTableId; newField.tabId = newFieldTabId; newField.fieldTitle = sourceField.fieldTitle; newField.fieldName = sourceField.fieldName; newField.fieldType = sourceField.fieldType; newField.fieldLength = sourceField.fieldLength; newField.fieldDefaultValue = sourceField.fieldDefaultValue; newField.fieldDetail = sourceField.fieldDetail; newField.editType = sourceField.editType; newField.validateAttribute = sourceField.validateAttribute; newField.primaryKey = sourceField.primaryKey; newField.autoIncrement = sourceField.autoIncrement; newField.splitFlag = sourceField.splitFlag; newField.showList = sourceField.showList; newField.showQuery = sourceField.showQuery; newField.showEdit = sourceField.showEdit; newField.checkRepeat = sourceField.checkRepeat; newField.exportFlag = sourceField.exportFlag; newField.importFlag = sourceField.importFlag; newField.listEditFlag = sourceField.listEditFlag; newField.listEditPlaceholder = sourceField.listEditPlaceholder; newField.statCondition = sourceField.statCondition; newField.statData = sourceField.statData; newField.linkTableId = sourceField.linkTableId; newField.linkFieldId = sourceField.linkFieldId; newField.apiId = sourceField.apiId; newField.createTime = DateTime.Now; _DatabaseFieldService.Add(newField); } } } } } } } } }