yuyou_x
2024-03-06 38d24bdd00d8dd9e416fc5988831ec4b62e696ca
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -243,7 +243,7 @@
                            foreach (var demo in list)
                            {
                                var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 == demo.BoxNo);
                                if (com!=null)
                                if (com != null)
                                {
                                    demo.PickedQty = com.CompleteQty;
                                }
@@ -279,10 +279,62 @@
        }
        //获取库内无箱码的托盘分配信息
        public List<OutPdaInfo> GetAllotPlnInfo(string soDetailId, string palletNo)
        public List<BoxInfo> GetAllotPlnInfo(string soDetailId, string palletNo)
        {
            try
            {
                #region 判断
                //根据id及托盘获取出库单和托盘拣货信息
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                }
                //获取对应托盘下是否存在箱码信息
                var boxInfo = Db.Queryable<DataBoxInfo>().First(b => b.IsDel == "0" && b.PalletNo == palletNo);
                if (boxInfo != null)
                {
                    throw new Exception($"{palletNo}托盘上存在箱码信息,无法在数量拣货进行操作!");
                }
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(a => a.Id == int.Parse(soDetailId) && a.IsDel == "0");
                if (noticeDetail == null)
                {
                    throw new Exception($"未查询到对应出库单明细信息,请核实!");
                }
                //出库单总单
                var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == noticeDetail.SONo);
                if (notice == null)
                {
                    throw new Exception($"未查询到对应出库单总单信息,请核实!");
                }
                //分配信息
                var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.PalletNo == palletNo && a.Status == "2" || a.Status == "3");
                if (allot == null)
                {
                    throw new Exception($"未查询到对应分配信息,请核实!");
                }
                //库存明细
                var detail = Db.Queryable<DataStockDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo);
                if (detail == null)
                {
                    throw new Exception($"未查询到库存明细信息,请核实!");
                }
                #endregion
                List<BoxInfo> pdaInfo = new List<BoxInfo>();
                BoxInfo info = new BoxInfo()
                {
                    SkuNo = detail.SkuNo,
                    BoxNo = detail.SkuNo,
                    Qty = (int)allot.Qty,
                    PickedQty = (int)allot.CompleteQty,
                };
                pdaInfo.Add(info);
                return pdaInfo;
            }
            catch (Exception e)
@@ -312,7 +364,7 @@
                {
                    throw new Exception("托盘码不能为空");
                }
                //出库单
                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo);
                if (notice == null)
@@ -413,7 +465,7 @@
                    Db.Insertable(comList).ExecuteCommand();
                    //修改出库分配信息
                    allot.CompleteQty += pickQty;
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                    Db.Updateable(allot).ExecuteCommand();
                    //删除库存明细
                    Db.Deleteable(stockDetail).ExecuteCommand();
