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; private readonly IApiInfoService _ApiInfoService; public DatabaseTableService(IDatabaseFieldService DatabaseFieldService, IDatabaseFieldTabsService DatabaseFieldTabsService, IApiInfoService ApiInfoService) { _DatabaseFieldService = DatabaseFieldService; _DatabaseFieldTabsService = DatabaseFieldTabsService; _ApiInfoService = ApiInfoService; } /// /// 数据表-列表 /// /// 参数请求体 /// 分页参数 /// 列表 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)); } /// /// 生成java代码-model /// /// 参数请求体 /// 生成java代码-model public void makeJavaModel(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser) { List 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 = "Java/model.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaModel"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("databaseTable", table); makeData.data.Add("databaseFields", fields); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-service /// /// 参数请求体 /// 生成java代码-service public void makeJavaService(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser) { MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; makeData.modePath = "Java/service.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaService"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("databaseTable", table); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-serviceImpl /// /// 参数请求体 /// 生成java代码-serviceImpl public void makeJavaServiceImpl(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser) { var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.linkTableId == table.id && m.apiKind == 1); MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; makeData.modePath = "Java/serviceImpl.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaServiceImpl"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("databaseTable", table); makeData.data.Add("apiInfos", apiInfos); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-dto /// /// 参数请求体 /// 生成java代码-dto public void makeJavaDto(ProjectService baseInfo, ApiInfo apiInfo, TokenModel loginUser) { MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; makeData.modePath = "Java/dto.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaDto"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("apiInfo", apiInfo); makeData.data.Add("databaseFields", apiInfo.apiParam); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-vo /// /// 参数请求体 /// 生成java代码-vo public void makeJavaVo(ProjectService baseInfo, ApiInfo apiInfo, TokenModel loginUser) { MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; makeData.modePath = "Java/vo.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaVo"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("apiInfo", apiInfo); makeData.data.Add("databaseFields", apiInfo.apiParam); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-mapper /// /// 参数请求体 /// 生成java代码-mapper public void makeJavaMapper(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser) { MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; makeData.modePath = "Java/mapper.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaMapper"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("databaseTable", table); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-mapperXml /// /// 参数请求体 /// 生成java代码-mapperXml public void makeJavaMapperXml(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser) { List 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 = "Java/mapper.xml"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaMapperXml"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("databaseTable", table); makeData.data.Add("databaseFields", fields); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } /// /// 生成java代码-controller /// /// 参数请求体 /// 生成java代码-controller public void makeJavaController(ProjectService baseInfo, string controllerPath, TokenModel loginUser) { var apiInfos = _ApiInfoService.GetList(m => m.serviceId == baseInfo.id && m.controllerFilePath == controllerPath); var tables = GetList(m => apiInfos.Exists(n => n.linkTableId == 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; } MakeData makeData = new(); string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8); makeData.requestId = requestId; makeData.modePath = "Java/controller.java"; Dictionary attach = new(); attach.Add("id", "0"); attach.Add("kind", "javaController"); attach.Add("operator", loginUser.username); makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach); makeData.data = new Dictionary(); makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); makeData.data.Add("author", loginUser.username); makeData.data.Add("projectService", baseInfo); makeData.data.Add("databaseTables", tables); makeData.data.Add("apiInfos", apiInfos); RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData)); } } }