hudong
2025-07-04 67c7f0449f57933c26d785c277ddcd539c899b25
出库审核逻辑修改
7个文件已修改
862 ■■■■ 已修改文件
api/ApiModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSapController.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSpaHelper.cs 808 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WMSCore.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/WCSHelper.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/WMSHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApiModel.cs
@@ -360,7 +360,7 @@
        public class Mater {
            public string arrival_no { get; set; }
            public string item_code { get; set; }
            public string S_BATCH_NO { get; set; }
            //public string S_BATCH_NO { get; set; }
            //public string S_SERIAL_NO { get; set; }
            public string N_ROW_NO { get; set; }
            public float qty { get; set; }
@@ -395,7 +395,7 @@
            public string cntr_type { get; set; }//容器
            //public string start { get; set; }//容器
            public bool IsHK { get; set; }//容器
            //public bool IsHK { get; set; }//容器
            public string arrival_no { get; set; }
            public List<Mater> MaterList { get; set; }
        }
api/WmsSapController.cs
@@ -483,6 +483,17 @@
        }
        /// <summary>
        /// pda分拣完整版
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public Task<SimpleResult> AllOutboundOrderSorting(FJSorting model)
        {
            return WmsSpaHelper.ALLOutboundOrderSorting(model);
        }
        /// <summary>
        /// pda分拣
        /// </summary>
        /// <param name="model"></param>