@@ -627,6 +679,193 @@
            }
        }
        //出库pda拣货
        public void SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId)
        {
            Db.BeginTran();
            try
            {
                #region 判断
                if (string.IsNullOrWhiteSpace(soNo))
                {
                    throw new Exception("出库单据不能为空");
                }
                //if (string.IsNullOrWhiteSpace(soDetailId))
                //{
                //    throw new Exception("出库物料-批次不能为空");
                //}
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘码不能为空");
                }
                //出库单
                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo);
                if (notice == null)
                {
                    throw new Exception("未查询到该出库单的信息");
                }
                if (notice.Status != "3")
                {
                    throw new Exception("出库单的状态不是正在执行,不能拣货");
                }
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
                    .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                if (noticeDetail == null)
                {
                    throw new Exception("未查询到该出库单明细的信息");
                }
                //出库分配信息
                var allot = Db.Queryable<BllExportAllot>().First(m =>
                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo &&
                    m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
                if (allot == null)
                {
                    throw new Exception("未查询到该托盘的分配信息");
                }
                //剩余拣货数量(待拣减去已拣)
                var needQty = allot.Qty - allot.CompleteQty;
                if (int.Parse(PickQty) > needQty)
                {
                    throw new Exception("拣货数量不能大于托内剩余待拣数量");
                }
                //库存明细
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
                if (stockDetail == null)
                {
                    throw new Exception("未查询到该托盘分配的库存明细信息!");
                }
                //库存总表
                var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                if (stock == null)
                {
                    throw new Exception("未查询到该托盘分配的库存信息!");
                }
                #endregion
                //获取当前托盘拣货明细
                var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id);
                //判读是否存在拣货明细
                int isComplete = 0;
                if (complete != null)
                {
                    isComplete = 1;
                }
                var comList = new List<BllCompleteDetail>();
                //判断是否存在拣货明细
                if (isComplete == 0)
                {
                    //添加拣货明细
                    var completeDetail = new BllCompleteDetail()
                    {
                        SONo = soNo,
                        SODetailNo = int.Parse(soDetailId),
                        ExportAllotId = allot.Id,
                        StockId = allot.StockId,
                        BoxNo = "",
                        BoxNo2 = "",
                        BoxNo3 = "",
                        LotNo = allot.LotNo,
                        LotText = allot.LotText,
                        SupplierLot = allot.SupplierLot,
                        SkuNo = allot.SkuNo,
                        SkuName = allot.SkuName,
                        Standard = allot.Standard,
                        PalletNo = palletNo,
                        CompleteQty = int.Parse(PickQty),
                        CreateUser = userId,
                        CreateTime = Db.GetDate(),
                    };
                    comList.Add(completeDetail);
                    //添加拣货明细
                    Db.Insertable(comList).ExecuteCommand();
                }
                else if (isComplete == 1)
                {
                    complete.CompleteQty += int.Parse(PickQty);
                    complete.UpdateUser = userId;
                    complete.UpdateTime = Db.GetDate();
                    Db.Updateable(complete).ExecuteCommand();
                }
                //修改出库分配信息
                allot.CompleteQty += int.Parse(PickQty);
                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                Db.Updateable(allot).ExecuteCommand();
                int isDel = 0;
                //删除或修改库存明细
                stockDetail.Qty -= int.Parse(PickQty);
                stockDetail.LockQty -= int.Parse(PickQty);
                if (stockDetail.Qty <= 0)
                {
                    Db.Deleteable(stockDetail).ExecuteCommand();
                }
                else
                {
                    isDel = 1;
                    Db.Updateable(stockDetail).ExecuteCommand();
                }
                //删除或修改库存
                stock.Qty -= int.Parse(PickQty);
                stock.LockQty -= int.Parse(PickQty);
                if (stock.Qty <= 0)
                {
                    Db.Deleteable(stock).ExecuteCommand();
                }
                else
                {
                    Db.Updateable(stock).ExecuteCommand();
                }
                //改变托盘状态为:未使用
                var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                if (pallet == null)
                {
                    throw new Exception("未在托盘表中查询到托盘信息");
                }
                //判断托盘上物料是否拣货完毕
                if (isDel == 0)
                {
                    pallet.Status = "0";
                    Db.Updateable(pallet).ExecuteCommand();
                }
                //修改出库单明细拣货数量
                noticeDetail.CompleteQty += int.Parse(PickQty);
                Db.Updateable(noticeDetail).ExecuteCommand();
                var num = Db.Queryable<BllExportNoticeDetail>()
                    .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                if (num <= 0)
                {
                    notice.Status = "4"; //更改为执行完成
                }
                //修改出库单信息
                Db.Updateable(notice).ExecuteCommand();
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 下发空托出库
        /// </summary>
@@ -635,7 +874,7 @@
        /// <param name="url"> </param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public string IssuePlnOutHouse(OutModePalletVm model, int userId,string url)
        public string IssuePlnOutHouse(OutModePalletVm model, int userId, string url)
        {
            try
            {
@@ -649,7 +888,7 @@
                if (stockDetail.Count > 0)
                {
                    //判断是否大于需要垛数
                    if (stockDetail.Count< int.Parse(model.Num))
                    if (stockDetail.Count < int.Parse(model.Num))
                    {
                        strMsg = "需要垛数大于库存垛数,请重新输入!";
                        return strMsg;
@@ -704,7 +943,7 @@
                    s.Status = "2"; //2 已分配
                    //修改库存明细信息
                    Db.Updateable(s).ExecuteCommand();
                    #region 分配
                    //添加分配表信息
@@ -738,7 +977,7 @@
                    Db.Insertable(allot).ExecuteCommand();
                    #endregion
                    #region 添加出库任务信息
                    var taskNo = new Common().GetMaxNo("TK");
@@ -804,7 +1043,7 @@
                        {
                            //更改任务的发送返回时间//
                            new TaskServer().EditTaskIssueOk(list2, time1, time2);
                                str += "下发成功";
                            str += "下发成功";
                        }
                        if (wcsModel.StatusCode == -1)
                        {
@@ -820,7 +1059,7 @@
                }
                //添加操作日志记录
                var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", i+"", "下发", $"用PDA下发了 {i} 个空托垛", userId);
                var k = new OperationSOServer().AddLogOperationSo("PDA模块", "空托出库", i + "", "下发", $"用PDA下发了 {i} 个空托垛", userId);
                Db.CommitTran();
                return "";
@@ -893,7 +1132,7 @@
                    throw new Exception("库存信息中不存在该托盘信息,请检查!");
                }
                if (result.WareHouseNo!="W02")//W02:零箱库
                if (result.WareHouseNo != "W02")//W02:零箱库
                {
                    throw new Exception("该托盘未在零箱库,请检查!");
                }
@@ -901,7 +1140,7 @@
                #endregion
                //获取库存明细信息
                var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" &&  s.PalletNo == palletNo).ToList();
                var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList();
                //验证库存明细信息是否存在
                if (stockDetail == null)
                {
@@ -990,6 +1229,6 @@
            }
        }
    }
}