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.Models;
|
||||||
|
using HoneyBox.Admin.Business.Extensions;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace HoneyBox.Admin.Business.Models.Goods;
|
namespace HoneyBox.Admin.Business.Models.Goods;
|
||||||
|
|
||||||
|
|
@ -103,16 +105,19 @@ public class GoodsCreateRequest
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 福利屋开始时间
|
/// 福利屋开始时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(FlexibleDateTimeConverter))]
|
||||||
public DateTime? FlwStartTime { get; set; }
|
public DateTime? FlwStartTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 福利屋结束时间
|
/// 福利屋结束时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(FlexibleDateTimeConverter))]
|
||||||
public DateTime? FlwEndTime { get; set; }
|
public DateTime? FlwEndTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 开放时间
|
/// 开放时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(FlexibleDateTimeConverter))]
|
||||||
public DateTime? OpenTime { get; set; }
|
public DateTime? OpenTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -597,6 +597,9 @@ public class WelfareService : IWelfareService
|
||||||
var now = DateTime.Now;
|
var now = DateTime.Now;
|
||||||
IQueryable<Good> query;
|
IQueryable<Good> query;
|
||||||
|
|
||||||
|
_logger.LogInformation("GetFuliwuListAsync: userId={UserId}, type={Type}, page={Page}, userTotalConsumption={Consumption}, now={Now}",
|
||||||
|
userId, type, page, userTotalConsumption, now);
|
||||||
|
|
||||||
if (type == 1)
|
if (type == 1)
|
||||||
{
|
{
|
||||||
// type=1 进行中:Status=1, IsOpen=0, 且开奖时间未到
|
// type=1 进行中:Status=1, IsOpen=0, 且开奖时间未到
|
||||||
|
|
@ -623,6 +626,8 @@ public class WelfareService : IWelfareService
|
||||||
var total = await query.CountAsync();
|
var total = await query.CountAsync();
|
||||||
var lastPage = (int)Math.Ceiling((double)total / paginate);
|
var lastPage = (int)Math.Ceiling((double)total / paginate);
|
||||||
|
|
||||||
|
_logger.LogInformation("GetFuliwuListAsync: total={Total}, lastPage={LastPage}", total, lastPage);
|
||||||
|
|
||||||
// 分页查询
|
// 分页查询
|
||||||
var goods = await query
|
var goods = await query
|
||||||
.Skip((page - 1) * paginate)
|
.Skip((page - 1) * paginate)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user