diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs index 0b3bfd77b..fbbab47e5 100644 --- a/IRaCIS.Core.API/Progranm.cs +++ b/IRaCIS.Core.API/Progranm.cs @@ -109,7 +109,7 @@ builder.Services.AddControllers(options => } }) - .AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理 + .AddNewtonsoftJsonSetup(builder.Services); // NewtonsoftJson 序列化 处理 builder.Services.AddOptions().Configure(_configuration.GetSection("SystemEmailSendConfig")); builder.Services.AddOptions().Configure(_configuration.GetSection("BasicSystemConfig")); diff --git a/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/JSONCustomDateConverter.cs b/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/JSONCustomDateConverter.cs index 15b7fa505..388f7053a 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/JSONCustomDateConverter.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/JSONCustomDateConverter.cs @@ -19,27 +19,51 @@ namespace IRaCIS.Core.API _userInfo = userInfo; } + private static readonly TimeZoneInfo ChinaTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Asia/Shanghai"); + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - throw new NotImplementedException(); + + + if (reader.ValueType == typeof(DateTime)) + { + DateTime dateTime = (DateTime)reader.Value; + + var zoneTime = TimeZoneInfo.ConvertTime(dateTime, ChinaTimeZone); + + return zoneTime; + } + else + { + return reader.Value; + } + } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var timeZoneId = _userInfo.TimeZoneId; - var needConvertUtcDateTime = Convert.ToDateTime(value); + //var needConvertUtcDateTime = Convert.ToDateTime(value); - var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); + //var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); - var dateTimeOffset = new DateTimeOffset(needConvertUtcDateTime); + //var dateTimeOffset = new DateTimeOffset(needConvertUtcDateTime); - var time = TimeZoneInfo.ConvertTimeFromUtc(needConvertUtcDateTime, tz).ToString(_dateFormat); + //var time = TimeZoneInfo.ConvertTimeFromUtc(needConvertUtcDateTime, tz).ToString(_dateFormat); + + //writer.WriteValue(time); + //writer.Flush(); + + + if (value is DateTime dateTime) + { + DateTime chinaTime = TimeZoneInfo.ConvertTime(dateTime, ChinaTimeZone); + writer.WriteValue(chinaTime); + } - writer.WriteValue(time); - writer.Flush(); } } diff --git a/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/NewtonsoftJsonSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/NewtonsoftJsonSetup.cs index 438e180b4..df8aad91f 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/NewtonsoftJsonSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/NewtonsoftJson/NewtonsoftJsonSetup.cs @@ -8,8 +8,9 @@ namespace IRaCIS.Core.API { public static class NewtonsoftJsonSetup { - public static void AddNewtonsoftJsonSetup(this IMvcBuilder builder) + public static void AddNewtonsoftJsonSetup(this IMvcBuilder builder, IServiceCollection services) { + services.AddScoped(); builder.AddNewtonsoftJson(options => { @@ -24,6 +25,7 @@ namespace IRaCIS.Core.API options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //options.SerializerSettings.Converters.Add(new JSONCustomDateConverter()) ; + //options.SerializerSettings.Converters.Add(services.BuildServiceProvider().GetService()); //IsoDateTimeConverter //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index 2054c1e6e..660497ac0 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -323,7 +323,7 @@ namespace IRaCIS.Core.Application.Services { //CRC只看到他负责的 - var list = await _trialSiteRepository.Where(t => t.TrialId == trialId).IgnoreQueryFilters() + var list = await _trialSiteRepository.Where(t => t.TrialId == trialId) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.CRCUserList.Any(t => t.UserId == _userInfo.Id)) .ProjectTo(_mapper.ConfigurationProvider).OrderBy(t => t.TrialSiteCode).ToListAsync(); diff --git a/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs b/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs index eddead0fd..45e0ab3ec 100644 --- a/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs +++ b/IRaCIS.Core.Infra.EFCore/AuthUser/UserInfo.cs @@ -277,7 +277,9 @@ namespace IRaCIS.Core.Domain.Share { return timeZoneId.Value; } - return "Asia/Shanghai"; + + return "Etc/UTC"; + //return "Asia/Shanghai"; }