3123
This commit is contained in:
parent
69b3c02b60
commit
18e6f339d6
|
|
@ -0,0 +1,124 @@
|
|||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace HoneyBox.Admin.Business.Extensions;
|
||||
|
||||
/// <summary>
|
||||
/// 灵活的日期时间 JSON 转换器
|
||||
/// 支持多种日期格式:ISO 8601、"yyyy-MM-dd HH:mm:ss"、"yyyy-MM-dd HH:mm" 等
|
||||
/// </summary>
|
||||
public class FlexibleDateTimeConverter : JsonConverter<DateTime?>
|
||||
{
|
||||
private static readonly string[] DateFormats = new[]
|
||||
{
|
||||
"yyyy-MM-dd HH:mm:ss",
|
||||
"yyyy-MM-dd HH:mm",
|
||||
"yyyy-MM-dd",
|
||||
"yyyy/MM/dd HH:mm:ss",
|
||||
"yyyy/MM/dd HH:mm",
|
||||
"yyyy/MM/dd",
|
||||
"MM/dd/yyyy HH:mm:ss",
|
||||
"MM/dd/yyyy",
|
||||
};
|
||||
|
||||
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
var dateString = reader.GetString();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(dateString))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// 尝试标准 ISO 8601 格式
|
||||
if (DateTime.TryParse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.None, out var result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
// 尝试自定义格式
|
||||
foreach (var format in DateFormats)
|
||||
{
|
||||
if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
throw new JsonException($"无法解析日期时间: {dateString}");
|
||||
}
|
||||
|
||||
throw new JsonException($"意外的 JSON 令牌类型: {reader.TokenType}");
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
|
||||
{
|
||||
if (value.HasValue)
|
||||
{
|
||||
writer.WriteStringValue(value.Value.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteNullValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 非空日期时间转换器
|
||||
/// </summary>
|
||||
public class FlexibleDateTimeNonNullableConverter : JsonConverter<DateTime>
|
||||
{
|
||||
private static readonly string[] DateFormats = new[]
|
||||
{
|
||||
"yyyy-MM-dd HH:mm:ss",
|
||||
"yyyy-MM-dd HH:mm",
|
||||
"yyyy-MM-dd",
|
||||
"yyyy/MM/dd HH:mm:ss",
|
||||
"yyyy/MM/dd HH:mm",
|
||||
"yyyy/MM/dd",
|
||||
};
|
||||
|
||||
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.String)
|
||||
{
|
||||
var dateString = reader.GetString();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(dateString))
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
if (DateTime.TryParse(dateString, CultureInfo.InvariantCulture, DateTimeStyles.None, out var result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
foreach (var format in DateFormats)
|
||||
{
|
||||
if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
throw new JsonException($"无法解析日期时间: {dateString}");
|
||||
}
|
||||
|
||||
throw new JsonException($"意外的 JSON 令牌类型: {reader.TokenType}");
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
|
||||
{
|
||||
writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
using HoneyBox.Admin.Business.Models;
|
||||
using HoneyBox.Admin.Business.Extensions;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace HoneyBox.Admin.Business.Models.Goods;
|
||||
|
||||
|
|
@ -103,16 +105,19 @@ public class GoodsCreateRequest
|
|||
/// <summary>
|
||||
/// 福利屋开始时间
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(FlexibleDateTimeConverter))]
|
||||
public DateTime? FlwStartTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 福利屋结束时间
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(FlexibleDateTimeConverter))]
|
||||
public DateTime? FlwEndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开放时间
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(FlexibleDateTimeConverter))]
|
||||
public DateTime? OpenTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -597,6 +597,9 @@ public class WelfareService : IWelfareService
|
|||
var now = DateTime.Now;
|
||||
IQueryable<Good> query;
|
||||
|
||||
_logger.LogInformation("GetFuliwuListAsync: userId={UserId}, type={Type}, page={Page}, userTotalConsumption={Consumption}, now={Now}",
|
||||
userId, type, page, userTotalConsumption, now);
|
||||
|
||||
if (type == 1)
|
||||
{
|
||||
// type=1 进行中:Status=1, IsOpen=0, 且开奖时间未到
|
||||
|
|
@ -623,6 +626,8 @@ public class WelfareService : IWelfareService
|
|||
var total = await query.CountAsync();
|
||||
var lastPage = (int)Math.Ceiling((double)total / paginate);
|
||||
|
||||
_logger.LogInformation("GetFuliwuListAsync: total={Total}, lastPage={LastPage}", total, lastPage);
|
||||
|
||||
// 分页查询
|
||||
var goods = await query
|
||||
.Skip((page - 1) * paginate)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user