chengsc
2024-11-03 5ce969ed34e91c931cce38e2feb5d2c208633a96
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -262,10 +262,22 @@
        }
        //回传出库单
        public bool FinishSo(int id, string url, int userId)
        public bool FinishSo(int id, string url, string userNo, string pwd, int userId)
        {
            try
            {
                var loginPwd = Md5Tools.CalcMd5(pwd);
                var date = Db.Queryable<SysUserInfor>().First(m => m.IsDel == "0" && m.UserName == userNo && m.PassWord == loginPwd);
                if (date == null) //账号密码是否正确
                {
                    throw new Exception("账号密码不正确或没有此账号");
                }
                if (date.Status != "0") //当前账号是否正常启用
                {
                    throw new Exception("当前账号非启用状态");
                }
                var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id && m.IsDel == "0");
                if (notice == null)
                {
@@ -280,7 +292,7 @@
                {
                    throw new Exception("未查询到单据明细信息");
                }
                if (userId == notice.UpdateUser)
                if (date.Id == notice.UpdateUser)
                {
                    throw new Exception("复核失败,复核人员和关闭订单人员不能相同!");
                }
@@ -315,10 +327,10 @@
                notice.Status = "6";
                notice.CheckTime = DateTime.Now;
                notice.CheckUser = userId;
                notice.CheckUser = date.Id;
                Db.Updateable(notice).ExecuteCommand();
                new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "复核", $"复核了单据号为{notice.SONo}的单据信息", userId);
                new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "复核", $"{date.RealName}复核了单据号为{notice.SONo}的单据信息", userId);
                return true;
            }
            catch (Exception e)
@@ -438,7 +450,7 @@
                        break;
                    case "5"://中间品出库
                        skuType = "(4)";
                        inspectStatus = "1";
                        inspectStatus = "0,1";
                        break;
                    case "6"://代储出库
                        skuType = "(0,1,2,3,4)";
@@ -1231,9 +1243,9 @@
                {
                    throw new Exception("未查询到出库单据信息");
                }
                if (notice.Status != "4")
                if (notice.Status != "4" && notice.Status != "3")
                {
                    throw new Exception("参数异常,请检查状态是否为执行完成或订单关闭");
                    throw new Exception("参数异常,请检查状态是否为正在执行或执行完成");
                }
                //总库存信息
                var stockList = Db.Queryable<DataStock>().ToList();
@@ -1254,64 +1266,67 @@
                    foreach (var d in noticeDetail)
                    {
                        //更改库存明细锁定数量
                        //var orders = dataContext.WmsExportOrder.Where(o => o.ExportDetailId == d.Id
                        //                && o.ExportExecuteFlag != "4" && o.ExportExecuteFlag == "3" && o.pickingType == 0).ToList();
                        //foreach (var o in orders)
                        //{
                        //    if (o.ExportQuantity > o.PickedNum) //判断拣货是否已拣完
                        //    {
                        //        var pq = dataContext.WmsStockTray.Where(t => t.StockGoodId == o.ExportGoodsCode && t.StockStockCode == o.ExportStockCode);
                        //        if (string.IsNullOrWhiteSpace(o.ExportLotNo))
                        //        {
                        //            pq = pq.Where(t => t.StockLotNo == null || t.StockLotNo == "");
                        //        }
                        //        else
                        //        {
                        //            pq = pq.Where(t => t.StockLotNo == o.ExportLotNo);
                        //        }
                        //        var pallet = pq.FirstOrDefault();
                        //        //库存托盘信息锁定数量还原为未锁定
                        //        if (pq != null)
                        //        {
                        //            pallet.LockQuantity -= o.ExportQuantity.Value - o.PickedNum;
                        //            pallet.StockQuantity += o.ExportQuantity.Value - o.PickedNum;
                        //        }
                        //    }
                        //}
                        if (d.Qty != d.CompleteQty)
                        if (notice.Type == "0")//成品出库
                        {
                            throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实");
                        }
                        #region 库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了)
                        /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        {
                            sq = sq.Where(s => s.LotNo == d.LotNo);
                        }
                        else
                        {
                            sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo));
                        }
                        var st = sq.FirstOrDefault();
                        if (st != null)
                        {
                            if (d.CompleteQty <= d.Qty)
                            if (d.Qty != d.CompleteQty)
                            {
                                st.Qty += d.Qty - d.CompleteQty.Value;
                                throw new Exception("当前单据明细中计划数量与拣货数量不符,请核实");
                            }
                        }
                        if (d.Qty < d.CompleteQty)
                        {
                            //更改库存明细锁定数量
                            var allotList = Db.Queryable<BllExportAllot>().Where(o => o.SODetailNo == d.Id && o.Status == "3" && o.IsDel == "0").ToList();
                            foreach (var o in allotList)
                            {
                                if (o.Qty > o.CompleteQty) //判断拣货是否已拣完
                                {
                                    var pq = Db.Queryable<DataStockDetail>().Where(t => t.IsDel == "0" && t.Id == o.StockId && t.SkuNo == o.SkuNo);
                                    if (string.IsNullOrWhiteSpace(o.LotNo))
                                    {
                                        pq = pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo));
                                    }
                                    else
                                    {
                                        pq = pq.Where(t => t.LotNo == o.LotNo);
                                    }
                                    var pallet = pq.First();
                                    //库存托盘信息锁定数量还原为未锁定
                                    if (pq != null)
                                    {
                                        //pallet.Qty -= o.CompleteQty.Value - o.Qty;
                                        pallet.LockQty -= o.Qty - o.CompleteQty.Value;
                                        Db.Updateable(pallet).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                                    }
                                }
                            }
                            #region 库存表减去锁定数量与总数量(PDA拣货的时候已经减去数量了)
                            var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
                            if (!string.IsNullOrWhiteSpace(d.LotNo))
                            {
                                sq = sq.Where(s => s.LotNo == d.LotNo);
                            }
                            else
                            {
                                st.Qty -= d.CompleteQty.Value - d.Qty;
                                sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo));
                            }
                            st.LockQty -= d.Qty;
                            st.Qty -= d.Qty;
                            //修改总库存表
                            Db.Updateable(st).UpdateColumns(it => new { it.Qty, it.LockQty }).ExecuteCommand();
                        }*/
                        #endregion
                            if (notice.Type == "6")//代储
                            {
                                sq = sq.Where(s => s.OwnerNo == notice.CustomerNo);
                            }
                            var st = sq.FirstOrDefault();
                            if (st != null)
                            {
                                st.LockQty -= d.Qty - d.CompleteQty.Value;
                                //修改总库存表
                                Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                            }
                            #endregion
                        }
                    }
                    //添加操作日志记录
                    var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库单据", notice.SONo, "关单", $"关闭了单据号为{notice.SONo}的单据信息", userId);
@@ -3342,9 +3357,9 @@
                    var needQty = detail.Qty - detail.AllotQty;
                    //分配的出库数量
                    var outQty = model.StockList.Select(s => s.Qty).ToList().Sum();
                    if (outQty != needQty)
                    if (outQty < needQty)
                    {
                        throw new Exception("操作失败,出库数量与计划数量不一致!");
                        throw new Exception("操作失败,出库数量不能大于计划数量!");
                    }
                }