api/WmsSpaHelper.cs
@@ -2141,13 +2141,179 @@
                return true;
            }
        }
        public static async Task<SimpleResult> AllTYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start, string S_OUT_TYPE, string cntr_type)
        {
            // var db = new SqlHelper<object>().GetInstance();
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
            var result = new SimpleResult();
            try
            {
                //库位信息
                var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First();
                //出库单详情
                var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First();
                //分拣单
                //var popp = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_BS_NO == arrival_no&&a.S_SORT_TYPE=="未分类" && a.N_B_STATE == 2).First();
                //回参物料信息
                List<OutboundRecord> records = new List<OutboundRecord>();
                var pzlist = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).ToList();
                foreach (var item in MaterList)
                {
                    var pz = pzlist.Where(s => s.S_WLBM == item.item_code).FirstOrDefault();
                    // 插入到托盘明细表
                    var cntr = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList();
                    if (cntr.Count() > 0)
                    {
                        db.BeginTran();
                        //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开&& a.N_BS_ROW_NO == item.N_ROW_NO
                        var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code && a.S_ITEM_CODE == item.item_code).First();//&& a.S_BATCH_NO == item.S_BATCH_NO
                        if (cir != null)
                        {
                            cir.F_QTY -= item.qty;
                            cir.S_CNTR_TYPE = cntr_type;
                            cir.F_ALLOC_QTY -= item.qty;
                            cir.T_MODIFY = DateTime.Now;
                            if (cir.F_QTY == 0)
                            {
                                db.Deleteable(cir).ExecuteCommand();
                            }
                            else
                            {
                                db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.S_CNTR_TYPE, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand();
                            }
                        }
                        else
                        {
                            db.RollbackTran();
                            result.resultCode = 1;
                            result.resultMsg = $"物料不存在{item.item_code}";
                            LogHelper.Info($"物料不存在{item.item_code}");
                            return result;
                        }
                        OutboundRecord outboundRecord = new OutboundRecord();
                        outboundRecord.S_WLPZBH = pz?.S_WLPZBH;
                        outboundRecord.S_WLPZND = pz?.S_WLPZND;
                        outboundRecord.S_TYPE = S_OUT_TYPE;
                        outboundRecord.S_NO = arrival_no;
                        outboundRecord.S_WLBM = item.item_code;
                        outboundRecord.S_SL = item.qty;
                        outboundRecord.S_CNTR_CODE = cntr_code;
                        records.Add(outboundRecord);
                    }
                    else
                    {
                        result.resultCode = 1;
                        result.resultMsg = $"获取托盘信息失败{cntr_code}";
                        LogHelper.Info($"获取托盘信息失败{cntr_code}");
                        return result;
                    }
                }
                //if (isHK)
                //{
                var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First();
                if (locs != null)
                {
                    var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First();
                    if (cntr != null)
                    {
                        cntr.S_SORT_TYPE = "已分拣";
                        db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand();
                    }
                    else
                    {
                        result.resultCode = 1;
                        result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息";
                        return result;
                    }
                    Location endloc = new Location();
                    LogHelper.Info($"获取托盘信息{cntr_code}容器");
                    var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == cntr_code).First();
                    if (hwbd != null)
                    {
                        endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First();
                        if (endloc?.N_LOCK_STATE != 0)
                        {
                            result.resultCode = 3;
                            result.resultMsg = $"终点库位已锁/不存在";
                            return result;
                        }
                    }
                    else
                    {
                        result.resultCode = 3;
                        result.resultMsg = $"{cntr_code}托盘找不到货位";
                        return result;
                    }
                    //var location = db.Queryable<Location>().Where(a => a.S_CODE == locs.S_LOC_CODE).First();
                    var wmsTask = new WMSTask
                    {
                        S_CNTR_CODE = cntr_code,
                        S_CODE = WMSHelper.GenerateTaskNo(),
                        S_START_LOC = start,
                        S_START_AREA = startinfo.S_AREA_CODE,
                        S_START_WH = startinfo.S_WH_CODE,
                        //S_END_LOC = start,
                        //S_END_AREA = startinfo.S_AREA_CODE,
                        //S_END_WH = startinfo.S_AREA_CODE,
                        S_END_LOC = endloc?.S_CODE,
                        S_END_AREA = endloc?.S_AREA_CODE,
                        S_END_WH = endloc?.S_WH_CODE,
                        N_TYPE = 1,
                        // S_TYPE = WMSTask.GetTypeStr(1),
                        S_TYPE = "回库",
                        S_OP_DEF_CODE = "",
                        S_OP_DEF_NAME = "pda入库"
                    };
                    if (WMSHelper.CreateWmsTask(wmsTask))
                    {
                        LocationHelper.LockLoc(start, 2);
                        result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                    }
                }
                else
                {
                    result.resultCode = 1;
                    result.resultMsg += $"找不到容器对应任务信息{cntr_code}";
                    return result;
                }
                //}
                var sss = db.Insertable<OutboundRecord>(records).ExecuteCommand();
                //db.CommitTran();
            }
            catch (Exception ex)
            {
                //db.RollbackTran();
                LogHelper.Info("物料信息绑定到满容器上" + ex.Message);
                result.resultCode = 1;
                result.resultMsg += ex.Message;
                Console.WriteLine(ex.Message);
                throw;
            }
            return result;
        }
        /// <summary>
        /// 分拣
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        internal static async Task<SimpleResult> OutboundOrderSorting(FJSorting model)
        internal static async Task<SimpleResult> ALLOutboundOrderSorting(FJSorting model)
        {
            var result = new SimpleResult();
            if (!IsClickAllowed(model.cntr_code))
@@ -2224,12 +2390,12 @@
                    {
                        result = await CBAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    if (result.resultCode == 1)
                    {
                        return result;
                    }
                    //if (result.resultCode == 1)
                    //{
                    //    return result;
                    //}
                    //通用接口 对容器货品的删减 和生成回库单 都要用的接口
                    result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, start, po.S_OUT_TYPE, model.cntr_type);
                    result = await AllTYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start, po.S_OUT_TYPE, model.cntr_type);
                    if (result.resultCode == 1)
                    {   
                        return result;
@@ -2350,7 +2516,216 @@
            }
        }
        public static async Task<SimpleResult> TYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE, string cntr_type)
        /// <summary>
        /// 分拣
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        internal static async Task<SimpleResult> OutboundOrderSorting(FJSorting model)
        {
            var result = new SimpleResult();
            if (!IsClickAllowed(model.cntr_code))
            {
                // 提示用户5秒内已点击过
                result.resultMsg = "您已点击过,请2秒后再试。";
                result.resultCode = 1;
                return result;
            }
            else
            {
            }
            // var db = new SqlHelper<object>().GetInstance();
            using (var db = new SqlHelper<object>().GetInstance())
            {
                try
                {
                    var start = "";
                    var startloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).First();
                    if (startloc!=null)
                    {
                        start = startloc.S_LOC_CODE;
                    }
                    else
                    {
                        result.resultMsg = $"{model.cntr_code}容器未找到货位信息";
                        result.resultCode = 1;
                        return result;
                    }
                        result.resultMsg = "成功";
                    result.resultCode = 0;
                    if (string.IsNullOrEmpty(model.arrival_no))
                    {
                        result.resultMsg = "出库单号不能为空";
                        result.resultCode = 1;
                        return result;
                    }
                    //人工分拣 容器货品表数量、分配量升降
                    //出库单详情
                    var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == model.arrival_no).First();
                    if (po == null)
                    {
                        result.resultMsg = "未找到此出库单";
                        result.resultCode = 1;
                        return result;
                    }
                    LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
                    var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.N_ENABLE == 1).First();
                    var GZRQ = DateTime.Now.ToString("yyyyMMdd");
                    if (gzra != null)
                    {
                        GZRQ = gzra.S_GZRQ.ToString("yyyyMMdd");
                    }
                    //根据不同出库类型 回调sap
                    if (po.S_OUT_TYPE == "冲销出库")
                    {
                        result = await CXAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else
                    if (po.S_OUT_TYPE == "出库")//普通出库
                    {
                        LogHelper.Info($"S_OUT_TYPE{po.S_OUT_TYPE}");
                        result = await AddOutboundOrder(GZRQ, db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else if (po.S_OUT_TYPE == "计划外发料出库")
                    {
                        result = await jhwtlAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    else if (po.S_OUT_TYPE == "成本中心出库")
                    {
                        result = await CBAddOutboundOrder(GZRQ,db, model.MaterList, model.arrival_no, model.cntr_code, start);
                    }
                    //if (result.resultCode == 1)
                    //{
                    //    return result;
                    //}
                    //通用接口 对容器货品的删减 和生成回库单 都要用的接口
                    result = await TYAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, start, po.S_OUT_TYPE, model.cntr_type);
                    if (result.resultCode == 1)
                    {
                        return result;
                    }
                    #region 升降量
                    bool adds = true;
                    //var itemlist = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).ToList();
                    if (model.MaterList.Count > 0)
                    {
                        var url = Settings.MoboxSeverUrl + "inventory/AddChange";
                        //仓库量表升量
                        var req = new AddChangeModel { op_type = 4 };
                        //库区量表升量
                        var req2 = new AddChangeModel { op_type = 7 };
                        var S_WH_CODE = "";
                        var S_AREA_CODE = "";
                        if (string.IsNullOrEmpty(po.S_WH_CODE))
                        {
                            S_WH_CODE = util.Settings.WHCode;
                        }
                        else
                        {
                            S_WH_CODE = po.S_WH_CODE;
                        }
                        if (string.IsNullOrEmpty(po.S_AREA_CODE))
                        {
                            S_AREA_CODE = util.Settings.AREACode;
                        }
                        else
                        {
                            S_AREA_CODE = po.S_AREA_CODE;
                        }
                        model.MaterList.ForEach(a =>
                        {
                            LogHelper.Info($"填充数据{util.Settings.WHCode}");
                            LogHelper.Info($"减仓库量{util.Settings.AREACode}表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}");
                            req.item_info.Add(new AddChangeModel.itemModel
                            {
                                wh_code = S_WH_CODE,
                                item_code = a.item_code,
                                item_name = "",
                                qty = a.qty
                            });
                            LogHelper.Info($"减库区量表数据 库区{po.S_AREA_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}");
                            req2.item_info.Add(new AddChangeModel.itemModel
                            {
                                wh_code = S_WH_CODE,
                                area_code = S_AREA_CODE,
                                item_code = a.item_code,
                                item_name = "",
                                qty = a.qty
                            });
                        });
                        var reqData = JsonConvert.SerializeObject(req);
                        var AppKey = Settings.AppKey;
                        var AppSecret = Settings.AppSecret;
                        var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
                        //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2);
                        LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}");
                        var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime);
                        LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}");
                        var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify);
                        if (!string.IsNullOrEmpty(res))
                        {
                            LogHelper.Info($"mobox 仓库降量接口返回 {res}");
                            var moboxres = JsonConvert.DeserializeObject<moboxres>(res);
                            if (moboxres.err_code != 0)
                            {
                                adds = false;
                            }
                        }
                        else
                        {
                            LogHelper.Info($"mobox 仓库降量接口返回为空");
                        }
                        var reqData2 = JsonConvert.SerializeObject(req2);
                        var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
                        //var ReqTime2 = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2);
                        LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}");
                        var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2);
                        LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}");
                        var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2);
                        if (!string.IsNullOrEmpty(res2))
                        {
                            LogHelper.Info($"mobox 库区降量接口返回 {res2}");
                            var moboxres = JsonConvert.DeserializeObject<moboxres>(res);
                            if (moboxres.err_code != 0)
                            {
                                adds = false;
                            }
                        }
                        else
                        {
                            LogHelper.Info($"mobox 库区降量接口返回为空");
                        }
                        //if (adds) addOnShelves(po, model.cntr_code, 2);
                    }
                    else LogHelper.Info($"托盘{model.cntr_code}无需要升降量的物料");
                    db.CommitTran();
                    #endregion
                    return result;
                }
                catch (Exception e)
                {
                    LogHelper.Info($"报错{e.Message}");
                    result.resultMsg = e.Message;
                    db.RollbackTran();
                    return result;
                    throw;
                }
            }
        }
        public static async Task<SimpleResult> TYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start, string S_OUT_TYPE, string cntr_type)
        {
            // var db = new SqlHelper<object>().GetInstance();
            //using (var db = new SqlHelper<object>().GetInstance())
@@ -2423,11 +2798,13 @@
                        return result;
                    }
                }
                if (isHK)
                {
                LogHelper.Info($"分拣接口{cntr_code}");
                //if (isHK)
                //{
                    var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First();
                    if (locs != null)
                    {
                    LogHelper.Info($"分拣接口 进来了{cntr_code}");
                        var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First();
                        if (cntr != null)
                        {
@@ -2440,64 +2817,8 @@
                            result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息";
                            return result;
                        }
                        Location endloc = new Location();
                        LogHelper.Info($"获取托盘信息{cntr_code}容器");
                        var hwbd = db.Queryable<TN_Container_Code>().Where(a => a.S_CNTR_CODE.Trim() == cntr_code).First();
                        if (hwbd != null)
                        {
                            endloc = db.Queryable<Location>().Where(a => a.S_CODE == hwbd.S_LOC_CODE.Trim()).First();
                            if (endloc?.N_LOCK_STATE != 0)
                            {
                                result.resultCode = 3;
                                result.resultMsg = $"终点库位已锁/不存在";
                                return result;
                            }
                        }
                        else
                        {
                            result.resultCode = 3;
                            result.resultMsg = $"{cntr_code}托盘找不到货位";
                            return result;
                        }
                        //var location = db.Queryable<Location>().Where(a => a.S_CODE == locs.S_LOC_CODE).First();
                        var wmsTask = new WMSTask
                        {
                            S_CNTR_CODE = cntr_code,
                            S_CODE = WMSHelper.GenerateTaskNo(),
                            S_START_LOC = start,
                            S_START_AREA = startinfo.S_AREA_CODE,
                            S_START_WH = startinfo.S_WH_CODE,
                            //S_END_LOC = start,
                            //S_END_AREA = startinfo.S_AREA_CODE,
                            //S_END_WH = startinfo.S_AREA_CODE,
                            S_END_LOC = endloc?.S_CODE,
                            S_END_AREA = endloc?.S_AREA_CODE,
                            S_END_WH = endloc?.S_WH_CODE,
                            N_TYPE = 1,
                            // S_TYPE = WMSTask.GetTypeStr(1),
                            S_TYPE = "回库",
                            S_OP_DEF_CODE = "",
                            S_OP_DEF_NAME = "pda入库"
                        };
                        if (WMSHelper.CreateWmsTask(wmsTask))
                        {
                            LocationHelper.LockLoc(start, 2);
                            result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                        }
                    }
                    else
                    {
                        result.resultCode = 1;
                        result.resultMsg += $"找不到容器对应任务信息{cntr_code}";
                        return result;
                    }
                }
                var sss = db.Insertable<OutboundRecord>(records).ExecuteCommand();
                //db.CommitTran();
