Пример #1
0
        private void FindApiClientArg(EntityConfig friend, ApiItem item, ProjectConfig apiProject)
        {
            var entity = GetEntity(p => p != friend && p.ReferenceKey == friend.Key);
            var count  = friend.Properties.Count(p => p.Name != "ClientNo");

            switch (count)
            {
            case 0:
                item.ResultArg = null;
                if (entity != null)
                {
                    entity.Option.IsDelete = true;
                }
                return;

            case 1:
                item.ResultArg =
                    CppTypeHelper.CppTypeToCsType(friend.Properties.FirstOrDefault(p => p.Name != "ClientNo"));
                if (entity != null)
                {
                    entity.Option.IsDelete = true;
                }
                return;
            }
            if (entity == null)
            {
                entity = new EntityConfig
                {
                    Parent  = apiProject,
                    Project = apiProject.Name,
                    CppName = item.CallArg,
                    Name    = ToClientName(item.CallArg),
                    Tag     = friend.Tag
                };
                apiProject.Add(entity);
            }
            entity.NoDataBase   = true;
            entity.ReferenceKey = friend.Key;
            entity.Caption      = item.Caption + "命令调用参数";
            entity.Description  = item.Caption + "命令调用参数";
            item.ResultArg      = entity.Name;

            foreach (var property in friend.Properties)
            {
                var fp = entity.Properties.FirstOrDefault(p => p.ReferenceKey == property.Key)
                         ?? entity.Properties.FirstOrDefault(p => p.Name == property.Name);
                if (fp == null)
                {
                    fp = new PropertyConfig();
                    fp.CopyFrom(property);
                    fp.Parent = entity;
                    entity.Add(fp);
                }
                fp.Parent = entity;
                fp.Option.ReferenceKey = property.Option.Key;
                fp.Caption             = property.Caption;
                fp.Tag = entity.Tag + "," + property.Name;
            }
        }
        private void FindNitifyClientEntity(EntityConfig friend, ProjectConfig apiProject, NotifyItem item)
        {
            var entity = GlobalConfig.GetEntity(p => p != friend && p.Tag == friend.Tag);

            if (entity == null)
            {
                entity = new EntityConfig
                {
                    Parent      = apiProject,
                    Project     = apiProject.Name,
                    CppName     = friend.Name,
                    Name        = ToClientName(friend.Name),
                    Caption     = item.Caption,
                    Description = item.Caption + "(消息通知)",
                    IsClass     = false,
                    Classify    = friend.Classify,
                    Tag         = friend.Tag
                };
                apiProject.Entities.Add(entity);
                SolutionConfig.Current.Entities.Add(entity);
            }
            item.ClientEntity = entity.Name;
            if (entity.PrimaryColumn == null)
            {
                entity.Properties.Add(new PropertyConfig
                {
                    Name         = entity.Name + "Id",
                    Caption      = entity.Caption + "ID",
                    Description  = entity.Caption + "ID",
                    IsPrimaryKey = true,
                    IsIdentity   = true,
                    CsType       = "int",
                    CppType      = "int",
                    Parent       = entity
                });
            }
            foreach (var property in friend.Properties)
            {
                property.CsType = CppTypeHelper.CppTypeToCsType(property);
                property.Tag    = friend.Tag + "," + property.Name;
                var fp = entity.Properties.FirstOrDefault(p => p.Tag != null && p.Tag == property.Tag)
                         ?? entity.Properties.FirstOrDefault(p => p.Name == property.Name);
                if (fp == null)
                {
                    fp = new PropertyConfig();
                    fp.CopyFrom(property);
                    fp.Parent = entity;
                    entity.Properties.Add(fp);
                }
                fp.Parent  = entity;
                fp.Tag     = property.Tag;
                fp.Caption = property.Caption;
            }
        }
 internal void RepairCpp(bool repair, EntityConfig friend = null)
 {
     if (friend != null)
     {
         if (RepairTag(friend, Property.Parent.Tag))
         {
             Property.CsType = CppTypeHelper.CppTypeToCsType(Property);
         }
     }
     if (!repair)
     {
         //FindOld();
         CheckEnum();
         CheckStruct();
     }
 }
        private void CheckStruct()
        {
            if (Property.IsSystemField || Property.EnumConfig != null)
            {
                return;
            }
            if (Property.CppType == null)
            {
                Property.CppType = CppTypeHelper.CsTypeToCppType(Property);
            }
            if (Property.CppLastType == null)
            {
                Property.CppLastType = Property.CppType;
            }

            var type   = CppTypeHelper.ToCppLastType(Property.CppType);
            var entity = type as EntityConfig;

            if (entity != null)
            {
                Property.CppLastType = entity.Name;
                Property.CsType      = entity.Name + "Data";
                if (!entity.IsReference)
                {
                    return;
                }
                var friend = GetEntity(p => !p.IsReference && p != entity && p.Tag == entity.Tag);
                if (friend != null)
                {
                    Property.CppLastType = friend.Name;
                    Property.CsType      = friend.Name + "Data";
                }
                return;
            }
            var typedef = type as TypedefItem;

            if (typedef != null)
            {
                ReBindingEnum(typedef);
            }
            else
            {
                Property.CppLastType = type.ToString();
            }
        }
        /// <summary>
        ///     修复数组长度
        /// </summary>
        public void RepairByArrayLen()
        {
            var type = CppTypeHelper.ToCppLastType(Property.CppLastType) as TypedefItem;

            if (type != null)
            {
                if (type.KeyWork == "char" && !string.IsNullOrWhiteSpace(type.ArrayLen))
                {
                    try
                    {
                        Property.Datalen = Int32.Parse(type.ArrayLen);
                    }
                    catch (Exception)
                    {
                        Property.Datalen = 5000;
                    }
                }
            }
            else if (!Property.Parent.IsReference && Property.CsType == "string" && Property.Datalen <= 0)
            {
                Property.Datalen = 500;
            }
        }
