Пример #1
0
        public static string CompareModelToLog <T>(LogModule action, T newObj, T oldObj = null)
            where T : class
        {
            var result = string.Empty;

            if (oldObj == null)
            {
                result = string.Format("成功添加{0}!", action.ToString());
                var props  = typeof(T).GetProperties();
                var idprop = props.FirstOrDefault(o => o.Name.ToUpper() == "ID");
                var id     = idprop.GetValue(newObj, null);
                result += string.Format("{0}Id:{1}{2}", Environment.NewLine, id, Environment.NewLine);
                foreach (var item in props)
                {
                    var attr = item.GetCustomAttributes(typeof(OperationLogAttribute), true).FirstOrDefault();
                    if (attr != null)
                    {
                        var    attrObj = (attr as OperationLogAttribute);
                        object value   = item.GetValue(newObj, null);
                        if (attrObj.IsDict)
                        {
                            switch (attrObj.Source)
                            {
                            case DictSource.InDBSysDict:
                                SysDataDictionaryDAL _dal = new SysDataDictionaryDAL();
                                _dal.GetExtModelByDicSN((int)value);
                                break;

                            case DictSource.Prop:
                                var titleProp = props.FirstOrDefault(o => o.Name == attrObj.Prop);
                                if (titleProp != null)
                                {
                                    value = titleProp.GetValue(newObj, null);
                                }
                                break;

                            case DictSource.Enum:
                                var enumtitle = attrObj.ShowDicts.FirstOrDefault(o => o.Contains(value.ToString().ToLower() + ":"));
                                if (enumtitle != null)
                                {
                                    value = enumtitle.Split(':')[1];
                                }
                                break;
                            }
                        }
                        result += string.Format("{0}:{1},", attrObj.Title, value);
                    }
                }
                //new
            }
            else if (newObj != null && oldObj != null)
            {
                result = string.Format("成功修改{0}!", action.ToString());
                var props  = typeof(T).GetProperties();
                var idprop = props.FirstOrDefault(o => o.Name.ToUpper() == "ID");
                var id     = idprop.GetValue(newObj, null);
                result += string.Format("{0}Id:{1}{2}", Environment.NewLine, id, Environment.NewLine);
                foreach (var item in props)
                {
                    var attr = item.GetCustomAttributes(typeof(OperationLogAttribute), true).FirstOrDefault();
                    if (attr != null)
                    {
                        var    attrObj  = (attr as OperationLogAttribute);
                        object value    = item.GetValue(newObj, null);
                        object oldValue = item.GetValue(oldObj, null);
                        bool   isEquals = false;
                        if (value == null)
                        {
                            isEquals = value != oldValue;
                        }
                        else
                        {
                            isEquals = !value.Equals(oldValue);
                        }

                        if (isEquals)
                        {
                            if (attrObj.IsDict)
                            {
                                switch (attrObj.Source)
                                {
                                case DictSource.InDBSysDict:
                                    SysDataDictionaryDAL _dal = new SysDataDictionaryDAL();
                                    _dal.GetExtModelByDicSN((int)value);
                                    break;

                                case DictSource.Prop:
                                    var titleProp = props.FirstOrDefault(o => o.Name == attrObj.Prop);
                                    if (titleProp != null)
                                    {
                                        value = titleProp.GetValue(newObj, null);
                                    }
                                    break;

                                case DictSource.Enum:
                                    var enumtitle = attrObj.ShowDicts.FirstOrDefault(o => o.Contains(value.ToString().ToLower() + ":"));
                                    if (enumtitle != null)
                                    {
                                        value = enumtitle.Split(':')[1];
                                    }
                                    break;
                                }
                            }
                            result += string.Format("{0}:{1},", attrObj.Title, value);
                        }
                    }
                }
                //update
            }
            else
            {
                result = string.Format("成功删除{0}!", action.ToString());
                var props  = typeof(T).GetProperties();
                var idprop = props.FirstOrDefault(o => o.Name.ToUpper() == "ID");
                var id     = idprop.GetValue(oldObj, null);
                result += string.Format("{0}Id:{1}{2}", Environment.NewLine, id, Environment.NewLine);
                foreach (var item in props)
                {
                    var attr = item.GetCustomAttributes(typeof(OperationLogAttribute), true).FirstOrDefault();
                    if (attr != null)
                    {
                        var    attrObj = (attr as OperationLogAttribute);
                        object value   = item.GetValue(oldObj, null);
                        if (attrObj.IsDict)
                        {
                            switch (attrObj.Source)
                            {
                            case DictSource.InDBSysDict:
                                SysDataDictionaryDAL _dal = new SysDataDictionaryDAL();
                                _dal.GetExtModelByDicSN((int)value);
                                break;

                            case DictSource.Prop:
                                var titleProp = props.FirstOrDefault(o => o.Name == attrObj.Prop);
                                if (titleProp != null)
                                {
                                    value = titleProp.GetValue(oldObj, null);
                                }
                                break;

                            case DictSource.Enum:
                                var enumtitle = attrObj.ShowDicts.FirstOrDefault(o => o.Contains(value.ToString().ToLower() + ":"));
                                if (enumtitle != null)
                                {
                                    value = enumtitle.Split(':')[1];
                                }
                                break;
                            }
                        }
                        result += string.Format("{0}:{1},", attrObj.Title, value);
                    }
                }
            }
            return(result);
        }