/// <summary> /// 创建WebAPI接口 /// </summary> /// <param name="sysTableInfo"></param> /// <exception cref="Exception"></exception> private void GenerateWebApi(BuilderTable sysTableInfo, List <BuilderTableColumn> sysColumns) { string domainContent; string apiPath = ProjectPath.GetProjectDirectoryInfo() .GetDirectories().FirstOrDefault(x => x.Name.ToLower().EndsWith(".webapi"))?.FullName; if (string.IsNullOrEmpty(apiPath)) { throw new Exception("未找到webapi类库,请确认是存在weiapi类库命名以.webapi结尾"); } var controllerName = sysTableInfo.ClassName + "sController"; CheckExistsModule(controllerName); //单元测试下无效,因为没有执行webapi项目 var controllerPath = apiPath + $"\\Controllers\\"; domainContent = FileHelper.ReadFile(@"Template\\BuildControllerApi.html") .Replace("{TableName}", sysTableInfo.TableName) .Replace("{ModuleCode}", sysTableInfo.ModuleCode) .Replace("{ModuleName}", sysTableInfo.ModuleName) .Replace("{ClassName}", sysTableInfo.ClassName) .Replace("{StartName}", StratName); var primarykey = sysColumns.FirstOrDefault(u => u.IsKey); if (primarykey == null) { throw new Exception($"未能找到表{sysTableInfo.TableName}的主键字段"); } if (primarykey.ColumnType == "decimal" || primarykey.ColumnType == "numeric") //是否为数字 { if (primarykey.IsIncrement) //是否自增 { domainContent = domainContent.Replace("{KeyTypeName}", "int"); } else //普通的雪花算法生成id { domainContent = domainContent.Replace("{KeyTypeName}", "decimal"); } } else { domainContent = domainContent.Replace("{KeyTypeName}", "string"); } FileHelper.WriteFile(controllerPath, controllerName + ".cs", domainContent); }
/// <summary> /// 创建应用层 /// </summary> /// <param name="sysTableInfo"></param> /// <exception cref="Exception"></exception> private void GenerateApp(BuilderTable sysTableInfo, List <BuilderTableColumn> sysColumns) { string appRootPath = ProjectPath.GetProjectDirectoryInfo() .GetDirectories().FirstOrDefault(x => x.Name.ToLower().EndsWith(".app"))?.FullName; if (string.IsNullOrEmpty(appRootPath)) { throw new Exception("未找到openauth.app类库,请确认是否存在"); } CheckExistsModule(sysTableInfo.ModuleCode); string domainContent = FileHelper.ReadFile(@"Template\\BuildApp.html"); domainContent = domainContent .Replace("{TableName}", sysTableInfo.TableName) .Replace("{ModuleCode}", sysTableInfo.ModuleCode) .Replace("{ModuleName}", sysTableInfo.ModuleName) .Replace("{ClassName}", sysTableInfo.ClassName) .Replace("{StartName}", StratName); var primarykey = sysColumns.FirstOrDefault(u => u.IsKey); if (primarykey == null) { throw new Exception($"未能找到表{sysTableInfo.TableName}的主键字段"); } if (primarykey.ColumnType == "decimal" || primarykey.ColumnType == "numeric") //是否为数字 { if (primarykey.IsIncrement) //是否自增 { domainContent = domainContent.Replace("{BaseAppName}", "BaseIntAutoGenApp"); } else //普通的雪花算法生成id { domainContent = domainContent.Replace("{BaseAppName}", "BaseLongApp"); } } else { domainContent = domainContent.Replace("{BaseAppName}", "BaseStringApp"); } FileHelper.WriteFile($"{appRootPath}\\{sysTableInfo.ModuleCode}", $"{sysTableInfo.ModuleCode}.cs", domainContent); }
/// <summary> /// 创建应用层 /// </summary> /// <param name="sysTableInfo"></param> /// <exception cref="Exception"></exception> private void GenerateApp(BuilderTable sysTableInfo) { string appRootPath = ProjectPath.GetProjectDirectoryInfo() .GetDirectories().FirstOrDefault(x => x.Name.ToLower().EndsWith(".app"))?.FullName; if (string.IsNullOrEmpty(appRootPath)) { throw new Exception("未找到SysCommon.app类库,请确认是否存在"); } CheckExistsModule(sysTableInfo.ModuleCode); string domainContent = FileHelper.ReadFile(@"Template\\BuildApp.html") .Replace("{TableName}", sysTableInfo.TableName) .Replace("{ModuleCode}", sysTableInfo.ModuleCode) .Replace("{ModuleName}", sysTableInfo.ModuleName) .Replace("{ClassName}", sysTableInfo.ClassName) .Replace("{StartName}", StratName); FileHelper.WriteFile(appRootPath, sysTableInfo.ModuleCode + ".cs", domainContent); }
/// <summary> /// 创建WebAPI接口 /// </summary> /// <param name="sysTableInfo"></param> /// <exception cref="Exception"></exception> private void GenerateWebApi(BuilderTable sysTableInfo) { string domainContent; string apiPath = ProjectPath.GetProjectDirectoryInfo() .GetDirectories().FirstOrDefault(x => x.Name.ToLower().EndsWith(".webapi"))?.FullName; if (string.IsNullOrEmpty(apiPath)) { throw new Exception("未找到webapi类库,请确认是存在weiapi类库命名以.webapi结尾"); } var controllerName = sysTableInfo.ClassName + "sController"; CheckExistsModule(controllerName); //单元测试下无效,因为没有执行webapi项目 var controllerPath = apiPath + $"\\Controllers\\"; domainContent = FileHelper.ReadFile(@"Template\\BuildControllerApi.html") .Replace("{TableName}", sysTableInfo.TableName) .Replace("{ModuleCode}", sysTableInfo.ModuleCode) .Replace("{ModuleName}", sysTableInfo.ModuleName) .Replace("{ClassName}", sysTableInfo.ClassName) .Replace("{StartName}", StratName); FileHelper.WriteFile(controllerPath, controllerName + ".cs", domainContent); }
/// <summary> /// 创建实体 /// </summary> /// <param name="tableColumns"></param> /// <param name="sysTableInfo"></param> private void CreateEntityModel(List <BuilderTableColumn> sysColumns, BuilderTable tableInfo) { string template = "BuildEntity.html"; string domainContent = FileHelper.ReadFile("Template\\" + template); StringBuilder attributeBuilder = new StringBuilder(); StringBuilder constructionBuilder = new StringBuilder(); //生成构造函数初始化值 sysColumns = sysColumns.OrderByDescending(c => c.Sort).ToList(); foreach (BuilderTableColumn column in sysColumns) { if (column.IsKey) { continue; } attributeBuilder.Append("/// <summary>"); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" ///" + column.Comment + ""); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" /// </summary>"); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" [Description(\"" + column.Comment + "\")]"); attributeBuilder.Append("\r\n"); string entityType = column.EntityType; if (!column.IsRequired && column.EntityType != "string") { entityType = entityType + "?"; } attributeBuilder.Append(" public " + entityType + " " + column.EntityName + " { get; set; }"); attributeBuilder.Append("\r\n\r\n "); constructionBuilder.Append(" this." + column.EntityName + "=" + (GetDefault(column.EntityType) ?? "\"\"") + ";\r\n"); } //获取的是本地开发代码所在目录,不是发布后的目录 string mapPath = ProjectPath.GetProjectDirectoryInfo()?.FullName; //new DirectoryInfo(("~/").MapPath()).Parent.FullName; if (string.IsNullOrEmpty(mapPath)) { throw new Exception("未找到生成的目录!"); } var primarykey = sysColumns.FirstOrDefault(u => u.IsKey); if (primarykey == null) { throw new Exception($"未能找到表{tableInfo.TableName}的主键字段"); } if (primarykey.ColumnType == "decimal" || primarykey.ColumnType == "numeric") //是否为数字 { if (primarykey.IsIncrement) //是否自增 { domainContent = domainContent.Replace("{BaseEntityName}", "IntAutoGenEntity"); } else //普通的雪花算法生成id { domainContent = domainContent.Replace("{BaseEntityName}", "LongEntity"); } } else { domainContent = domainContent.Replace("{BaseEntityName}", "StringEntity"); } domainContent = domainContent.Replace("{ClassName}", tableInfo.ClassName) .Replace("{AttributeList}", attributeBuilder.ToString()) .Replace("{Construction}", constructionBuilder.ToString()); var tableAttr = new StringBuilder(); tableAttr.Append("/// <summary>"); tableAttr.Append("\r\n"); tableAttr.Append(" ///" + tableInfo.Comment + ""); tableAttr.Append("\r\n"); tableAttr.Append(" /// </summary>"); tableAttr.Append("\r\n"); tableAttr.Append(" [Table(\"" + tableInfo.TableName + "\")]"); domainContent = domainContent.Replace("{AttributeManager}", tableAttr.ToString()); FileHelper.WriteFile( mapPath + $"\\OpenAuth.Repository\\Domain\\", tableInfo.ClassName + ".cs", domainContent); string openAuthDBContextPath = mapPath + "\\OpenAuth.Repository\\OpenAuthDBContext.cs"; FileHelper.RegxAddContentByParenthesis(openAuthDBContextPath, "public virtual DbSet<" + tableInfo.ClassName + "> " + tableInfo.TableName + "s { get; set; }"); }
/// <summary> /// 生成APP层的请求参数 /// </summary> /// <param name="sysTableInfo"></param> /// <param name="tableColumns"></param> private void GenerateAppReq(BuilderTable sysTableInfo, List <BuilderTableColumn> tableColumns) { string appRootPath = ProjectPath.GetProjectDirectoryInfo() .GetDirectories().FirstOrDefault(x => x.Name.ToLower().EndsWith(".app"))?.FullName; if (string.IsNullOrEmpty(appRootPath)) { throw new Exception("未找到openauth.app类库,请确认是否存在"); } string domainContent; domainContent = FileHelper.ReadFile(@"Template\\BuildQueryReq.html") .Replace("{TableName}", sysTableInfo.TableName) .Replace("{ModuleCode}", sysTableInfo.ModuleCode) .Replace("{ModuleName}", sysTableInfo.ModuleName) .Replace("{ClassName}", sysTableInfo.ClassName) .Replace("{StartName}", StratName); FileHelper.WriteFile(Path.Combine(appRootPath, $"{sysTableInfo.ModuleCode}\\Request"), $"Query{sysTableInfo.ClassName}ListReq.cs", domainContent); domainContent = FileHelper.ReadFile(@"Template\\BuildUpdateReq.html"); StringBuilder attributeBuilder = new StringBuilder(); var sysColumn = tableColumns.OrderByDescending(c => c.Sort).ToList(); foreach (BuilderTableColumn column in sysColumn) { attributeBuilder.Append("/// <summary>"); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" ///" + column.Comment + ""); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" /// </summary>"); attributeBuilder.Append("\r\n"); string entityType = column.EntityType; if (!column.IsRequired && column.EntityType != "string") { entityType = entityType + "?"; } attributeBuilder.Append(" public " + entityType + " " + column.EntityName + " { get; set; }"); attributeBuilder.Append("\r\n\r\n "); } domainContent = domainContent.Replace("{ClassName}", sysTableInfo.ClassName) .Replace("{AttributeList}", attributeBuilder.ToString()); var tableAttr = new StringBuilder(); tableAttr.Append("/// <summary>"); tableAttr.Append("\r\n"); tableAttr.Append(" ///" + sysTableInfo.Comment + ""); tableAttr.Append("\r\n"); tableAttr.Append(" /// </summary>"); tableAttr.Append("\r\n"); domainContent = domainContent.Replace("{AttributeManager}", tableAttr.ToString()); FileHelper.WriteFile(Path.Combine(appRootPath, $"{sysTableInfo.ModuleCode}\\Request"), $"AddOrUpdate{sysTableInfo.ClassName}Req.cs", domainContent); }
/// <summary> /// 创建实体 /// </summary> /// <param name="tableColumns"></param> /// <param name="sysTableInfo"></param> private void CreateEntityModel(List <BuilderTableColumn> sysColumn, BuilderTable tableInfo) { string template = "BuildEntity.html"; string domainContent = FileHelper.ReadFile("Template\\" + template); StringBuilder attributeBuilder = new StringBuilder(); StringBuilder constructionBuilder = new StringBuilder(); //生成构造函数初始化值 sysColumn = sysColumn.OrderByDescending(c => c.Sort).ToList(); foreach (BuilderTableColumn column in sysColumn) { if (column.IsKey) { continue; } attributeBuilder.Append("/// <summary>"); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" ///" + column.Comment + ""); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" /// </summary>"); attributeBuilder.Append("\r\n"); attributeBuilder.Append(" [Description(\"" + column.Comment + "\")]"); attributeBuilder.Append("\r\n"); string entityType = column.EntityType; if (!column.IsRequired && column.EntityType != "string") { entityType = entityType + "?"; } attributeBuilder.Append(" public " + entityType + " " + column.EntityName + " { get; set; }"); attributeBuilder.Append("\r\n\r\n "); constructionBuilder.Append(" this." + column.EntityName + "=" + (GetDefault(column.EntityType) ?? "\"\"") + ";\r\n"); } //获取的是本地开发代码所在目录,不是发布后的目录 string mapPath = ProjectPath.GetProjectDirectoryInfo()?.FullName; //new DirectoryInfo(("~/").MapPath()).Parent.FullName; if (string.IsNullOrEmpty(mapPath)) { throw new Exception("未找到生成的目录!"); } domainContent = domainContent.Replace("{ClassName}", tableInfo.ClassName) .Replace("{AttributeList}", attributeBuilder.ToString()) .Replace("{Construction}", constructionBuilder.ToString()); var tableAttr = new StringBuilder(); tableAttr.Append("/// <summary>"); tableAttr.Append("\r\n"); tableAttr.Append(" ///" + tableInfo.Comment + ""); tableAttr.Append("\r\n"); tableAttr.Append(" /// </summary>"); tableAttr.Append("\r\n"); tableAttr.Append(" [Table(\"" + tableInfo.TableName + "\")]"); domainContent = domainContent.Replace("{AttributeManager}", tableAttr.ToString()); FileHelper.WriteFile( mapPath + $"\\SysCommon.Repository\\Domain\\", tableInfo.ClassName + ".cs", domainContent); }