123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace etoy
- {
- /// <summary>
- /// 规则中心辅助类
- /// </summary>
- static class RuleCenterUtil
- {
- private static string _defatultSqlType = RuleCenterTypeDefine.Varchar;
- private static Dictionary<string, string> _typeMap = new Dictionary<string, string>
- {
- {FieldTypeDefine.Boolean, RuleCenterTypeDefine.Tinyint},
- {FieldTypeDefine.Int, RuleCenterTypeDefine.Int},
- {FieldTypeDefine.Long, RuleCenterTypeDefine.Bigint},
- {FieldTypeDefine.Float, RuleCenterTypeDefine.Double},
- {FieldTypeDefine.Double, RuleCenterTypeDefine.Double},
- {FieldTypeDefine.String, RuleCenterTypeDefine.Varchar},
- };
- /// <summary>
- /// 将系统类型转换成规则中心类型
- /// </summary>
- /// <param name="systemType"></param>
- /// <returns></returns>
- public static string ToRuleCenterType(string systemType, bool repeated)
- {
- if (repeated) return RuleCenterTypeDefine.Longtext;
- if (_typeMap.TryGetValue(systemType, out var sqltype))
- return sqltype;
- return _defatultSqlType;
- }
- /// <summary>
- /// 获取字符串字节数
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static int GetJsonStringLength(string str)
- {
- return Encoding.UTF8.GetByteCount(str);
- }
- /// <summary>
- /// 逐字段写入
- /// </summary>
- /// <param name="writer"></param>
- /// <param name="fieldMap"></param>
- public static void OnFields(this JsonWriter writer, Dictionary<string, RuleCenterField> fieldMap)
- {
- writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields).NewLine().ArrayBracket().Indent();
- {
- writer.EnumeratorToJson(fieldMap, fieldMap.Count, (_, field) => {
- writer.NewLine();
- writer.OnSingleField(field.Value);
- });
- }
- writer.Dedent().NewLine().EndArrayBracket();
- }
- /// <summary>
- /// 单个字段写入
- /// </summary>
- /// <param name="filed"></param>
- public static void OnSingleField(this JsonWriter writer, RuleCenterField field)
- {
- writer.Bracket();
- {
- writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields_Name).Append(field.name).Dot();
- writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields_Type).Append(field.type);
- if (field.len >= 0)
- {
- writer.Dot();
- writer.AppendKey(RuleCenterJsonStructureDefine.Table_Fields_Length)
- .ArrayBracket().Append(field.len).EndArrayBracket();
- }
- }
- writer.EndBracket();
- }
- /// <summary>
- /// 逐格写入
- /// </summary>
- /// <param name="rows"></param>
- public static void OnCell(this JsonWriter writer, Cell cell, RuleCenterField field)
- {
- var value = cell.Value;
- if (cell.FieldInfo.FieldType == FieldTypeDefine.String)
- {
- value = cell.Value.ToInlayString();
- writer.AppendKey(cell.FieldInfo.FieldName).Append(value);
- }
- else
- {
- writer.AppendKey(cell.FieldInfo.FieldName).AppendForce(value);
- }
- if (field.type == RuleCenterTypeDefine.Varchar)
- field.len = Math.Max(field.len, RuleCenterUtil.GetJsonStringLength(value));
- }
- /// <summary>
- /// 单行写入
- /// </summary>
- /// <param name="row"></param>
- public static void OnSingleRow(this JsonWriter writer, Row row, Dictionary<string, RuleCenterField> fieldsmap)
- {
- // 去除对规则中心无用属性
- var cells = row.Cells.FindAll((cell) => { return fieldsmap.ContainsKey(cell.FieldInfo.FieldName); });
- writer.Bracket();
- {
- writer.EnumeratorToJson(cells, cells.Count, (_, cell) =>
- {
- writer.OnCell(cell, fieldsmap[cell.FieldInfo.FieldName]);
- });
- }
- writer.EndBracket();
- }
- /// <summary>
- /// 逐行写入
- /// </summary>
- /// <param name="rows"></param>
- public static void OnRows(this JsonWriter writer, List<Row> rows, Dictionary<string, RuleCenterField> fieldsmap)
- {
- writer.AppendKey(RuleCenterJsonStructureDefine.Table_Rows).NewLine().ArrayBracket().Indent();
- {
- // 需上传至服务端属性都为0的话,就不管
- if (fieldsmap.Count > 0)
- {
- writer.EnumeratorToJson(rows, rows.Count, (_, row) =>
- {
- writer.NewLine();
- writer.OnSingleRow(row, fieldsmap);
- });
- }
- }
- writer.Dedent().NewLine().EndArrayBracket();
- }
- }
- }
|