hwh
2024-08-01 1d7d162b102320c08ca09eab8401ec2203b83e12
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -20,6 +20,8 @@
using WMS.Entity.LogEntity;
using WMS.Entity.BllQualityEntity;
using WMS.Entity.BllAsnEntity;
using System.Threading.Tasks;
using Utility;
namespace WMS.BLL.BllPdaServer
{
@@ -28,59 +30,49 @@
        private static readonly SqlSugarScope Db = DataContext.Db;
        //验证托盘是否存在并是否可出库
        public string IsEnableOkPalletNo(string palletNo)
        {
            try
        public async Task<string> IsEnableOkPalletNo(string palletNo)
            {
                string sqlMsg = "";
                var models = Db.Queryable<SysPallets>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
            var models = await Db.Queryable<SysPallets>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToListAsync();
                if (models.Count > 1)
                {
                    sqlMsg = "-1:存在重复托盘号,请检查!";
                    return sqlMsg;
                throw Oops.Bah("-1:存在重复托盘号,请检查!");
                }
                if (models.Count > 0)
                {
                    if (models[0].Status == "0")
                    {
                        sqlMsg = "-1:托盘号状态为未使用!";
                    throw Oops.Bah("-1:托盘号状态为未使用!");
                    }
                }
                else
                {
                    sqlMsg = "-1:托盘号不存在!";
                throw Oops.Bah("-1:托盘号不存在!");
                }
                return sqlMsg;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        //获取托盘中含有的执行中的单据
        public List<string> GetRunSoNoticeList(string palletNo, string type)
        {
            try
        public async Task<List<string>> GetRunSoNoticeList(string palletNo, string type)
            {
                if (string.IsNullOrWhiteSpace(palletNo))//判断托盘是否为空
                {
                    throw new Exception("托盘码为空,请输入托盘码");
                throw Oops.Bah("托盘码为空,请输入托盘码");
                }
                var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
            var palletInfo = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo);
                if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1")
                {
                    throw new Exception("该托盘还未出库");
                throw Oops.Bah("该托盘还未出库");
                }
                if (type == "1")//平库出库获取单据
                {
                    var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
                var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
                    return allotList;
                }
                //获取状态为待拣货或者部分拣货的出库单
                var allotList2 = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
            var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
                //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
                //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据
@@ -88,20 +80,13 @@
                return allotList2;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        //获取出库托盘上的物料批次(根据托盘码)
        public List<DetailIdSkuLotNo> GetSoSkuLotNoListByPallet(string palletNo, string soNo)
        {
            try
        public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListByPallet(string palletNo, string soNo)
            {
                if (string.IsNullOrWhiteSpace(palletNo))//判断托盘是否为空
                {
                    throw new Exception("托盘码为空,请输入托盘码");
                throw Oops.Bah("托盘码为空,请输入托盘码");
                }
                //获取状态为待拣货或者部分拣货的出库单
                var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == palletNo);
@@ -111,37 +96,29 @@
                    allotList = allotList.Where(m => m.SONo == soNo);
                }
                var list = allotList.GroupBy(m => new { m.SODetailNo, m.PalletNo, m.SkuNo, m.SkuName, m.LotNo }).Select(m => new DetailIdSkuLotNo()
            var list = await allotList.GroupBy(m => new { m.SODetailNo, m.PalletNo, m.SkuNo, m.SkuName, m.LotNo }).Select(m => new DetailIdSkuLotNo()
                {
                    SoDetailId = m.SODetailNo,
                    PalletNo = m.PalletNo,
                    SkuNo = m.SkuNo,
                    SkuName = m.SkuName,
                    LotNo = m.LotNo,
                }).ToList();
            }).ToListAsync();
                return list;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        //获取出库口、规格、待拣及已拣数量(根据出库单明细ID、托盘号)
        public OutPdaInfo GetOutlets(string soDetailId, string palletNo)
        public async Task<OutPdaInfo> GetOutlets(string soDetailId, string palletNo)
        {
            try
            {
                var allotInfo = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToList();
            var allotInfo = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync();
                if (allotInfo.Count == 0)
                {
                    throw new Exception($"{palletNo}托盘上未查询到分配信息,请核实");
                throw Oops.Bah($"{palletNo}托盘上未查询到分配信息,请核实");
                }
                if (allotInfo.Count > 1)
                {
                    throw new Exception($"{palletNo}托盘上存在多条相同的分配信息,请核实");
                throw Oops.Bah($"{palletNo}托盘上存在多条相同的分配信息,请核实");
                }
                var data = allotInfo.First();
                var data2 = new OutPdaInfo()
@@ -153,21 +130,14 @@
                };
                return data2;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //获取出库单的计划数量和完成
        public OutPdaInfo GetPlanAndFinishQty(string soDetailId)
        public async Task<OutPdaInfo> GetPlanAndFinishQty(string soDetailId)
        {
            try
            {
                var detail = Db.Queryable<BllExportNoticeDetail>().First(m => m.Id == int.Parse(soDetailId) && m.IsDel == "0");
            var detail = await Db.Queryable<BllExportNoticeDetail>().FirstAsync(m => m.Id == int.Parse(soDetailId) && m.IsDel == "0");
                if (detail == null)
                {
                    throw new Exception("未查询到出库单的明细");
                throw Oops.Bah("未查询到出库单的明细");
                }
                var data = new OutPdaInfo()
                {
@@ -176,20 +146,13 @@
                };
                return data;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //获取箱码信息(根据箱码在库存箱码明细中查询及拣货明细中拣货数量)
        public List<Model.ModelDto.BoxInfo> GetDataComBoxInfo(string soDetailId, string palletNo, string boxNo, string boxNo3)
        {
            try
        public async Task<List<BoxInfo>> GetDataComBoxInfo(string soDetailId, string palletNo, string boxNo, string boxNo3)
            {
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                throw Oops.Bah("托盘号不能为空");
                }
                Expression<Func<DataBoxInfo, bool>> item = Expressionable.Create<DataBoxInfo>()
                    .And(it => it.PalletNo == palletNo)
@@ -200,14 +163,14 @@
                var info = Db.Queryable<DataBoxInfo>().Where(item);
                if (info.Count() == 0)
                {
                    throw new Exception("未在库存中查询到信息");
                throw Oops.Bah("未在库存中查询到信息");
                }
                var type = "0";//0:查箱码或支码不分组 1:查托盘分组 显示箱
                var list = new List<BoxInfo>();
                if (!string.IsNullOrWhiteSpace(boxNo3) || !string.IsNullOrWhiteSpace(boxNo))//判断支码是否为空
                {
                    foreach (var demo in info.ToList())
                foreach (var demo in await info.ToListAsync())
                    {
                        var t = new BoxInfo()
                        {
@@ -223,26 +186,26 @@
                }
                else if (!string.IsNullOrWhiteSpace(palletNo))
                {
                    list = info.GroupBy(m => new { m.BoxNo }).Select(it => new BoxInfo
                list = await info.GroupBy(m => new { m.BoxNo }).Select(it => new BoxInfo
                    {
                        BoxNo = it.BoxNo,
                        Qty = SqlFunc.AggregateSum(it.Qty)
                    }).ToList();
                }).ToListAsync();
                    type = "1";
                }
                if (!string.IsNullOrWhiteSpace(soDetailId))
                {
                    var allotInfos = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToList();
                var allotInfos = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo && (m.Status == "2" || m.Status == "3")).ToListAsync();
                    if (allotInfos.Count == 0)
                    {
                        throw new Exception($"{palletNo}托盘上未查询到分配信息,请核实");
                    throw Oops.Bah($"{palletNo}托盘上未查询到分配信息,请核实");
                    }
                    if (allotInfos.Count > 1)
                    {
                        throw new Exception($"{palletNo}托盘上存在多条相同的分配信息,请核实");
                    throw Oops.Bah($"{palletNo}托盘上存在多条相同的分配信息,请核实");
                    }
                    var allotInfo = allotInfos.First();
                    var comInfo = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allotInfo.Id).ToList();
                var comInfo = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allotInfo.Id).ToListAsync();
                    if (comInfo.Count != 0)
                    {
                        if (type == "0")
@@ -291,59 +254,52 @@
                return list;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //获取库内无箱码的托盘分配信息
        public List<Model.ModelDto.BoxInfo> GetAllotPlnInfo(string soDetailId, string palletNo)
        {
            try
        public async Task<List<BoxInfo>> GetAllotPlnInfo(string soDetailId, string palletNo)
            {
                #region 判断
                //根据id及托盘获取出库单和托盘拣货信息
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                throw Oops.Bah("托盘号不能为空");
                }
                //获取对应托盘下是否存在箱码信息
                var boxInfo = Db.Queryable<DataBoxInfo>().First(b => b.IsDel == "0" && b.PalletNo == palletNo);
            var boxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(b => b.IsDel == "0" && b.PalletNo == palletNo);
                if (boxInfo != null)
                {
                    throw new Exception($"{palletNo}托盘上存在箱码信息,无法在数量拣货进行操作!");
                throw Oops.Bah($"{palletNo}托盘上存在箱码信息,无法在数量拣货进行操作!");
                }
                BllExportAllot allot = null;
                if (!string.IsNullOrWhiteSpace(soDetailId))
                {
                    //出库单明细
                    var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(a => a.Id == int.Parse(soDetailId) && a.IsDel == "0");
                var noticeDetail = await Db.Queryable<BllExportNoticeDetail>().FirstAsync(a => a.Id == int.Parse(soDetailId) && a.IsDel == "0");
                    if (noticeDetail == null)
                    {
                        throw new Exception($"未查询到对应出库单明细信息,请核实!");
                    throw Oops.Bah($"未查询到对应出库单明细信息,请核实!");
                    }
                    //出库单总单
                    var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == noticeDetail.SONo);
                var notice = await Db.Queryable<BllExportNotice>().FirstAsync(a => a.IsDel == "0" && a.SONo == noticeDetail.SONo);
                    if (notice == null)
                    {
                        throw new Exception($"未查询到对应出库单总单信息,请核实!");
                    throw Oops.Bah($"未查询到对应出库单总单信息,请核实!");
                    }
                    //分配信息
                    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"));
                allot = await Db.Queryable<BllExportAllot>().FirstAsync(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($"未查询到对应分配信息,请核实!");
                    throw Oops.Bah($"未查询到对应分配信息,请核实!");
                    }
                }
                //库存明细
                var detail = Db.Queryable<DataStockDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo);
            var detail = await Db.Queryable<DataStockDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo);
                if (detail == null)
                {
                    throw new Exception($"未查询到库存明细信息,请核实!");
                throw Oops.Bah($"未查询到库存明细信息,请核实!");
                }
                #endregion
@@ -360,12 +316,6 @@
                pdaInfo.Add(info);
                return pdaInfo;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //出库pda拣货