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;
using Tasks;
using Util;
namespace Services
{
///
/// 数据表Service业务层处理
///
[AppService(ServiceType = typeof(IDatabaseTableService), ServiceLifetime = LifeTime.Transient)]
public class DatabaseTableService : BaseService, IDatabaseTableService
{
private readonly IDatabaseFieldService _DatabaseFieldService;
private readonly IDatabaseFieldIndexService _DatabaseFieldIndexService;
private readonly IDatabaseFieldTabsService _DatabaseFieldTabsService;
private readonly IApiInfoService _ApiInfoService;
private readonly IApiGroupService _ApiGroupService;
public DatabaseTableService(IDatabaseFieldService DatabaseFieldService, IDatabaseFieldIndexService DatabaseFieldIndexService, IDatabaseFieldTabsService DatabaseFieldTabsService, IApiInfoService ApiInfoService, IApiGroupService ApiGroupService)
{
_DatabaseFieldService = DatabaseFieldService;
_DatabaseFieldIndexService = DatabaseFieldIndexService;
_DatabaseFieldTabsService = DatabaseFieldTabsService;
_ApiInfoService = ApiInfoService;
_ApiGroupService = ApiGroupService;
}
///
/// 数据表-列表
///
/// 参数请求体
/// 分页参数
/// 列表
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())
.OrderBy(m => m.tableName)
.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();
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.tableId == sourceTable.id).ToList();
foreach(DatabaseField sourceField in sourceFields)
{
DatabaseField newField = new DatabaseField();
newField.databaseId = param.targetDatabaseId;
newField.tableId = newTableId;
newField.tabId = sourceField.tabId;
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);
}
}
}
///
/// 添加数据表
///
/// 参数请求体
///
public int addDatabaseTable([FromBody] DatabaseTable param)
{
int id = InsertReturnIdentity(param);
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "ID",
fieldName = "id",
fieldType = "int4",
fieldLength = "",
fieldDefaultValue = "0",
fieldDetail = "主键",
primaryKey = true,
autoIncrement = true,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "版本",
fieldName = "version",
fieldType = "int4",
fieldLength = "",
fieldDefaultValue = "0",
fieldDetail = "版本",
primaryKey = false,
autoIncrement = false,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "删除标志",
fieldName = "del_flag",
fieldType = "int4",
fieldLength = "",
fieldDefaultValue = "0",
fieldDetail = "删除标志",
primaryKey = false,
autoIncrement = false,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "创建时间",
fieldName = "create_time",
fieldType = "timestamp",
fieldLength = "",
fieldDefaultValue = "",
fieldDetail = "创建时间",
primaryKey = false,
autoIncrement = false,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "更新时间",
fieldName = "update_time",
fieldType = "timestamp",
fieldLength = "",
fieldDefaultValue = "",
fieldDetail = "更新时间",
primaryKey = false,
autoIncrement = false,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "创建人",
fieldName = "create_by",
fieldType = "varchar",
fieldLength = "50",
fieldDefaultValue = "",
fieldDetail = "创建人",
primaryKey = false,
autoIncrement = false,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
_DatabaseFieldService.Add(new DatabaseField()
{
createTime = DateTime.Now,
fieldTitle = "更新人",
fieldName = "update_by",
fieldType = "varchar",
fieldLength = "50",
fieldDefaultValue = "",
fieldDetail = "更新人",
primaryKey = false,
autoIncrement = false,
splitFlag = false,
tableId = id,
databaseId = param.databaseId,
});
return id;
}
///
/// 生成SQL脚本
///
/// 参数请求体
/// 生成
public string makeDatabaseTable([FromBody] MakeDatabaseTableDto param, DatabaseInfo databaseInfo, 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);
table.fieldIndexes = _DatabaseFieldIndexService.GetList(m => m.tableId == table.id);
}
Dictionary pushData = new Dictionary();pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("fileName", Function.MD5_16(string.Join(",", param.id)));
pushData.Add("databaseTable", tables);
var modePath = "dbTable";
if(databaseInfo.dbType == "pgsql")
{
modePath = "pg-dbTable";
}
return MakeHelper.Make(pushData, modePath, "dbTable", loginUser);
}
/* java代码生成 */
///
/// 生成java代码-model
///
/// 生成java代码-model
public void makeJavaModel(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
List fields = _DatabaseFieldService.GetList(m => m.tableId == table.id);
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("databaseFields", fields);
MakeHelper.Push(pushData, "model", "javaModel", loginUser, "0", versionNo);
}
///
/// 生成java代码-service
///
/// 生成java代码-service
public void makeJavaService(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.linkTableId == table.id && m.apiKind < 3);
foreach(ApiInfo apiInfo in apiInfos)
{
foreach(var param in apiInfo.apiParam)
{
if(param.linkTableId > 0)
{
var linkTable = GetFirst(m => m.id == param.linkTableId) ?? new DatabaseTable();
param.linkTableTitle = linkTable.tableTitle;
param.linkTableName = linkTable.tableName;
}
}
}
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("apiInfos", apiInfos);
MakeHelper.Push(pushData, "service", "javaService", loginUser, "0", versionNo);
}
///
/// 生成java代码-serviceImpl
///
/// 生成java代码-serviceImpl
public void makeJavaServiceImpl(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.linkTableId == table.id && m.apiKind < 3);
foreach(ApiInfo apiInfo in apiInfos)
{
foreach(var param in apiInfo.apiParam)
{
if(param.linkTableId > 0)
{
var linkTable = GetFirst(m => m.id == param.linkTableId) ?? new DatabaseTable();
param.linkTableTitle = linkTable.tableTitle;
param.linkTableName = linkTable.tableName;
}
}
}
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("apiInfos", apiInfos);
MakeHelper.Push(pushData, "serviceImpl", "javaServiceImpl", loginUser, "0", versionNo);
}
///
/// 生成java代码-dto
///
/// 生成java代码-dto
public void makeJavaDto(ProjectService baseInfo, ApiInfo apiInfo, TokenModel loginUser, string versionNo)
{
var apiGroup = _ApiGroupService.GetFirst(m => m.id == apiInfo.groupId) ?? new ApiGroup();
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("apiInfo", apiInfo);
pushData.Add("apiGroup", apiGroup);
pushData.Add("databaseFields", apiInfo.apiParam.Where(m => m.reqParam).ToList());
MakeHelper.Push(pushData, "dto", "javaDto", loginUser, "0", versionNo);
}
///
/// 生成java代码-vo
///
/// 生成java代码-vo
public void makeJavaVo(ProjectService baseInfo, ApiInfo apiInfo, TokenModel loginUser, string versionNo)
{
var apiGroup = _ApiGroupService.GetFirst(m => m.id == apiInfo.groupId) ?? new ApiGroup();
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("apiInfo", apiInfo);
pushData.Add("apiGroup", apiGroup);
pushData.Add("databaseFields", apiInfo.apiParam.Where(m => m.resParam).ToList());
MakeHelper.Push(pushData, "vo", "javaVo", loginUser, "0", versionNo);
}
///
/// 生成java代码-mapper
///
/// 生成java代码-mapper
public void makeJavaMapper(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
MakeHelper.Push(pushData, "mapper", "javaMapper", loginUser, "0", versionNo);
}
///
/// 生成java代码-mapperXml
///
/// 生成java代码-mapperXml
public void makeJavaMapperXml(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
List fields = _DatabaseFieldService.GetList(m => m.tableId == table.id);
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("databaseFields", fields);
MakeHelper.Push(pushData, "mapperXml", "javaMapperXml", loginUser, "0", versionNo);
}
///
/// 生成java代码-controller
///
/// 生成java代码-controller
public void makeJavaController(ProjectService baseInfo, ApiGroup apiGroup, string controllerFilePath, TokenModel loginUser, string versionNo)
{
var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.controllerFilePath == controllerFilePath);
var tableIds = apiInfos.Where(m => m.linkTableId > 0).Select(m => m.linkTableId).Distinct().ToList();
var tables = GetList(m => tableIds.Contains(m.id));
foreach(var apiInfo in apiInfos)
{
var linkTable = tables.FirstOrDefault(m => m.id == apiInfo.linkTableId) ?? new DatabaseTable();
apiInfo.linkTableTitle = linkTable.tableTitle;
apiInfo.linkTableName = linkTable.tableName;
}
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTables", tables);
pushData.Add("apiGroup", apiGroup);
pushData.Add("apiInfos", apiInfos);
pushData.Add("controllerName", controllerFilePath);
pushData.Add("controllerNameUpper", PublicFunction.transferName(controllerFilePath));
MakeHelper.Push(pushData, "controller", "javaController", loginUser, "0", versionNo);
}
/* c#代码生成 */
///
/// 生成c#代码-model
///
/// 生成c#代码-model
public void makeCSharpModel(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
List fields = _DatabaseFieldService.GetList(m => m.tableId == table.id);
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("databaseFields", fields);
MakeHelper.Push(pushData, "cs-model", "csModel", loginUser, "0", versionNo);
}
///
/// 生成c#代码-service
///
/// 生成c#代码-service
public void makeCSharpService(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
var apiInfoList = new List();
var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.linkTableId == table.id);
foreach(ApiInfo apiInfo in apiInfos)
{
var linkTable = GetFirst(m => m.id == apiInfo.linkTableId) ?? new DatabaseTable();
apiInfo.linkTableTitle = linkTable.tableTitle;
apiInfo.linkTableName = linkTable.tableName;
apiInfo.linkTableSplitKind = linkTable.splitKind;
foreach(var param in apiInfo.apiParam)
{
if(param.linkTableId > 0)
{
var paramlinkTable = GetFirst(m => m.id == param.linkTableId) ?? new DatabaseTable();
param.linkTableTitle = paramlinkTable.tableTitle;
param.linkTableName = paramlinkTable.tableName;
}
}
if(apiInfo.apiKind < 2 || apiInfo.linkTableSplitKind > 0)
{
apiInfoList.Add(apiInfo);
}
}
List groupIds = apiInfoList.Select(m => m.groupId).Distinct().ToList();
var apiGroups = _ApiGroupService.GetList(m => groupIds.Contains(m.id));
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("apiInfos", apiInfoList);
pushData.Add("apiGroups", apiGroups);
MakeHelper.Push(pushData, "cs-service", "csService", loginUser, "0", versionNo);
Utils.WriteLog("cs-service:" + apiInfoList.Count, "测试生成代码");
}
///
/// 生成c#代码-serviceImpl
///
/// 生成c#代码-serviceImpl
public void makeCSharpIService(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser, string versionNo)
{
var apiInfoList = new List();
var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.linkTableId == table.id);
foreach(ApiInfo apiInfo in apiInfos)
{
var linkTable = GetFirst(m => m.id == apiInfo.linkTableId) ?? new DatabaseTable();
apiInfo.linkTableTitle = linkTable.tableTitle;
apiInfo.linkTableName = linkTable.tableName;
apiInfo.linkTableSplitKind = linkTable.splitKind;
foreach(var param in apiInfo.apiParam)
{
if(param.linkTableId > 0)
{
var paramlinkTable = GetFirst(m => m.id == param.linkTableId) ?? new DatabaseTable();
param.linkTableTitle = paramlinkTable.tableTitle;
param.linkTableName = paramlinkTable.tableName;
}
}
if(apiInfo.apiKind < 2 || apiInfo.linkTableSplitKind > 0)
{
apiInfoList.Add(apiInfo);
}
}
List groupIds = apiInfoList.Select(m => m.groupId).Distinct().ToList();
var apiGroups = _ApiGroupService.GetList(m => groupIds.Contains(m.id));
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTable", table);
pushData.Add("apiInfos", apiInfoList);
pushData.Add("apiGroups", apiGroups);
MakeHelper.Push(pushData, "cs-iservice", "csIService", loginUser, "0", versionNo);
}
///
/// 生成c#代码-dto
///
/// 生成c#代码-dto
public void makeCSharpDto(ProjectService baseInfo, ApiInfo apiInfo, TokenModel loginUser, string versionNo)
{
var apiGroup = _ApiGroupService.GetFirst(m => m.id == apiInfo.groupId) ?? new ApiGroup();
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("apiInfo", apiInfo);
pushData.Add("apiGroup", apiGroup);
pushData.Add("databaseFields", apiInfo.apiParam.Where(m => m.reqParam).ToList());
MakeHelper.Push(pushData, "cs-dto", "csDto", loginUser, "0", versionNo);
}
///
/// 生成c#代码-vo
///
/// 生成c#代码-vo
public void makeCSharpVo(ProjectService baseInfo, ApiInfo apiInfo, TokenModel loginUser, string versionNo)
{
var apiGroup = _ApiGroupService.GetFirst(m => m.id == apiInfo.groupId) ?? new ApiGroup();
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("apiInfo", apiInfo);
pushData.Add("apiGroup", apiGroup);
pushData.Add("databaseFields", apiInfo.apiParam.Where(m => m.resParam).ToList());
MakeHelper.Push(pushData, "cs-vo", "csVo", loginUser, "0", versionNo);
}
///
/// 生成c#代码-controller
///
/// 生成c#代码-controller
public void makeCSharpController(ProjectService baseInfo, ApiGroup apiGroup, string controllerFilePath, TokenModel loginUser, string versionNo)
{
var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.controllerFilePath == controllerFilePath);
var tableIds = apiInfos.Where(m => m.linkTableId > 0).Select(m => m.linkTableId).Distinct().ToList();
var tables = GetList(m => tableIds.Contains(m.id));
foreach(var apiInfo in apiInfos)
{
var linkTable = tables.FirstOrDefault(m => m.id == apiInfo.linkTableId) ?? new DatabaseTable();
apiInfo.linkTableTitle = linkTable.tableTitle;
apiInfo.linkTableName = linkTable.tableName;
apiInfo.linkTableSplitKind = linkTable.splitKind;
}
Dictionary pushData = new Dictionary();
pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
pushData.Add("author", loginUser.username);
pushData.Add("projectService", baseInfo);
pushData.Add("databaseTables", tables);
pushData.Add("apiGroup", apiGroup);
pushData.Add("apiInfos", apiInfos);
pushData.Add("controllerName", controllerFilePath);
pushData.Add("controllerNameUpper", PublicFunction.transferName(controllerFilePath));
MakeHelper.Push(pushData, "cs-controller", "csController", loginUser, "0", versionNo);
}
}
}