diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index b8723bf..2dd563d 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -228,109 +228,114 @@ namespace Khd.Core.Wcs.Wcs } if (Convert.ToInt32(agvGetValue) == 1 && !string.IsNullOrEmpty(rfidValue))//小包出口成品入口 { - lock (SystemData.SecondTaskLock) + bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 8).Any();//有没有生成任务 + if (!canCreate) { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue); - if (mesBasePalletInfo != null) + lock (SystemData.SecondTaskLock) { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue); + if (mesBasePalletInfo != null) { - var wmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.warehouseFloor == FloorNo) - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.locationStatus == "1") - .Where(t => t.warehouseId == 231) - .ToList();//所有可用库位 - var wmsProductStocks = dbContext.WmsProductStock - .Where(t => t.warehouseId == 231) - .ToList();//仓库的库存 - WmsBaseLocation? wmsBaseLocation = null; - if (wmsBaseLocations.Count > 0) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) { - List containerCodes = wmsBaseLocations - .Where(t => t.locDeep == 1) - .Select(t => t.containerCode).ToList();//深库位的有托盘 - containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); - - List productStocks = wmsProductStocks.Where(t => t.productId == mesBaseBarcodeInfo.materialId) - .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) - .Where(t => t.palletInfoCode != null) - .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList(); - - var bill = from a in productStocks - join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode - select new { b };//等于当前任务的物料的托盘的库位信息 - - var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 - from b in wmsBaseLocations//所有库位 - where b.locDeep == 2//浅库位 - && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) - //如果是4则找3,如果是1则找2 - && a.b.locColumn == b.locColumn//列数相同 - && string.IsNullOrEmpty(b.containerCode) - select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - - wmsBaseLocation ??= outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - if (wmsBaseLocation != null)//如果找到库位,生成入库任务 + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.warehouseFloor == FloorNo) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == 231) + .ToList();//所有可用库位 + var wmsProductStocks = dbContext.WmsProductStock + .Where(t => t.warehouseId == 231) + .ToList();//仓库的库存 + WmsBaseLocation? wmsBaseLocation = null; + if (wmsBaseLocations.Count > 0) { - if (wmsBaseLocation.locDeep == 1) + List containerCodes = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Select(t => t.containerCode).ToList();//深库位的有托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); + + List productStocks = wmsProductStocks.Where(t => t.productId == mesBaseBarcodeInfo.materialId) + .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) + .Where(t => t.palletInfoCode != null) + .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList(); + + var bill = from a in productStocks + join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + select new { b };//等于当前任务的物料的托盘的库位信息 + + var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 + from b in wmsBaseLocations//所有库位 + where b.locDeep == 2//浅库位 + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) + //如果是4则找3,如果是1则找2 + && a.b.locColumn == b.locColumn//列数相同 + && string.IsNullOrEmpty(b.containerCode) + select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + + wmsBaseLocation ??= outBill.Where(t => !canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !canNotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + if (wmsBaseLocation != null)//如果找到库位,生成入库任务 { - var hasLocation = wmsBaseLocations - .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) - .Where(t => t.locColumn == wmsBaseLocation.locColumn) - .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") - .Any(); - if (hasLocation) + if (wmsBaseLocation.locDeep == 1) { - canNotIn.Add(wmsBaseLocation.locationCode); - Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); - continue; + var hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => !string.IsNullOrEmpty(t.containerCode) || t.locationStatus != "1") + .Any(); + if (hasLocation) + { + canNotIn.Add(wmsBaseLocation.locationCode); + Console.WriteLine(DateTime.Now + $":目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{canNotIn.Join(",")}的浅库位库位状态异常,无法入库"); + continue; + } } + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + currPointId = startEquip.objid, + currPointNo = startEquip.equipNo, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = wmsBaseLocation.locationId, + endPointNo = wmsBaseLocation.locationCode, + taskStatus = 0, + useFlag = 1, + containerNo = rfidValue, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 2, + fromFloorNo = 2, + isEmpty = "0", + taskType = StaticTaskType.SecondSmallPackageToStorage, + qty = 1, + }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + canNotIn.Clear(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); } - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); - var wcsTask = new WcsTask() + else { - objid = StaticData.SnowId.NextId(), - currPointId = startEquip.objid, - currPointNo = startEquip.equipNo, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = wmsBaseLocation.locationId, - endPointNo = wmsBaseLocation.locationCode, - taskStatus = 0, - useFlag = 1, - containerNo = rfidValue, - createBy = "WCS", - createTime = DateTime.Now, - floorNo = 2, - fromFloorNo = 2, - isEmpty = "0", - taskType = StaticTaskType.SecondSmallPackageToStorage, - qty = 1, - }; - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - dbContext.Add(wcsTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - canNotIn.Clear(); - Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); - _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); - } - else - { - //报警 + //报警 + } } } } } } + } } }