@@ -2521,21 +2842,21 @@
            var db = new SqlHelper<object>().GetInstance();
            SimpleResult result = new SimpleResult();
                var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == model.cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First();
                if (locs != null)
                {
                    var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First();
                    if (cntr != null)
                    {
                        cntr.S_SORT_TYPE = "已分拣";
                        db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand();
                    }
                    else
                    {
                        result.resultCode = 1;
                        result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息";
                        return result;
                    }
                //var locs = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("出库") && a.S_CNTR_CODE == model.cntr_code && a.N_B_STATE == 3).OrderByDescending(s => s.T_END_TIME).First();
                //if (locs != null)
                //{
                    //var cntr = db.Queryable<TN_Distribution_CNTR>().Where(a => a.S_DC_NO == locs.S_BS_NO).First();
                    //if (cntr != null)
                    //{
                    //    cntr.S_SORT_TYPE = "已分拣";
                    //    db.Updateable(cntr).UpdateColumns(it => new { it.S_SORT_TYPE }).ExecuteCommand();
                    //}
                    //else
                    //{
                    //    result.resultCode = 1;
                    //    result.resultMsg += $"任务{locs.S_CODE}来源号{locs.S_BS_NO}找不到配盘信息";
                    //    return result;
                    //}
                    Location endloc = new Location();
                    LogHelper.Info($"获取托盘信息{model.cntr_code}容器");
@@ -2597,13 +2918,13 @@
                        LocationHelper.LockLoc(startloc.S_CODE, 1);
                        result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                    }
                }
                else
                {
                    result.resultCode = 1;
                    result.resultMsg += $"找不到容器对应任务信息{model.cntr_code}";
                    return result;
                }
                //}
                //else
                //{
                //    result.resultCode = 1;
                //    result.resultMsg += $"找不到容器对应任务信息{model.cntr_code}";
                //    return result;
                //}
                return result;
         
        }
