| | |
| | | using WMS.Entity.LogEntity; |
| | | using WMS.Entity.BllQualityEntity; |
| | | using WMS.Entity.BllAsnEntity; |
| | | using System.Threading.Tasks; |
| | | using Utility; |
| | | |
| | | namespace WMS.BLL.BllPdaServer |
| | | { |
| | |
| | | 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(); |
| | | //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据 |
| | |
| | | |
| | | 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); |
| | |
| | | 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() |
| | |
| | | }; |
| | | 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() |
| | | { |
| | |
| | | }; |
| | | 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) |
| | |
| | | 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() |
| | | { |
| | |
| | | } |
| | | 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") |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | pdaInfo.Add(info); |
| | | return pdaInfo; |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | //出库pda拣货 |