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