@@ -3382,7 +3703,7 @@
                                    #region 1.查看是否有相同物料批次的信息,如果有要累加,不同批次的可以分开
                                    var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == item.item_code && a.S_BATCH_NO == item.S_BATCH_NO && a.N_BS_ROW_NO == item.N_ROW_NO && a.S_BS_NO == item.arrival_no).First();
                                    var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr.S_CODE && a.S_ITEM_CODE == item.item_code  && a.N_BS_ROW_NO == item.N_ROW_NO && a.S_BS_NO == item.arrival_no).First();
                                    if (cir != null)
                                    {
                                        cir.F_QTY += item.qty;
@@ -3392,7 +3713,7 @@
                                    else
                                    {
                                        //2.插入新的容器物料信息(容器号不变S_SERIAL_NO = item.S_SERIAL_NO,)
                                        cir = new CntrItemRel { S_CNTR_TYPE = S_CNTR_TYPE, S_CNTR_CODE = cntr.S_CODE.Trim(), S_UOM = info.S_UOM, S_BATCH_NO = item.S_BATCH_NO, N_BS_ROW_NO = item.N_ROW_NO, F_QTY = item.qty, S_ITEM_CODE = item.item_code, S_BS_NO = item.arrival_no };
                                        cir = new CntrItemRel { S_CNTR_TYPE = S_CNTR_TYPE, S_CNTR_CODE = cntr.S_CODE.Trim(), S_UOM = info.S_UOM, N_BS_ROW_NO = item.N_ROW_NO, F_QTY = item.qty, S_ITEM_CODE = item.item_code, S_BS_NO = item.arrival_no };
                                        db.Insertable<CntrItemRel>(cir).ExecuteCommand();
                                    }
                                    var count = db.Queryable<CntrItemRel>().Count(a => a.S_CNTR_CODE == cntr.S_CODE);
@@ -4402,7 +4723,150 @@
        }
        public static async Task<SimpleResult> AddCenter( SqlSugarClient db, List<TN_Inbound_Detail> MaterList)
        {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
            // var db = new SqlHelper<object>().GetInstance();
            var result = new SimpleResult();
            try
            {
                #region MyRegion
                List<TN_Center_Inbound_Detail> tN_Center_Inbound_Details = new List<TN_Center_Inbound_Detail>();
                foreach (var item in MaterList)
                {
                    bool idadd = true;
                    // var cir2 = db.Queryable<CGRels>().Where(a => a.S_ITEM_CODE == item.S_ITEM_CODE && a.S_CNTR_TYPE == "半托").Select(s => s.S_CNTR_CODE).Distinct().ToArray();
                    var S_CNTR_CODE = "";
                    var lcr = db.Queryable<LocCntrRel>()
                        .InnerJoin<CGRels>((l, c) => l.S_CNTR_CODE == c.S_CNTR_CODE)
                        .Where((l, c) => c.S_ITEM_CODE == item.S_ITEM_CODE && c.S_CNTR_TYPE == "半托")
                        .OrderByDescending((l, c) => l.T_CREATE)
                        .Select((l, c) => l).ToList()
                        .FirstOrDefault();
                    S_CNTR_CODE = lcr.S_CNTR_CODE;
                    if (lcr != null)
                    {
                        //起始库位
                        var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First();
                        var wsc = db.Queryable<WCSTask>().Where(it => it.S_CNTR_CODE == S_CNTR_CODE && it.S_TYPE.Contains("出库") && it.N_B_STATE < 3).First();
                        if (wsc != null)
                        {
                            item.N_B_STATE = 2;
                            db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                        }
                        else
                        {
                            if (startloc != null)//&&
                            {
                                //终点货位
                                var endloc = db.Queryable<Location>().Where(it => it.S_AREA_CODE == "QYQXHQ" && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First();
                                // var endloc = db.Queryable<Location>().Where(it => it.S_CODE == item.S_END_LOC).First();
                                if (endloc != null)
                                {
                                    var optask = new WMSTask
                                    {
                                        S_CODE = WMSHelper.GenerateTaskNo(),
                                        S_START_LOC = startloc.S_CODE,
                                        S_START_AREA = startloc.S_AREA_CODE,
                                        S_START_WH = startloc.S_WH_CODE,
                                        S_END_LOC = endloc.S_CODE,
                                        S_END_AREA = endloc.S_AREA_CODE,
                                        S_END_WH = endloc.S_WH_CODE,
                                        N_PRIORITY = 1,
                                        S_TYPE = "半托出库",
                                        N_TYPE = 2,
                                        N_B_STATE = 0,
                                        S_BS_NO = "",
                                        S_CNTR_CODE = S_CNTR_CODE,
                                        S_OP_DEF_NAME = item.S_BS_TYPE
                                    };
                                    var res = db.Insertable(optask).ExecuteCommand() > 0;
                                    if (res)
                                    {
                                        startloc.N_LOCK_STATE = 2;
                                        startloc.S_LOCK_STATE = "出库锁";
                                        db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                                        var models = db.Queryable<Location>().Where(a => a.S_CODE == endloc.S_CODE).First();
                                        // if (model != null && model.S_LOCK_STATE.Trim() == "无")
                                        if (models != null && models.N_LOCK_STATE == 0)
                                        {
                                            models.N_LOCK_STATE = 1;
                                            models.S_LOCK_STATE = Location.GetLockStateStr(1);
                                            res = db.Updateable(models).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0;
                                        }
                                        item.N_B_STATE = 2;
                                        db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                                    }
                                }
                                else
                                {
                                    idadd = false;
                                    LogHelper.Info($" 库区AGVXHQ无空货位");
                                }
                            }
                            else
                            {
                                idadd = false;
                                LogHelper.Info($" 库区无货位");
                            }
                        }
                    }
                    else
                    {
                        idadd = false;
                        LogHelper.Info($"物料{item.S_ITEM_CODE}未找到容器对应的货位信息,请联系人工绑定关系");
                    }
                    if (!idadd)
                    {
                        TN_Center_Inbound_Detail tN_Center_Inbound_Detail = new TN_Center_Inbound_Detail();
                        tN_Center_Inbound_Detail.S_IO_NO = item.S_IO_NO;
                        tN_Center_Inbound_Detail.N_ROW_NO = item.N_ROW_NO;
                        tN_Center_Inbound_Detail.S_ITEM_CODE = item.S_ITEM_CODE;
                        tN_Center_Inbound_Detail.F_QTY = item.F_QTY;
                        tN_Center_Inbound_Detail.S_ITEM_STATE = item.S_ITEM_STATE;
                        tN_Center_Inbound_Detail.S_ITEM_NAME = item.S_ITEM_NAME;
                        tN_Center_Inbound_Detail.F_ACC_B_QTY = item.F_ACC_B_QTY;
                        tN_Center_Inbound_Detail.S_KCDD = item.S_KCDD;
                        tN_Center_Inbound_Detail.S_UOM = item.S_UOM;//计量单位
                        tN_Center_Inbound_Detail.S_BATCH_NO = item.S_BATCH_NO;
                        tN_Center_Inbound_Detail.S_CGPZH = item.S_CGPZH;
                        tN_Center_Inbound_Detail.S_CGPZXMBH = item.S_CGPZXMBH;
                        tN_Center_Inbound_Detail.S_CKPZKJND = item.S_CKPZKJND;
                        tN_Center_Inbound_Detail.S_CKPZXM = item.S_CKPZXM;
                        tN_Center_Inbound_Detail.S_CXWLPZBH = item.S_CXWLPZBH;
                        tN_Center_Inbound_Detail.S_HWSJJYZT = item.S_HWSJJYZT;
                        tN_Center_Inbound_Detail.S_JYPBH = item.S_JYPBH;
                        tN_Center_Inbound_Detail.S_KJPZSSRQ = item.S_KJPZSSRQ;
                        tN_Center_Inbound_Detail.S_KJPZSRSJ = item.S_KJPZSRSJ;
                        tN_Center_Inbound_Details.Add(tN_Center_Inbound_Detail);
                    }
                }
                db.Insertable(tN_Center_Inbound_Details).ExecuteCommand();
                #endregion
            }
            catch (Exception e)
            {
                throw ;
            }
            return result;
        }
        /// <summary>
        /// 内采入库回调
@@ -4518,144 +4982,7 @@
                                w.N_ROW_NO == d.N_ROW_NO)).OrderBy(s => s.N_ROW_NO)
                            .ToList();
                    #region MyRegion
                    List<TN_Center_Inbound_Detail> tN_Center_Inbound_Details=new List<TN_Center_Inbound_Detail>();
                    foreach (var item in po.Details)
                    {
                        bool idadd = true;
                       // var cir2 = db.Queryable<CGRels>().Where(a => a.S_ITEM_CODE == item.S_ITEM_CODE && a.S_CNTR_TYPE == "半托").Select(s => s.S_CNTR_CODE).Distinct().ToArray();
                        var S_CNTR_CODE = "";
                        var lcr = db.Queryable<LocCntrRel>()
                            .InnerJoin<CGRels>((l, c) => l.S_CNTR_CODE == c.S_CNTR_CODE)
                            .Where((l, c) => c.S_ITEM_CODE == item.S_ITEM_CODE && c.S_CNTR_TYPE == "半托")
                            .OrderByDescending((l, c) => l.T_CREATE)
                            .Select((l, c) => l).ToList()
                            .FirstOrDefault();
                        //if (cir2.Count()>0)
                        //{
                           // var lcr = db.Queryable<LocCntrRel>().Where(c => cir2.Contains(c.S_CNTR_CODE)).OrderByDescending(s=>s.T_CREATE).First();
                            S_CNTR_CODE = lcr.S_CNTR_CODE;
                            if (lcr != null)
                            {
                                //起始库位
                                var startloc = db.Queryable<Location>().Where(it => it.S_CODE == lcr.S_LOC_CODE).First();
                                var wsc = db.Queryable<WCSTask>().Where(it => it.S_CNTR_CODE == S_CNTR_CODE&&it.S_TYPE.Contains("出库") && it.N_B_STATE < 3).First();
                                if (wsc != null)
                                {
                                    item.N_B_STATE = 2;
                                    db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                                }
                                else
                                {
                                    if (startloc != null)//&&
                                    {
                                        //终点货位
                                        var endloc = db.Queryable<Location>().Where(it => it.S_AREA_CODE == "QYQXHQ" && it.N_LOCK_STATE == 0 && it.N_CURRENT_NUM == 0).First();
                                        // var endloc = db.Queryable<Location>().Where(it => it.S_CODE == item.S_END_LOC).First();
                                        if (endloc != null)
                                        {
                                            var optask = new WMSTask
                                            {
                                                S_CODE = WMSHelper.GenerateTaskNo(),
                                                S_START_LOC = startloc.S_CODE,
                                                S_START_AREA = startloc.S_AREA_CODE,
                                                S_START_WH = startloc.S_WH_CODE,
                                                S_END_LOC = endloc.S_CODE,
                                                S_END_AREA = endloc.S_AREA_CODE,
                                                S_END_WH = endloc.S_WH_CODE,
                                                N_PRIORITY = 1,
                                                S_TYPE = "半托出库",
                                                N_TYPE = 2,
                                                N_B_STATE = 0,
                                                S_BS_NO = "",
                                                S_CNTR_CODE = S_CNTR_CODE,
                                                S_OP_DEF_NAME = item.S_BS_TYPE
                                            };
                                            var res = db.Insertable(optask).ExecuteCommand() > 0;
                                            if (res)
                                            {
                                                startloc.N_LOCK_STATE = 2;
                                                startloc.S_LOCK_STATE = "出库锁";
                                                db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand();
                                            var models = db.Queryable<Location>().Where(a => a.S_CODE == endloc.S_CODE).First();
                                            // if (model != null && model.S_LOCK_STATE.Trim() == "无")
                                            if (models != null && models.N_LOCK_STATE == 0)
                                            {
                                                models.N_LOCK_STATE = 1;
                                                models.S_LOCK_STATE = Location.GetLockStateStr(1);
                                                res = db.Updateable(models).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0;
                                            }
                                            //LocationHelper.LockLoc(endloc.S_CODE, 1);
                                                item.N_B_STATE = 2;
                                                db.Updateable(item).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                                        }
                                        }
                                        else
                                        {
                                        idadd = false;
                                            LogHelper.Info($" 库区AGVXHQ无空货位");
                                        }
                                    }
                                    else
                                    {
                                       idadd = false;
                                        LogHelper.Info($" 库区无货位");
                                    }
                                }
                            }
                            else
                            {
                            idadd = false;
                            LogHelper.Info($"物料{item.S_ITEM_CODE}未找到容器对应的货位信息,请联系人工绑定关系");
                            }
                        if (!idadd)
                        {
                            TN_Center_Inbound_Detail tN_Center_Inbound_Detail = new TN_Center_Inbound_Detail();
                            tN_Center_Inbound_Detail.S_IO_NO = item.S_IO_NO;
                            tN_Center_Inbound_Detail.N_ROW_NO = item.N_ROW_NO;
                            tN_Center_Inbound_Detail.S_ITEM_CODE = item.S_ITEM_CODE;
                            tN_Center_Inbound_Detail.F_QTY = item.F_QTY;
                            tN_Center_Inbound_Detail.S_ITEM_STATE = item.S_ITEM_STATE;
                            tN_Center_Inbound_Detail.S_ITEM_NAME = item.S_ITEM_NAME;
                            tN_Center_Inbound_Detail.F_ACC_B_QTY = item.F_ACC_B_QTY;
                            tN_Center_Inbound_Detail.S_KCDD = item.S_KCDD;
                            tN_Center_Inbound_Detail.S_UOM = item.S_UOM;//计量单位
                            tN_Center_Inbound_Detail.S_BATCH_NO = item.S_BATCH_NO;
                            tN_Center_Inbound_Detail.S_CGPZH = item.S_CGPZH;
                            tN_Center_Inbound_Detail.S_CGPZXMBH = item.S_CGPZXMBH;
                            tN_Center_Inbound_Detail.S_CKPZKJND = item.S_CKPZKJND;
                            tN_Center_Inbound_Detail.S_CKPZXM = item.S_CKPZXM;
                            tN_Center_Inbound_Detail.S_CXWLPZBH = item.S_CXWLPZBH;
                            tN_Center_Inbound_Detail.S_HWSJJYZT = item.S_HWSJJYZT;
                            tN_Center_Inbound_Detail.S_JYPBH = item.S_JYPBH;
                            tN_Center_Inbound_Detail.S_KJPZSSRQ = item.S_KJPZSSRQ;
                            tN_Center_Inbound_Detail.S_KJPZSRSJ = item.S_KJPZSRSJ;
                            tN_Center_Inbound_Details.Add(tN_Center_Inbound_Detail);
                        }
                        //}
                        //else
                        //{
                        //    LogHelper.Info($"未找到物料{item.S_ITEM_CODE}对应的容器");
                        //}
                    }
                    db.Insertable(tN_Center_Inbound_Details).ExecuteCommand();
                    #endregion
                    var gzra = db.Queryable<TN_GZ_SZ>().Where(a => a.N_ENABLE == 1).First();
                    var GZRQ = DateTime.Now.ToString("yyyyMMdd");
