转本地时间

This commit is contained in:
qianhao.xu 2024-08-31 09:59:48 +08:00
parent 14fec2641c
commit 4323bc20ed
2 changed files with 119 additions and 7 deletions

View File

@ -128,11 +128,11 @@ namespace DOAN.Service.group
/// <returns></returns>
public PagedInfo<MmRequirePlanDto> GetList(MmRequirePlanQueryDto parm)
{
var predicate = Expressionable.Create<MmRequirePlan>()
.AndIF(!string.IsNullOrEmpty(parm.MaterialCode),it=>it.MaterialCode.Contains(parm.MaterialCode))
.AndIF(!string.IsNullOrEmpty(parm.MaterialName),it=>it.MaterialName.Contains(parm.MaterialName))
.AndIF(parm.RequireDate!=null&&parm.RequireDate>DateTime.MinValue,it=>it.RequireDate==parm.RequireDate)
.AndIF(parm.RequireDate!=null&&parm.RequireDate>DateTime.MinValue,it=>it.RequireDate==parm.RequireDate.Value.ToLocalTime().Date)
;
var response = Queryable()

View File

@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc.Filters;
using NLog;
using DOAN.Model.System;
using DOAN.Service.System.IService;
using Microsoft.Extensions.Primitives;
namespace DOAN.ServiceCore.Middleware
{
@ -29,16 +30,38 @@ namespace DOAN.ServiceCore.Middleware
/// <returns></returns>
public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var method = context.HttpContext.Request.Method;
// 在执行控制器动作之前,检查是否有 DateTime 参数需要转换
foreach (var arg in context.ActionArguments)
// 根据请求方法获取请求参数
var parameters = GetRequestParameters(context, method);
// 遍历每个参数并转换 DateTime 类型的参数
foreach (var arg in parameters)
{
if (arg.Value is DateTime dateTime && dateTime.Kind == DateTimeKind.Utc)
//检查是否为 DateTime 类型
if (arg.Value is DateTime dateTime)
{
var localTime = dateTime.ToLocalTime();
context.ActionArguments[arg.Key] = localTime;
//if (dateTime.Kind == DateTimeKind.Utc)
//{
var localTime = dateTime.ToLocalTime();
context.ActionArguments[arg.Key] = localTime;
//}
}
// 检查是否为 DateTime? 类型
if (arg.Value is DateTime? && ((DateTime?)arg.Value).HasValue)
{
var nullableDateTime = (DateTime?)arg.Value;
if (nullableDateTime.Value.Kind == DateTimeKind.Utc)
{
var localTime = nullableDateTime.Value.ToLocalTime();
context.ActionArguments[arg.Key] = localTime;
}
}
}
//string msg = string.Empty;
//var values = context.ModelState.Values;
//foreach (var item in values)
@ -62,9 +85,13 @@ namespace DOAN.ServiceCore.Middleware
// context.Result = new JsonResult(response);
//}
return base.OnActionExecutionAsync(context, next);
}
/// <summary>
/// OnActionExecuted是在Action中的代码执行之后运行的方法。
/// </summary>
@ -146,5 +173,90 @@ namespace DOAN.ServiceCore.Middleware
return attribute as LogAttribute;
}
private IDictionary<string, object> GetRequestParameters(ActionExecutingContext context, string method)
{
// 根据请求方法获取请求参数
if (method.Equals("GET", StringComparison.OrdinalIgnoreCase))
{
return ConvertToDictionary(context.HttpContext.Request.Query);
}
else if (method.Equals("POST", StringComparison.OrdinalIgnoreCase))
{
// 假设 POST 请求参数已经绑定到了 ActionArguments 中
return context.ActionArguments;
}
return new Dictionary<string, object>();
}
private IDictionary<string, object> ConvertToDictionary(IQueryCollection queryCollection)
{
var dictionary = new Dictionary<string, object>();
foreach (var entry in queryCollection)
{
// 尝试将查询字符串值转换为对象
if (TryConvertToObjectOfType(entry.Value, out var value))
{
dictionary[entry.Key] = value;
}
}
return dictionary;
}
private bool TryConvertToObjectOfType(StringValues values, out object convertedValue)
{
if (values.Count > 1)
{
// 处理多个值的情况
var list = new List<object>();
foreach (var value in values)
{
if (TryParse(value, out var parsedValue))
{
list.Add(parsedValue);
}
}
convertedValue = list;
return true;
}
else
{
return TryParse(values.First(), out convertedValue);
}
}
private bool TryParse(string value, out object parsedValue)
{
if (int.TryParse(value, out int intValue))
{
parsedValue = intValue;
return true;
}
else if (long.TryParse(value, out long longValue))
{
parsedValue = longValue;
return true;
}
else if (double.TryParse(value, out double doubleValue))
{
parsedValue = doubleValue;
return true;
}
else if (DateTime.TryParse(value, out DateTime dateTimeValue))
{
parsedValue = dateTimeValue;
return true;
}
else
{
parsedValue = value;
return true;
}
}
}
}