mirror of
				https://github.com/nsnail/NetAdmin.git
				synced 2025-11-04 13:10:50 +08:00 
			
		
		
		
	@@ -8,9 +8,9 @@
 | 
			
		||||
        "Description": "NetAdmin - 系统组件",
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "Group": "Biz",
 | 
			
		||||
        "Title": "业务服务",
 | 
			
		||||
        "Description": "NetAdmin - 业务服务",
 | 
			
		||||
        "Group": "Adm",
 | 
			
		||||
        "Title": "管理服务",
 | 
			
		||||
        "Description": "NetAdmin - 管理服务",
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "Group": "Tpl",
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
 | 
			
		||||
public abstract record LiteImmutableEntity<T> : EntityBase, IFieldPrimary<T>, IFieldCreatedTime
 | 
			
		||||
{
 | 
			
		||||
    /// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
 | 
			
		||||
    [Column(ServerTime = DateTimeKind.Utc, CanUpdate = false, Position = -1)]
 | 
			
		||||
    [Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)]
 | 
			
		||||
    [JsonIgnore]
 | 
			
		||||
    public virtual DateTime CreatedTime { get; init; }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ public abstract record LiteMutableEntity<T> : LiteImmutableEntity<T>, IFieldModi
 | 
			
		||||
    public override T Id { get; init; }
 | 
			
		||||
 | 
			
		||||
    /// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
 | 
			
		||||
    [Column(ServerTime = DateTimeKind.Utc, CanInsert = false, Position = -1)]
 | 
			
		||||
    [Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)]
 | 
			
		||||
    [JsonIgnore]
 | 
			
		||||
    public virtual DateTime? ModifiedTime { get; init; }
 | 
			
		||||
}
 | 
			
		||||
@@ -6,6 +6,7 @@ using NetAdmin.Host.Utils;
 | 
			
		||||
using StackExchange.Redis;
 | 
			
		||||
using Yitter.IdGenerator;
 | 
			
		||||
