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 System.Linq;
namespace Services
{
///
/// 数据表Service业务层处理
///
[AppService(ServiceType = typeof(IDatabaseTableService), ServiceLifetime = LifeTime.Transient)]
public class DatabaseTableService : BaseService, IDatabaseTableService
{
private readonly IDatabaseFieldService _DatabaseFieldService;
private readonly IDatabaseFieldTabsService _DatabaseFieldTabsService;
public DatabaseTableService(IDatabaseFieldService DatabaseFieldService, IDatabaseFieldTabsService DatabaseFieldTabsService)
{
_DatabaseFieldService = DatabaseFieldService;
_DatabaseFieldTabsService = DatabaseFieldTabsService;
}
///
/// 数据表-列表
///
/// 参数请求体
/// 分页参数
/// 列表
public PagedInfo getDatabaseTableList([FromQuery] PagerInfo page, [FromQuery] DatabaseTable param)
{
//拼装查询条件
var predicate = Expressionable.Create();
predicate = predicate.AndIF(param.databaseId > 0, m => m.databaseId == param.databaseId);
predicate = predicate.AndIF(!string.IsNullOrEmpty(param.tableTitle), m => m.tableTitle.Contains(param.tableTitle));
predicate = predicate.AndIF(!string.IsNullOrEmpty(param.tableName), m => m.tableName.Contains(param.tableName));
predicate = predicate.AndIF(param.splitKind > 0, m => m.splitKind == param.splitKind);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(m => m.id)
.ToPage(page);
return response;
}
///
/// 数据表-根据服务ID查询列表
///
/// 参数请求体
/// 分页参数
/// 根据服务ID查询列表
public PagedInfo getDatabaseTableListByIds([FromQuery] PagerInfo page, [FromQuery] GetDatabaseTableListByIdsDto param)
{
//拼装查询条件
var predicate = Expressionable.Create();
// predicate = predicate.AndIF(param.serviceId > 0, m => m.serviceId == param.serviceId);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(m => m.id)
.ToPage(page);
return response;
}
///
/// 克隆数据表
///
/// 来源数据表
/// 新数据库ID
/// 克隆数据表
public void copyDatabaseTable([FromBody] CopyDatabaseTableDto param)
{
List tableIdList = param.sourceTableId.ToList();
var sourceTables = GetList(m => tableIdList.Contains(m.id)).ToList();
foreach(DatabaseTable sourceTable in sourceTables)
{
DatabaseTable newTable = new DatabaseTable();
newTable.databaseId = param.targetDatabaseId;
newTable.tableName = sourceTable.tableName;
newTable.tableTitle = sourceTable.tableTitle;
newTable.createTime = DateTime.Now;
int newTableId = InsertReturnIdentity(newTable);
var sourceFieldTabs = _DatabaseFieldTabsService.GetList(m => m.tableId == sourceTable.id).ToList();
if(sourceFieldTabs.Count == 0)
{
// 如果没有分组,则创建一个默认分组
DatabaseFieldTabs defaultTab = new DatabaseFieldTabs();
defaultTab.tabName = "基本信息";
defaultTab.databaseId = param.targetDatabaseId;
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 = param.targetDatabaseId;
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 = param.targetDatabaseId;
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 = param.targetDatabaseId;
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);
}
}
}
}
}
///
/// 生成SQL脚本
///
/// 参数请求体
/// 生成
public void makeDatabaseTable([FromBody] MakeDatabaseTableDto param, TokenModel loginUser)
{
List tableIds = param.id.ToList();
List tables = GetList(m => tableIds.Contains(m.id));
foreach(DatabaseTable table in tables)
{
table.fields = _DatabaseFieldService.GetList(m => m.tableId == table.id);
}
MakeData makeData = new();
string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
makeData.requestId = requestId;
makeData.modePath = "Sql/dbTable.sql";
Dictionary attach = new();
attach.Add("id", "0");
attach.Add("kind", "dbTable");
attach.Add("operator", loginUser.username);
makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
makeData.data = new Dictionary();
makeData.data.Add("databaseTable", tables);
RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
}
}
}