| | |
| | | SupplierLot = stocks.First().SupplierLot, |
| | | IsWave = "0", |
| | | WaveNo = "", |
| | | IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo)? "0":"1", |
| | | |
| | | CreateUser = 0, |
| | | }; |
| | |
| | | } |
| | | } |
| | | |
| | | public List<ExStockInfoDto> GetStockGroupList(string type, string msg) |
| | | public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg) |
| | | { |
| | | try |
| | | { |
| | | if (string.IsNullOrEmpty(type)) |
| | | { |
| | | throw new Exception("请选择出库单类型"); |
| | | } |
| | | if (type == "6" && string.IsNullOrEmpty(ownerNo)) |
| | | { |
| | | throw new Exception("代储单据请选择货主"); |
| | | } |
| | | var plnList = new List<string>() { "100099" }; |
| | | var skuList = new List<string>(); |
| | | var sku = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && !plnList.Contains(m.SkuNo)); //排除空托盘的物料集合 |
| | | string skuType = string.Empty; |
| | | string inspectStatus = string.Empty; |
| | | switch (type)//0:原料 1:包材 2:成品 3:耗材 4:半成品 |
| | | { |
| | | case "0"://成品入库 |
| | | case "0"://成品出库 |
| | | skuType = "(2)"; |
| | | inspectStatus = "1"; |
| | | break; |
| | | case "1"://领料出库 |
| | | skuType = "(0,1,3)"; |
| | | inspectStatus = "1"; |
| | | break; |
| | | case "2"://抽检出库 |
| | | skuType = "(2)"; |
| | | skuType = "(0,1,2,3)"; |
| | | inspectStatus = "0,1,2"; |
| | | break; |
| | | case "3"://物料取样出库 |
| | | skuType = "(0)"; |
| | | skuType = "(0,1,2,3)"; |
| | | inspectStatus = "0"; |
| | | break; |
| | | case "4"://不合格品出库 |
| | | skuType = "(2)"; |
| | | skuType = "(0,1,2,3)"; |
| | | inspectStatus = "2"; |
| | | break; |
| | | case "5"://中间品出库 |
| | | skuType = "(4)"; |
| | | inspectStatus = "0,1"; |
| | | break; |
| | | case "6"://代储出库 |
| | | skuType = "(2)"; |
| | | skuType = "(0,1,2,3)"; |
| | | inspectStatus = "0,1"; |
| | | break; |
| | | case "8"://寄存出库 |
| | | skuType = "(3)"; |
| | | skuType = "(0,1,2,3)"; |
| | | inspectStatus = "0,1"; |
| | | break; |
| | | default: //其它出库 |
| | | skuType = "(0,1,2,3,4)"; |
| | | inspectStatus = "0,1"; |
| | | break; |
| | | } |
| | | skuList = sku.Where(m => skuType.Contains(m.Type)).Select(m => m.SkuNo).ToList(); |
| | |
| | | var stockDetailRst = new StockDetailServer(); |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | | //.And(it => it.WareHouseNo == wareHouseNo) |
| | | .And(it => it.InspectStatus == "1") |
| | | .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus)) |
| | | .And(m => skuList.Contains(m.SkuNo)) |
| | | .AndIF(type == "6", m => m.OwnerNo == ownerNo)//代储出库需要关联货主 |
| | | .AndIF(!string.IsNullOrWhiteSpace(msg), it => (it.SkuNo.Contains(msg) || it.SkuName.Contains(msg) || it.LotNo.Contains(msg))) |
| | | .And(it => (it.Qty - it.LockQty - it.FrozenQty) > 0) |
| | | .And(it => (it.Status == "0" || it.Status == "1")) |
| | |
| | | toLocation = outMode;//出库口 |
| | | } |
| | | } |
| | | else |
| | | else |
| | | { |
| | | unstackingMode2 = "1";//非成品出库走PDA拆垛 |
| | | toLocation = outMode;//出库口 |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | // 储位号 |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// wcs返回的成功信号(移库成功) |
| | | /// </summary> |
| | | /// <param name="taskNo">任务号</param> |
| | | /// <param name="userId">操作人</param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void RelocationSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | //当前任务中的目标储位信息 |
| | | //当前任务中的原储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.StartLocat}储位对应的信息"); |
| | | } |
| | | var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); |
| | | if (locate2 == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.EndLocat}储位对应的信息"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | |
| | | #region 修改储位状态 |
| | | |
| | | //原储位改为空储位 0 |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | //目标储位改为有货物 1 |
| | | locate2.Status = "1"; |
| | | Db.Updateable(locate2).ExecuteCommand(); |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.WareHouseNo = locate2.WareHouseNo; |
| | | item.AreaNo = locate2.AreaNo; |
| | | item.RoadwayNo = locate2.RoadwayNo; |
| | | item.LocatNo = locate2.LocatNo; |
| | | } |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("完成反馈失败:" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | //重新下发出库任务 |
| | | public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url) |
| | | { |
| | |
| | | |
| | | //获取储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); |
| | | |
| | | //获取移库任务对应目标储位信息 |
| | | SysStorageLocat endlocat = new SysStorageLocat(); |
| | | if (task.Type == "2") |
| | | { |
| | | endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W03" && a.LocatNo == task.EndLocat); |
| | | if (endlocat == null) |
| | | { |
| | | throw new Exception("未查询到目标储位信息"); |
| | | } |
| | | } |
| | | if (locat == null) |
| | | { |
| | | Db.RollbackTran(); |
| | |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | if (endlocat != null) |
| | | { |
| | | endlocat.Status = "0"; //空储位 0 |
| | | Db.Updateable(endlocat).ExecuteCommand(); |
| | | } |
| | | |
| | | if (noticeDetail.FactQty == 0) |
| | | { |
| | |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList(); |
| | | } |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0").ToList(); //&& string.IsNullOrWhiteSpace(m.LotNo) |
| | | stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0").ToList(); //&& string.IsNullOrWhiteSpace(m.LotNo) |
| | | } |
| | | |
| | | if (stockDetail.Count < 1) |
| | |
| | | throw new Exception("库存不足,无可出库库存"); |
| | | } |
| | | //0:成品出库、1:领料出库、2:抽检出库、3:物料取样出库、4:不合格品出库、5:中间品出库、6:代储出库、7:其他出库、8:寄存出库 |
| | | if (notice.Type == "0" || notice.Type == "1" || notice.Type == "2" || notice.Type == "5")//成品、原辅料出库 |
| | | if (notice.Type == "0" || notice.Type == "1" )//成品、原辅料出库 |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); |
| | | } |
| | | else if (notice.Type == "3" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//取样出库 |
| | | else if (notice.Type == "3" )//取样出库 |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList(); |
| | | } |
| | | else if (notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8") |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList(); |
| | | } |
| | | else if (notice.Type == "4")//不合格出库 |
| | | { |
| | | stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); |
| | | } |
| | | |
| | | } |
| | | |
| | | #region 包装信息 |
| | | |
| | | var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo); |
| | |
| | | if (string.IsNullOrWhiteSpace(detail.LotNo)) |
| | | { |
| | | detail.LotNo = s.LotNo; |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | if (!detail.LotNo.Contains(s.LotNo)) |
| | | { |
| | | detail.LotNo += ";" + s.LotNo; |
| | | detail.LotNo += ";" + s.LotNo; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | detail.AllotQty += qty; |
| | | detail.UpdateUser = userId; |
| | |
| | | { |
| | | detail.Status = "1"; |
| | | } |
| | | |
| | | |
| | | //库存总表 |
| | | //var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); |
| | | //stock.LockQty += qty; |
| | |
| | | d.Status = "0"; |
| | | d.UpdateUser = userId; |
| | | d.UpdateTime = DateTime.Now; |
| | | |
| | | if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1:领料出库、 |
| | | { |
| | | if (d.IsIssueLotNo != "1") |
| | | { |
| | | d.LotNo = ""; |
| | | } |
| | | |
| | | } |
| | | } |
| | | notice.Status = "0"; |
| | | notice.UpdateUser = userId; |
| | |
| | | var lie = int.Parse(oldAddress.Substring(2, 2)); |
| | | var ceng = int.Parse(oldAddress.Substring(4, 2)); |
| | | |
| | | var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum |
| | | from SysStorageLocat |
| | | where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in '{category}' |
| | | order by distNum;"; |
| | | var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{category.AreaNo}') order by distNum;"; |
| | | |
| | | var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); |
| | | if (addressModels.Count > 0) // 判断同巷道内排空库位 |