RuleCenterUtil.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace etoy
  5. {
  6. /// <summary>
  7. /// 规则中心辅助类
  8. /// </summary>
  9. static class RuleCenterUtil
  10. {
  11. private static string _defatultSqlType = RuleCenterTypeDefine.Varchar;
  12. private static Dictionary<string, string> _typeMap = new Dictionary<string, string>
  13. {
  14. {FieldTypeDefine.Boolean, RuleCenterTypeDefine.Tinyint},
  15. {FieldTypeDefine.Int, RuleCenterTypeDefine.Int},
  16. {FieldTypeDefine.Long, RuleCenterTypeDefine.Bigint},
  17. {FieldTypeDefine.Float, RuleCenterTypeDefine.Double},
  18. {FieldTypeDefine.Double, RuleCenterTypeDefine.Double},
  19. {FieldTypeDefine.String, RuleCenterTypeDefine.Varchar},
  20. };
  21. /// <summary>
  22. /// 将系统类型转换成规则中心类型
  23. /// </summary>
  24. /// <param name="systemType"></param>
  25. /// <returns></returns>
  26. public static string ToRuleCenterType(string systemType, bool repeated)
  27. {
  28. if (repeated) return RuleCenterTypeDefine.Longtext;
  29. if (_typeMap.TryGetValue(systemType, out var sqltype))
  30. return sqltype;
  31. return _defatultSqlType;
  32. }
  33. /// <summary>
  34. /// 获取字符串字节数
  35. /// </summary>
  36. /// <param name="str"></param>
  37. /// <returns></returns>
  38. public static int GetJsonStringLength(string str)
  39. {
  40. return Encoding.UTF8.GetByteCount(str);
  41. }
  42. /// <summary>
  43. /// 逐字段写入
  44. /// </summary>
  45. /// <param name="writer"></param>
  46. /// <param name="fieldMap"></param>
  47. public static void OnFields(this JsonWriter writer, Dictionary<string, RuleCenterField> fieldMap)
  48. {
  49. writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields).NewLine().ArrayBracket().Indent();
  50. {
  51. writer.EnumeratorToJson(fieldMap, fieldMap.Count, (_, field) => {
  52. writer.NewLine();
  53. writer.OnSingleField(field.Value);
  54. });
  55. }
  56. writer.Dedent().NewLine().EndArrayBracket();
  57. }
  58. /// <summary>
  59. /// 单个字段写入
  60. /// </summary>
  61. /// <param name="filed"></param>
  62. public static void OnSingleField(this JsonWriter writer, RuleCenterField field)
  63. {
  64. writer.Bracket();
  65. {
  66. writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields_Name).Append(field.name).Dot();
  67. writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields_Type).Append(field.type);
  68. if (field.len >= 0)
  69. {
  70. writer.Dot();
  71. writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields_Length)
  72. .ArrayBracket().Append(field.len).EndArrayBracket();
  73. }
  74. }
  75. writer.EndBracket();
  76. }
  77. /// <summary>
  78. /// 逐格写入
  79. /// </summary>
  80. /// <param name="rows"></param>
  81. public static void OnCell(this JsonWriter writer, Cell cell, RuleCenterField field)
  82. {
  83. var value = cell.Value;
  84. if (cell.FieldInfo.FieldType == FieldTypeDefine.String)
  85. {
  86. value = cell.Value.ToInlayString();
  87. writer.AppendKey(cell.FieldInfo.FieldName).Append(value);
  88. }
  89. else
  90. {
  91. writer.AppendKey(cell.FieldInfo.FieldName).AppendForce(value);
  92. }
  93. if (field.type == RuleCenterTypeDefine.Varchar)
  94. field.len = Math.Max(field.len, RuleCenterUtil.GetJsonStringLength(value));
  95. }
  96. /// <summary>
  97. /// 单行写入
  98. /// </summary>
  99. /// <param name="row"></param>
  100. public static void OnSingleRow(this JsonWriter writer, Row row, Dictionary<string, RuleCenterField> fieldsmap)
  101. {
  102. // 去除对规则中心无用属性
  103. var cells = row.Cells.FindAll((cell) => { return fieldsmap.ContainsKey(cell.FieldInfo.FieldName); });
  104. writer.Bracket();
  105. {
  106. writer.EnumeratorToJson(cells, cells.Count, (_, cell) =>
  107. {
  108. writer.OnCell(cell, fieldsmap[cell.FieldInfo.FieldName]);
  109. });
  110. }
  111. writer.EndBracket();
  112. }
  113. /// <summary>
  114. /// 逐行写入
  115. /// </summary>
  116. /// <param name="rows"></param>
  117. public static void OnRows(this JsonWriter writer, List<Row> rows, Dictionary<string, RuleCenterField> fieldsmap)
  118. {
  119. writer.AppendKey(RuleCenterJsonStructureDefine.Table_Rows).NewLine().ArrayBracket().Indent();
  120. {
  121. // 需上传至服务端属性都为0的话,就不管
  122. if (fieldsmap.Count > 0)
  123. {
  124. writer.EnumeratorToJson(rows, rows.Count, (_, row) =>
  125. {
  126. writer.NewLine();
  127. writer.OnSingleRow(row, fieldsmap);
  128. });
  129. }
  130. }
  131. writer.Dedent().NewLine().EndArrayBracket();
  132. }
  133. }
  134. }