From 4e2891e07b4ebfe1db626c91077f81e652d5b5aa Mon Sep 17 00:00:00 2001 From: Carson Lin <396098651@qq.com> Date: Tue, 16 Aug 2022 19:01:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=94=AF=E6=8C=81tables.xlsx=E4=B8=ADvalu?= =?UTF-8?q?e=5Ftype=E5=AE=9A=E4=B9=89parent=EF=BC=8C=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E4=B8=BATypeChild#parent=3DTypeParent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs b/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs index d47d871..ee00573 100644 --- a/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs +++ b/src/Luban.Job.Cfg/Source/Defs/CfgDefLoader.cs @@ -326,14 +326,37 @@ namespace Luban.Job.Cfg.Defs ExcelTableValueTypeDefInfoCacheManager.Instance.AddTableDefInfoToCache(file.MD5, file.SheetName, tableDefInfo); } - var ns = TypeUtil.GetNamespace(table.ValueType); - + var (valueType, tags) = DefUtil.ParseType(table.ValueType); + var ns = TypeUtil.GetNamespace(valueType); string valueTypeNamespace = string.IsNullOrEmpty(ns) ? table.Namespace : ns; - string valueTypeName = TypeUtil.GetName(table.ValueType); + string valueTypeName = TypeUtil.GetName(valueType); + Bean parentBean = null; + if (tags.TryGetValue("parent", out string parentType)) + { + var parentNs = TypeUtil.GetNamespace(parentType); + string parentNamespace = string.IsNullOrEmpty(parentNs) ? table.Namespace : parentNs; + string parentName = TypeUtil.GetName(parentType); + parentType = string.Join(".", parentNamespace, parentName); + parentBean = _beans.FirstOrDefault(x => x.FullName == parentType); + } + var cb = new CfgBean() { Namespace = valueTypeNamespace, Name = valueTypeName, Comment = "", Parent = parentType }; + if (parentBean != null) + { + foreach (var parentField in parentBean.Fields) + { + if (!tableDefInfo.FieldInfos.Any(x => x.Key == parentField.Name && x.Value.Type == parentField.Type)) + { + throw new Exception($"table:'{table.Name}' file:{file.OriginFile} title:缺失父类字段:'{parentField.Type} {parentField.Name}'"); + } + } + } - var cb = new CfgBean() { Namespace = valueTypeNamespace, Name = valueTypeName, Comment = "" }; foreach (var (name, f) in tableDefInfo.FieldInfos) { + if (parentBean.Fields.Any(x => x.Name == name && x.Type == f.Type)) + { + continue; + } var cf = new CfgField() { Name = name, Id = 0 }; string[] attrs = f.Type.Trim().Split('&').Select(s => s.Trim()).ToArray();