Beispiel #1
0
        public async Task <List <ChangeLog> > GetChangeLog(EntityDto <Guid> input, Guid flowId)
        {
            var flowModel = _workFlowCacheManager.GetWorkFlowModelFromCache(flowId);

            if (flowModel == null)
            {
                throw new UserFriendlyException((int)ErrorCode.DataAccessErr, "流程不存在");
            }
            var tableName = flowModel.TitleField.Table;
            var query     = (from a in _projectAuditRepository.GetAll()
                             where a.InstanceId == input.Id.ToString() && a.TableName == tableName
                             group a by new { a.GroupId } into g
                             select new { CreatTime = g.First().CreationTime, g }).OrderByDescending(c => c.CreatTime);

            var logs = await query.ToListAsync();

            var ret = new List <ChangeLog>();

            foreach (var item in logs)
            {
                var firstModel = item.g.FirstOrDefault();
                var entity     = new ChangeLog()
                {
                    ChangeTime = firstModel.CreationTime,
                    UserName   = (await UserManager.GetUserByIdAsync(firstModel.CreatorUserId.Value)).Name,
                };
                //entity.Content = ModelColumnLogsHepler.MakeContent(item.g.ToList());
                foreach (var model in item.g)
                {
                    var logModel = new LogColumnModel()
                    {
                        ChangeType = model.ChangeType,
                        FieldName  = model.FieldName,
                        NewValue   = model.NewValue,
                        OldValue   = model.OldValue,
                    };
                    entity.ContentModel.Add(logModel);
                }
                ret.Add(entity);
            }
            return(ret);
        }
Beispiel #2
0
        public static List <LogColumnModel> GetColumnAllLogs(object o, object n)
        {
            var logs = new List <LogColumnModel>();

            foreach (var f in o.GetType().GetProperties())
            {
                var attr = f.GetCustomAttributes(typeof(LogColumnAttribute), true);
                if (attr.Length > 0)
                {
                    var colattr = (LogColumnAttribute)attr[0];
                    if (colattr.IsLog)
                    {
                        if (f.PropertyType.GetInterface("IEnumerable", false) != null && f.PropertyType.GetInterface("IList", false) != null)
                        {
                            var childType   = f.PropertyType.GetGenericArguments()[0];
                            var childValues = f.GetValue(o);
                            var newChilds   = f.GetValue(n) as IEnumerable;
                            foreach (var item in (childValues as IEnumerable))
                            {
                                var    old_Id     = item.GetType().GetProperty("Id").GetValue(item, null);
                                var    nameValue  = GetNameFieldValue(item);
                                var    hasSameId  = false;
                                object newEditObj = null;
                                foreach (var itemNew in newChilds)
                                {
                                    var new_Id = itemNew.GetType().GetProperty("Id").GetValue(itemNew, null);
                                    if (new_Id == null)
                                    {
                                        continue;
                                    }
                                    ///编辑的
                                    if (new_Id.ToString() == old_Id.ToString())
                                    {
                                        hasSameId  = true;
                                        newEditObj = itemNew;
                                        break;
                                    }
                                    ///删除的
                                    else
                                    {
                                        continue;
                                    }
                                }
                                if (hasSameId)
                                {
                                    var editlogs = GetColumnAllLogs(item, newEditObj);
                                    foreach (var log in editlogs)
                                    {
                                        log.FieldName = $"{colattr.Name}:{nameValue}->{log.FieldName}";
                                        //log.ChangeType = 2;
                                        logs.Add(log);
                                    }
                                }
                                else
                                {
                                    var deletelog = new LogColumnModel()
                                    {
                                        ChangeType = 3,
                                        FieldName  = $"{colattr.Name}:{nameValue}",
                                        NewValue   = "",
                                        OldValue   = old_Id.ToString(),
                                    };
                                    logs.Add(deletelog);
                                }
                            }
                            foreach (var itemNew in newChilds)
                            {
                                var new_Id    = itemNew.GetType().GetProperty("Id").GetValue(itemNew, null);
                                var nameValue = GetNameFieldValue(itemNew);

                                if (new_Id == null)
                                {
                                    var addlog = new LogColumnModel()
                                    {
                                        ChangeType = 1,
                                        FieldName  = $"{colattr.Name}:{nameValue}",
                                        //NewValue = new_Id.ToString(),
                                        NewValue = "",
                                        OldValue = "",
                                    };
                                    logs.Add(addlog);
                                }
                                else
                                {
                                    var hasSameId = false;
                                    foreach (var item in (childValues as IEnumerable))
                                    {
                                        var old_Id = item.GetType().GetProperty("Id").GetValue(item, null);
                                        if (new_Id.ToString() == old_Id.ToString())
                                        {
                                            hasSameId = true;
                                            break;
                                        }
                                    }
                                    if (!hasSameId)
                                    {
                                        var addlog = new LogColumnModel()
                                        {
                                            ChangeType = 1,
                                            FieldName  = $"{colattr.Name}:{nameValue}",
                                            NewValue   = new_Id.ToString(),
                                            //FieldName = $"{colattr.Name}",
                                            //NewValue = nameValue,
                                            OldValue = "",
                                        };
                                        logs.Add(addlog);
                                    }
                                }
                            }
                        }
                        else
                        {
                            var oldValue = f.GetValue(o);

                            var newValue = f.GetValue(n);
                            if (oldValue == null)
                            {
                                oldValue = "空";
                            }
                            if (newValue == null)
                            {
                                newValue = "空";
                            }


                            if (oldValue.ToString() != newValue.ToString())
                            {
                                //if (oldValue.ToString().IndexOf(".0000", StringComparison.Ordinal) > 0)
                                if (f.PropertyType == typeof(decimal) || f.PropertyType == typeof(decimal?))
                                {
                                    var oldValueNumber = 0m;
                                    var newValueNumber = 0m;
                                    if (decimal.TryParse(oldValue.ToString(), out oldValueNumber) &&
                                        decimal.TryParse(newValue.ToString(), out newValueNumber))
                                    {
                                        if (oldValueNumber == newValueNumber)
                                        {
                                            continue;
                                        }
                                    }
                                }
                                if (f.PropertyType == typeof(bool) || f.PropertyType == typeof(bool?))
                                {
                                    var oldValueBoolen = oldValue.ToString() == "空" ? "否" : bool.Parse(oldValue.ToString()) ? "是" : "否";
                                    var newValueBoolen = newValue.ToString() == "空" ? "否" : bool.Parse(newValue.ToString()) ? "是" : "否";
                                    if (oldValueBoolen == newValueBoolen)
                                    {
                                        continue;
                                    }
                                    else
                                    {
                                        oldValue = oldValueBoolen;
                                        newValue = newValueBoolen;
                                    }
                                }
                                var field = string.IsNullOrWhiteSpace(colattr.Name) ? f.Name : colattr.Name;
                                logs.Add(new LogColumnModel
                                {
                                    FieldName = field,
                                    OldValue  = oldValue.ToString(),
                                    NewValue  = newValue.ToString()
                                });
                            }
                        }
                    }
                }
            }
            return(logs);
        }