/// <summary> /// 生成代码文本集合 /// </summary> /// <param name="table">表名</param> /// <param name="codeParam">代码参数</param> /// <param name="fileNames">文件名集合</param> /// <returns>代码文本集合</returns> protected override string[] BuilderCodeTexts(TableInfo table, CodeParamInfo codeParam, out string[] fileNames) { string interfaceFile, classFile; string interfaceCode = BuilderInterfaceCode(table, codeParam, out interfaceFile); string classCode = BuilderClassCode(table, codeParam, out classFile); fileNames = new string[] { interfaceFile, classFile }; return(new string[] { interfaceCode, classCode }); }
/// <summary> /// 生成接口代码 /// </summary> /// <param name="table">表名</param> /// <param name="codeParam">代码参数</param> /// <param name="fileName">文件名</param> /// <returns>接口代码</returns> private string BuilderInterfaceCode(TableInfo table, CodeParamInfo codeParam, out string fileName) { string basicName = table.Name.FristUpper(); string name = $"I{basicName}Persistence"; fileName = $"{name}.cs"; var desc = string.IsNullOrWhiteSpace(table.Description) ? basicName : table.Description; return(InterfaceTemplate .Replace("|NamespacePfx|", codeParam.NamespacePfx) .Replace("|Description|", desc) .Replace("|Name|", name) .Replace("|Model|", basicName) .Replace("|PkType|", codeParam.PkType.ToCodeString())); }
/// <summary> /// 生成代码文本集合 /// </summary> /// <param name="table">表名</param> /// <param name="codeParam">代码参数</param> /// <param name="fileNames">文件名集合</param> /// <returns>代码文本集合</returns> protected override string[] BuilderCodeTexts(TableInfo table, CodeParamInfo codeParam, out string[] fileNames) { string basicName = table.Name.FristUpper(); string name = $"{basicName}Controller"; fileNames = new string[] { $"{name}.cs" }; string desc = string.IsNullOrWhiteSpace(table.Description) ? basicName : table.Description; return(new string[] { ClassTemplate .Replace("|NamespacePfx|", codeParam.NamespacePfx) .Replace("|Description|", desc) .Replace("|Name|", name) .Replace("|Model|", basicName) .Replace("|PkType|", codeParam.PkType.ToCodeString()) }); }
/// <summary> /// 生成类代码 /// </summary> /// <param name="table">表名</param> /// <param name="codeParam">代码参数</param> /// <param name="fileName">文件名</param> /// <returns>类代码</returns> private string BuilderClassCode(TableInfo table, CodeParamInfo codeParam, out string fileName) { string basicName = table.Name.FristUpper(); string name = $"{basicName}Persistence"; fileName = $"{name}.cs"; StringBuilder insFiled = new StringBuilder(); StringBuilder updFiled = new StringBuilder(); StringBuilder selAllFiled = new StringBuilder(); StringBuilder getValueCase = new StringBuilder(); if (!table.Columns.IsNullOrCount0()) { for (int i = 0; i < table.Columns.Count; i++) { ColumnInfo c = table.Columns[i]; string propName = c.Name.FristUpper(); if (!IGNORE_INSERT_PROPS.Contains(propName)) { insFiled.Append($" \"{c.Name}\","); if (i < table.Columns.Count - 1) { insFiled.AppendLine(); } } if (!IGNORE_UPDATE_PROPS.Contains(propName)) { if (!(codeParam.IsTenant && "TenantId".Equals(propName))) { updFiled.Append($" \"{c.Name}\","); if (i < table.Columns.Count - 1) { updFiled.AppendLine(); } } } selAllFiled.Append($" \"{c.Name} {propName}\","); if (i < table.Columns.Count - 1) { selAllFiled.AppendLine(); } getValueCase.Append(GetValueCaseTemplate .Replace("|Field|", c.Name) .Replace("|Property|", propName)); getValueCase.AppendLine(); if (i == table.Columns.Count - 1) { continue; } getValueCase.AppendLine(); } } var desc = string.IsNullOrWhiteSpace(table.Description) ? basicName : table.Description; return(GetClassTemplate(codeParam.Type) .Replace("|DbType|", codeParam.Type) .Replace("|NamespacePfx|", codeParam.NamespacePfx) .Replace("|Description|", desc) .Replace("|Name|", name) .Replace("|Model|", basicName) .Replace("|PkType|", codeParam.PkType.ToCodeString()) .Replace("|Table|", table.Name) .Replace("|InsertFields|", insFiled.ToString()) .Replace("|UpdateFields|", updFiled.ToString()) .Replace("|FieldMapProps|", selAllFiled.ToString()) .Replace("|GetValueCase|", getValueCase.ToString())); }
/// <summary> /// 生成代码文本集合 /// </summary> /// <param name="table">表名</param> /// <param name="codeParam">代码参数</param> /// <param name="fileNames">文件名集合</param> /// <returns>代码文本集合</returns> protected abstract string[] BuilderCodeTexts(TableInfo table, CodeParamInfo codeParam, out string[] fileNames);
/// <summary> /// 生成代码文本集合 /// </summary> /// <param name="table">表名</param> /// <param name="codeParam">代码参数</param> /// <param name="fileNames">文件名集合</param> /// <returns>代码文本集合</returns> protected override string[] BuilderCodeTexts(TableInfo table, CodeParamInfo codeParam, out string[] fileNames) { string name = $"{table.Name.FristUpper()}Info"; string parentClass = null; if (codeParam.IsTenant) { parentClass = "UserInfo".Equals(name) ? "BasicUserInfo" : "PersonTimeTenantInfo"; } else { parentClass = "UserInfo".Equals(name) ? "BasicUserInfo" : "PersonTimeInfo"; } EnumGenerator enumGenerator = new EnumGenerator(); fileNames = new string[] { $"{name}.cs" }; StringBuilder propCode = new StringBuilder(); ITypeMapperService typeMapper = SimpleFactory.Create(codeParam.Type); if (!table.Columns.IsNullOrCount0()) { for (int i = 0; i < table.Columns.Count; i++) { ColumnInfo c = table.Columns[i]; string propName = c.Name.FristUpper(); if (IGNORE_PROP_NAMES.Contains(propName)) { continue; } if ("UserInfo".Equals(name)) { if (USER_IGNORE_PROP_NAMES.Contains(propName)) { continue; } } string propType = typeMapper.GetPropertyType(c); CommentInfo comment = null; if (!string.IsNullOrWhiteSpace(c.Description)) { try { comment = c.Description.ToJsonObject <CommentInfo>(); if (comment != null && comment.Enum != null) { propType = enumGenerator.BuilderCodeText(comment.Enum, codeParam.NamespacePfx); } } catch { } } string commentDesc = null; StringBuilder attrCode = new StringBuilder(); if (!c.IsNull) { attrCode.Append(GetAttrCode("Required")); attrCode.AppendLine(); } if (c.Length != null && "string".Equals(propType)) { attrCode.Append(GetAttrCode(string.Format("MaxLength({0})", c.Length))); attrCode.AppendLine(); } if (comment != null) { if (string.IsNullOrWhiteSpace(comment.Desc)) { commentDesc = c.Description; } else { commentDesc = comment.Desc; } if (!string.IsNullOrWhiteSpace(comment.Name)) { attrCode.Append(GetAttrCode(string.Format("DisplayName(\"{0}\")", comment.Name))); attrCode.AppendLine(); } if (comment.MinLength != null && "string".Equals(propType)) { attrCode.Append(GetAttrCode(string.Format("MinLength({0})", comment.MinLength))); attrCode.AppendLine(); } if (comment.Range != null && comment.Range.Length == 2) { attrCode.Append(GetAttrCode(string.Format("Range({0}, {1})", comment.Range[0], comment.Range[1]))); attrCode.AppendLine(); } } else { commentDesc = c.Description; } if (string.IsNullOrWhiteSpace(commentDesc)) { commentDesc = propName; } propCode.Append(PropertyTemplate .Replace("|Description|", commentDesc) .Replace("|JsonName|", c.Name.FristLower()) .Replace("|Attribute|", attrCode.ToString()) .Replace("|Type|", propType) .Replace("|Name|", propName) .Replace("|Order|", (i + 1).ToString())); if (i == table.Columns.Count - 1) { continue; } propCode.AppendLine(); propCode.AppendLine(); } } var desc = string.IsNullOrWhiteSpace(table.Description) ? name : table.Description; return(new string[] { ClassTemplate .Replace("|NamespacePfx|", codeParam.NamespacePfx) .Replace("|Description|", desc) .Replace("|Name|", name) .Replace("|Inherit|", parentClass) .Replace("|PkType|", codeParam.PkType.ToCodeString()) .Replace("|Property|", propCode.ToString()) }); }