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; namespace Services { /// /// 数据表Service业务层处理 /// [AppService(ServiceType = typeof(IDatabaseTableService), ServiceLifetime = LifeTime.Transient)] public class DatabaseTableService : BaseService, IDatabaseTableService { private readonly IDatabaseFieldService _DatabaseFieldService; private readonly IDatabaseFieldTabsService _DatabaseFieldTabsService; private readonly IApiInfoService _ApiInfoService; private readonly IApiGroupService _ApiGroupService; public DatabaseTableService(IDatabaseFieldService DatabaseFieldService, IDatabaseFieldTabsService DatabaseFieldTabsService, IApiInfoService ApiInfoService, IApiGroupService ApiGroupService) { _DatabaseFieldService = DatabaseFieldService; _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()) .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); } Dictionary pushData = new Dictionary();pushData.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); pushData.Add("author", loginUser.username); pushData.Add("databaseTable", tables); MakeHelper.Push(pushData, "dbTable", "dbTable", loginUser); } /// /// 生成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); MakeHelper.Push(pushData, "controller", "javaController", loginUser, "0", versionNo); } } }