parent
2034e8050f
commit
9fd76d5334
|
|
@ -687,6 +687,7 @@ xml中定义如下
|
||||||
- 来自某个excel文件的所有单元薄
|
- 来自某个excel文件的所有单元薄
|
||||||
- 来自某个excel文件的指定单元薄
|
- 来自某个excel文件的指定单元薄
|
||||||
- 来自json、xml、lua、yaml文件
|
- 来自json、xml、lua、yaml文件
|
||||||
|
- 来自json、xml、lua、yaml子字段 (如root.a.b)
|
||||||
- 来自目录树下所有文件,每个文件对应一个记录
|
- 来自目录树下所有文件,每个文件对应一个记录
|
||||||
- 以上的随意组合
|
- 以上的随意组合
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,6 @@ namespace Luban.ClientServer
|
||||||
|
|
||||||
[Option('t', "template_search_path", Required = false, HelpText = "string template search path.")]
|
[Option('t', "template_search_path", Required = false, HelpText = "string template search path.")]
|
||||||
public string TemplateSearchPath { get; set; }
|
public string TemplateSearchPath { get; set; }
|
||||||
|
|
||||||
[Option("timezone", Required = false, HelpText = "default timezone")]
|
|
||||||
public string DefaultTimeZone { get; set; } = "Asia/Shanghai";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void PrintUsage(string err)
|
private static void PrintUsage(string err)
|
||||||
|
|
@ -173,7 +170,6 @@ Options:
|
||||||
StringTemplateUtil.AddTemplateSearchPath(options.TemplateSearchPath);
|
StringTemplateUtil.AddTemplateSearchPath(options.TemplateSearchPath);
|
||||||
}
|
}
|
||||||
StringTemplateUtil.AddTemplateSearchPath(FileUtil.GetPathRelateApplicationDirectory("Templates"));
|
StringTemplateUtil.AddTemplateSearchPath(FileUtil.GetPathRelateApplicationDirectory("Templates"));
|
||||||
TimeZoneUtil.DefaultTimeZone = TimeZoneInfo.FindSystemTimeZoneById(options.DefaultTimeZone);
|
|
||||||
GenServer.Ins.Start(true, options.Port, ProtocolStub.Factories);
|
GenServer.Ins.Start(true, options.Port, ProtocolStub.Factories);
|
||||||
|
|
||||||
GenServer.Ins.RegisterJob("cfg", new Luban.Job.Cfg.JobController());
|
GenServer.Ins.RegisterJob("cfg", new Luban.Job.Cfg.JobController());
|
||||||
|
|
|
||||||
|
|
@ -14,20 +14,20 @@ namespace Luban.Job.Cfg.DataSources.Json
|
||||||
{
|
{
|
||||||
private JsonElement _data;
|
private JsonElement _data;
|
||||||
|
|
||||||
public override void Load(string rawUrl, string sheetName, Stream stream)
|
public override void Load(string rawUrl, string sheetOrFieldName, Stream stream)
|
||||||
{
|
{
|
||||||
RawUrl = rawUrl;
|
RawUrl = rawUrl;
|
||||||
this._data = JsonDocument.Parse(stream).RootElement;
|
this._data = JsonDocument.Parse(stream).RootElement;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(sheetName))
|
if (!string.IsNullOrEmpty(sheetOrFieldName))
|
||||||
{
|
{
|
||||||
if (sheetName.StartsWith("*"))
|
if (sheetOrFieldName.StartsWith("*"))
|
||||||
{
|
{
|
||||||
sheetName = sheetName.Substring(1);
|
sheetOrFieldName = sheetOrFieldName.Substring(1);
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrEmpty(sheetName))
|
if (!string.IsNullOrEmpty(sheetOrFieldName))
|
||||||
{
|
{
|
||||||
foreach (var subField in sheetName.Split('.'))
|
foreach (var subField in sheetOrFieldName.Split('.'))
|
||||||
{
|
{
|
||||||
_data = _data.GetProperty(subField);
|
_data = _data.GetProperty(subField);
|
||||||
}
|
}
|
||||||
|
|
@ -40,12 +40,16 @@ namespace Luban.Job.Cfg.DataSources.Json
|
||||||
var records = new List<Record>();
|
var records = new List<Record>();
|
||||||
foreach (var ele in _data.EnumerateArray())
|
foreach (var ele in _data.EnumerateArray())
|
||||||
{
|
{
|
||||||
records.Add(ReadBean(ele, type));
|
Record rec = ReadRecord(ele, type);
|
||||||
|
if (rec != null)
|
||||||
|
{
|
||||||
|
records.Add(rec);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return records;
|
return records;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Record ReadBean(JsonElement ele, TBean type)
|
private Record ReadRecord(JsonElement ele, TBean type)
|
||||||
{
|
{
|
||||||
List<string> tags;
|
List<string> tags;
|
||||||
if (ele.TryGetProperty(TAG_KEY, out var tagEle))
|
if (ele.TryGetProperty(TAG_KEY, out var tagEle))
|
||||||
|
|
@ -68,7 +72,7 @@ namespace Luban.Job.Cfg.DataSources.Json
|
||||||
|
|
||||||
public override Record ReadOne(TBean type)
|
public override Record ReadOne(TBean type)
|
||||||
{
|
{
|
||||||
return ReadBean(_data, type);
|
return ReadRecord(_data, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,21 @@ namespace Luban.Job.Cfg.DataSources.Lua
|
||||||
RawUrl = rawUrl;
|
RawUrl = rawUrl;
|
||||||
_env = LuaManager.CreateEnvironment();
|
_env = LuaManager.CreateEnvironment();
|
||||||
_dataTable = (LuaTable)_env.DoChunk(new StreamReader(stream, Encoding.UTF8), rawUrl)[0];
|
_dataTable = (LuaTable)_env.DoChunk(new StreamReader(stream, Encoding.UTF8), rawUrl)[0];
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(sheetName))
|
||||||
|
{
|
||||||
|
if (sheetName.StartsWith("*"))
|
||||||
|
{
|
||||||
|
sheetName = sheetName.Substring(1);
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(sheetName))
|
||||||
|
{
|
||||||
|
foreach (var subField in sheetName.Split('.'))
|
||||||
|
{
|
||||||
|
_dataTable = (LuaTable)_dataTable[subField];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<Record> ReadMulti(TBean type)
|
public override List<Record> ReadMulti(TBean type)
|
||||||
|
|
|
||||||
|
|
@ -12,40 +12,56 @@ namespace Luban.Job.Cfg.DataSources.Yaml
|
||||||
{
|
{
|
||||||
class YamlDataSource : AbstractDataSource
|
class YamlDataSource : AbstractDataSource
|
||||||
{
|
{
|
||||||
private YamlMappingNode _root;
|
private YamlNode _root;
|
||||||
public override void Load(string rawUrl, string sheetName, Stream stream)
|
public override void Load(string rawUrl, string sheetOrFieldName, Stream stream)
|
||||||
{
|
{
|
||||||
var ys = new YamlStream();
|
var ys = new YamlStream();
|
||||||
ys.Load(new StreamReader(stream));
|
ys.Load(new StreamReader(stream));
|
||||||
var rootNode = (YamlMappingNode)ys.Documents[0].RootNode;
|
var rootNode = ys.Documents[0].RootNode;
|
||||||
if (string.IsNullOrEmpty(sheetName))
|
|
||||||
{
|
|
||||||
this._root = rootNode;
|
this._root = rootNode;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(sheetOrFieldName))
|
||||||
|
{
|
||||||
|
if (sheetOrFieldName.StartsWith("*"))
|
||||||
|
{
|
||||||
|
sheetOrFieldName = sheetOrFieldName.Substring(1);
|
||||||
}
|
}
|
||||||
else
|
if (!string.IsNullOrEmpty(sheetOrFieldName))
|
||||||
{
|
{
|
||||||
if (rootNode.Children.TryGetValue(new YamlScalarNode(sheetName), out var childNode))
|
foreach (var subField in sheetOrFieldName.Split('.'))
|
||||||
{
|
{
|
||||||
this._root = (YamlMappingNode)childNode;
|
this._root = _root[new YamlScalarNode(subField)];
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Exception($"yaml文件:{RawUrl} 不包含子字段:{sheetName}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<Record> ReadMulti(TBean type)
|
public override List<Record> ReadMulti(TBean type)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
var records = new List<Record>();
|
||||||
|
foreach (var ele in (YamlSequenceNode)_root)
|
||||||
|
{
|
||||||
|
var rec = ReadRecord(ele, type);
|
||||||
|
if (rec != null)
|
||||||
|
{
|
||||||
|
records.Add(rec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return records;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly static YamlScalarNode s_tagNameNode = new(TAG_KEY);
|
private readonly static YamlScalarNode s_tagNameNode = new(TAG_KEY);
|
||||||
|
|
||||||
public override Record ReadOne(TBean type)
|
public override Record ReadOne(TBean type)
|
||||||
|
{
|
||||||
|
return ReadRecord(_root, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Record ReadRecord(YamlNode yamlNode, TBean type)
|
||||||
{
|
{
|
||||||
string tagName;
|
string tagName;
|
||||||
if (_root.Children.TryGetValue(s_tagNameNode, out var tagNode))
|
if (((YamlMappingNode)yamlNode).Children.TryGetValue(s_tagNameNode, out var tagNode))
|
||||||
{
|
{
|
||||||
tagName = (string)tagNode;
|
tagName = (string)tagNode;
|
||||||
}
|
}
|
||||||
|
|
@ -57,7 +73,7 @@ namespace Luban.Job.Cfg.DataSources.Yaml
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
var data = (DBean)type.Apply(YamlDataCreator.Ins, _root, (DefAssembly)type.Bean.AssemblyBase);
|
var data = (DBean)type.Apply(YamlDataCreator.Ins, yamlNode, (DefAssembly)type.Bean.AssemblyBase);
|
||||||
var tags = DataUtil.ParseTags(tagName);
|
var tags = DataUtil.ParseTags(tagName);
|
||||||
return new Record(data, RawUrl, tags);
|
return new Record(data, RawUrl, tags);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue