| | |
| | | /// <param name="boxNo"></param> |
| | | /// <param name="palletNoNew"></param> |
| | | /// <param name="userId"></param> |
| | | public async Task SoSetPinPick34(string soNo, string soDetailId, string palletNo, string boxNo , string palletNoNew, int userId) |
| | | public async Task SoSetPinPick34(string soNo, string soDetailId, string palletNo, string boxNo, string palletNoNew, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | bool isNew = false; |
| | | |
| | | var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); |
| | | |
| | | if (pinStockDetail != null) |
| | | |
| | | if (pinStockDetail != null) |
| | | { |
| | | if (palletNo != palletNoNew)//非整托拣货 |
| | | { |
| | | var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id!= pinStockDetail.Id).ToList(); |
| | | if (pinStockDetails.Count(m=>m.SONo != notice.SONo) > 0) |
| | | var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); |
| | | if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) |
| | | { |
| | | throw Oops.Bah("拼托托盘上只能放同一个出库单下的物料!"); |
| | | } |
| | | } |
| | | |
| | | |
| | | sdId = pinStockDetail.Id; |
| | | } |
| | | else |
| | | { |
| | | isNew = true; |
| | | |
| | | var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); |
| | | var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew);//&& m.Status == "0" |
| | | if (newPalletInfo == null) |
| | | { |
| | | throw Oops.Bah("新托盘信息不存在!"); |
| | |
| | | newPalletInfo.Status = "1"; |
| | | await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | var sd = new DataStockDetail(); |
| | | if (isNew) |
| | | { |
| | |
| | | { |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) |
| | | { |
| | | throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); |
| | | } |
| | | //if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) |
| | | //{ |
| | | // throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败"); |
| | | //} |
| | | //添加拣货明细 |
| | | var completeDetail = new BllCompleteDetail() |
| | | { |
| | |
| | | } |
| | | boxInfos = boxInfo.ToList(); |
| | | var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); |
| | | |
| | | |
| | | //整箱拣货 |
| | | |
| | | |
| | | if (boxInfo.Any(m => m.PalletNo != palletNo)) |
| | | { |
| | | throw Oops.Bah("该托盘与箱码没有绑定关系"); |
| | |
| | | //{ |
| | | // throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量"); |
| | | //} |
| | | |
| | | |
| | | foreach (var item in boxInfos) |
| | | { |
| | | if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) |
| | |
| | | throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | |
| | | item.BindNo = null;//托盘绑定号 |
| | | item.PalletNo = palletNoNew; |
| | | } |
| | | |
| | | |
| | | item.Status = "5";//箱支状态,0:未组托 1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货 |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | pickQty += item.Qty; |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | await Db.Insertable(comList).ExecuteCommandAsync(); |
| | | //修改出库分配信息 |
| | | allot.CompleteQty += pickQty; |
| | | allot.Status = allot.Qty <= allot.CompleteQty ? "5" : "3"; |
| | | allot.UpdateTime = DateTime.Now; |
| | | |
| | | |
| | | await Db.Updateable(allot).ExecuteCommandAsync(); |
| | | |
| | | //删除或修改库存明细 |
| | |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | |
| | | pinStockDetail.LockQty += pickQty; |
| | | await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货拼托", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的原托盘码为:{palletNo},新托盘码为:{palletNoNew}的拣货拼托操作", userId); |
| | |
| | | |
| | | #region 拼托信息 |
| | | bool isNew = false; |
| | | var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo== stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); |
| | | var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); |
| | | if (pinStockDetail != null) |
| | | { |
| | | if (palletNo != palletNoNew)//非整托拣货 |
| | |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | |
| | | //更改储位状态为空储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m=>m.IsDel == "0" && m.LocatNo == locateStr); |
| | | if (locate!=null) |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateStr); |
| | | if (locate != null) |
| | | { |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | |
| | | |
| | | //库存明细 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo |
| | | .FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo |
| | | && m.SkuNo == boxInfos.First().SkuNo && m.LotNo == boxInfos.First().LotNo); |
| | | if (stockDetail == null) |
| | | { |
| | |
| | | else |
| | | { |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | stock.Qty -= pickQty; |
| | | stock.LockQty -= pickQty; |
| | | if (stock.Qty <= 0) |
| | |
| | | |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "车间出库", |
| | | var k = new OperationSOServer().AddLogOperationSo("PDA模块", "车间出库", |
| | | boxNo, "出库", $"在PDA上对箱号为:{boxNo}的托盘码为:{palletNo}的拣货操作", userId); |
| | | Db.CommitTran(); |
| | | } |
| | |
| | | } |
| | | |
| | | // 车间Pda拣货-数量 |
| | | public async Task ChejianPickNum(PdaSoVm model, int userId) |
| | | public async Task ChejianPickNum(PdaSoVm model, int userId) |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | { |
| | | throw Oops.Bah("物料数量不可为null"); |
| | | } |
| | | else |
| | | else |
| | | { |
| | | skuNum = decimal.Parse(model.PickQty); |
| | | if (skuNum <= 0) |
| | | if (skuNum <= 0) |
| | | { |
| | | throw Oops.Bah("物料数量应大于0!"); |
| | | } |
| | |
| | | { |
| | | throw Oops.Bah("物料不存在,请检查物料编码是否拯却!"); |
| | | } |
| | | else |
| | | else |
| | | { |
| | | if (skuModel.IsPasteCode != "0") |
| | | if (skuModel.IsPasteCode != "0") |
| | | { |
| | | throw Oops.Bah("该物料为贴标物料,请到标签页面拣货!"); |
| | | } |
| | |
| | | //库存明细 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>() |
| | | .FirstAsync(m => m.IsDel == "0" && m.PalletNo == model.PalletNo |
| | | && m.SkuNo == model.SkuNo && m.LotNo == model.LotNo); |
| | | && m.SkuNo == model.SkuNo && m.LotNo == model.LotNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw Oops.Bah("未查询到该托盘上货物的库存明细信息!"); |
| | |
| | | //} |
| | | if (type == "1")//平库出库获取单据 |
| | | { |
| | | 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(); |
| | | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).OrderByDescending(m => m.SONo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | return allotList; |
| | | } |
| | | var noticeList = Db.Queryable<BllExportNotice>().Where(w => w.IsDel == "0" && (w.Status == "3" || w.Status == "4")).Select(s => s.SONo).ToList(); |
| | | //获取状态为待拣货或者部分拣货的出库单 |
| | | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo && noticeList.Contains(m.SONo)).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3" || m.Status == "5") && m.PalletNo == palletNo && noticeList.Contains(m.SONo)).OrderByDescending(m => m.SONo).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(); |
| | | //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据 |
| | |
| | | if (string.IsNullOrWhiteSpace(soNo))//判断托盘是否为空 |
| | | { |
| | | throw Oops.Bah("出库单为空,请选择出库单"); |
| | | } |
| | | } |
| | | if (string.IsNullOrWhiteSpace(soDetailId)) |
| | | { |
| | | throw Oops.Bah("出库明细为空,请选择物料-批次"); |
| | | } |
| | | |
| | | |
| | | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "0" && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId)).Select(m => m.PalletNo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | return allotList; |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //获取托盘中含有的执行中的单据 |
| | |
| | | { |
| | | if (type == "1")//平库出库获取单据 |
| | | { |
| | | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status =="0")).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status == "0")).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); |
| | | return allotList; |
| | | } |
| | | //获取状态为待拣货或者部分拣货的出库单 |
| | |
| | | } |
| | | //获取状态为待拣货或者部分拣货的出库单 |
| | | var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.Status == "0" || m.Status == "1")); |
| | | |
| | | |
| | | var list = await allotList.GroupBy(m => new { m.SODetailNo, m.SkuNo, m.SkuName, m.LotNo }).Select(m => new DetailIdSkuLotNo() |
| | | { |
| | | SoDetailId = m.SODetailNo, |
| | |
| | | /// <param name="boxNo"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public decimal CheckBoxForPick(string palletNo ,string boxNo) |
| | | public decimal CheckBoxForPick(string palletNo, string boxNo) |
| | | { |
| | | try |
| | | { |
| | |
| | | pallet.Status = "0"; |
| | | await Db.Updateable(pallet).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | |
| | | //修改出库单明细拣货数量 |
| | | noticeDetail.CompleteQty += pickQty; |
| | | await Db.Updateable(noticeDetail).ExecuteCommandAsync(); |
| | |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | pickQty += decimal.Parse(pickQty1); |
| | | } |
| | | } |
| | | } |
| | | //改变库内箱码是否零箱信息 |
| | | if (biaoShi == "1" || biaoShi == "2") |
| | |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public async Task SoSetPickCode34(string soNo, string soDetailId, string palletNo, List<string> boxNoList, int userId) |
| | | { |
| | | { |
| | | try |
| | | { |
| | | #region 判断 |
| | |
| | | else |
| | | { |
| | | stockDetail.Status = "0"; |
| | | } |
| | | } |
| | | if (stockDetail.Qty <= 0) |
| | | { |
| | | await Db.Deleteable(stockDetail).ExecuteCommandAsync(); |
| | |
| | | { |
| | | endroad = new AllotLocation().RoadwayToStationNum(locat.RoadwayNo, model.OutMode); |
| | | } |
| | | |
| | | |
| | | outDtoList.Add(new OutCommandDto() |
| | | { |
| | | TaskNo = exTask.TaskNo, // 任务号 |
| | |
| | | |
| | | var info = Db.Queryable<BllExportAllot>() |
| | | .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo) |
| | | .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo) |
| | | .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo}).Select((a,b) => new BoxInfo() |
| | | .Where(a => a.IsDel == "0" && (a.Status == "0" || a.Status == "1") && a.SONo == soNo) |
| | | .GroupBy((a, b) => new { a.SkuNo, a.SkuName, a.LotNo }).Select((a, b) => new BoxInfo() |
| | | { |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | |
| | | } |
| | | |
| | | //获取平库单据中托盘位置信息 |
| | | public async Task<List<BoxInfo>> GetPingKuLocationInfo(string soNo,string skuno,string lotno) |
| | | public async Task<List<BoxInfo>> GetPingKuLocationInfo(string soNo, string skuno, string lotno) |
| | | { |
| | | |
| | | var info = Db.Queryable<BllExportAllot>() |
| | | .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo) |
| | | .LeftJoin<SysWareHouse>((a,b,c)=>b.WareHouseNo == c.WareHouseNo) |
| | | .LeftJoin<SysStorageArea>((a,b,c,d)=>b.AreaNo == d.AreaNo) |
| | | .LeftJoin<SysWareHouse>((a, b, c) => b.WareHouseNo == c.WareHouseNo) |
| | | .LeftJoin<SysStorageArea>((a, b, c, d) => b.AreaNo == d.AreaNo) |
| | | .Where(a => a.IsDel == "0" && (a.Status == "0" || a.Status == "1") && a.SONo == soNo && a.SkuNo == skuno && a.LotNo == lotno) |
| | | .GroupBy((a, b,c,d) => new { a.PalletNo, b.LocatNo,c.WareHouseName,d.AreaName }).Select((a, b,c,d) => new BoxInfo() |
| | | .GroupBy((a, b, c, d) => new { a.PalletNo, b.LocatNo, c.WareHouseName, d.AreaName }).Select((a, b, c, d) => new BoxInfo() |
| | | { |
| | | PalletNo = a.PalletNo, |
| | | LocatNo = b.LocatNo, |
| | |
| | | } |
| | | |
| | | //取样出库拣货(标签) |
| | | public async Task SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, |
| | | public async Task SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, |
| | | string pickQty1, string asnNo, int userId) |
| | | { |
| | | Db.BeginTran(); |