admin
1 天以前 7584c97271e35d824d592f29c943715e0e2a0d34
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -450,8 +450,8 @@
                                WaveNo = "",
                                IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1",
                                IsMixBox = "0",
                                OrderDetailCode = d.lineNo,
                                Status = "0",//默认等待执行
                                CreateUser = 0,
                            };
@@ -580,7 +580,7 @@
                                    WaveNo = "",
                                    IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1",
                                    IsMixBox = "0",
                                    Status = "0",//默认等待执行
                                    CreateUser = 0,
                                };
                                list.Add(item);
@@ -613,11 +613,11 @@
                        CreateUser = 0,
                    };
                    if (houseNo == "1000" || houseNo == "1001" || houseNo == "2000" || houseNo == "2002" || houseNo == "2003" || houseNo == "2004")
                    if (houseNo == "1000" || houseNo == "1001" || houseNo == "1002" || houseNo == "1003" || houseNo == "1098" || houseNo == "2000" || houseNo == "2001" || houseNo == "2002" || houseNo == "2003" || houseNo == "2004" || houseNo == "3101" || houseNo == "3102" || houseNo == "3103" || houseNo == "3104")
                    {
                        notice.WareHouseNo = "W02";
                    }
                    else if (houseNo == "4000")
                    else if (houseNo == "4000" | houseNo == "4001")
                    {
                        notice.WareHouseNo = "W01";
                    }
@@ -753,12 +753,12 @@
                    //系统对接后放开
                    var jsonData = JsonConvert.SerializeObject(soInfo);
                    var response = HttpHelper.DoPost(url, jsonData, "出库单完成上传", "ERP");
                    var response = HttpHelper.DoPost(url, jsonData, "出库单完成上传", "SAP");
                    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                    if (obj.Success != 0)
                    var obj = JsonConvert.DeserializeObject<SapResultModel>(response);//解析返回数据
                    if (obj.RESULT != true)
                    {
                        throw new Exception("上传失败" + obj.Message);
                        throw new Exception("上传失败" + obj.MESSAGE);
                    }
                    #endregion
                }
@@ -1452,7 +1452,8 @@
                {
                    throw new Exception("未查询到出库单据信息");
                }
                if (notice.Origin != "WMS" || notice.Status != "0")
                //if (notice.Origin != "WMS" || notice.Status != "0")
                if (notice.Status != "0")
                {
                    throw new Exception("参数异常,请检查状态是否未等待执行或来源是否是WMS");
                }
@@ -1509,7 +1510,7 @@
                        //更新出库单
                        foreach (var d in model.Detail)
                        {
                            if (d.Qty <= 0M)
                            if (d.Qty <= 0)
                            {
                                throw new Exception("出库数据必须大于0");
                            }
@@ -1913,12 +1914,14 @@
                {
                    throw new Exception("未查询到出库单据信息");
                }
                if (notice.Status != "4")
                //2025年12月08日可户要求少拣货也可以正常关单
                List<string> statusList = new List<string>() { "3", "4" };
                if (!statusList.Contains(notice.Status))
                {
                    throw new Exception("参数异常,请检查状态是否为执行完成或订单关闭");
                }
                //总库存信息
                var stockList = Db.Queryable<DataStock>().ToList();
                ////总库存信息
                //var stockList = Db.Queryable<DataStock>().ToList();
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList();
@@ -1931,11 +1934,14 @@
                    notice.UpdateTime = DateTime.Now;
                    Db.Updateable(notice).ExecuteCommand();
                    var skuList = noticeDetail.Select(d => d.SkuNo).ToList();
                    var stocks = stockList.Where(s => skuList.Contains(s.SkuNo)).ToList();
                    //var skuList = noticeDetail.Select(d => d.SkuNo).ToList();
                    //var stocks = stockList.Where(s => skuList.Contains(s.SkuNo)).ToList();
                    List<string> sqlList = new List<string>();
                    foreach (var d in noticeDetail)
                    {
                        #region MyRegion
                        //更改库存明细锁定数量
                        //var orders = dataContext.WmsExportOrder.Where(o => o.ExportDetailId == d.Id
                        //                && o.ExportExecuteFlag != "4" && o.ExportExecuteFlag == "3" && o.pickingType == 0).ToList();
@@ -1967,7 +1973,8 @@
                        //{
                        //    throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实");
                        //}
                        #region 库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了)
                        //库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了)
                        /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
@@ -1994,7 +2001,58 @@
                            Db.Updateable(st).UpdateColumns(it => new { it.Qty, it.LockQty }).ExecuteCommand();
                        }*/
                        #endregion
                        //实际拣货表
                        string completeSql = $@"select PalletNo,Qty-CompleteQty as lessQty
   from BllExportAllot
   where IsDel='0' and SONo='{d.SONo}' and SkuNo='{d.SkuNo}' and LotNo='{d.LotNo}'";
                        DataTable completeDt = Db.Ado.GetDataTable(completeSql);
                        //修改托盘明细的锁定数量
                        foreach (DataRow dr in completeDt.Rows)
                        {
                            decimal lessQty = Convert.ToDecimal(dr["lessQty"]);
                            if (lessQty > 0)
                            {
                                //查看库存明细锁定数量-lessQty
                                string stockDetailSql = $@"select LockQty-{lessQty} as morelockQty from DataStockDetail where IsDel='0' and SkuNo='{d.SkuNo}' and LotNo='{d.LotNo}' and PalletNo='{dr["PalletNo"] + ""}'";
                                decimal morelockQty = Db.Ado.GetDecimal(stockDetailSql);
                                if (morelockQty >= 0)
                                {
                                    sqlList.Add($@"update DataStockDetail set LockQty=LockQty-{morelockQty} where IsDel='0' and SkuNo='{d.SkuNo}' and LotNo='{d.LotNo}' and PalletNo='{dr["PalletNo"] + ""}'");
                                }
                            }
                        }
                    }
                    //修改库存总表
                    string exportDetailSql = $@"select SkuNo,LotNo,sum(Qty)-sum(CompleteQty) as lessQty
   from BllExportNoticeDetail
   where IsDel='0' and SONo='{notice.SONo}'
   group by SkuNo,LotNo";
                    DataTable exportDetailDt = Db.Ado.GetDataTable(exportDetailSql);
                    foreach (DataRow dr in exportDetailDt.Rows)
                    {
                        decimal lessQty = Convert.ToDecimal(dr["lessQty"]);
                        if (lessQty > 0)
                        {
                            //查看库存锁定数量-lessQty
                            string stockDetailSql = $@"select LockQty-{lessQty} as morelockQty from DataStock where IsDel='0' and SkuNo='{dr["SkuNo"] + ""}' and LotNo='{dr["LotNo"] + ""}'";
                            decimal morelockQty = Db.Ado.GetDecimal(stockDetailSql);
                            if (morelockQty >= 0)
                            {
                                sqlList.Add($@"update DataStock set LockQty=LockQty-{morelockQty} where IsDel='0' and SkuNo='{dr["SkuNo"] + ""}' and LotNo='{dr["LotNo"] + ""}'");
                            }
                        }
                    }
                    foreach (string sqlStr in sqlList)
                    {
                        var end = Db.Ado.ExecuteCommand(sqlStr);
                    }
                    //添加操作日志记录
                    var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "关单", $"关闭了单据号为{notice.SONo}的单据信息", userId);
