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 /// ]]> /// 锁状态 ( 小于 0 时忽略 ) /// 货位名称 ( 为 null 或 "" 时忽略 ) /// 所在库区列表 ( 为 null 或 [] 时忽略 ) /// 当前数量 ( 小于 0 时忽略 ) /// public static Expression> LocFilter(int @lock = 0, string name = "", List areas = null, int curNum = -1) { 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 /// ]]> /// 货位名称 ( 为 null 或 "" 时忽略 ) /// 所在库区列表 ( 为 null 或 [] 时忽略 ) /// 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 /// ]]> /// 货位名称 ( 为 null 或 "" 时忽略 ) /// 所在库区列表 ( 为 null 或 [] 时忽略 ) /// 当前数量 ( 小于 0 时忽略 ) /// public static Expression> StartLoc(string name = "", List areas = null, int curNum = 1) { return LocFilter(0, name, areas, curNum); } /// /// 终点货位 /// /// 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 /// ]]> /// 货位名称 ( 为 null 或 "" 时忽略 ) /// 所在库区列表 ( 为 null 或 [] 时忽略 ) /// 当前数量 ( 小于 0 时忽略 ) /// public static Expression> EndLoc(string name = "", List areas = null, int curNum = 0) { return LocFilter(0, name, areas, curNum); } } }