Commit 1500b34d by pengjinyang

提交

parent 03e33f5d
......@@ -9,6 +9,11 @@ namespace Common.Extensions
/// </summary>
public static class ExpressionExtensions
{
public static Expression<Func<T, bool>> True<T>()
{ return f => true; }
public static Expression<Func<T, bool>> False<T>()
{ return f => false; }
/// <summary>
/// 或拼接
/// </summary>
......@@ -30,11 +35,23 @@ namespace Common.Extensions
/// <param name="expr1"></param>
/// <param name="expr2"></param>
/// <returns></returns>
//public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
//{
// var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
// return Expression.Lambda<Func<T, bool>>
// (Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
//}
/// <summary>
/// 与拼接
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="expr1"></param>
/// <param name="expr2"></param>
/// <returns></returns>
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, expr2.Body), expr1.Parameters);
}
}
}
......@@ -12,5 +12,7 @@ namespace TakeStock.Application.TakeStock.Dto
public string Code { get; set; }
public TSOrderState? State { get; set; }
public string Skus { get; set; }
}
}
......@@ -8,7 +8,23 @@ namespace TakeStock.Application.TakeStock.Dto
public class SearchScheduleInputDto
{
public string Code { get; set; }
public string OrderCodes { get; set; }
public string WarehouseCode { get; set; }
public TSScheduleState? State { get; set; }
/// <summary>
/// 盘点人Id
/// </summary>
public int ExecutorId { get; set; }
/// <summary>
/// 系统自动盘点
/// </summary>
public bool? IsAutomation { get; set; }
public string Skus { get; set; }
}
}
......@@ -6,6 +6,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using TakeStock.Application.TakeStock.Dto;
......@@ -58,11 +59,39 @@ namespace TakeStock.Application.TakeStock
private Expression<Func<TakeStockSchedule, bool>> ScheduleQuery(SearchScheduleInputDto search)
{
Expression<Func<TakeStockSchedule, bool>> expr = s => true;
Expression<Func<TakeStockSchedule, bool>> expr = ExpressionExtensions.True<TakeStockSchedule>();
if (!string.IsNullOrWhiteSpace(search.Code))
expr.And(s => s.Code.Equals(search.Code));
{
Expression<Func<TakeStockSchedule, bool>> temp = s => s.Code.Equals(search.Code);
expr = Expression.Lambda<Func<TakeStockSchedule, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//expr.And(s => s.Code.Equals(search.Code));
}
if (search.State != null)
expr.And(s => s.State.Equals(search.State));
{
Expression<Func<TakeStockSchedule, bool>> temp = s => s.State.Equals(search.State);
expr = Expression.Lambda<Func<TakeStockSchedule, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//expr.And(s => s.State.Equals(search.State));
}
if (!string.IsNullOrWhiteSpace(search.WarehouseCode))
{
Expression<Func<TakeStockSchedule, bool>> temp = s => s.WarehouseCode.Equals(search.WarehouseCode);
expr = Expression.Lambda<Func<TakeStockSchedule, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//expr.And(s => s.State.Equals(search.State));
}
if (search.IsAutomation != null)
{
Expression<Func<TakeStockSchedule, bool>> temp = s => s.IsAutomation.Equals(search.IsAutomation);
expr = Expression.Lambda<Func<TakeStockSchedule, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//expr.And(s => s.State.Equals(search.State));
}
//if (!string.IsNullOrWhiteSpace(search.Skus))
//{
// string[] skus = search.Skus.Split(';');
// Expression<Func<TakeStockSchedule, bool>> temp = o => skus.Contains(o.Sku);
// expr = Expression.Lambda<Func<TakeStockSchedule, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//}
return expr;
}
......@@ -89,13 +118,26 @@ namespace TakeStock.Application.TakeStock
private Expression<Func<TakeStockOrder, bool>> OrderQuery(SearchOrderInputDto search)
{
Expression<Func<TakeStockOrder, bool>> expr = s => s.ScheduleId == search.ScheduleId;
//if (search.ScheduleId > 0)
// expr.And();
Expression<Func<TakeStockOrder, bool>> expr = ExpressionExtensions.True<TakeStockOrder>();
if (!string.IsNullOrWhiteSpace(search.Code))
expr.And(s => s.Code.Equals(search.Code));
{
Expression<Func<TakeStockOrder, bool>> temp = o => o.Code.Equals(search.Code);
expr = Expression.Lambda<Func<TakeStockOrder, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//expr.And(s => s.Code.Equals(search.Code));
}
if (search.State != null)
expr.And(s => s.State.Equals(search.State));
{
Expression<Func<TakeStockOrder, bool>> temp = o => o.State.Equals(search.State);
expr = Expression.Lambda<Func<TakeStockOrder, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
//expr.And(s => s.State.Equals(search.State));
}
if (!string.IsNullOrWhiteSpace(search.Skus))
{
string[] skus = search.Skus.Split(';');
Expression<Func<TakeStockOrder, bool>> temp = o => skus.Contains(o.Sku);
expr = Expression.Lambda<Func<TakeStockOrder, bool>>(Expression.And(expr.Body, temp.Body), expr.Parameters);
}
return expr;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment