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);
}
}
}
}
}
}
}
}
}