diff --git a/DOAN.Service/MES/mm/MmRequirePlanService.cs b/DOAN.Service/MES/mm/MmRequirePlanService.cs index 7cf3073..056396a 100644 --- a/DOAN.Service/MES/mm/MmRequirePlanService.cs +++ b/DOAN.Service/MES/mm/MmRequirePlanService.cs @@ -128,11 +128,11 @@ namespace DOAN.Service.group /// public PagedInfo GetList(MmRequirePlanQueryDto parm) { + var predicate = Expressionable.Create() .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() diff --git a/DOAN.ServiceCore/Filters/GlobalActionMonitor.cs b/DOAN.ServiceCore/Filters/GlobalActionMonitor.cs index 2e0f945..1507ae4 100644 --- a/DOAN.ServiceCore/Filters/GlobalActionMonitor.cs +++ b/DOAN.ServiceCore/Filters/GlobalActionMonitor.cs @@ -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 /// 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); } + /// /// OnActionExecuted是在Action中的代码执行之后运行的方法。 /// @@ -146,5 +173,90 @@ namespace DOAN.ServiceCore.Middleware return attribute as LogAttribute; } + + private IDictionary 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(); + } + + private IDictionary ConvertToDictionary(IQueryCollection queryCollection) + { + var dictionary = new Dictionary(); + + 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(); + 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; + } + } + } }