using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using HH.WCS.Mobox3.DSZSH.models;
using SqlSugar;
namespace HH.WCS.Mobox3.DSZSH.wms {
///
/// 数据库 [ 查询表达式 ] 构造类
///
public class DbExpr {
///
/// 通用 [ 货位 ] 筛选
///
/// l.C_ENABLE == "Y"
/// && l.N_LOCK_STATE == @lock && l.S_LOCK_STATE == TN_Location.GetLockStateStr(@lock)
/// && l.S_CODE == name
/// && areas.Contains(l.S_AREA_CODE)
/// && l.N_CURRENT_NUM == curNum
/// ]]>
///
///
///
///
///
public static Expression> LocFilter(int @lock, string name, List areas, int curNum) {
Expression> expr = l => l.C_ENABLE == "Y"; // 已启用
if (@lock >= 0) {
Expression> newExpr =
l => l.N_LOCK_STATE == @lock && l.S_LOCK_STATE == TN_Location.GetLockStateStr(@lock);
expr = Expression.Lambda>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]);
}
if (!string.IsNullOrEmpty(name)) {
Expression> newExpr = l => l.S_CODE == name;
expr = Expression.Lambda>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]);
}
if (areas != null && areas.Count > 0) {
Expression> newExpr = l => areas.Contains(l.S_AREA_CODE);
expr = Expression.Lambda>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]);
}
if (curNum >= 0) {
Expression> newExpr = l => l.N_CURRENT_NUM == curNum;
expr = Expression.Lambda>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]);
}
return expr;
}
///
/// 起点货位 ( 未绑定 )
///
/// l.C_ENABLE == "Y"
/// && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无"
/// && l.S_CODE == name
/// && areas.Contains(l.S_AREA_CODE)
/// && l.N_CURRENT_NUM == 0
/// ]]>
///
///
///
public static Expression> StartLocUnbind(string name = "", List areas = null) {
return LocFilter(0, name, areas, 0);
}
///
/// 起点货位 ( 已绑定 )
///
/// l.C_ENABLE == "Y"
/// && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无"
/// && l.S_CODE == name
/// && areas.Contains(l.S_AREA_CODE)
/// && l.N_CURRENT_NUM == 1
/// ]]>
///
///
///
public static Expression> StartLoc(string name = "", List areas = null) {
return LocFilter(0, name, areas, 1);
}
///
/// 终点货位
///
/// l.C_ENABLE == "Y"
/// && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无"
/// && l.S_CODE == name
/// && areas.Contains(l.S_AREA_CODE)
/// && l.N_CURRENT_NUM == 0
/// ]]>
///
///
///
public static Expression> EndLoc(string name = "", List areas = null) {
return LocFilter(0, name, areas, 0);
}
}
}