using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
using Spectre.Console;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ public sealed class SqlAuditor : ISingleton
 | 
			
		||||
    public SqlAuditor(ILogger<SqlAuditor> logger)
 | 
			
		||||
    {
 | 
			
		||||
        // 设置服务器时间偏差
 | 
			
		||||
        _timeOffset = DateTime.UtcNow.Subtract(App.GetService<IFreeSql>().Ado.QuerySingle(() => DateTime.UtcNow));
 | 
			
		||||
        _timeOffset = DateTime.Now.Subtract(App.GetService<IFreeSql>().Ado.QuerySingle(() => DateTime.Now));
 | 
			
		||||
 | 
			
		||||
        logger.Info($"{Ln.数据库服务器时钟偏移} {_timeOffset}");
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -56,10 +56,10 @@
 | 
			
		||||
    "RoutePrefix": "swagger",
 | 
			
		||||
    "XmlComments": [
 | 
			
		||||
      "FreeSql.xml",
 | 
			
		||||
      "NetAdmin.Application.xml",
 | 
			
		||||
      "NetAdmin.AdmServer.Application.xml",
 | 
			
		||||
      "NetAdmin.AdmServer.Cache.xml",
 | 
			
		||||
      "NetAdmin.AdmServer.Host.xml",
 | 
			
		||||
      "NetAdmin.Application.xml",
 | 
			
		||||
      "NetAdmin.Cache.xml",
 | 
			
		||||
      "NetAdmin.Domain.xml",
 | 
			
		||||
      "NetAdmin.Host.xml",
 | 
			
		||||
 
 | 
			
		||||
@@ -112,7 +112,7 @@ public sealed class JobService(DefaultRepository<Sys_Job> rpo, IJobRecordService
 | 
			
		||||
                                           Filters = [
 | 
			
		||||
                                               new DynamicFilterInfo {
 | 
			
		||||
                                                                         Field    = nameof(QueryJobReq.NextExecTime)
 | 
			
		||||
                                                                       , Value    = DateTime.UtcNow
 | 
			
		||||
                                                                       , Value    = DateTime.Now
 | 
			
		||||
                                                                       , Operator = DynamicFilterOperators.LessThan
 | 
			
		||||
                                                                     }
 | 
			
		||||
                                             , new DynamicFilterInfo {
 | 
			
		||||
@@ -139,7 +139,7 @@ public sealed class JobService(DefaultRepository<Sys_Job> rpo, IJobRecordService
 | 
			
		||||
            ? null
 | 
			
		||||
            : await UpdateAsync(job.Adapt<UpdateJobReq>() with {
 | 
			
		||||
                                                                   Status = JobStatues.Running
 | 
			
		||||
                                                                 , LastExecTime = DateTime.UtcNow
 | 
			
		||||
                                                                 , LastExecTime = DateTime.Now
 | 
			
		||||
                                                               })
 | 
			
		||||
                .ConfigureAwait(false);
 | 
			
		||||
    }
 | 
			
		||||
@@ -239,7 +239,8 @@ public sealed class JobService(DefaultRepository<Sys_Job> rpo, IJobRecordService
 | 
			
		||||
    private static DateTime? GetNextExecTime(string cron)
 | 
			
		||||
    {
 | 
			
		||||
        return CronExpression.Parse(cron, CronFormat.IncludeSeconds)
 | 
			
		||||
                             .GetNextOccurrence(DateTime.UtcNow, TimeZoneInfo.Utc);
 | 
			
		||||
                             .GetNextOccurrence(DateTime.UtcNow, TimeZoneInfo.Local)
 | 
			
		||||
                             ?.ToLocalTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ISelect<Sys_Job> QueryInternal(QueryReq<QueryJobReq> req)
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ public sealed class ToolsService : ServiceBase<IToolsService>, IToolsService
 | 
			
		||||
    /// <inheritdoc />
 | 
			
		||||
    public Task<DateTime> GetServerUtcTimeAsync()
 | 
			
		||||
    {
 | 
			
		||||
        return Task.FromResult(DateTime.UtcNow);
 | 
			
		||||
        return Task.FromResult(DateTime.Now);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <inheritdoc />
 | 
			
		||||
 
 | 
			
		||||
@@ -107,7 +107,7 @@ public sealed class VerifyCodeService(DefaultRepository<Sys_VerifyCode> rpo, IEv
 | 
			
		||||
 | 
			
		||||
        #if !DEBUG
 | 
			
		||||
        // 有发送记录,且小于1分钟,不允许
 | 
			
		||||
        if (lastSent != null && (DateTime.UtcNow - lastSent.CreatedTime).TotalMinutes < 1) {
 | 
			
		||||
        if (lastSent != null && (DateTime.Now - lastSent.CreatedTime).TotalMinutes < 1) {
 | 
			
		||||
            throw new NetAdminInvalidOperationException(Ln._1分钟内只能发送1次);
 | 
			
		||||
        }
 | 
			
		||||
        #endif
 | 
			
		||||
@@ -152,7 +152,7 @@ public sealed class VerifyCodeService(DefaultRepository<Sys_VerifyCode> rpo, IEv
 | 
			
		||||
        var lastSent = await GetLastSentAsync(req.DestDevice).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
        if (lastSent is not { Status: VerifyCodeStatues.Sent } || req.Code != lastSent.Code ||
 | 
			
		||||
            (DateTime.UtcNow - lastSent.CreatedTime).TotalMinutes          > 10) {
 | 
			
		||||
            (DateTime.Now - lastSent.CreatedTime).TotalMinutes             > 10) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -188,8 +188,11 @@ public sealed class VerifyCodeService(DefaultRepository<Sys_VerifyCode> rpo, IEv
 | 
			
		||||
    private ISelect<Sys_VerifyCode> QueryInternal(QueryReq<QueryVerifyCodeReq> req)
 | 
			
		||||
    {
 | 
			
		||||
        var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter);
 | 
			
		||||
        if (req.Order == Orders.Random) {
 | 
			
		||||
            return ret.OrderByRandom();
 | 
			
		||||
        switch (req.Order) {
 | 
			
		||||
            case Orders.None:
 | 
			
		||||
                return ret;
 | 
			
		||||
            case Orders.Random:
 | 
			
		||||
                return ret.OrderByRandom();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user