@@ -4794,6 +5121,11 @@
                        result.resultCode = data.ROOT.ITEM.MSGCODE;
                        if (data.ROOT.ITEM.MSGCODE == 0)
                        {
                            if (tN_Inbound_Details.Count() > 0)
                            {
                                db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                            }
                          await  AddCenter(db, po.Details);
                            List<MaterialVoucher> materials = new List<MaterialVoucher>();
                            foreach (var item in model.Wlist)
@@ -4962,6 +5294,11 @@
                        result.resultCode = data.ROOT.ITEM.MSGCODE;
                        if (data.ROOT.ITEM.MSGCODE == 0)
                        {
                            if (tN_Inbound_Details.Count() > 0)
                            {
                                db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                            }
                          await  AddCenter(db, po.Details);
                            List<MaterialVoucher> materials = new List<MaterialVoucher>();
                            foreach (var item in model.Wlist)
                            {
@@ -5125,6 +5462,11 @@
                        result.resultCode = data.ROOT.ITEM.MSGCODE;
                        if (data.ROOT.ITEM.MSGCODE == 0)
                        {
                            if (tN_Inbound_Details.Count() > 0)
                            {
                                db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                            }
                          await  AddCenter(db, po.Details);
                            ;
                            List<MaterialVoucher> materials = new List<MaterialVoucher>();
                            foreach (var item in model.Wlist)
@@ -5255,14 +5597,15 @@
                        //添加凭证记录表
                        if (data != null)
                        {
                            List<TN_Inbound_Detail> tN_Inbound_Detailcx = new List<TN_Inbound_Detail>();
                            List<MaterialVoucher> materiallist = new List<MaterialVoucher>();
                            foreach (var item in data.ROOT.ITEM)
                            {
                                if (item.MSGCODE == 0)
                                {
                                    var onr = po.Details.Where(s => s.N_ROW_NO == item.WLPZHXM).FirstOrDefault();
                                    onr.N_B_STATE = 1;
                                    tN_Inbound_Detailcx.Add(onr);
                                    MaterialVoucher materialVoucher = new MaterialVoucher();
                                    materialVoucher.S_NO = po.S_NO;
                                    materialVoucher.S_TYPE = po.S_IN_TYPE;
@@ -5288,6 +5631,11 @@
                                }
                            }
                            if (tN_Inbound_Detailcx.Count()>0)
                            {
                                db.Updateable(tN_Inbound_Detailcx).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                              await  AddCenter(db, tN_Inbound_Detailcx);
                            }
                            if (materiallist.Count() > 0)
                            {
@@ -5326,10 +5674,6 @@
                        //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                    }
                    if (tN_Inbound_Details.Count() > 0)
                    {
                        db.Updateable(tN_Inbound_Details).UpdateColumns(it => new { it.N_B_STATE }).ExecuteCommand();
                    }
                    var newpodetai= db.Queryable<TN_Inbound_Detail>().Where(a => a.S_IO_NO == model.S_NO).ToList();
                    int cout = newpodetai.Where(s => s.N_B_STATE != 1).Count();
                    if (cout==0)
core/WCSCore.cs
@@ -62,7 +62,7 @@
                                //sendsencondtask(TN_Task);
                                WMSHelper.End(TN_Task);
                                //出库任务完成 修改配盘单状态为完成
                                if (TN_Task.N_TYPE == 2&&TN_Task.S_TYPE!="出库空托盘")
                                if (TN_Task.N_TYPE == 2&&TN_Task.S_TYPE!="出库空托盘" && TN_Task.S_TYPE != "半托出库")
                                {
                                    WMSHelper.EndTn(TN_Task.S_CNTR_CODE);
                                }
core/WMSCore.cs
@@ -243,6 +243,7 @@
                                    }
                                    LocationHelper.LockLoc(endloc.S_CODE, 1);
                                }
                                else
                                {
@@ -573,10 +574,10 @@
        /// </summary>
        internal static void Start()
        {
            //LogHelper.Info($"作业启动 创建子任务");
            LogHelper.Info($"作业启动 创建子任务");
            var db = new SqlHelper<object>().GetInstance();
            List<WMSTask> list = WMSHelper.GetWaitingOperationList();
            //LogHelper.Info($"获取任务数据 数量{list.Count}");
            LogHelper.Info($"获取任务数据 数量{list.Count}");
            if (list.Count > 0)
            {
                //如果是出库的作业锁定托盘的时候已经明确起点了,如果发货单或分拣单指定了终点,
@@ -585,6 +586,13 @@
                {
                    try
                    {
                      LogHelper.Info($"获取任务状态 {a.N_B_STATE}");
                        var WCSTasks = db.Queryable<WCSTask>().Where(it => it.S_OP_CODE == a.S_CODE).First();
                        if (WCSTasks!=null)
                        {
                            continue;
                        }
                        if (a.N_TYPE == 1)
                        {
                            //查询托盘所在位置
wms/WCSHelper.cs
@@ -156,17 +156,30 @@
                    task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE);
                    task.T_START_TIME = DateTime.Now;
                    db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME }).ExecuteCommand();
                    var wmstask = db.Queryable<WMSTask>().Where(s => s.S_CODE == task.S_OP_CODE).First();
                    wmstask.N_B_STATE = 2;
                    wmstask.S_B_STATE = WCSTask.GetStateStr(wmstask.N_B_STATE);
                    wmstask.T_START_TIME = DateTime.Now;
                    db.Updateable(wmstask).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME }).ExecuteCommand();
                }
            }
        }
        internal static void End(WCSTask task) {
            LogHelper.Info($"修改状态 ");
            var db = new SqlHelper<WCSTask>().GetInstance();
            if (task != null) {
                task.N_B_STATE = 3;
                task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE);
                task.T_END_TIME = DateTime.Now;
                db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
                LogHelper.Info($"修改状态为3 ");
                var wmstask = db.Queryable<WMSTask>().Where(s => s.S_CODE == task.S_OP_CODE).First();
                wmstask.N_B_STATE = 3;
                wmstask.S_B_STATE = WCSTask.GetStateStr(wmstask.N_B_STATE);
                wmstask.T_END_TIME = DateTime.Now;
                db.Updateable(wmstask).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
            }
        }
        internal static void Fail(WCSTask task) {
@@ -175,7 +188,15 @@
                //判断有没有取货完成,没有就变成失败。有取货完成默认完成了(跟据项目而定,有些项目人工拉走了也没有放到终点)。
                task.N_B_STATE = 5;
                task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE);
                db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand();
                task.T_END_TIME = DateTime.Now;
                db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
                var wmstask = db.Queryable<WMSTask>().Where(s => s.S_CODE == task.S_OP_CODE).First();
                wmstask.N_B_STATE = 5;
                wmstask.S_B_STATE = WCSTask.GetStateStr(wmstask.N_B_STATE);
                wmstask.T_END_TIME = DateTime.Now;
                db.Updateable(wmstask).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand();
            }
        }
        internal static bool CreateTask(WCSTask TN_Task) {
wms/WMSHelper.cs
@@ -67,7 +67,7 @@
        internal static List<WMSTask> GetWaitingOperationList()
        {
            var db = new SqlHelper<object>().GetInstance();
            return db.Queryable<WMSTask>().Where(a => a.N_B_STATE == 0 || a.N_B_STATE == 3).ToList();
            return db.Queryable<WMSTask>().Where(a => a.N_B_STATE == 0 ).ToList();
        }
        internal static PutawayOrder GetPutawayOrder(string no)
        {