TSXlsConfigGenerater.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Text;
  2. namespace etoy
  3. {
  4. class TSXlsConfigGenerater : IGenerater
  5. {
  6. //导入json
  7. private const string RequireJsonArea = "<#requireJsonArea>";
  8. // 表类型
  9. private const string TableTypeArea = "<#TableTypeArea>";
  10. // 表数组定义
  11. private const string TableRepositoryDefineArea = "<#TableRepositoryDefineArea>";
  12. // 表数组赋值
  13. private const string TableRepositoryAssignArea = "<#TableRepositoryAssignArea>";
  14. private const string CLASS_FILE_NAME = "xlsConfig.ts";
  15. private string CodeTemplatePath => Path.Combine(Environment.CurrentDirectory, "Configs/TSTemplates", CLASS_FILE_NAME);
  16. public void Generate(Context context)
  17. {
  18. var tables = context.Blackboard.Tables;
  19. var sbRequireJsons = new StringBuilder();
  20. var sbTableTypes = new StringBuilder();
  21. var sbTableRepoDefines = new StringBuilder();
  22. var sbTableRepoAssigns = new StringBuilder();
  23. foreach (var table in tables)
  24. {
  25. if (table.TableTag.HasFlag(TableTag.Server))
  26. {
  27. var tableName = table.Name;
  28. sbRequireJsons.AppendLine($"const {tableName} = require(\"./excel/{tableName}.json\")");
  29. GenTableType(table, sbTableTypes);
  30. sbTableRepoDefines.AppendLine($" xls{tableName}: xls{tableName}[]");
  31. sbTableRepoAssigns.AppendLine($" this.xls{tableName} = <xls{tableName}[]>{tableName}");
  32. }
  33. }
  34. var xlsConfigText = File.ReadAllText(CodeTemplatePath);
  35. xlsConfigText = xlsConfigText.Replace(RequireJsonArea, sbRequireJsons.ToString());
  36. xlsConfigText = xlsConfigText.Replace(TableTypeArea, sbTableTypes.ToString());
  37. xlsConfigText = xlsConfigText.Replace(TableRepositoryDefineArea, sbTableRepoDefines.ToString());
  38. xlsConfigText = xlsConfigText.Replace(TableRepositoryAssignArea, sbTableRepoAssigns.ToString());
  39. var xlsConfigPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME);
  40. File.WriteAllText(xlsConfigPath, xlsConfigText, Encoding.UTF8);
  41. // metadata也写在XlsConfig,这里直接继续
  42. var metadataGenerater = new TSMetadataTableGenerater();
  43. metadataGenerater.Generate(context);
  44. }
  45. private void GenTableType(Table table, StringBuilder sbTableTypes)
  46. {
  47. sbTableTypes.Append($"export type xls{table.Name} = {{");
  48. var isFieldFirst = true;
  49. // var pkFieldInfo = table.GetPKFieldInfo();
  50. // 属性定义
  51. for (int i = 0, length = table.FieldInfos.Length; i < length; i++)
  52. {
  53. var fieldInfo = table.FieldInfos[i];
  54. // no export server’s field
  55. if (!fieldInfo.IsServerField)
  56. continue;
  57. string fieldType = fieldInfo.FieldType.ToTSFieldType();
  58. var fieldName = fieldInfo.FieldName;
  59. if (!isFieldFirst)
  60. {
  61. sbTableTypes.Append(',');
  62. }
  63. else
  64. {
  65. isFieldFirst = false;
  66. }
  67. if (fieldInfo.IsRepeated)
  68. {
  69. // 数组
  70. sbTableTypes.Append($" {fieldName}: {fieldType}[]");
  71. }
  72. else
  73. { // 字段
  74. sbTableTypes.Append($" {fieldName}: {fieldType}");
  75. }
  76. }
  77. sbTableTypes.Append(" }\n");
  78. }
  79. }
  80. }