| | |
| | | /// </summary> |
| | | public class DbExpr { |
| | | /// <summary> |
| | | /// 通用货位筛选表达式 |
| | | /// 通用 [ 货位 ] 筛选 |
| | | /// </summary> |
| | | /// <remarks><code><![CDATA[ |
| | | /// l => l.C_ENABLE == "Y" |
| | |
| | | /// <param name="areas"></param> |
| | | /// <param name="curNum"></param> |
| | | /// <returns></returns> |
| | | public static Expression<Func<TN_Location, bool>> LocFilter(int @lock = 0, string name = "", List<string> areas = null, int curNum = 0) { |
| | | public static Expression<Func<TN_Location, bool>> LocFilter(int @lock, string name, List<string> areas, int curNum) { |
| | | Expression<Func<TN_Location, bool>> expr = l => l.C_ENABLE == "Y"; // 已启用 |
| | | |
| | | if (@lock >= 0) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => l.N_LOCK_STATE == @lock && l.S_LOCK_STATE == TN_Location.GetLockStateStr(@lock); |
| | | Expression<Func<TN_Location, bool>> newExpr = |
| | | l => l.N_LOCK_STATE == @lock && l.S_LOCK_STATE == TN_Location.GetLockStateStr(@lock); |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => l.S_CODE == name; |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | | if (areas != null && areas.Count == 0) { |
| | | if (areas != null && areas.Count > 0) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => areas.Contains(l.S_AREA_CODE); |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | |
| | | /// <param name="areas"></param> |
| | | /// <returns></returns> |
| | | public static Expression<Func<TN_Location, bool>> StartLocUnbind(string name = "", List<string> areas = null) { |
| | | Expression<Func<TN_Location, bool>> expr = |
| | | l => l.C_ENABLE == "Y" && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.N_CURRENT_NUM == 0; |
| | | |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => l.S_CODE == name; |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | | if (areas != null && areas.Count > 0) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => areas.Contains(l.S_AREA_CODE); |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | | |
| | | return expr; |
| | | return LocFilter(0, name, areas, 0); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// 起点货位 ( 已绑定 ) |
| | | /// </summary> |
| | | /// <remarks><code><![CDATA[ |
| | | /// l => 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 |
| | | /// ]]></code></remarks> |
| | | /// <param name="name"></param> |
| | | /// <param name="areas"></param> |
| | | /// <returns></returns> |
| | | public static Expression<Func<TN_Location, bool>> StartLoc(string name = "", List<string> areas = null) { |
| | | return LocFilter(0, name, areas, 1); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 终点货位 |
| | | /// </summary> |
| | | /// <remarks><code><![CDATA[ |
| | | /// l => l.C_ENABLE == "Y" |
| | |
| | | /// <param name="areas"></param> |
| | | /// <returns></returns> |
| | | public static Expression<Func<TN_Location, bool>> EndLoc(string name = "", List<string> areas = null) { |
| | | Expression<Func<TN_Location, bool>> expr = |
| | | l => l.C_ENABLE == "Y" && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.N_CURRENT_NUM == 0; |
| | | |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => l.S_CODE == name; |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | | if (areas != null && areas.Count > 0) { |
| | | Expression<Func<TN_Location, bool>> newExpr = l => areas.Contains(l.S_AREA_CODE); |
| | | expr = Expression.Lambda<Func<TN_Location, bool>>(Expression.AndAlso(expr.Body, newExpr.Body), expr.Parameters[0]); |
| | | } |
| | | |
| | | return expr; |
| | | return LocFilter(0, name, areas, 0); |
| | | } |
| | | } |
| | | |
| | | #region 旧查询类 ( 搁置 ) |
| | | /// <summary> |
| | | /// [ 数据库查询 ] 帮助类 |
| | | /// </summary> |
| | | /// <remarks><b>[ 搁置 ]</b> 类与方法暂时设为私有<br/><b>[ 理由 ]</b> 引用外部 db 存在风险 ; 不适用于联表查询场景 , 不够灵活</remarks> |
| | | class DbQuery { |
| | | /// <summary> |
| | | /// 构建 [ 货位 ] 查询表达式 : 筛选条件 : 锁状态 / 名称 / 货区 / 当前容器数量 ( 默认筛选已启用货位 ) |
| | | /// </summary> |
| | | /// <param name="db">调用区域的 SqlSugarClient</param> |
| | | /// <param name="lock">锁状态 ( 小于 0 时忽略 )</param> |
| | | /// <param name="name">货位名称 ( 为 null 或 "" 时忽略 )</param> |
| | | /// <param name="areas">所在库区列表 ( 为 null 或 [] 时忽略 )</param> |
| | | /// <param name="curNum">当前数量 ( 小于 0 时忽略 )</param> |
| | | /// <returns></returns> |
| | | static ISugarQueryable<TN_Location> Loc(SqlSugarClient db, int @lock, string name, List<string> areas, int curNum) { |
| | | var query = db.Queryable<TN_Location>().Where(l => l.C_ENABLE == "Y"); // 已启用 |
| | | |
| | | if (@lock >= 0) { |
| | | query = query.Where(l => l.N_LOCK_STATE == @lock && l.S_LOCK_STATE == TN_Location.GetLockStateStr(@lock)); |
| | | } |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | query = query.Where(l => l.S_CODE == name); |
| | | } |
| | | if (areas != null && areas.Count != 0) { |
| | | query = query.Where(l => areas.Contains(l.S_AREA_CODE)); |
| | | } |
| | | if (curNum >= 0) { |
| | | query = query.Where(l => l.N_CURRENT_NUM == curNum); |
| | | } |
| | | |
| | | return query; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 构建 [ 起点货位 ( 绑定前 ) ] 查询表达式 : 筛选条件 : 名称 / 货区 ( 默认筛选 : 已启用 / 未上锁 / 当前容器数量 = 0 ) |
| | | /// </summary> |
| | | /// <param name="db">调用区域的 SqlSugarClient</param> |
| | | /// <param name="name">货位名称 ( 为 null 或 "" 时忽略 )</param> |
| | | /// <param name="areas">所在库区列表 ( 为 null 或 [] 时忽略 )</param> |
| | | /// <returns></returns> |
| | | static ISugarQueryable<TN_Location> StartLocUnbind(SqlSugarClient db, string name, List<string> areas) { |
| | | var query = db.Queryable<TN_Location>().Where(l => l.C_ENABLE == "Y" && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == TN_Location.GetLockStateStr(0) && l.N_CURRENT_NUM == 0); // 已启用,未上锁,当前容器数量=0(初始未绑定容器) |
| | | |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | query = query.Where(l => l.S_CODE == name); |
| | | } |
| | | if (areas != null && areas.Count != 0) { |
| | | query = query.Where(l => areas.Contains(l.S_AREA_CODE)); |
| | | } |
| | | |
| | | return query; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 构建 [ 起点货位 ( 绑定后 ) ] 查询表达式 : 筛选条件 : 名称 / 货区 ( 默认筛选 : 已启用 / 未上锁 / 当前容器数量 = 1 ) |
| | | /// </summary> |
| | | /// <param name="db">调用区域的 SqlSugarClient</param> |
| | | /// <param name="name">货位名称 ( 为 null 或 "" 时忽略 )</param> |
| | | /// <param name="areas">所在库区列表 ( 为 null 或 [] 时忽略 )</param> |
| | | /// <returns></returns> |
| | | static ISugarQueryable<TN_Location> StartLoc(SqlSugarClient db, string name, List<string> areas) { |
| | | var query = db.Queryable<TN_Location>().Where(l => l.C_ENABLE == "Y" && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == TN_Location.GetLockStateStr(0) && l.N_CURRENT_NUM == 1); // 已启用,未上锁,当前容器数量=1(已绑定容器) |
| | | |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | query = query.Where(l => l.S_CODE == name); |
| | | } |
| | | if (areas != null && areas.Count != 0) { |
| | | query = query.Where(l => areas.Contains(l.S_AREA_CODE)); |
| | | } |
| | | |
| | | return query; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 构建 [ 终点货位 ] 查询表达式 : 筛选条件 : 名称 / 货区 ( 默认筛选 : 已启用 / 未上锁 / 当前容器数量 = 0 ) |
| | | /// </summary> |
| | | /// <param name="db">调用区域的 SqlSugarClient</param> |
| | | /// <param name="name">货位名称 ( 为 null 或 "" 时忽略 )</param> |
| | | /// <param name="areas">所在库区列表 ( 为 null 或 [] 时忽略 )</param> |
| | | /// <returns></returns> |
| | | static ISugarQueryable<TN_Location> EndLoc(SqlSugarClient db, string name, List<string> areas) { |
| | | var query = db.Queryable<TN_Location>().Where(l => l.C_ENABLE == "Y" && l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == TN_Location.GetLockStateStr(0) && l.N_CURRENT_NUM == 0); // 已启用,未上锁,当前容器数量=0(未绑定容器) |
| | | |
| | | if (!string.IsNullOrEmpty(name)) { |
| | | query = query.Where(l => l.S_CODE == name); |
| | | } |
| | | if (areas != null && areas.Count != 0) { |
| | | query = query.Where(l => areas.Contains(l.S_AREA_CODE)); |
| | | } |
| | | |
| | | return query; |
| | | } |
| | | } |
| | | #endregion |
| | | } |