@@ -2790,11 +2848,11 @@
                        }
                        //还需要分配的数量
                        decimal needQty = detail.Qty - (detail.AllotQty == null ? 0 : decimal.Parse(detail.AllotQty.ToString()));
                        //排除车间库存
                        List<string> areaNoList = new List<string>() { "B06", "B07", "B09", "B24", "B26", "B27", "B28", "B29" };
                        //库存明细 Status 0:待分配 1:部分分配  2:已分配 
                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0"
                        && m.AreaNo != "B06" && m.AreaNo != "B07" && m.AreaNo != "B09" && m.AreaNo != "B24")//排除车间库存
                            .ToList();
                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0" && !areaNoList.Contains(m.AreaNo)).ToList();
                        //判断单号是否指定批次
                        if (!string.IsNullOrWhiteSpace(detail.LotNo))
@@ -2879,7 +2937,9 @@
                                CreateUser = userId,
                                CreateTime = DateTime.Now
                            };
                            if (s.WareHouseNo == "W04")
                            //2025年12月08日货架库和平库,直接待拣货
                            List<string> wareHouseList = new List<string>() { "W02", "W04" };
                            if (wareHouseList.Contains(s.WareHouseNo))
                            {
                                allot.Status = "2";//待拣货
                                xQty += allot.Qty;
@@ -3335,7 +3395,9 @@
                            CreateUser = userId,
                            CreateTime = DateTime.Now
                        };
                        if (stock.WareHouseNo == "W04")
                        //2025年12月08日货架库和平库,直接待拣货
                        List<string> wareHouseList = new List<string>() { "W02", "W04" };
                        if (wareHouseList.Contains(stock.WareHouseNo))
                        {
                            allot.Status = "2";//待拣货
                            xQty += allot.Qty;
@@ -4763,7 +4825,9 @@
                    }
                    var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m => m.LocatNo).ToList();
                    //所属区域集合
                    List<string> areNolist = new List<string>() { "B01", "B02", "B05" };
                    var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && areNolist.Contains(m.AreaNo)).Select(m => m.LocatNo).ToList();
                    //判断是否是原辅料出库任务  货架储位=》平库储位
                    if (endLocateList.Contains(task.EndLocat) && PalletType == "0")
                    {
@@ -6522,19 +6586,22 @@
                        throw new Exception("未查询到任务信息");
                    }
                    //获取对应库位信息
                    var startlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    //var startlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    var startlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.LocatNo == task.StartLocat);
                    if (startlocat == null)
                    {
                        throw new Exception("未查询到储位信息");
                    }
                    startlocat.Status = "0";//修改分配信息状态
                    //获取储位信息
                    var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    //var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.LocatNo == task.StartLocat);
                    //获取移库任d务对应目标储位信息
                    SysStorageLocat endlocat = new SysStorageLocat();
                    if (task.Type == "2")
                    {
                        endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.EndLocat);
                        //endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.EndLocat);
                        endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.LocatNo == task.EndLocat);
                        if (endlocat == null)
                        {
                            throw new Exception("未查询到目标储位信息");
@@ -6598,7 +6665,8 @@
                        //获取库存
                        var datastock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo);
                        //获取储位信息
                        var locate = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == stockDetail.LocatNo);
                        //var locate = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == stockDetail.LocatNo);
                        var locate = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.LocatNo == stockDetail.LocatNo);
                        //判断是否为空托盘
                        if (stockDetail.SkuNo == "100099")