using System.Text; namespace etoy { class TSXlsConfigGenerater : IGenerater { //导入json private const string RequireJsonArea = "<#requireJsonArea>"; // 表类型 private const string TableTypeArea = "<#TableTypeArea>"; // 表数组定义 private const string TableRepositoryDefineArea = "<#TableRepositoryDefineArea>"; // 表数组赋值 private const string TableRepositoryAssignArea = "<#TableRepositoryAssignArea>"; private const string CLASS_FILE_NAME = "xlsConfig.ts"; private string CodeTemplatePath => Path.Combine(Environment.CurrentDirectory, "Configs/TSTemplates", CLASS_FILE_NAME); public void Generate(Context context) { var tables = context.Blackboard.Tables; var sbRequireJsons = new StringBuilder(); var sbTableTypes = new StringBuilder(); var sbTableRepoDefines = new StringBuilder(); var sbTableRepoAssigns = new StringBuilder(); foreach (var table in tables) { if (table.TableTag.HasFlag(TableTag.Server)) { var tableName = table.Name; sbRequireJsons.AppendLine($"const {tableName} = require(\"./excel/{tableName}.json\")"); GenTableType(table, sbTableTypes); sbTableRepoDefines.AppendLine($" xls{tableName}: xls{tableName}[]"); sbTableRepoAssigns.AppendLine($" this.xls{tableName} = {tableName}"); } } var xlsConfigText = File.ReadAllText(CodeTemplatePath); xlsConfigText = xlsConfigText.Replace(RequireJsonArea, sbRequireJsons.ToString()); xlsConfigText = xlsConfigText.Replace(TableTypeArea, sbTableTypes.ToString()); xlsConfigText = xlsConfigText.Replace(TableRepositoryDefineArea, sbTableRepoDefines.ToString()); xlsConfigText = xlsConfigText.Replace(TableRepositoryAssignArea, sbTableRepoAssigns.ToString()); var xlsConfigPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME); File.WriteAllText(xlsConfigPath, xlsConfigText, Encoding.UTF8); // metadata也写在XlsConfig,这里直接继续 var metadataGenerater = new TSMetadataTableGenerater(); metadataGenerater.Generate(context); } private void GenTableType(Table table, StringBuilder sbTableTypes) { sbTableTypes.Append($"export type xls{table.Name} = {{"); var isFieldFirst = true; // var pkFieldInfo = table.GetPKFieldInfo(); // 属性定义 for (int i = 0, length = table.FieldInfos.Length; i < length; i++) { var fieldInfo = table.FieldInfos[i]; // no export server’s field if (!fieldInfo.IsServerField) continue; string fieldType = fieldInfo.FieldType.ToTSFieldType(); var fieldName = fieldInfo.FieldName; if (!isFieldFirst) { sbTableTypes.Append(','); } else { isFieldFirst = false; } if (fieldInfo.IsRepeated) { // 数组 sbTableTypes.Append($" {fieldName}: {fieldType}[]"); } else { // 字段 sbTableTypes.Append($" {fieldName}: {fieldType}"); } } sbTableTypes.Append(" }\n"); } } }