Пример #6
0
        /// <summary>
        ///     自动修复(从模型修复数据存储)
        /// </summary>
        public void RepairCpp(bool repair = false)
        {
            if (Entity.IsFreeze)
            {
                return;
            }
            if (Entity.IsReference)
            {
                if (repair)
                {
                    foreach (var col in Entity.Properties)
                    {
                        col.CppLastType = CppTypeHelper.CppLastType(col.CppType);
                    }
                }
                return;
            }
            RepairEsName(repair);

            EntityConfig friend = GetEntity(p => p != Entity && p.Tag == Entity.Tag);

            PropertyBusinessModel model = new PropertyBusinessModel();

            foreach (var col in Entity.Properties)
            {
                if (col.Discard || Entity.IsFreeze)
                {
                    continue;
                }
                col.Parent     = Entity;
                model.Property = col;
                model.RepairCpp(repair, friend);
                col.IsModify = true;
            }
            Entity.IsModify = true;
        }
        internal bool RepairTag(EntityConfig friend, string head)
        {
            if (Property.IsSystemField)
            {
                Property.Tag = "[SYSTEM]";
                return(false);
            }
            if (friend == null)
            {
                Property.Tag = null;
                return(false);
            }
            string tag  = Property.Tag ?? "";
            var    link = friend.Properties.FirstOrDefault(p => tag == p.Tag) ??
                          friend.Properties.FirstOrDefault(p => p.Name == Property.Name);

            if (link == null)
            {
                Property.Tag = null;
                //Property.CppName = null;
                if (Property.EnumConfig != null && Property.EnumConfig.Items.Count <= 1)
                {
                    Property.EnumConfig.IsDelete = true;
                    Property.EnumConfig          = null;
                    Property.CustomType          = null;
                }
                else if (Property.EnumConfig == null && Property.CustomType != null)
                {
                    Property.CustomType = null;
                }
                return(false);
            }
            tag = head + "," + link.CppType + "," + link.Name;
            if (friend.Tag != null && friend.Tag.Contains(tag + ",[Skip]"))
            {
                return(false);
            }
            Property.Tag = tag;
            var cpptype = CppTypeHelper.ToCppLastType(link.CppType);

            var stru = cpptype as EntityConfig;

            if (stru != null)
            {
                link.CppLastType = Property.CppType = GetEntity(p => p.Tag == stru.Tag && p != stru)?.Name;
                return(true);
            }
            var type = cpptype as TypedefItem;

            if (type == null)
            {
                Property.CppType     = link.CppType;
                Property.CppLastType = link.CppType;
                return(true);
            }
            Property.CppType     = type.KeyWork;
            Property.CppLastType = type.KeyWork;
            if (type.ArrayLen != null)
            {
                if (type.KeyWork == "char" && !string.IsNullOrWhiteSpace(type.ArrayLen))
                {
                    int len;
                    if (Int32.TryParse(type.ArrayLen, out len))
                    {
                        link.Datalen     = len;
                        Property.Datalen = len;
                    }
                    else
                    {
                        link.Datalen     = 100;
                        Property.Datalen = 100;
                        link.ArrayLen    = type.ArrayLen;
                    }
                }
                else
                {
                    link.ArrayLen     = type.ArrayLen;
                    Property.ArrayLen = type.ArrayLen;
                }
            }

            if (type.Items.Count <= 0)
            {
                Property.EnumConfig = null;
                Property.CustomType = null;
                return(true);
            }
            ReBindingEnum(type);
            return(false);
        }
        private void FindApiClientArg(EntityConfig friend, ApiItem item, ProjectConfig apiProject)
        {
            var entity = GlobalConfig.GetEntity(p => p != friend && p.Tag == friend.Tag);
            var count  = friend.Properties.Count(p => p.Name != "ClientNo");

            switch (count)
            {
            case 0:
                item.ResultArg = null;
                if (entity != null)
                {
                    entity.IsDelete = true;
                }
                return;

            case 1:
                item.ResultArg =
                    CppTypeHelper.CppTypeToCsType(friend.Properties.FirstOrDefault(p => p.Name != "ClientNo"));
                if (entity != null)
                {
                    entity.IsDelete = true;
                }
                return;
            }
            if (entity == null)
            {
                entity = new EntityConfig
                {
                    Parent  = apiProject,
                    Project = apiProject.Name,
                    CppName = item.CallArg,
                    Name    = ToClientName(item.CallArg)
                };
                apiProject.Entities.Add(entity);
                Solution.Entities.Add(entity);
            }
            entity.IsClass     = true;
            entity.Tag         = friend.Tag;
            entity.Caption     = item.Caption + "命令调用参数";
            entity.Description = item.Caption + "命令调用参数";
            item.ResultArg     = entity.Name;

            foreach (var property in friend.Properties)
            {
                property.CsType = CppTypeHelper.CppTypeToCsType(property);
                if (property.Name == "ClientNo")
                {
                    continue;
                }
                property.Tag = friend.Tag + "," + property.Name;
                var fp = entity.Properties.FirstOrDefault(p => p.Tag != null && p.Tag == property.Tag)
                         ?? entity.Properties.FirstOrDefault(p => p.Name == property.Name);
                if (fp == null)
                {
                    fp = new PropertyConfig();
                    fp.CopyFrom(property);
                    fp.Parent = entity;
                    entity.Properties.Add(fp);
                }
                fp.Parent  = entity;
                fp.Tag     = property.Tag;
                fp.Caption = property.Caption;
            }
        }