sunpengfei
2 天以前 285404b0f7161ceca8621e61026682bbbb3f71aa
FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
@@ -273,7 +273,7 @@
            if (model == null)
            {
                var summary = await typeof(TEntity).GetSummary();
                throw Oops.Oh(EnumErrorCodeType.s404, $"该{summary ?? "信息"}");
                throw Oops.Oh(EnumErrorCodeType.s404, $"{summary ?? "信息"}");
            }
            return model;
        }
@@ -342,7 +342,7 @@
            if (entity == null)
            {
                var summary = await typeof(TEntity).GetSummary();
                throw Oops.Oh(EnumErrorCodeType.s404, $"该{summary ?? "信息"}");
                throw Oops.Oh(EnumErrorCodeType.s404, $"{summary ?? "信息"}");
            }
            if (update != null) update(entity);
@@ -362,7 +362,7 @@
        /// <param name="update"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public static async Task<Guid> SaveData<TEntity, TRequest>(
        public static async Task<TEntity> SaveData<TEntity, TRequest>(
            this TRequest request,
            Func<IQueryable<TEntity>, IQueryable<TEntity>> query = null,
            Expression<Func<TEntity, bool>> checkExist = null,
@@ -375,17 +375,17 @@
            var summary = await typeof(TEntity).GetSummary(xmlDoc);
            var rep = Db.GetRepository<TEntity>();
            if (checkExist != null && await rep.AsQueryable().AsNoTracking().AnyAsync(checkExist))
                throw Oops.Oh(EnumErrorCodeType.s405, $"该{summary ?? "信息"}");
                throw Oops.Oh(EnumErrorCodeType.s405, $"{summary ?? "信息"}");
            if (request.Id.HasValue)
            {
                var q = rep.AsQueryable();
                if (query != null) q = query(q);
                var entity = await q.FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken);
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, $"该{summary ?? "信息"}");
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, $"{summary ?? "信息"}");
                if (update != null) update(entity);
                else request.Adapt(entity);
                await rep.UpdateAsync(entity);
                return entity.Id;
                return entity;
            }
            else
            {
@@ -393,7 +393,7 @@
                if (update != null) update(entity);
                else request.Adapt(entity);
                await rep.InsertAsync(entity);
                return entity.Id;
                return entity;
            }
        }
@@ -568,37 +568,44 @@
                    continue;
                }
                Db.GetRepository<DbAuditLog, LogDbContextLocator>().InsertNow(new DbAuditLog
                var log = new DbAuditLog
                {
                    Id = IDGen.NextID(),
                    TableName = entityType.Name,
                    PrimaryKey = (Guid)entity.Property("Id").CurrentValue,
                    NewValues = entity.State == EntityState.Added || entity.State == EntityState.Modified
                        ? GetPropertyValuesAsJson(entity)
                        : null,
                    OldValues = entity.State == EntityState.Deleted || entity.State == EntityState.Modified
                        ? GetPropertyValuesAsJson(entity, entity.State == EntityState.Modified)
                        : null,
                    Operate = entity.State == EntityState.Added
                        ? EnumDbAuditOperate.Added
                        : entity.State == EntityState.Modified
                        ? EnumDbAuditOperate.Modified
                        : EnumDbAuditOperate.Deleted,
                    TraceId = App.GetTraceId(),
                    CreatedTime = DateTime.Now,
                    CreatedUserId = logier?.Id,
                    CreatedEnterpriseId = logier?.EnterpriseId
                });
                };
                log.Operate =
                    entity.State == EntityState.Added
                    ? EnumDbAuditOperate.Added
                    : entity.State == EntityState.Modified
                    ? EnumDbAuditOperate.Modified
                    : EnumDbAuditOperate.Deleted;
                if (entity.Property(nameof(CommonEntity.IsDeleted)).CurrentValue is bool isDeleted && isDeleted == true)
                {
                    log.Operate = EnumDbAuditOperate.Deleted;
                }
                log.NewValues =
                    log.Operate == EnumDbAuditOperate.Deleted
                    ? null
                    : JsonConvert.SerializeObject(entity.Properties
                        .Where(p => log.Operate == EnumDbAuditOperate.Modified
                            ? p.IsModified
                            : true)
                        .ToDictionary(p => p.Metadata.Name, p => p.CurrentValue));
                log.OldValues =
                    log.Operate == EnumDbAuditOperate.Added
                    ? null
                    : JsonConvert.SerializeObject(entity.Properties
                        .Where(p => log.Operate == EnumDbAuditOperate.Modified
                            ? p.IsModified
                            : true)
                        .ToDictionary(p => p.Metadata.Name, p => p.OriginalValue));
                Db.GetRepository<DbAuditLog, LogDbContextLocator>().InsertNow(log);
            }
        }
        private static string GetPropertyValuesAsJson(EntityEntry entry, bool getOldValues = false)
        {
            var properties = entry.Properties
                .Where(p => getOldValues ? p.IsModified : true)
                .ToDictionary(p => p.Metadata.Name, p => getOldValues ? p.OriginalValue : p.CurrentValue);
            return JsonConvert.SerializeObject(properties);
        }
    }
}